diff --git a/usr.sbin/ppp/bundle.c b/usr.sbin/ppp/bundle.c index 4c4d4983c50..d2cf7a8150e 100644 --- a/usr.sbin/ppp/bundle.c +++ b/usr.sbin/ppp/bundle.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: bundle.c,v 1.1.2.8 1998/02/10 03:23:06 brian Exp $ + * $Id: bundle.c,v 1.1.2.9 1998/02/15 23:59:39 brian Exp $ */ #include @@ -535,6 +535,8 @@ bundle_LinkLost(struct bundle *bundle, struct link *link, int staydown) * and MAY cause a program exit. */ + if ((mode & MODE_DIRECT) || CleaningUp) + staydown = 1; datalink_Down(bundle->links, staydown); } @@ -543,9 +545,13 @@ bundle_LinkClosed(struct bundle *bundle, struct datalink *dl) { /* * Our datalink has closed. - * If it's DIRECT, delete it. + * If it's DIRECT or BACKGROUND, delete it. * If it's the last data link, */ + + if (mode & (MODE_BACKGROUND|MODE_DIRECT)) + CleaningUp = 1; + if (!(mode & MODE_AUTO)) bundle_DownInterface(bundle); if (mode & MODE_DDIAL) diff --git a/usr.sbin/ppp/chat.c b/usr.sbin/ppp/chat.c index 64511292556..b4af38f4b93 100644 --- a/usr.sbin/ppp/chat.c +++ b/usr.sbin/ppp/chat.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: chat.c,v 1.44.2.7 1998/02/13 05:10:06 brian Exp $ + * $Id: chat.c,v 1.44.2.8 1998/02/13 05:31:03 brian Exp $ */ #include @@ -455,9 +455,14 @@ chat_Init(struct chat *c, struct physical *p, const char *data, int emptybuf) c->state = CHAT_EXPECT; - strncpy(c->script, data, sizeof c->script - 1); - c->script[sizeof c->script - 1] = '\0'; - c->argc = MakeArgs(c->script, c->argv, VECSIZE(c->argv)); + if (data == NULL) { + *c->script = '\0'; + c->argc = 0; + } else { + strncpy(c->script, data, sizeof c->script - 1); + c->script[sizeof c->script - 1] = '\0'; + c->argc = MakeArgs(c->script, c->argv, VECSIZE(c->argv)); + } c->arg = -1; c->argptr = NULL; diff --git a/usr.sbin/ppp/command.c b/usr.sbin/ppp/command.c index f7e479c5189..8ddedf08054 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.131.2.16 1998/02/13 05:10:13 brian Exp $ + * $Id: command.c,v 1.131.2.17 1998/02/15 23:59:49 brian Exp $ * */ #include @@ -1277,6 +1277,7 @@ SetVariable(struct cmdargs const *arg) u_long map; const char *argp; int param = (int)arg->data; + struct datalink *dl = bundle2datalink(arg->bundle, NULL); if (arg->argc > 0) argp = *arg->argv; @@ -1293,12 +1294,16 @@ SetVariable(struct cmdargs const *arg) VarAuthName[sizeof VarAuthName - 1] = '\0'; break; case VAR_DIAL: - strncpy(VarDialScript, argp, sizeof VarDialScript - 1); - VarDialScript[sizeof VarDialScript - 1] = '\0'; + if (!(mode & (MODE_DIRECT|MODE_DEDICATED))) { + strncpy(dl->script.dial, argp, sizeof dl->script.dial - 1); + dl->script.dial[sizeof dl->script.dial - 1] = '\0'; + } break; case VAR_LOGIN: - strncpy(VarLoginScript, argp, sizeof VarLoginScript - 1); - VarLoginScript[sizeof VarLoginScript - 1] = '\0'; + if (!(mode & (MODE_DIRECT|MODE_DEDICATED))) { + strncpy(dl->script.login, argp, sizeof dl->script.login - 1); + dl->script.login[sizeof dl->script.login - 1] = '\0'; + } break; case VAR_DEVICE: if (link_IsActive(&arg->bundle->links->physical->link)) @@ -1322,8 +1327,10 @@ SetVariable(struct cmdargs const *arg) VarAltPhone = NULL; break; case VAR_HANGUP: - strncpy(VarHangupScript, argp, sizeof VarHangupScript - 1); - VarHangupScript[sizeof VarHangupScript - 1] = '\0'; + if (!(mode & (MODE_DIRECT|MODE_DEDICATED))) { + strncpy(dl->script.hangup, argp, sizeof dl->script.hangup - 1); + dl->script.hangup[sizeof dl->script.hangup - 1] = '\0'; + } break; #ifdef HAVE_DES case VAR_ENC: diff --git a/usr.sbin/ppp/datalink.c b/usr.sbin/ppp/datalink.c index 930faf6ca13..2e074bb7b9f 100644 --- a/usr.sbin/ppp/datalink.c +++ b/usr.sbin/ppp/datalink.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: datalink.c,v 1.1.2.1 1998/02/15 23:59:55 brian Exp $ + * $Id: datalink.c,v 1.1.2.2 1998/02/16 00:18:52 brian Exp $ */ #include @@ -129,7 +129,7 @@ datalink_UpdateSet(struct descriptor *d, fd_set *r, fd_set *w, fd_set *e, if (modem_Open(dl->physical, dl->bundle) >= 0) { LogPrintf(LogPHASE, "%s: Entering DIAL state\n", dl->name); dl->state = DATALINK_DIAL; - chat_Init(&dl->chat, dl->physical, VarDialScript, 1); + chat_Init(&dl->chat, dl->physical, dl->script.dial, 1); if (!(mode & MODE_DDIAL) && VarDialTries) LogPrintf(LogCHAT, "%s: Dial attempt %u of %d\n", dl->name, VarDialTries - dl->dial_tries, VarDialTries); @@ -145,8 +145,7 @@ datalink_UpdateSet(struct descriptor *d, fd_set *r, fd_set *w, fd_set *e, dl->state = DATALINK_CLOSED; dl->reconnect_tries = 0; dl->dial_tries = -1; - if (mode & MODE_BACKGROUND) - CleaningUp = 1; + bundle_LinkClosed(dl->bundle, dl); } else datalink_StartDialTimer(dl, VarRedialTimeout); } @@ -167,7 +166,7 @@ datalink_UpdateSet(struct descriptor *d, fd_set *r, fd_set *w, fd_set *e, case DATALINK_DIAL: LogPrintf(LogPHASE, "%s: Entering LOGIN state\n", dl->name); dl->state = DATALINK_LOGIN; - chat_Init(&dl->chat, dl->physical, VarLoginScript, 0); + chat_Init(&dl->chat, dl->physical, dl->script.login, 0); break; case DATALINK_LOGIN: dl->dial_tries = 0; @@ -176,7 +175,7 @@ datalink_UpdateSet(struct descriptor *d, fd_set *r, fd_set *w, fd_set *e, LogPrintf(LogPHASE, "%s: Entering HANGUP state\n", dl->name); dl->state = DATALINK_HANGUP; modem_Offline(dl->physical); - chat_Init(&dl->chat, dl->physical, VarHangupScript, 1); + chat_Init(&dl->chat, dl->physical, dl->script.hangup, 1); } else { LogPrintf(LogPHASE, "%s: Entering OPEN state\n", dl->name); dl->state = DATALINK_OPEN; @@ -198,7 +197,7 @@ datalink_UpdateSet(struct descriptor *d, fd_set *r, fd_set *w, fd_set *e, LogPrintf(LogPHASE, "%s: Entering HANGUP state\n", dl->name); dl->state = DATALINK_HANGUP; modem_Offline(dl->physical); - chat_Init(&dl->chat, dl->physical, VarHangupScript, 1); + chat_Init(&dl->chat, dl->physical, dl->script.hangup, 1); break; } break; @@ -282,6 +281,11 @@ datalink_Create(const char *name, struct bundle *bundle) dl->desc.IsSet = datalink_IsSet; dl->desc.Read = datalink_Read; dl->desc.Write = datalink_Write; + + *dl->script.dial = '\0'; + *dl->script.login = '\0'; + *dl->script.hangup = '\0'; + dl->state = DATALINK_CLOSED; dl->bundle = bundle; dl->next = NULL; @@ -326,7 +330,7 @@ datalink_Up(struct datalink *dl) if (dl->state == DATALINK_CLOSED) { LogPrintf(LogPHASE, "%s: Entering OPENING state\n", dl->name); dl->state = DATALINK_OPENING; - dl->reconnect_tries = VarReconnectTries; + dl->reconnect_tries = (mode & MODE_DIRECT) ? 0 : VarReconnectTries; dl->dial_tries = VarDialTries; } } @@ -351,7 +355,7 @@ datalink_Down(struct datalink *dl, int stay) FsmDown(&CcpInfo.fsm); FsmClose(&CcpInfo.fsm); FsmDown(&LcpInfo.fsm); - if (CleaningUp || stay) + if (stay) FsmClose(&LcpInfo.fsm); else FsmOpen(&CcpInfo.fsm); @@ -360,7 +364,7 @@ datalink_Down(struct datalink *dl, int stay) LogPrintf(LogPHASE, "%s: Entering HANGUP state\n", dl->name); dl->state = DATALINK_HANGUP; modem_Offline(dl->physical); - chat_Init(&dl->chat, dl->physical, VarHangupScript, 1); + chat_Init(&dl->chat, dl->physical, dl->script.hangup, 1); } if (stay) { diff --git a/usr.sbin/ppp/datalink.h b/usr.sbin/ppp/datalink.h index dd4cff7b834..2bdaa407e3a 100644 --- a/usr.sbin/ppp/datalink.h +++ b/usr.sbin/ppp/datalink.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: datalink.h,v 1.1.2.1 1998/02/16 00:00:01 brian Exp $ */ #define DATALINK_CLOSED (0) @@ -37,7 +37,14 @@ struct datalink { struct descriptor desc; /* We play either a physical or a chat */ int state; /* Our DATALINK_* state */ struct physical *physical; /* Our link */ + struct chat chat; /* For bringing the link up & down */ + struct { + char dial[SCRIPT_LEN]; /* dial */ + char login[SCRIPT_LEN]; /* login */ + char hangup[SCRIPT_LEN]; /* hangup */ + } script; + struct pppTimer dial_timer; /* For timing between opens & scripts */ int dial_tries; /* try again this number of times */ unsigned reconnect_tries; /* try again this number of times */ diff --git a/usr.sbin/ppp/main.c b/usr.sbin/ppp/main.c index 7a9833779d3..d6aaa24fb58 100644 --- a/usr.sbin/ppp/main.c +++ b/usr.sbin/ppp/main.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: main.c,v 1.121.2.21 1998/02/13 05:10:16 brian Exp $ + * $Id: main.c,v 1.121.2.22 1998/02/16 00:00:31 brian Exp $ * * TODO: * o Add commands for traffic summary, version display, etc. @@ -519,25 +519,12 @@ DoLoop(struct bundle *bundle) { fd_set rfds, wfds, efds; int pri, i, n, nfds; - struct timeval timeout; int qlen; struct tun_data tun; #define rbuff tun.data - if (mode & MODE_DIRECT) { - LogPrintf(LogDEBUG, "Opening modem\n"); - if (modem_Open(bundle2physical(bundle, NULL), bundle) < 0) - return; - LogPrintf(LogPHASE, "Packet mode enabled\n"); - PacketMode(bundle, VarOpenMode); - } else if (mode & MODE_DEDICATED) { - if (!link_IsActive(bundle2link(bundle, NULL))) - while (modem_Open(bundle2physical(bundle, NULL), bundle) < 0) - nointr_sleep(VarReconnectTimer); - } - - timeout.tv_sec = 0; - timeout.tv_usec = 0; + if (mode & (MODE_DIRECT|MODE_DEDICATED)) + bundle_Open(bundle, NULL); if (mode & MODE_BACKGROUND) bundle_Open(bundle, NULL); diff --git a/usr.sbin/ppp/modem.c b/usr.sbin/ppp/modem.c index b222d827eeb..641b9e825db 100644 --- a/usr.sbin/ppp/modem.c +++ b/usr.sbin/ppp/modem.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: modem.c,v 1.77.2.15 1998/02/13 05:10:19 brian Exp $ + * $Id: modem.c,v 1.77.2.16 1998/02/16 00:00:45 brian Exp $ * * TODO: */ @@ -65,6 +65,7 @@ #include "physical.h" #include "prompt.h" #include "chat.h" +#include "datalink.h" #ifndef O_NONBLOCK @@ -888,6 +889,7 @@ modem_ShowStatus(struct cmdargs const *arg) { const char *dev; struct physical *modem = bundle2physical(arg->bundle, NULL); + struct datalink *dl = bundle2datalink(arg->bundle, NULL); #ifdef TIOCOUTQ int nb; #endif @@ -929,9 +931,9 @@ modem_ShowStatus(struct cmdargs const *arg) prompt_Printf(&prompt, "outq: ioctl probe failed: %s\n", strerror(errno)); #endif prompt_Printf(&prompt, "outqlen: %d\n", link_QueueLen(&modem->link)); - prompt_Printf(&prompt, "DialScript = %s\n", VarDialScript); - prompt_Printf(&prompt, "LoginScript = %s\n", VarLoginScript); - prompt_Printf(&prompt, "PhoneNumber(s) = %s\n", VarPhoneList); + prompt_Printf(&prompt, "DialScript = %s\n", dl->script.dial); + prompt_Printf(&prompt, "LoginScript = %s\n", dl->script.login); + prompt_Printf(&prompt, "PhoneNumber(s) = %s\n", dl->script.hangup); prompt_Printf(&prompt, "\n"); throughput_disp(&modem->link.throughput); diff --git a/usr.sbin/ppp/vars.h b/usr.sbin/ppp/vars.h index 7ffe8569897..7ad875d0718 100644 --- a/usr.sbin/ppp/vars.h +++ b/usr.sbin/ppp/vars.h @@ -15,7 +15,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: vars.h,v 1.42.2.3 1998/02/10 03:23:50 brian Exp $ + * $Id: vars.h,v 1.42.2.4 1998/02/16 00:01:12 brian Exp $ * * TODO: */ @@ -82,8 +82,6 @@ struct pppvars { /* The rest are just default initialized in vars.c */ #define DIALUP_REQ 0x01 #define DIALUP_DONE 0x02 - char dial_script[SCRIPT_LEN]; /* Dial script */ - char login_script[SCRIPT_LEN]; /* Login script */ char auth_key[50]; /* PAP/CHAP key */ char auth_name[50]; /* PAP/CHAP system name */ char local_auth_key[50]; /* Local auth passwd */ @@ -96,7 +94,6 @@ struct pppvars { char *next_phone; /* Next phone from the list */ char *alt_phone; /* Next phone from the list */ char shostname[MAXHOSTNAMELEN]; /* Local short Host Name */ - char hangup_script[SCRIPT_LEN]; /* Hangup script before modem is closed */ struct aliasHandlers handler; /* Alias function pointers */ }; @@ -113,9 +110,6 @@ struct pppvars { #endif #define VarOpenMode pppVars.open_mode #define VarLocalAuth pppVars.lauth -#define VarDialScript pppVars.dial_script -#define VarHangupScript pppVars.hangup_script -#define VarLoginScript pppVars.login_script #define VarIdleTimeout pppVars.idle_timeout #define VarLqrTimeout pppVars.lqr_timeout #define VarRetryTimeout pppVars.retry_timeout