diff --git a/usr.sbin/pppd/ipcp.c b/usr.sbin/pppd/ipcp.c index 718a831713d9..3906c47371e0 100644 --- a/usr.sbin/pppd/ipcp.c +++ b/usr.sbin/pppd/ipcp.c @@ -18,13 +18,11 @@ */ #ifndef lint -static char rcsid[] = "$Id: ipcp.c,v 1.3 1993/11/10 01:34:12 paulus Exp $"; +static char rcsid[] = "$Id: ipcp.c,v 1.4 1994/02/22 00:11:57 paulus Exp $"; #endif /* * TODO: - * Fix IP address negotiation (wantoptions or hisoptions). - * Don't set zero IP addresses. */ #include @@ -242,6 +240,10 @@ ipcp_resetci(f) ipcp_options *wo = &ipcp_wantoptions[f->unit]; wo->req_addr = wo->neg_addr && ipcp_allowoptions[f->unit].neg_addr; + if (wo->ouraddr == 0) + wo->accept_local = 1; + if (wo->hisaddr == 0) + wo->accept_remote = 1; ipcp_gotoptions[f->unit] = *wo; cis_received[f->unit] = 0; } @@ -501,17 +503,17 @@ ipcp_nakci(f, p, len) } /* - * Accept the peer's idea of our address if we don't know it. - * Accept the peer's idea of his address if he knows it. + * Accept the peer's idea of {our,his} address, if different + * from our idea, only if the accept_{local,remote} flag is set. */ NAKCIADDR(CI_ADDR, neg_addr, go->old_addrs, - if (!go->ouraddr && ciaddr1) { /* Do we know our address? */ - go->ouraddr = ciaddr1; + if (go->accept_local && ciaddr1) { /* Do we know our address? */ + try.ouraddr = ciaddr1; IPCPDEBUG((LOG_INFO, "local IP address %s", ip_ntoa(ciaddr1))); } - if (ciaddr2) { /* Does he know his? */ - go->hisaddr = ciaddr2; + if (go->accept_remote && ciaddr2) { /* Does he know his? */ + try.hisaddr = ciaddr2; IPCPDEBUG((LOG_INFO, "remote IP address %s", ip_ntoa(ciaddr2))); } @@ -572,11 +574,11 @@ ipcp_nakci(f, p, len) try.old_addrs = 1; GETLONG(l, p); ciaddr1 = htonl(l); - if (ciaddr1) + if (ciaddr1 && go->accept_local) try.ouraddr = ciaddr1; GETLONG(l, p); ciaddr2 = htonl(l); - if (ciaddr2) + if (ciaddr2 && go->accept_remote) try.hisaddr = ciaddr2; no.old_addrs = 1; break; @@ -587,7 +589,7 @@ ipcp_nakci(f, p, len) try.old_addrs = 0; GETLONG(l, p); ciaddr1 = htonl(l); - if (ciaddr1) + if (ciaddr1 && go->accept_local) try.ouraddr = ciaddr1; no.neg_addr = 1; break; @@ -778,7 +780,8 @@ ipcp_reqci(f, inp, len, reject_if_disagree) GETLONG(tl, p); /* Parse source address (his) */ ciaddr1 = htonl(tl); IPCPDEBUG((LOG_INFO, "(%s:", ip_ntoa(ciaddr1))); - if (wo->hisaddr && ciaddr1 != wo->hisaddr) { + if (ciaddr1 != wo->hisaddr + && (ciaddr1 == 0 || !wo->accept_remote)) { orc = CONFNAK; if (!reject_if_disagree) { DECPTR(sizeof (long), p); @@ -794,16 +797,18 @@ ipcp_reqci(f, inp, len, reject_if_disagree) GETLONG(tl, p); /* Parse desination address (ours) */ ciaddr2 = htonl(tl); IPCPDEBUG((LOG_INFO, "%s)", ip_ntoa(ciaddr2))); - if (wo->ouraddr && ciaddr2 != wo->ouraddr) { - orc = CONFNAK; - if (!reject_if_disagree) { - DECPTR(sizeof (long), p); - tl = ntohl(wo->ouraddr); - PUTLONG(tl, p); + if (ciaddr2 != wo->ouraddr) { + if (ciaddr2 == 0 || !wo->accept_local) { + orc = CONFNAK; + if (!reject_if_disagree) { + DECPTR(sizeof (long), p); + tl = ntohl(wo->ouraddr); + PUTLONG(tl, p); + } + } else { + go->ouraddr = ciaddr2; /* accept peer's idea */ } } - if (orc == CONFNAK) - break; ho->neg_addr = 1; ho->old_addrs = 1; @@ -829,7 +834,8 @@ ipcp_reqci(f, inp, len, reject_if_disagree) GETLONG(tl, p); /* Parse source address (his) */ ciaddr1 = htonl(tl); IPCPDEBUG((LOG_INFO, "(%s)", ip_ntoa(ciaddr1))); - if (wo->hisaddr && ciaddr1 != wo->hisaddr) { + if (ciaddr1 != wo->hisaddr + && (ciaddr1 == 0 || !wo->accept_remote)) { orc = CONFNAK; if (!reject_if_disagree) { DECPTR(sizeof (long), p); @@ -838,9 +844,6 @@ ipcp_reqci(f, inp, len, reject_if_disagree) } } - if (orc == CONFNAK) - break; - ho->neg_addr = 1; ho->hisaddr = ciaddr1; break; @@ -880,8 +883,6 @@ ipcp_reqci(f, inp, len, reject_if_disagree) PUTCHAR(wo->cflag, p); } } - if (orc == CONFNAK) - break; ho->maxslotindex = maxslotindex; ho->cflag = wo->cflag; } @@ -972,7 +973,7 @@ ipcp_up(f) /* * We must have a non-zero IP address for both ends of the link. */ - if (ho->hisaddr == 0) + if (!ho->neg_addr) ho->hisaddr = ipcp_wantoptions[f->unit].hisaddr; if (ho->hisaddr == 0) { diff --git a/usr.sbin/pppd/ipcp.h b/usr.sbin/pppd/ipcp.h index 7981d688a194..a42ebd99bd4f 100644 --- a/usr.sbin/pppd/ipcp.h +++ b/usr.sbin/pppd/ipcp.h @@ -16,7 +16,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: ipcp.h,v 1.3 1993/11/10 01:34:14 paulus Exp $ + * $Id: ipcp.h,v 1.4 1994/02/22 00:11:59 paulus Exp $ */ /* @@ -45,6 +45,8 @@ typedef struct ipcp_options { int proxy_arp : 1; /* Make proxy ARP entry for peer? */ int neg_vj : 1; /* Van Jacobson Compression? */ int old_vj : 1; /* use old (short) form of VJ option? */ + int accept_local : 1; /* accept peer's value for ouraddr */ + int accept_remote : 1; /* accept peer's value for hisaddr */ u_short vj_protocol; /* protocol value to use in VJ option */ u_char maxslotindex, cflag; /* values for RFC1332 VJ compression neg. */ u_long ouraddr, hisaddr; /* Addresses in NETWORK BYTE ORDER */ diff --git a/usr.sbin/pppd/options.c b/usr.sbin/pppd/options.c index 4b8328e27e26..cf6dff425eb5 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.4 1994/01/25 05:58:10 paulus Exp $"; +static char rcsid[] = "$Id: options.c,v 1.5 1994/02/22 00:12:01 paulus Exp $"; #endif #include @@ -85,6 +85,7 @@ static int setproxyarp __ARGS((void)); static int setpersist __ARGS((void)); static int setdologin __ARGS((void)); static int setusehostname __ARGS((void)); +static int setnoipdflt __ARGS((void)); static int setlcptimeout __ARGS((char **)); static int setlcpterm __ARGS((char **)); static int setlcpconf __ARGS((char **)); @@ -98,6 +99,8 @@ static int setpapreqs __ARGS((char **)); static int setchaptimeout __ARGS((char **)); static int setchapchal __ARGS((char **)); static int setchapintv __ARGS((char **)); +static int setipcpaccl __ARGS((void)); +static int setipcpaccr __ARGS((void)); static int number_option __ARGS((char *, long *, int)); @@ -125,6 +128,7 @@ extern int uselogin; extern char our_name[]; extern char remote_name[]; int usehostname; +int disable_defaultip; /* * Valid arguments. @@ -172,6 +176,7 @@ static struct cmd { "proxyarp", 0, setproxyarp, /* Add proxy ARP entry */ "persist", 0, setpersist, /* Keep on reopening connection after close */ "login", 0, setdologin, /* Use system password database for UPAP */ + "noipdefault", 0, setnoipdflt, /* Don't use name for default IP adrs */ "lcp-restart", 1, setlcptimeout, /* Set timeout for LCP */ "lcp-max-terminate", 1, setlcpterm, /* Set max #xmits for term-reqs */ "lcp-max-configure", 1, setlcpconf, /* Set max #xmits for conf-reqs */ @@ -185,6 +190,8 @@ static struct cmd { "chap-restart", 1, setchaptimeout, /* Set timeout for CHAP */ "chap-max-challenge", 1, setchapchal, /* Set max #xmits for challenge */ "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 */ NULL }; @@ -925,6 +932,39 @@ setipaddr(arg) } +/* + * setnoipdflt - disable setipdefault() + */ +static int +setnoipdflt() +{ + disable_defaultip = 1; + return 1; +} + + +/* + * setipcpaccl - accept peer's idea of our address + */ +static int +setipcpaccl() +{ + ipcp_wantoptions[0].accept_local = 1; + return 1; +} + + +/* + * setipcpaccr - accept peer's idea of its address + */ +static int +setipcpaccr() +{ + ipcp_wantoptions[0].accept_remote = 1; + return 1; +} + + /* * setipdefault - default our local IP address based on our hostname. */ @@ -938,7 +978,7 @@ setipdefault() /* * If local IP address already given, don't bother. */ - if (wo->ouraddr != 0) + if (wo->ouraddr != 0 || disable_defaultip) return; /* @@ -946,6 +986,7 @@ setipdefault() * and take the first IP address as our local IP address. * If there isn't an IP address for our hostname, too bad. */ + wo->accept_local = 1; /* don't insist on this default value */ if ((hp = gethostbyname(hostname)) == NULL) return; local = *(long *)hp->h_addr; diff --git a/usr.sbin/pppd/patchlevel.h b/usr.sbin/pppd/patchlevel.h index 75911f9821c5..6a50eae22344 100644 --- a/usr.sbin/pppd/patchlevel.h +++ b/usr.sbin/pppd/patchlevel.h @@ -1,5 +1,5 @@ -/* $Id: patchlevel.h,v 1.5 1994/01/25 05:58:12 paulus Exp $ */ -#define PATCHLEVEL 3 +/* $Id: patchlevel.h,v 1.6 1994/02/22 00:12:03 paulus Exp $ */ +#define PATCHLEVEL 4 #define VERSION "2.0" -#define DATE "10 Jan 94" +#define DATE "9 Feb 94" diff --git a/usr.sbin/pppd/pppd.8 b/usr.sbin/pppd/pppd.8 index 7a74bd3184af..d1553fd3535b 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.4 1993/11/28 23:35:34 paulus Exp $ +.\" $Id: pppd.8,v 1.5 1994/02/22 00:12:04 paulus Exp $ .\" SH section heading .\" SS subsection heading .\" LP paragraph @@ -111,10 +111,20 @@ old versions of \fIpppd\fR). .I \fB:\fI Set the local and/or remote interface IP addresses. Either one may be omitted. The IP addresses can be specified with a host name or in -"decimal dot" notation (e.g. "150.203.23.247"). The default local -address is the (first) IP address of the system. The remote address -will be obtained from the peer if not specified in any option. Thus, -in simple cases, this option is not required. +decimal dot notation (e.g. 150.234.56.78). The default local +address is the (first) IP address of the system (unless the +.B noipdefault +option is given). The remote address will be obtained from the peer +if not specified in any option. Thus, in simple cases, this option is +not required. +If a local and/or remote IP address is specified with this option, +.I pppd +will not accept a different value from the peer in the IPCP +negotiation, unless the +.B ipcp-accept-local +and/or +.B ipcp-accept-remote +options are given, respectively. .TP .B -all Don't request or allow negotiation of any options for LCP and IPCP (use @@ -228,6 +238,13 @@ system. Use the system password database for authenticating the peer using PAP. .TP +.B noipdefault +Disables the default behaviour when no local IP address is specified, +which is to determine (if possible) the local IP address from the +hostname. With this option, the peer will have to supply the local IP +address during IPCP negotiation (unless it specified explicitly on the +command line or in an options file). +.TP .B lcp-restart \fI Set the LCP restart interval (retransmission timeout) to seconds (default 3). @@ -280,6 +297,18 @@ Set the maximum number of CHAP challenge transmissions to (default If this option is given, .I pppd will rechallenge the peer every seconds. +.TP +.B ipcp-accept-local +With this option, +.I pppd +will accept the peer's idea of our local IP address, even if the +local IP address was specified in an option. +.TP +.B ipcp-accept-remote +With this option, +.I pppd +will accept the peer's idea of its (remote) IP address, even if the +remote IP address was specified in an option. .SH OPTIONS FILES Options can be taken from files as well as the command line. .I pppd diff --git a/usr.sbin/pppd/pppd/ipcp.c b/usr.sbin/pppd/pppd/ipcp.c index 718a831713d9..3906c47371e0 100644 --- a/usr.sbin/pppd/pppd/ipcp.c +++ b/usr.sbin/pppd/pppd/ipcp.c @@ -18,13 +18,11 @@ */ #ifndef lint -static char rcsid[] = "$Id: ipcp.c,v 1.3 1993/11/10 01:34:12 paulus Exp $"; +static char rcsid[] = "$Id: ipcp.c,v 1.4 1994/02/22 00:11:57 paulus Exp $"; #endif /* * TODO: - * Fix IP address negotiation (wantoptions or hisoptions). - * Don't set zero IP addresses. */ #include @@ -242,6 +240,10 @@ ipcp_resetci(f) ipcp_options *wo = &ipcp_wantoptions[f->unit]; wo->req_addr = wo->neg_addr && ipcp_allowoptions[f->unit].neg_addr; + if (wo->ouraddr == 0) + wo->accept_local = 1; + if (wo->hisaddr == 0) + wo->accept_remote = 1; ipcp_gotoptions[f->unit] = *wo; cis_received[f->unit] = 0; } @@ -501,17 +503,17 @@ ipcp_nakci(f, p, len) } /* - * Accept the peer's idea of our address if we don't know it. - * Accept the peer's idea of his address if he knows it. + * Accept the peer's idea of {our,his} address, if different + * from our idea, only if the accept_{local,remote} flag is set. */ NAKCIADDR(CI_ADDR, neg_addr, go->old_addrs, - if (!go->ouraddr && ciaddr1) { /* Do we know our address? */ - go->ouraddr = ciaddr1; + if (go->accept_local && ciaddr1) { /* Do we know our address? */ + try.ouraddr = ciaddr1; IPCPDEBUG((LOG_INFO, "local IP address %s", ip_ntoa(ciaddr1))); } - if (ciaddr2) { /* Does he know his? */ - go->hisaddr = ciaddr2; + if (go->accept_remote && ciaddr2) { /* Does he know his? */ + try.hisaddr = ciaddr2; IPCPDEBUG((LOG_INFO, "remote IP address %s", ip_ntoa(ciaddr2))); } @@ -572,11 +574,11 @@ ipcp_nakci(f, p, len) try.old_addrs = 1; GETLONG(l, p); ciaddr1 = htonl(l); - if (ciaddr1) + if (ciaddr1 && go->accept_local) try.ouraddr = ciaddr1; GETLONG(l, p); ciaddr2 = htonl(l); - if (ciaddr2) + if (ciaddr2 && go->accept_remote) try.hisaddr = ciaddr2; no.old_addrs = 1; break; @@ -587,7 +589,7 @@ ipcp_nakci(f, p, len) try.old_addrs = 0; GETLONG(l, p); ciaddr1 = htonl(l); - if (ciaddr1) + if (ciaddr1 && go->accept_local) try.ouraddr = ciaddr1; no.neg_addr = 1; break; @@ -778,7 +780,8 @@ ipcp_reqci(f, inp, len, reject_if_disagree) GETLONG(tl, p); /* Parse source address (his) */ ciaddr1 = htonl(tl); IPCPDEBUG((LOG_INFO, "(%s:", ip_ntoa(ciaddr1))); - if (wo->hisaddr && ciaddr1 != wo->hisaddr) { + if (ciaddr1 != wo->hisaddr + && (ciaddr1 == 0 || !wo->accept_remote)) { orc = CONFNAK; if (!reject_if_disagree) { DECPTR(sizeof (long), p); @@ -794,16 +797,18 @@ ipcp_reqci(f, inp, len, reject_if_disagree) GETLONG(tl, p); /* Parse desination address (ours) */ ciaddr2 = htonl(tl); IPCPDEBUG((LOG_INFO, "%s)", ip_ntoa(ciaddr2))); - if (wo->ouraddr && ciaddr2 != wo->ouraddr) { - orc = CONFNAK; - if (!reject_if_disagree) { - DECPTR(sizeof (long), p); - tl = ntohl(wo->ouraddr); - PUTLONG(tl, p); + if (ciaddr2 != wo->ouraddr) { + if (ciaddr2 == 0 || !wo->accept_local) { + orc = CONFNAK; + if (!reject_if_disagree) { + DECPTR(sizeof (long), p); + tl = ntohl(wo->ouraddr); + PUTLONG(tl, p); + } + } else { + go->ouraddr = ciaddr2; /* accept peer's idea */ } } - if (orc == CONFNAK) - break; ho->neg_addr = 1; ho->old_addrs = 1; @@ -829,7 +834,8 @@ ipcp_reqci(f, inp, len, reject_if_disagree) GETLONG(tl, p); /* Parse source address (his) */ ciaddr1 = htonl(tl); IPCPDEBUG((LOG_INFO, "(%s)", ip_ntoa(ciaddr1))); - if (wo->hisaddr && ciaddr1 != wo->hisaddr) { + if (ciaddr1 != wo->hisaddr + && (ciaddr1 == 0 || !wo->accept_remote)) { orc = CONFNAK; if (!reject_if_disagree) { DECPTR(sizeof (long), p); @@ -838,9 +844,6 @@ ipcp_reqci(f, inp, len, reject_if_disagree) } } - if (orc == CONFNAK) - break; - ho->neg_addr = 1; ho->hisaddr = ciaddr1; break; @@ -880,8 +883,6 @@ ipcp_reqci(f, inp, len, reject_if_disagree) PUTCHAR(wo->cflag, p); } } - if (orc == CONFNAK) - break; ho->maxslotindex = maxslotindex; ho->cflag = wo->cflag; } @@ -972,7 +973,7 @@ ipcp_up(f) /* * We must have a non-zero IP address for both ends of the link. */ - if (ho->hisaddr == 0) + if (!ho->neg_addr) ho->hisaddr = ipcp_wantoptions[f->unit].hisaddr; if (ho->hisaddr == 0) { diff --git a/usr.sbin/pppd/pppd/ipcp.h b/usr.sbin/pppd/pppd/ipcp.h index 7981d688a194..a42ebd99bd4f 100644 --- a/usr.sbin/pppd/pppd/ipcp.h +++ b/usr.sbin/pppd/pppd/ipcp.h @@ -16,7 +16,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: ipcp.h,v 1.3 1993/11/10 01:34:14 paulus Exp $ + * $Id: ipcp.h,v 1.4 1994/02/22 00:11:59 paulus Exp $ */ /* @@ -45,6 +45,8 @@ typedef struct ipcp_options { int proxy_arp : 1; /* Make proxy ARP entry for peer? */ int neg_vj : 1; /* Van Jacobson Compression? */ int old_vj : 1; /* use old (short) form of VJ option? */ + int accept_local : 1; /* accept peer's value for ouraddr */ + int accept_remote : 1; /* accept peer's value for hisaddr */ u_short vj_protocol; /* protocol value to use in VJ option */ u_char maxslotindex, cflag; /* values for RFC1332 VJ compression neg. */ u_long ouraddr, hisaddr; /* Addresses in NETWORK BYTE ORDER */ diff --git a/usr.sbin/pppd/pppd/options.c b/usr.sbin/pppd/pppd/options.c index 4b8328e27e26..cf6dff425eb5 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.4 1994/01/25 05:58:10 paulus Exp $"; +static char rcsid[] = "$Id: options.c,v 1.5 1994/02/22 00:12:01 paulus Exp $"; #endif #include @@ -85,6 +85,7 @@ static int setproxyarp __ARGS((void)); static int setpersist __ARGS((void)); static int setdologin __ARGS((void)); static int setusehostname __ARGS((void)); +static int setnoipdflt __ARGS((void)); static int setlcptimeout __ARGS((char **)); static int setlcpterm __ARGS((char **)); static int setlcpconf __ARGS((char **)); @@ -98,6 +99,8 @@ static int setpapreqs __ARGS((char **)); static int setchaptimeout __ARGS((char **)); static int setchapchal __ARGS((char **)); static int setchapintv __ARGS((char **)); +static int setipcpaccl __ARGS((void)); +static int setipcpaccr __ARGS((void)); static int number_option __ARGS((char *, long *, int)); @@ -125,6 +128,7 @@ extern int uselogin; extern char our_name[]; extern char remote_name[]; int usehostname; +int disable_defaultip; /* * Valid arguments. @@ -172,6 +176,7 @@ static struct cmd { "proxyarp", 0, setproxyarp, /* Add proxy ARP entry */ "persist", 0, setpersist, /* Keep on reopening connection after close */ "login", 0, setdologin, /* Use system password database for UPAP */ + "noipdefault", 0, setnoipdflt, /* Don't use name for default IP adrs */ "lcp-restart", 1, setlcptimeout, /* Set timeout for LCP */ "lcp-max-terminate", 1, setlcpterm, /* Set max #xmits for term-reqs */ "lcp-max-configure", 1, setlcpconf, /* Set max #xmits for conf-reqs */ @@ -185,6 +190,8 @@ static struct cmd { "chap-restart", 1, setchaptimeout, /* Set timeout for CHAP */ "chap-max-challenge", 1, setchapchal, /* Set max #xmits for challenge */ "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 */ NULL }; @@ -925,6 +932,39 @@ setipaddr(arg) } +/* + * setnoipdflt - disable setipdefault() + */ +static int +setnoipdflt() +{ + disable_defaultip = 1; + return 1; +} + + +/* + * setipcpaccl - accept peer's idea of our address + */ +static int +setipcpaccl() +{ + ipcp_wantoptions[0].accept_local = 1; + return 1; +} + + +/* + * setipcpaccr - accept peer's idea of its address + */ +static int +setipcpaccr() +{ + ipcp_wantoptions[0].accept_remote = 1; + return 1; +} + + /* * setipdefault - default our local IP address based on our hostname. */ @@ -938,7 +978,7 @@ setipdefault() /* * If local IP address already given, don't bother. */ - if (wo->ouraddr != 0) + if (wo->ouraddr != 0 || disable_defaultip) return; /* @@ -946,6 +986,7 @@ setipdefault() * and take the first IP address as our local IP address. * If there isn't an IP address for our hostname, too bad. */ + wo->accept_local = 1; /* don't insist on this default value */ if ((hp = gethostbyname(hostname)) == NULL) return; local = *(long *)hp->h_addr; diff --git a/usr.sbin/pppd/pppd/patchlevel.h b/usr.sbin/pppd/pppd/patchlevel.h index 75911f9821c5..6a50eae22344 100644 --- a/usr.sbin/pppd/pppd/patchlevel.h +++ b/usr.sbin/pppd/pppd/patchlevel.h @@ -1,5 +1,5 @@ -/* $Id: patchlevel.h,v 1.5 1994/01/25 05:58:12 paulus Exp $ */ -#define PATCHLEVEL 3 +/* $Id: patchlevel.h,v 1.6 1994/02/22 00:12:03 paulus Exp $ */ +#define PATCHLEVEL 4 #define VERSION "2.0" -#define DATE "10 Jan 94" +#define DATE "9 Feb 94" diff --git a/usr.sbin/pppd/pppd/pppd.8 b/usr.sbin/pppd/pppd/pppd.8 index 7a74bd3184af..d1553fd3535b 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.4 1993/11/28 23:35:34 paulus Exp $ +.\" $Id: pppd.8,v 1.5 1994/02/22 00:12:04 paulus Exp $ .\" SH section heading .\" SS subsection heading .\" LP paragraph @@ -111,10 +111,20 @@ old versions of \fIpppd\fR). .I \fB:\fI Set the local and/or remote interface IP addresses. Either one may be omitted. The IP addresses can be specified with a host name or in -"decimal dot" notation (e.g. "150.203.23.247"). The default local -address is the (first) IP address of the system. The remote address -will be obtained from the peer if not specified in any option. Thus, -in simple cases, this option is not required. +decimal dot notation (e.g. 150.234.56.78). The default local +address is the (first) IP address of the system (unless the +.B noipdefault +option is given). The remote address will be obtained from the peer +if not specified in any option. Thus, in simple cases, this option is +not required. +If a local and/or remote IP address is specified with this option, +.I pppd +will not accept a different value from the peer in the IPCP +negotiation, unless the +.B ipcp-accept-local +and/or +.B ipcp-accept-remote +options are given, respectively. .TP .B -all Don't request or allow negotiation of any options for LCP and IPCP (use @@ -228,6 +238,13 @@ system. Use the system password database for authenticating the peer using PAP. .TP +.B noipdefault +Disables the default behaviour when no local IP address is specified, +which is to determine (if possible) the local IP address from the +hostname. With this option, the peer will have to supply the local IP +address during IPCP negotiation (unless it specified explicitly on the +command line or in an options file). +.TP .B lcp-restart \fI Set the LCP restart interval (retransmission timeout) to seconds (default 3). @@ -280,6 +297,18 @@ Set the maximum number of CHAP challenge transmissions to (default If this option is given, .I pppd will rechallenge the peer every seconds. +.TP +.B ipcp-accept-local +With this option, +.I pppd +will accept the peer's idea of our local IP address, even if the +local IP address was specified in an option. +.TP +.B ipcp-accept-remote +With this option, +.I pppd +will accept the peer's idea of its (remote) IP address, even if the +remote IP address was specified in an option. .SH OPTIONS FILES Options can be taken from files as well as the command line. .I pppd