X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fplugins%2Fpppoatm%2Fpppoatm.c;h=5a3ecd61b6a2c278781ad94151c6e92458b4f77b;hb=f1e3aa2dc7e7772d8491c6ff61e4e6d28af33d4b;hp=f99fd0ad16c1eb6e1b5021c4a0a4f33f7dde03ef;hpb=dd41357657d1436fe20692aa43613ceae8e03fa0;p=ppp.git diff --git a/pppd/plugins/pppoatm/pppoatm.c b/pppd/plugins/pppoatm/pppoatm.c index f99fd0a..5a3ecd6 100644 --- a/pppd/plugins/pppoatm/pppoatm.c +++ b/pppd/plugins/pppoatm/pppoatm.c @@ -70,18 +70,20 @@ static int setdevname_pppoatm(const char *cp, const char **argv, int doit) { struct sockaddr_atmpvc addr; extern struct stat devstat; + if (device_got_set) return 0; - //info("PPPoATM setdevname_pppoatm: '%s'", cp); + memset(&addr, 0, sizeof addr); if (text2atm(cp, (struct sockaddr *) &addr, sizeof(addr), - T2A_PVC | T2A_NAME) < 0) { - if(doit) - info("atm does not recognize: %s", cp); + T2A_PVC | T2A_NAME | T2A_WILDCARD) < 0) { + if (doit) + info("cannot parse the ATM address: %s", cp); return 0; - } - if (!doit) return 1; - //if (!dev_set_ok()) return -1; + } + if (!doit) + return 1; + memcpy(&pvcaddr, &addr, sizeof pvcaddr); strlcpy(devnam, cp, sizeof devnam); devstat.st_mode = S_IFSOCK; @@ -93,7 +95,6 @@ static int setdevname_pppoatm(const char *cp, const char **argv, int doit) lcp_allowoptions[0].neg_asyncmap = 0; lcp_wantoptions[0].neg_pcompression = 0; } - info("PPPoATM setdevname_pppoatm - SUCCESS:%s", cp); device_got_set = 1; return 1; } @@ -108,6 +109,7 @@ static void no_device_given_pppoatm(void) static void set_line_discipline_pppoatm(int fd) { struct atm_backend_ppp be; + be.backend_num = ATM_BACKEND_PPP; if (!llc_encaps) be.encaps = PPPOATM_ENCAPS_VC; @@ -115,6 +117,7 @@ static void set_line_discipline_pppoatm(int fd) be.encaps = PPPOATM_ENCAPS_LLC; else be.encaps = PPPOATM_ENCAPS_AUTODETECT; + if (ioctl(fd, ATM_SETBACKEND, &be) < 0) fatal("ioctl(ATM_SETBACKEND): %m"); } @@ -133,8 +136,6 @@ static int connect_pppoatm(void) int fd; struct atm_qos qos; - system ("/sbin/modprobe pppoatm"); - if (!device_got_set) no_device_given_pppoatm(); fd = socket(AF_ATMPVC, SOCK_DGRAM, 0); @@ -168,37 +169,9 @@ static void disconnect_pppoatm(void) close(pppoa_fd); } -static void send_config_pppoa(int mtu, - u_int32_t asyncmap, - int pcomp, - int accomp) -{ - int sock; - struct ifreq ifr; - if (mtu > pppoatm_max_mtu) - error("Couldn't increase MTU to %d", mtu); - sock = socket(AF_INET, SOCK_DGRAM, 0); - if (sock < 0) - fatal("Couldn't create IP socket: %m"); - strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)); - ifr.ifr_mtu = mtu; - if (ioctl(sock, SIOCSIFMTU, (caddr_t) &ifr) < 0) - fatal("ioctl(SIOCSIFMTU): %m"); - (void) close (sock); -} - -static void recv_config_pppoa(int mru, - u_int32_t asyncmap, - int pcomp, - int accomp) -{ - if (mru > pppoatm_max_mru) - error("Couldn't increase MRU to %d", mru); -} - void plugin_init(void) { -#if defined(__linux__) +#ifdef linux extern int new_style_driver; /* From sys-linux.c */ if (!ppp_available() && !new_style_driver) fatal("Kernel doesn't support ppp_generic - " @@ -206,9 +179,9 @@ void plugin_init(void) #else fatal("No PPPoATM support on this OS"); #endif - info("PPPoATM plugin_init"); add_options(pppoa_options); } + struct channel pppoa_channel = { options: pppoa_options, process_extra_options: NULL, @@ -217,8 +190,8 @@ struct channel pppoa_channel = { disconnect: &disconnect_pppoatm, establish_ppp: &generic_establish_ppp, disestablish_ppp: &generic_disestablish_ppp, - send_config: &send_config_pppoa, - recv_config: &recv_config_pppoa, + send_config: NULL, + recv_config: NULL, close: NULL, cleanup: NULL };