diff options
author | Brian Somers <brian@FreeBSD.org> | 1998-06-15 19:05:27 +0000 |
---|---|---|
committer | Brian Somers <brian@FreeBSD.org> | 1998-06-15 19:05:27 +0000 |
commit | 9c81b87d1e56d3a7bbb680c3d2dab59d88d29481 (patch) | |
tree | a4abb5b025b1a87f8f17a4afc0ffe07dfd4166a1 /usr.sbin/ppp/command.c | |
parent | 6ab2c9633bab2da67888e49aa8303fb0e1a858a1 (diff) | |
download | src-9c81b87d1e56d3a7bbb680c3d2dab59d88d29481.tar.gz src-9c81b87d1e56d3a7bbb680c3d2dab59d88d29481.zip |
Make `close lcp' just close the LCP layer and not hangup. This is
useful for slirp users that wish to get their shell back after the
ppp session. `close' with no args still hangs up as expected.
Required by: jmz
Notes
Notes:
svn path=/head/; revision=37007
Diffstat (limited to 'usr.sbin/ppp/command.c')
-rw-r--r-- | usr.sbin/ppp/command.c | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/usr.sbin/ppp/command.c b/usr.sbin/ppp/command.c index 7684fc57ed80..9f84ba45138d 100644 --- a/usr.sbin/ppp/command.c +++ b/usr.sbin/ppp/command.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: command.c,v 1.140 1998/06/12 17:45:08 brian Exp $ + * $Id: command.c,v 1.141 1998/06/12 20:12:25 brian Exp $ * */ #include <sys/types.h> @@ -124,7 +124,7 @@ #define NEG_DNS 50 const char Version[] = "2.0-beta"; -const char VersionDate[] = "$Date: 1998/06/12 17:45:08 $"; +const char VersionDate[] = "$Date: 1998/06/12 20:12:25 $"; static int ShowCommand(struct cmdargs const *); static int TerminalCommand(struct cmdargs const *); @@ -872,26 +872,29 @@ OpenCommand(struct cmdargs const *arg) static int CloseCommand(struct cmdargs const *arg) { - if (arg->argc == arg->argn || - (arg->argc == arg->argn+1 && !strcasecmp(arg->argv[arg->argn], "lcp"))) - bundle_Close(arg->bundle, arg->cx ? arg->cx->name : NULL, 1); - else if (arg->argc == arg->argn+1 && - (!strcasecmp(arg->argv[arg->argn], "ccp") || - !strcasecmp(arg->argv[arg->argn], "ccp!"))) { - struct link *l; - struct fsm *fp; + if (arg->argc == arg->argn) + bundle_Close(arg->bundle, arg->cx ? arg->cx->name : NULL, CLOSE_STAYDOWN); + else if (arg->argc == arg->argn + 1) { + if (!strcasecmp(arg->argv[arg->argn], "lcp")) + bundle_Close(arg->bundle, arg->cx ? arg->cx->name : NULL, CLOSE_LCP); + else if (!strcasecmp(arg->argv[arg->argn], "ccp") || + !strcasecmp(arg->argv[arg->argn], "ccp!")) { + struct link *l; + struct fsm *fp; + + if (!(l = command_ChooseLink(arg))) + return -1; + fp = &l->ccp.fsm; - if (!(l = command_ChooseLink(arg))) + if (fp->state == ST_OPENED) { + fsm_Close(fp); + if (arg->argv[arg->argn][3] == '!') + fp->open_mode = 0; /* Stay ST_CLOSED */ + else + fp->open_mode = OPEN_PASSIVE; /* Wait for the peer to start */ + } + } else return -1; - fp = &l->ccp.fsm; - - if (fp->state == ST_OPENED) { - fsm_Close(fp); - if (arg->argv[arg->argn][3] == '!') - fp->open_mode = 0; /* Stay ST_CLOSED */ - else - fp->open_mode = OPEN_PASSIVE; /* Wait for the peer to start */ - } } else return -1; @@ -904,7 +907,7 @@ DownCommand(struct cmdargs const *arg) if (arg->argc == arg->argn || (arg->argc == arg->argn+1 && !strcasecmp(arg->argv[arg->argn], "lcp"))) { if (arg->cx) - datalink_Down(arg->cx, 1); + datalink_Down(arg->cx, CLOSE_STAYDOWN); else bundle_Down(arg->bundle); } else if (arg->argc == arg->argn+1 && |