Add `ipcp'' as an optional argument to
`open'', and make
open capable of re-negotiatiating the various layers. It is now possible to change various link options and then re-open the relevant layer, making the changes effective - for example, switching off VJ compression or starting ECHO LQRs on-the-fly.
This commit is contained in:
parent
a57a22d25f
commit
897f9429f9
@ -17,7 +17,7 @@
|
|||||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* $Id: ccp.c,v 1.33 1998/05/23 13:38:00 brian Exp $
|
* $Id: ccp.c,v 1.34 1998/06/15 19:06:02 brian Exp $
|
||||||
*
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
* o Support other compression protocols
|
* o Support other compression protocols
|
||||||
@ -306,13 +306,13 @@ CcpLayerStart(struct fsm *fp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
CcpLayerFinish(struct fsm *fp)
|
CcpLayerDown(struct fsm *fp)
|
||||||
{
|
{
|
||||||
/* We're now down */
|
/* About to come down */
|
||||||
struct ccp *ccp = fsm2ccp(fp);
|
struct ccp *ccp = fsm2ccp(fp);
|
||||||
struct ccp_opt *next;
|
struct ccp_opt *next;
|
||||||
|
|
||||||
log_Printf(LogCCP, "%s: CcpLayerFinish.\n", fp->link->name);
|
log_Printf(LogCCP, "%s: CcpLayerDown.\n", fp->link->name);
|
||||||
if (ccp->in.state != NULL) {
|
if (ccp->in.state != NULL) {
|
||||||
(*algorithm[ccp->in.algorithm]->i.Term)(ccp->in.state);
|
(*algorithm[ccp->in.algorithm]->i.Term)(ccp->in.state);
|
||||||
ccp->in.state = NULL;
|
ccp->in.state = NULL;
|
||||||
@ -330,13 +330,14 @@ CcpLayerFinish(struct fsm *fp)
|
|||||||
free(ccp->out.opt);
|
free(ccp->out.opt);
|
||||||
ccp->out.opt = next;
|
ccp->out.opt = next;
|
||||||
}
|
}
|
||||||
|
ccp_Setup(ccp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
CcpLayerDown(struct fsm *fp)
|
CcpLayerFinish(struct fsm *fp)
|
||||||
{
|
{
|
||||||
/* About to come down */
|
/* We're now down */
|
||||||
log_Printf(LogCCP, "%s: CcpLayerDown.\n", fp->link->name);
|
log_Printf(LogCCP, "%s: CcpLayerFinish.\n", fp->link->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* $Id: command.c,v 1.147 1998/06/16 23:23:54 brian Exp $
|
* $Id: command.c,v 1.148 1998/06/20 00:19:33 brian Exp $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -124,7 +124,7 @@
|
|||||||
#define NEG_DNS 50
|
#define NEG_DNS 50
|
||||||
|
|
||||||
const char Version[] = "2.0-beta";
|
const char Version[] = "2.0-beta";
|
||||||
const char VersionDate[] = "$Date: 1998/06/16 23:23:54 $";
|
const char VersionDate[] = "$Date: 1998/06/20 00:19:33 $";
|
||||||
|
|
||||||
static int ShowCommand(struct cmdargs const *);
|
static int ShowCommand(struct cmdargs const *);
|
||||||
static int TerminalCommand(struct cmdargs const *);
|
static int TerminalCommand(struct cmdargs const *);
|
||||||
@ -470,7 +470,7 @@ static struct cmdtab const Commands[] = {
|
|||||||
{"load", NULL, LoadCommand, LOCAL_AUTH | LOCAL_CX_OPT,
|
{"load", NULL, LoadCommand, LOCAL_AUTH | LOCAL_CX_OPT,
|
||||||
"Load settings", "load [remote]"},
|
"Load settings", "load [remote]"},
|
||||||
{"open", NULL, OpenCommand, LOCAL_AUTH | LOCAL_CX_OPT,
|
{"open", NULL, OpenCommand, LOCAL_AUTH | LOCAL_CX_OPT,
|
||||||
"Open an FSM", "open [lcp|ccp]"},
|
"Open an FSM", "open [lcp|ccp|ipcp]"},
|
||||||
{"passwd", NULL, PasswdCommand, LOCAL_NO_AUTH,
|
{"passwd", NULL, PasswdCommand, LOCAL_NO_AUTH,
|
||||||
"Password for manipulation", "passwd LocalPassword"},
|
"Password for manipulation", "passwd LocalPassword"},
|
||||||
{"quit", "bye", QuitCommand, LOCAL_AUTH | LOCAL_NO_AUTH,
|
{"quit", "bye", QuitCommand, LOCAL_AUTH | LOCAL_NO_AUTH,
|
||||||
@ -837,11 +837,18 @@ QuitCommand(struct cmdargs const *arg)
|
|||||||
static int
|
static int
|
||||||
OpenCommand(struct cmdargs const *arg)
|
OpenCommand(struct cmdargs const *arg)
|
||||||
{
|
{
|
||||||
if (arg->argc == arg->argn ||
|
if (arg->argc == arg->argn)
|
||||||
(arg->argc == arg->argn+1 && !strcasecmp(arg->argv[arg->argn], "lcp")))
|
|
||||||
bundle_Open(arg->bundle, arg->cx ? arg->cx->name : NULL, PHYS_ALL);
|
bundle_Open(arg->bundle, arg->cx ? arg->cx->name : NULL, PHYS_ALL);
|
||||||
else if (arg->argc == arg->argn+1 &&
|
else if (arg->argc == arg->argn + 1) {
|
||||||
!strcasecmp(arg->argv[arg->argn], "ccp")) {
|
if (!strcasecmp(arg->argv[arg->argn], "lcp")) {
|
||||||
|
if (arg->cx) {
|
||||||
|
if (arg->cx->physical->link.lcp.fsm.state == ST_OPENED)
|
||||||
|
fsm_Reopen(&arg->cx->physical->link.lcp.fsm);
|
||||||
|
else
|
||||||
|
bundle_Open(arg->bundle, arg->cx->name, PHYS_ALL);
|
||||||
|
} else
|
||||||
|
log_Printf(LogWARN, "open lcp: You must specify a link\n");
|
||||||
|
} else if (!strcasecmp(arg->argv[arg->argn], "ccp")) {
|
||||||
struct link *l;
|
struct link *l;
|
||||||
struct fsm *fp;
|
struct fsm *fp;
|
||||||
|
|
||||||
@ -851,7 +858,9 @@ OpenCommand(struct cmdargs const *arg)
|
|||||||
|
|
||||||
if (fp->link->lcp.fsm.state != ST_OPENED)
|
if (fp->link->lcp.fsm.state != ST_OPENED)
|
||||||
log_Printf(LogWARN, "open: LCP must be open before opening CCP\n");
|
log_Printf(LogWARN, "open: LCP must be open before opening CCP\n");
|
||||||
else if (fp->state != ST_OPENED) {
|
else if (fp->state == ST_OPENED)
|
||||||
|
fsm_Reopen(fp);
|
||||||
|
else {
|
||||||
fp->open_mode = 0; /* Not passive any more */
|
fp->open_mode = 0; /* Not passive any more */
|
||||||
if (fp->state == ST_STOPPED) {
|
if (fp->state == ST_STOPPED) {
|
||||||
fsm_Down(fp);
|
fsm_Down(fp);
|
||||||
@ -861,6 +870,15 @@ OpenCommand(struct cmdargs const *arg)
|
|||||||
fsm_Open(fp);
|
fsm_Open(fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (!strcasecmp(arg->argv[arg->argn], "ipcp")) {
|
||||||
|
if (arg->cx)
|
||||||
|
log_Printf(LogWARN, "open ipcp: You need not specify a link\n");
|
||||||
|
if (arg->bundle->ncp.ipcp.fsm.state == ST_OPENED)
|
||||||
|
fsm_Reopen(&arg->bundle->ncp.ipcp.fsm);
|
||||||
|
else
|
||||||
|
bundle_Open(arg->bundle, NULL, PHYS_ALL);
|
||||||
|
} else
|
||||||
|
return -1;
|
||||||
} else
|
} else
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: datalink.c,v 1.11 1998/06/20 00:19:35 brian Exp $
|
* $Id: datalink.c,v 1.12 1998/06/24 19:33:31 brian Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -483,7 +483,8 @@ datalink_AuthOk(struct datalink *dl)
|
|||||||
}
|
}
|
||||||
} else if (bundle_Phase(dl->bundle) == PHASE_NETWORK) {
|
} else if (bundle_Phase(dl->bundle) == PHASE_NETWORK) {
|
||||||
log_Printf(LogPHASE, "%s: Already in NETWORK phase\n", dl->name);
|
log_Printf(LogPHASE, "%s: Already in NETWORK phase\n", dl->name);
|
||||||
datalink_AuthNotOk(dl);
|
datalink_NewState(dl, DATALINK_OPEN);
|
||||||
|
(*dl->parent->LayerUp)(dl->parent->object, &dl->physical->link.lcp.fsm);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
dl->bundle->ncp.mp.peer = dl->peer;
|
dl->bundle->ncp.mp.peer = dl->peer;
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* $Id: fsm.c,v 1.31 1998/06/20 00:19:36 brian Exp $
|
* $Id: fsm.c,v 1.32 1998/06/20 01:55:28 brian Exp $
|
||||||
*
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
*/
|
*/
|
||||||
@ -958,6 +958,18 @@ fsm_NullRecvResetAck(struct fsm *fp, u_char id)
|
|||||||
fp->link->name);
|
fp->link->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
fsm_Reopen(struct fsm *fp)
|
||||||
|
{
|
||||||
|
if (fp->state == ST_OPENED) {
|
||||||
|
(*fp->fn->LayerDown)(fp);
|
||||||
|
FsmInitRestartCounter(fp);
|
||||||
|
FsmSendConfigReq(fp);
|
||||||
|
NewState(fp, ST_REQSENT);
|
||||||
|
(*fp->parent->LayerDown)(fp->parent->object, fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
fsm2initial(struct fsm *fp)
|
fsm2initial(struct fsm *fp)
|
||||||
{
|
{
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* $Id: fsm.h,v 1.17 1998/05/21 21:45:26 brian Exp $
|
* $Id: fsm.h,v 1.18 1998/06/20 00:19:38 brian Exp $
|
||||||
*
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
*/
|
*/
|
||||||
@ -154,5 +154,6 @@ extern void fsm_Input(struct fsm *, struct mbuf *);
|
|||||||
extern void fsm_Close(struct fsm *);
|
extern void fsm_Close(struct fsm *);
|
||||||
extern void fsm_NullRecvResetReq(struct fsm *);
|
extern void fsm_NullRecvResetReq(struct fsm *);
|
||||||
extern void fsm_NullRecvResetAck(struct fsm *, u_char);
|
extern void fsm_NullRecvResetAck(struct fsm *, u_char);
|
||||||
|
extern void fsm_Reopen(struct fsm *);
|
||||||
extern void fsm2initial(struct fsm *);
|
extern void fsm2initial(struct fsm *);
|
||||||
extern const char *State2Nam(u_int);
|
extern const char *State2Nam(u_int);
|
||||||
|
@ -17,10 +17,10 @@
|
|||||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* $Id: ipcp.c,v 1.56 1998/06/15 19:06:12 brian Exp $
|
* $Id: ipcp.c,v 1.57 1998/06/16 19:40:38 brian Exp $
|
||||||
*
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
* o More RFC1772 backwoard compatibility
|
* o More RFC1772 backward compatibility
|
||||||
*/
|
*/
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <netinet/in_systm.h>
|
#include <netinet/in_systm.h>
|
||||||
@ -606,10 +606,14 @@ IpcpSendTerminateAck(struct fsm *fp, u_char id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
IpcpLayerStart(struct fsm * fp)
|
IpcpLayerStart(struct fsm *fp)
|
||||||
{
|
{
|
||||||
/* We're about to start up ! */
|
/* We're about to start up ! */
|
||||||
|
struct ipcp *ipcp = fsm2ipcp(fp);
|
||||||
|
|
||||||
log_Printf(LogIPCP, "%s: IpcpLayerStart.\n", fp->link->name);
|
log_Printf(LogIPCP, "%s: IpcpLayerStart.\n", fp->link->name);
|
||||||
|
throughput_start(&ipcp->throughput, "IPCP throughput",
|
||||||
|
Enabled(fp->bundle, OPT_THROUGHPUT));
|
||||||
|
|
||||||
/* This is where we should be setting up the interface in AUTO mode */
|
/* This is where we should be setting up the interface in AUTO mode */
|
||||||
}
|
}
|
||||||
@ -618,7 +622,11 @@ static void
|
|||||||
IpcpLayerFinish(struct fsm *fp)
|
IpcpLayerFinish(struct fsm *fp)
|
||||||
{
|
{
|
||||||
/* We're now down */
|
/* We're now down */
|
||||||
|
struct ipcp *ipcp = fsm2ipcp(fp);
|
||||||
|
|
||||||
log_Printf(LogIPCP, "%s: IpcpLayerFinish.\n", fp->link->name);
|
log_Printf(LogIPCP, "%s: IpcpLayerFinish.\n", fp->link->name);
|
||||||
|
throughput_stop(&ipcp->throughput);
|
||||||
|
throughput_log(&ipcp->throughput, LogIPCP, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -670,8 +678,6 @@ IpcpLayerDown(struct fsm *fp)
|
|||||||
s = inet_ntoa(ipcp->peer_ifip);
|
s = inet_ntoa(ipcp->peer_ifip);
|
||||||
log_Printf(LogIPCP, "%s: IpcpLayerDown: %s\n", fp->link->name, s);
|
log_Printf(LogIPCP, "%s: IpcpLayerDown: %s\n", fp->link->name, s);
|
||||||
|
|
||||||
throughput_stop(&ipcp->throughput);
|
|
||||||
throughput_log(&ipcp->throughput, LogIPCP, NULL);
|
|
||||||
/*
|
/*
|
||||||
* XXX this stuff should really live in the FSM. Our config should
|
* XXX this stuff should really live in the FSM. Our config should
|
||||||
* associate executable sections in files with events.
|
* associate executable sections in files with events.
|
||||||
@ -687,6 +693,8 @@ IpcpLayerDown(struct fsm *fp)
|
|||||||
|
|
||||||
if (!(ipcp->fsm.bundle->phys_type.all & PHYS_AUTO))
|
if (!(ipcp->fsm.bundle->phys_type.all & PHYS_AUTO))
|
||||||
ipcp_CleanInterface(ipcp);
|
ipcp_CleanInterface(ipcp);
|
||||||
|
|
||||||
|
ipcp_Setup(ipcp);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -736,8 +744,6 @@ IpcpLayerUp(struct fsm *fp)
|
|||||||
system_Select(fp->bundle, "MYADDR", LINKUPFILE, NULL, NULL);
|
system_Select(fp->bundle, "MYADDR", LINKUPFILE, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
throughput_start(&ipcp->throughput, "IPCP throughput",
|
|
||||||
Enabled(fp->bundle, OPT_THROUGHPUT));
|
|
||||||
log_DisplayPrompts();
|
log_DisplayPrompts();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
*
|
*
|
||||||
* $Id: lcp.c,v 1.58 1998/05/29 18:32:40 brian Exp $
|
* $Id: lcp.c,v 1.59 1998/06/15 19:06:13 brian Exp $
|
||||||
*
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
* o Limit data field length by MRU
|
* o Limit data field length by MRU
|
||||||
@ -414,6 +414,7 @@ LcpLayerDown(struct fsm *fp)
|
|||||||
log_Printf(LogLCP, "%s: LcpLayerDown\n", fp->link->name);
|
log_Printf(LogLCP, "%s: LcpLayerDown\n", fp->link->name);
|
||||||
hdlc_StopTimer(&p->hdlc);
|
hdlc_StopTimer(&p->hdlc);
|
||||||
lqr_StopTimer(p);
|
lqr_StopTimer(p);
|
||||||
|
lcp_Setup(fsm2lcp(fp), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.\" $Id: ppp.8,v 1.108 1998/06/18 01:24:29 brian Exp $
|
.\" $Id: ppp.8,v 1.109 1998/06/21 11:14:50 brian Exp $
|
||||||
.Dd 20 September 1995
|
.Dd 20 September 1995
|
||||||
.Os FreeBSD
|
.Os FreeBSD
|
||||||
.Dt PPP 8
|
.Dt PPP 8
|
||||||
@ -2431,18 +2431,41 @@ file. If
|
|||||||
is not given, the
|
is not given, the
|
||||||
.Ar default
|
.Ar default
|
||||||
label is used.
|
label is used.
|
||||||
.It open Op lcp|ccp
|
.It open Op lcp|ccp|ipcp
|
||||||
This is the opposite of the
|
This is the opposite of the
|
||||||
.Dq close
|
.Dq close
|
||||||
command. Using
|
command. Using
|
||||||
.Dq open
|
.Dq open
|
||||||
with no arguments or with the
|
with no arguments is the same as using
|
||||||
.Dq lcp
|
|
||||||
argument is the same as using
|
|
||||||
.Dq dial
|
.Dq dial
|
||||||
in that all closed links are brought up. If the
|
with no arguments, where all closed links are brought up.
|
||||||
|
.Pp
|
||||||
|
If the
|
||||||
|
.Dq lcp
|
||||||
|
option is used, the link will also be brought up. If however the LCP
|
||||||
|
layer is already open, it will be renegotiated. This allows various
|
||||||
|
LCP options to be changed, after which
|
||||||
|
.Dq open lcp
|
||||||
|
can be used to put them into effect. After renegotiating LCP,
|
||||||
|
any agreed authentication will also take place.
|
||||||
|
.Pp
|
||||||
|
If the
|
||||||
.Dq ccp
|
.Dq ccp
|
||||||
argument is used, the relevant compression layer is opened.
|
argument is used, the relevant compression layer is opened. Again,
|
||||||
|
if it is already open, it will be renegotiated.
|
||||||
|
.Pp
|
||||||
|
If the
|
||||||
|
.Dq ipcp
|
||||||
|
argument is used, the link will be brought up as with the
|
||||||
|
.Dq lcp
|
||||||
|
argument. If IPCP is already open, it will be renegotiated
|
||||||
|
and the network interface will be reconfigured.
|
||||||
|
.Pp
|
||||||
|
It is probably not good practice to re-open the PPP state machines
|
||||||
|
like this as it's possible that the peer will not behave correctly.
|
||||||
|
It
|
||||||
|
.Em is
|
||||||
|
however useful as a way of forcing the CCP or VJ dictionaries to be reset.
|
||||||
.It passwd Ar pass
|
.It passwd Ar pass
|
||||||
Specify the password required for access to the full
|
Specify the password required for access to the full
|
||||||
.Nm
|
.Nm
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.\" $Id: ppp.8,v 1.108 1998/06/18 01:24:29 brian Exp $
|
.\" $Id: ppp.8,v 1.109 1998/06/21 11:14:50 brian Exp $
|
||||||
.Dd 20 September 1995
|
.Dd 20 September 1995
|
||||||
.Os FreeBSD
|
.Os FreeBSD
|
||||||
.Dt PPP 8
|
.Dt PPP 8
|
||||||
@ -2431,18 +2431,41 @@ file. If
|
|||||||
is not given, the
|
is not given, the
|
||||||
.Ar default
|
.Ar default
|
||||||
label is used.
|
label is used.
|
||||||
.It open Op lcp|ccp
|
.It open Op lcp|ccp|ipcp
|
||||||
This is the opposite of the
|
This is the opposite of the
|
||||||
.Dq close
|
.Dq close
|
||||||
command. Using
|
command. Using
|
||||||
.Dq open
|
.Dq open
|
||||||
with no arguments or with the
|
with no arguments is the same as using
|
||||||
.Dq lcp
|
|
||||||
argument is the same as using
|
|
||||||
.Dq dial
|
.Dq dial
|
||||||
in that all closed links are brought up. If the
|
with no arguments, where all closed links are brought up.
|
||||||
|
.Pp
|
||||||
|
If the
|
||||||
|
.Dq lcp
|
||||||
|
option is used, the link will also be brought up. If however the LCP
|
||||||
|
layer is already open, it will be renegotiated. This allows various
|
||||||
|
LCP options to be changed, after which
|
||||||
|
.Dq open lcp
|
||||||
|
can be used to put them into effect. After renegotiating LCP,
|
||||||
|
any agreed authentication will also take place.
|
||||||
|
.Pp
|
||||||
|
If the
|
||||||
.Dq ccp
|
.Dq ccp
|
||||||
argument is used, the relevant compression layer is opened.
|
argument is used, the relevant compression layer is opened. Again,
|
||||||
|
if it is already open, it will be renegotiated.
|
||||||
|
.Pp
|
||||||
|
If the
|
||||||
|
.Dq ipcp
|
||||||
|
argument is used, the link will be brought up as with the
|
||||||
|
.Dq lcp
|
||||||
|
argument. If IPCP is already open, it will be renegotiated
|
||||||
|
and the network interface will be reconfigured.
|
||||||
|
.Pp
|
||||||
|
It is probably not good practice to re-open the PPP state machines
|
||||||
|
like this as it's possible that the peer will not behave correctly.
|
||||||
|
It
|
||||||
|
.Em is
|
||||||
|
however useful as a way of forcing the CCP or VJ dictionaries to be reset.
|
||||||
.It passwd Ar pass
|
.It passwd Ar pass
|
||||||
Specify the password required for access to the full
|
Specify the password required for access to the full
|
||||||
.Nm
|
.Nm
|
||||||
|
Loading…
x
Reference in New Issue
Block a user