diff --git a/usr.sbin/pppd/ccp.c b/usr.sbin/pppd/ccp.c index 510b9f30a11d..631ee0b649a0 100644 --- a/usr.sbin/pppd/ccp.c +++ b/usr.sbin/pppd/ccp.c @@ -26,7 +26,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: ccp.c,v 1.4 1996/03/15 03:03:38 paulus Exp $"; +static char rcsid[] = "$Id: ccp.c,v 1.5 1996/03/28 02:50:57 paulus Exp $"; #endif #include @@ -143,8 +143,15 @@ ccp_open(unit) if (f->state != OPENED) ccp_flags_set(unit, 1, 0); - if (!ANY_COMPRESS(ccp_wantoptions[unit])) + + /* + * Find out which compressors the kernel supports before + * deciding whether to open in silent mode. + */ + ccp_resetci(f); + if (!ANY_COMPRESS(ccp_gotoptions[unit])) f->flags |= OPT_SILENT; + fsm_open(f); } diff --git a/usr.sbin/pppd/options.c b/usr.sbin/pppd/options.c index da55dee43c5b..04cf13b55fa4 100644 --- a/usr.sbin/pppd/options.c +++ b/usr.sbin/pppd/options.c @@ -18,7 +18,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: options.c,v 1.12 1996/03/15 03:03:59 paulus Exp $"; +static char rcsid[] = "$Id: options.c,v 1.13 1996/03/28 02:50:59 paulus Exp $"; #endif #include @@ -176,6 +176,7 @@ static int setipcpaccl __P((void)); static int setipcpaccr __P((void)); static int setlcpechointv __P((char **)); static int setlcpechofails __P((char **)); +static int noccp __P((void)); static int setbsdcomp __P((char **)); static int setnobsdcomp __P((void)); static int setdeflate __P((char **)); @@ -294,6 +295,7 @@ static struct cmd { {"chap-interval", 1, setchapintv}, /* Set interval for rechallenge */ {"ipcp-accept-local", 0, setipcpaccl}, /* Accept peer's address for us */ {"ipcp-accept-remote", 0, setipcpaccr}, /* Accept peer's address for it */ + {"-ccp", 0, noccp}, /* Disable CCP negotiation */ {"bsdcomp", 1, setbsdcomp}, /* request BSD-Compress */ {"-bsdcomp", 0, setnobsdcomp}, /* don't allow BSD-Compress */ {"deflate", 1, setdeflate}, /* request Deflate compression */ @@ -1759,6 +1761,13 @@ setchapintv(argv) return int_option(*argv, &chap[0].chal_interval); } +static int +noccp() +{ + ccp_protent.enabled_flag = 0; + return 1; +} + static int setbsdcomp(argv) char **argv; diff --git a/usr.sbin/pppd/pppd.8 b/usr.sbin/pppd/pppd.8 index d77ede20b558..b41e4d9a6eb4 100644 --- a/usr.sbin/pppd/pppd.8 +++ b/usr.sbin/pppd/pppd.8 @@ -1,5 +1,5 @@ .\" manual page [] for pppd 2.0 -.\" $Id: pppd.8,v 1.11 1996/03/15 03:04:04 paulus Exp $ +.\" $Id: pppd.8,v 1.12 1996/03/28 02:51:00 paulus Exp $ .\" SH section heading .\" SS subsection heading .\" LP paragraph @@ -208,6 +208,13 @@ compression in the corresponding direction. Disables BSD-Compress compression; \fBpppd\fR will not request or agree to compress packets using the BSD-Compress scheme. .TP +.B -ccp +Disable CCP (Compression Control Protocol) negotiation. This option +should only be required if the peer is buggy and gets confused by +requests from +.I pppd +for CCP negotiation. +.TP .B +chap Require the peer to authenticate itself using CHAP [Cryptographic Handshake Authentication Protocol] authentication. diff --git a/usr.sbin/pppd/pppd/ccp.c b/usr.sbin/pppd/pppd/ccp.c index 510b9f30a11d..631ee0b649a0 100644 --- a/usr.sbin/pppd/pppd/ccp.c +++ b/usr.sbin/pppd/pppd/ccp.c @@ -26,7 +26,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: ccp.c,v 1.4 1996/03/15 03:03:38 paulus Exp $"; +static char rcsid[] = "$Id: ccp.c,v 1.5 1996/03/28 02:50:57 paulus Exp $"; #endif #include @@ -143,8 +143,15 @@ ccp_open(unit) if (f->state != OPENED) ccp_flags_set(unit, 1, 0); - if (!ANY_COMPRESS(ccp_wantoptions[unit])) + + /* + * Find out which compressors the kernel supports before + * deciding whether to open in silent mode. + */ + ccp_resetci(f); + if (!ANY_COMPRESS(ccp_gotoptions[unit])) f->flags |= OPT_SILENT; + fsm_open(f); } diff --git a/usr.sbin/pppd/pppd/options.c b/usr.sbin/pppd/pppd/options.c index da55dee43c5b..04cf13b55fa4 100644 --- a/usr.sbin/pppd/pppd/options.c +++ b/usr.sbin/pppd/pppd/options.c @@ -18,7 +18,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: options.c,v 1.12 1996/03/15 03:03:59 paulus Exp $"; +static char rcsid[] = "$Id: options.c,v 1.13 1996/03/28 02:50:59 paulus Exp $"; #endif #include @@ -176,6 +176,7 @@ static int setipcpaccl __P((void)); static int setipcpaccr __P((void)); static int setlcpechointv __P((char **)); static int setlcpechofails __P((char **)); +static int noccp __P((void)); static int setbsdcomp __P((char **)); static int setnobsdcomp __P((void)); static int setdeflate __P((char **)); @@ -294,6 +295,7 @@ static struct cmd { {"chap-interval", 1, setchapintv}, /* Set interval for rechallenge */ {"ipcp-accept-local", 0, setipcpaccl}, /* Accept peer's address for us */ {"ipcp-accept-remote", 0, setipcpaccr}, /* Accept peer's address for it */ + {"-ccp", 0, noccp}, /* Disable CCP negotiation */ {"bsdcomp", 1, setbsdcomp}, /* request BSD-Compress */ {"-bsdcomp", 0, setnobsdcomp}, /* don't allow BSD-Compress */ {"deflate", 1, setdeflate}, /* request Deflate compression */ @@ -1759,6 +1761,13 @@ setchapintv(argv) return int_option(*argv, &chap[0].chal_interval); } +static int +noccp() +{ + ccp_protent.enabled_flag = 0; + return 1; +} + static int setbsdcomp(argv) char **argv; diff --git a/usr.sbin/pppd/pppd/pppd.8 b/usr.sbin/pppd/pppd/pppd.8 index d77ede20b558..b41e4d9a6eb4 100644 --- a/usr.sbin/pppd/pppd/pppd.8 +++ b/usr.sbin/pppd/pppd/pppd.8 @@ -1,5 +1,5 @@ .\" manual page [] for pppd 2.0 -.\" $Id: pppd.8,v 1.11 1996/03/15 03:04:04 paulus Exp $ +.\" $Id: pppd.8,v 1.12 1996/03/28 02:51:00 paulus Exp $ .\" SH section heading .\" SS subsection heading .\" LP paragraph @@ -208,6 +208,13 @@ compression in the corresponding direction. Disables BSD-Compress compression; \fBpppd\fR will not request or agree to compress packets using the BSD-Compress scheme. .TP +.B -ccp +Disable CCP (Compression Control Protocol) negotiation. This option +should only be required if the peer is buggy and gets confused by +requests from +.I pppd +for CCP negotiation. +.TP .B +chap Require the peer to authenticate itself using CHAP [Cryptographic Handshake Authentication Protocol] authentication. diff --git a/usr.sbin/pppd/pppd/sys-bsd.c b/usr.sbin/pppd/pppd/sys-bsd.c index 427a50c8b71d..ebabed5e710c 100644 --- a/usr.sbin/pppd/pppd/sys-bsd.c +++ b/usr.sbin/pppd/pppd/sys-bsd.c @@ -21,7 +21,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: sys-bsd.c,v 1.11 1996/03/15 03:04:07 paulus Exp $"; +static char rcsid[] = "$Id: sys-bsd.c,v 1.12 1996/03/28 02:51:02 paulus Exp $"; #endif /* @@ -76,6 +76,7 @@ static unsigned char inbuf[512]; /* buffer for chars read from loopback */ static int sockfd; /* socket for doing interface ioctls */ static int if_is_up; /* the interface is currently up */ +static u_int32_t ifaddrs[2]; /* local and remote addresses we set */ static u_int32_t default_route_gateway; /* gateway addr for default route */ static u_int32_t proxy_arp_addr; /* remote addr for proxy arp */ @@ -120,7 +121,8 @@ sys_cleanup() ioctl(sockfd, SIOCSIFFLAGS, &ifr); } } - + if (ifaddrs[0] != 0) + cifaddr(0, ifaddrs[0], ifaddrs[1]); if (default_route_gateway) cifdefaultroute(0, default_route_gateway); if (proxy_arp_addr) @@ -981,6 +983,8 @@ sifaddr(u, o, h, m) syslog(LOG_WARNING, "Couldn't set interface address: Address already exists"); } + ifaddrs[0] = o; + ifaddrs[1] = h; return 1; } @@ -995,6 +999,7 @@ cifaddr(u, o, h) { struct ifaliasreq ifra; + ifaddrs[0] = 0; strncpy(ifra.ifra_name, ifname, sizeof(ifra.ifra_name)); SET_SA_FAMILY(ifra.ifra_addr, AF_INET); ((struct sockaddr_in *) &ifra.ifra_addr)->sin_addr.s_addr = o; diff --git a/usr.sbin/pppd/sys-bsd.c b/usr.sbin/pppd/sys-bsd.c index 427a50c8b71d..ebabed5e710c 100644 --- a/usr.sbin/pppd/sys-bsd.c +++ b/usr.sbin/pppd/sys-bsd.c @@ -21,7 +21,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: sys-bsd.c,v 1.11 1996/03/15 03:04:07 paulus Exp $"; +static char rcsid[] = "$Id: sys-bsd.c,v 1.12 1996/03/28 02:51:02 paulus Exp $"; #endif /* @@ -76,6 +76,7 @@ static unsigned char inbuf[512]; /* buffer for chars read from loopback */ static int sockfd; /* socket for doing interface ioctls */ static int if_is_up; /* the interface is currently up */ +static u_int32_t ifaddrs[2]; /* local and remote addresses we set */ static u_int32_t default_route_gateway; /* gateway addr for default route */ static u_int32_t proxy_arp_addr; /* remote addr for proxy arp */ @@ -120,7 +121,8 @@ sys_cleanup() ioctl(sockfd, SIOCSIFFLAGS, &ifr); } } - + if (ifaddrs[0] != 0) + cifaddr(0, ifaddrs[0], ifaddrs[1]); if (default_route_gateway) cifdefaultroute(0, default_route_gateway); if (proxy_arp_addr) @@ -981,6 +983,8 @@ sifaddr(u, o, h, m) syslog(LOG_WARNING, "Couldn't set interface address: Address already exists"); } + ifaddrs[0] = o; + ifaddrs[1] = h; return 1; } @@ -995,6 +999,7 @@ cifaddr(u, o, h) { struct ifaliasreq ifra; + ifaddrs[0] = 0; strncpy(ifra.ifra_name, ifname, sizeof(ifra.ifra_name)); SET_SA_FAMILY(ifra.ifra_addr, AF_INET); ((struct sockaddr_in *) &ifra.ifra_addr)->sin_addr.s_addr = o;