Some fixes so that the local IP address can be assigned by the peer

if no local IP address is specified on the command line (even though
a default local IP address has been determined from the hostname).
This commit is contained in:
paulus 1994-02-22 00:11:57 +00:00
parent 0622d87221
commit e332e61cb7
10 changed files with 224 additions and 78 deletions

View File

@ -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 <stdio.h>
@ -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) {

View File

@ -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 */

View File

@ -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 <stdio.h>
@ -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;

View File

@ -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"

View File

@ -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 <local_IP_address>\fB:\fI<remote_IP_address>
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<n>
Set the LCP restart interval (retransmission timeout) to <n> seconds
(default 3).
@ -280,6 +297,18 @@ Set the maximum number of CHAP challenge transmissions to <n> (default
If this option is given,
.I pppd
will rechallenge the peer every <n> 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

View File

@ -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 <stdio.h>
@ -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) {

View File

@ -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 */

View File

@ -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 <stdio.h>
@ -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;

View File

@ -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"

View File

@ -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 <local_IP_address>\fB:\fI<remote_IP_address>
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<n>
Set the LCP restart interval (retransmission timeout) to <n> seconds
(default 3).
@ -280,6 +297,18 @@ Set the maximum number of CHAP challenge transmissions to <n> (default
If this option is given,
.I pppd
will rechallenge the peer every <n> 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