diff options
| author | Brian Somers <brian@FreeBSD.org> | 1998-04-30 23:53:56 +0000 |
|---|---|---|
| committer | Brian Somers <brian@FreeBSD.org> | 1998-04-30 23:53:56 +0000 |
| commit | 6f38457323b5d63cb4b6cf0459fa3a2c721b0d10 (patch) | |
| tree | 7c37ecbe36841a82aa8b5e8c8af66e8a0b8b8cd4 /usr.sbin/ppp | |
| parent | 9c281ab21bdef48b9019209705fbdcd51bb7e2a3 (diff) | |
Notes
Diffstat (limited to 'usr.sbin/ppp')
| -rw-r--r-- | usr.sbin/ppp/bundle.c | 147 | ||||
| -rw-r--r-- | usr.sbin/ppp/bundle.h | 3 | ||||
| -rw-r--r-- | usr.sbin/ppp/ccp.c | 23 | ||||
| -rw-r--r-- | usr.sbin/ppp/ccp.h | 3 | ||||
| -rw-r--r-- | usr.sbin/ppp/chat.c | 3 | ||||
| -rw-r--r-- | usr.sbin/ppp/command.c | 17 | ||||
| -rw-r--r-- | usr.sbin/ppp/command.h | 5 | ||||
| -rw-r--r-- | usr.sbin/ppp/datalink.c | 173 | ||||
| -rw-r--r-- | usr.sbin/ppp/datalink.h | 8 | ||||
| -rw-r--r-- | usr.sbin/ppp/defs.c | 21 | ||||
| -rw-r--r-- | usr.sbin/ppp/defs.h | 6 | ||||
| -rw-r--r-- | usr.sbin/ppp/fsm.c | 22 | ||||
| -rw-r--r-- | usr.sbin/ppp/fsm.h | 4 | ||||
| -rw-r--r-- | usr.sbin/ppp/id.c | 14 | ||||
| -rw-r--r-- | usr.sbin/ppp/id.h | 6 | ||||
| -rw-r--r-- | usr.sbin/ppp/ipcp.c | 9 | ||||
| -rw-r--r-- | usr.sbin/ppp/lcp.c | 23 | ||||
| -rw-r--r-- | usr.sbin/ppp/lcp.h | 3 | ||||
| -rw-r--r-- | usr.sbin/ppp/log.c | 7 | ||||
| -rw-r--r-- | usr.sbin/ppp/log.h | 29 | ||||
| -rw-r--r-- | usr.sbin/ppp/main.c | 15 | ||||
| -rw-r--r-- | usr.sbin/ppp/modem.c | 119 | ||||
| -rw-r--r-- | usr.sbin/ppp/modem.h | 4 | ||||
| -rw-r--r-- | usr.sbin/ppp/mp.c | 117 | ||||
| -rw-r--r-- | usr.sbin/ppp/mp.h | 9 | ||||
| -rw-r--r-- | usr.sbin/ppp/physical.c | 16 | ||||
| -rw-r--r-- | usr.sbin/ppp/ppp.8 | 19 | ||||
| -rw-r--r-- | usr.sbin/ppp/systems.c | 4 | ||||
| -rw-r--r-- | usr.sbin/ppp/timer.c | 12 |
29 files changed, 651 insertions, 190 deletions
diff --git a/usr.sbin/ppp/bundle.c b/usr.sbin/ppp/bundle.c index 95d0c1904323..40eebfc291c1 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.63 1998/04/27 01:40:37 brian Exp $ + * $Id: bundle.c,v 1.1.2.64 1998/04/28 01:25:04 brian Exp $ */ #include <sys/types.h> @@ -41,6 +41,7 @@ #include <errno.h> #include <fcntl.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> #include <sys/ioctl.h> #include <termios.h> @@ -192,13 +193,7 @@ bundle_Notify(struct bundle *bundle, char c) } static void -bundle_vLayerUp(void *v, struct fsm *fp) -{ - bundle_LayerUp((struct bundle *)v, fp); -} - -void -bundle_LayerUp(struct bundle *bundle, struct fsm *fp) +bundle_LayerUp(void *v, struct fsm *fp) { /* * The given fsm is now up @@ -207,6 +202,7 @@ bundle_LayerUp(struct bundle *bundle, struct fsm *fp) * If it's an NCP, tell our -background parent to go away. * If it's the first NCP, start the idle timer. */ + struct bundle *bundle = (struct bundle *)v; if (fp->proto == PROTO_LCP) { if (bundle->ncp.mp.active) { @@ -305,8 +301,8 @@ bundle_Close(struct bundle *bundle, const char *name, int staydown) { /* * Please close the given datalink. - * If name == NULL or name is the last datalink, enter TERMINATE phase - * and FsmClose all NCPs (except our MP) + * If name == NULL or name is the last datalink, FsmClose all NCPs + * (except our MP) * If it isn't the last datalink, just Close that datalink. */ @@ -511,7 +507,7 @@ bundle_Create(const char *prefix, struct prompt *prompt, int type) bundle.CleaningUp = 0; bundle.fsm.LayerStart = bundle_LayerStart; - bundle.fsm.LayerUp = bundle_vLayerUp; + bundle.fsm.LayerUp = bundle_LayerUp; bundle.fsm.LayerDown = bundle_LayerDown; bundle.fsm.LayerFinish = bundle_LayerFinish; bundle.fsm.object = &bundle; @@ -524,7 +520,7 @@ bundle_Create(const char *prefix, struct prompt *prompt, int type) bundle.cfg.mtu = DEF_MTU; bundle.phys_type = type; - bundle.links = datalink_Create("deflink", &bundle, &bundle.fsm, type); + bundle.links = datalink_Create("deflink", &bundle, type); if (bundle.links == NULL) { LogPrintf(LogERROR, "Cannot create data link: %s\n", strerror(errno)); close(bundle.tun_fd); @@ -1067,7 +1063,7 @@ bundle_CleanDatalinks(struct bundle *bundle) while (*dlp) if ((*dlp)->state == DATALINK_CLOSED && - (*dlp)->physical->type & (PHYS_STDIN|PHYS_1OFF)) + (*dlp)->physical->type & (PHYS_DIRECT|PHYS_1OFF)) *dlp = datalink_Destroy(*dlp); else dlp = &(*dlp)->next; @@ -1090,15 +1086,128 @@ bundle_GetLabel(struct bundle *bundle) } void -bundle_SendDatalink(struct datalink *dl, int fd) +bundle_ReceiveDatalink(struct bundle *bundle, int fd) { - LogPrintf(LogERROR, "Can't send link yet !\n"); - close(fd); + struct datalink *dl, *ndl; + u_char *buf; + int get, got, vlen; + + /* + * We expect: + * .---------.---------.--------------. + * | ver len | Version | datalink len | + * `---------'---------'--------------' + * We then pass the rest of the stream to datalink. + */ + + LogPrintf(LogPHASE, "Receiving datalink\n"); + + vlen = strlen(Version); + get = sizeof(int) * 2 + vlen; + buf = (u_char *)malloc(get); + got = fullread(fd, buf, get); + if (got != get) { + LogPrintf(LogWARN, "Cannot receive datalink header" + " (got %d bytes, not %d)\n", got, get); + close(fd); + free(buf); + return; + } + if (*(int *)buf != vlen || *(int *)(buf + sizeof(int) + vlen) != sizeof *dl || + memcmp(buf + sizeof(int), Version, vlen)) { + LogPrintf(LogWARN, "Cannot receive datalink, incorrect version\n"); + close(fd); + free(buf); + return; + } + free(buf); + + ndl = datalink_FromBinary(bundle, fd); + if (ndl) { + /* Make sure the name is unique ! */ + do { + for (dl = bundle->links; dl; dl = dl->next) + if (!strcasecmp(ndl->name, dl->name)) { + datalink_Rename(ndl); + break; + } + } while (dl); + + ndl->next = bundle->links; + bundle->links = ndl; + bundle_GenPhysType(bundle); + LogPrintf(LogPHASE, "%s: Created in %s state\n", + ndl->name, datalink_State(ndl)); + datalink_AuthOk(ndl); + } } void -bundle_ReceiveDatalink(struct bundle *bundle, int fd) +bundle_SendDatalink(struct datalink *dl, int fd) { - LogPrintf(LogERROR, "Can't receive link yet !\n"); - close(fd); + int len, link_fd, err; + struct datalink **pdl; + struct bundle *bundle = dl->bundle; + char procname[100]; + + /* + * We send: + * .---------.---------.--------------. + * | ver len | Version | datalink len | + * `---------'---------'--------------' + * We then pass the rest of the stream to datalink. + */ + + LogPrintf(LogPHASE, "Transmitting datalink %s\n", dl->name); + + /* First, un-hook the datalink */ + for (pdl = &bundle->links; *pdl; pdl = &(*pdl)->next) + if (*pdl == dl) { + *pdl = dl->next; + dl->next = NULL; + break; + } + + /* Write our bit of the data */ + err = 0; + len = strlen(Version); + if (write(fd, &len, sizeof len) != sizeof len) + err++; + if (write(fd, Version, len) != len) + err++; + len = sizeof(struct datalink); + if (write(fd, &len, sizeof len) != sizeof len) + err++; + + if (err) { + LogPrintf(LogERROR, "Failed sending version\n"); + close(fd); + fd = -1; + } + + link_fd = datalink_ToBinary(dl, fd); + + if (link_fd != -1) { + switch (fork()) { + case 0: + snprintf(procname, sizeof procname, "%s <-> %s", + dl->name, *dl->physical->name.base ? + dl->physical->name.base : "network"); + setsid(); + dup2(link_fd, STDIN_FILENO); + dup2(fd, STDOUT_FILENO); + dup2(fd, STDERR_FILENO); + setuid(geteuid()); + /* signals are defaulted by the exec */ + execlp(PPPMPIPE, procname, NULL); + LogPrintf(LogERROR, "exec: %s: %s\n", PPPMPIPE, strerror(errno)); + exit(1); + break; + case -1: + LogPrintf(LogERROR, "fork: %s\n", strerror(errno)); + /* Fall through */ + default: + break; + } + } } diff --git a/usr.sbin/ppp/bundle.h b/usr.sbin/ppp/bundle.h index 48254523f756..59ae8d0c20ac 100644 --- a/usr.sbin/ppp/bundle.h +++ b/usr.sbin/ppp/bundle.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: bundle.h,v 1.1.2.32 1998/04/23 03:22:45 brian Exp $ + * $Id: bundle.h,v 1.1.2.33 1998/04/28 01:25:05 brian Exp $ */ #define PHASE_DEAD 0 /* Link is dead */ @@ -121,7 +121,6 @@ extern void bundle_StartIdleTimer(struct bundle *); extern void bundle_SetIdleTimer(struct bundle *, int); extern void bundle_StopIdleTimer(struct bundle *); extern int bundle_RemainingIdleTime(struct bundle *); -extern void bundle_LayerUp(struct bundle *, struct fsm *); extern int bundle_IsDead(struct bundle *); extern struct datalink *bundle2datalink(struct bundle *, const char *); diff --git a/usr.sbin/ppp/ccp.c b/usr.sbin/ppp/ccp.c index 2a1867bfc29a..b4a23adec951 100644 --- a/usr.sbin/ppp/ccp.c +++ b/usr.sbin/ppp/ccp.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: ccp.c,v 1.30.2.39 1998/04/25 10:48:49 brian Exp $ + * $Id: ccp.c,v 1.30.2.40 1998/04/28 01:25:07 brian Exp $ * * TODO: * o Support other compression protocols @@ -65,7 +65,7 @@ static void CcpDecodeConfig(struct fsm *, u_char *, int, int, struct fsm_decode *); static void CcpLayerStart(struct fsm *); static void CcpLayerFinish(struct fsm *); -static void CcpLayerUp(struct fsm *); +static int CcpLayerUp(struct fsm *); static void CcpLayerDown(struct fsm *); static void CcpInitRestartCounter(struct fsm *); static void CcpRecvResetReq(struct fsm *); @@ -85,6 +85,9 @@ static struct fsm_callbacks ccp_Callbacks = { CcpRecvResetAck }; +static const char *ccp_TimerNames[] = + {"CCP restart", "CCP openmode", "CCP stopped"}; + static char const *cftypes[] = { /* Check out the latest ``Compression Control Protocol'' rfc (rfc1962.txt) */ "OUI", /* 0: OUI */ @@ -155,15 +158,22 @@ ccp_ReportStatus(struct cmdargs const *arg) } void +ccp_SetupCallbacks(struct ccp *ccp) +{ + ccp->fsm.fn = &ccp_Callbacks; + ccp->fsm.FsmTimer.name = ccp_TimerNames[0]; + ccp->fsm.OpenTimer.name = ccp_TimerNames[1]; + ccp->fsm.StoppedTimer.name = ccp_TimerNames[2]; +} + +void ccp_Init(struct ccp *ccp, struct bundle *bundle, struct link *l, const struct fsm_parent *parent) { /* Initialise ourselves */ - static const char *timer_names[] = - {"CCP restart", "CCP openmode", "CCP stopped"}; fsm_Init(&ccp->fsm, "CCP", PROTO_CCP, 1, CCP_MAXCODE, 10, LogCCP, - bundle, l, parent, &ccp_Callbacks, timer_names); + bundle, l, parent, &ccp_Callbacks, ccp_TimerNames); ccp->cfg.deflate.in.winsize = 0; ccp->cfg.deflate.out.winsize = 15; @@ -328,7 +338,7 @@ CcpLayerDown(struct fsm *fp) /* * Called when CCP has reached the OPEN state */ -static void +static int CcpLayerUp(struct fsm *fp) { /* We're now up */ @@ -360,6 +370,7 @@ CcpLayerUp(struct fsm *fp) LogPrintf(LogCCP, "%s: Out = %s[%d], In = %s[%d]\n", fp->link->name, protoname(ccp->my_proto), ccp->my_proto, protoname(ccp->his_proto), ccp->his_proto); + return 1; } static void diff --git a/usr.sbin/ppp/ccp.h b/usr.sbin/ppp/ccp.h index cb195fe309ef..5bcea265df74 100644 --- a/usr.sbin/ppp/ccp.h +++ b/usr.sbin/ppp/ccp.h @@ -15,7 +15,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: ccp.h,v 1.14.2.17 1998/04/16 00:25:51 brian Exp $ + * $Id: ccp.h,v 1.14.2.18 1998/04/24 19:15:24 brian Exp $ * * TODO: */ @@ -124,3 +124,4 @@ extern int ccp_ReportStatus(struct cmdargs const *); extern int ccp_Compress(struct ccp *, struct link *, int, u_short, struct mbuf *); extern struct mbuf *ccp_Decompress(struct ccp *, u_short *, struct mbuf *); extern u_short ccp_Proto(struct ccp *); +extern void ccp_SetupCallbacks(struct ccp *); diff --git a/usr.sbin/ppp/chat.c b/usr.sbin/ppp/chat.c index 039f2f694172..49698b2cfb2a 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.25 1998/04/19 15:24:37 brian Exp $ + * $Id: chat.c,v 1.44.2.26 1998/04/28 01:25:09 brian Exp $ */ #include <sys/types.h> @@ -745,6 +745,7 @@ ExecStr(struct physical *physical, char *command, char *out, int olen) if ((nb = open("/dev/tty", O_RDWR)) > 3) { dup2(nb, 3); close(nb); + fcntl(3, F_SETFD, 0); /* Clear close-on-exec flag */ } setuid(geteuid()); execvp(vector[0], vector); diff --git a/usr.sbin/ppp/command.c b/usr.sbin/ppp/command.c index 3d55ab5e3288..72ac81024fbf 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.72 1998/04/25 10:48:53 brian Exp $ + * $Id: command.c,v 1.131.2.73 1998/04/27 01:40:38 brian Exp $ * */ #include <sys/types.h> @@ -122,6 +122,9 @@ #define NEG_VJCOMP 49 #define NEG_DNS 50 +const char Version[] = "2.0-beta"; +const char VersionDate[] = "$Date: 1998/04/27 01:40:38 $"; + static int ShowCommand(struct cmdargs const *); static int TerminalCommand(struct cmdargs const *); static int QuitCommand(struct cmdargs const *); @@ -308,7 +311,7 @@ ShellCommand(struct cmdargs const *arg, int bg) } if ((shpid = fork()) == 0) { - int dtablesize, i, fd; + int i, fd; if ((shell = getenv("SHELL")) == 0) shell = _PATH_BSHELL; @@ -329,9 +332,6 @@ ShellCommand(struct cmdargs const *arg, int bg) for (i = 0; i < 3; i++) dup2(fd, i); - for (dtablesize = getdtablesize(), i = 3; i < dtablesize; i++) - close(i); - setuid(geteuid()); if (arg->argc > arg->argn) { /* substitute pseudo args */ @@ -440,7 +440,7 @@ static struct cmdtab const Commands[] = { "Password for manipulation", "passwd LocalPassword"}, {"quit", "bye", QuitCommand, LOCAL_AUTH | LOCAL_NO_AUTH, "Quit PPP program", "quit|bye [all]"}, - {"remove", NULL, RemoveCommand, LOCAL_AUTH | LOCAL_CX, + {"remove", "rm", RemoveCommand, LOCAL_AUTH | LOCAL_CX, "Remove a link", "remove"}, {"save", NULL, SaveCommand, LOCAL_AUTH, "Save settings", "save"}, @@ -508,10 +508,7 @@ ShowStopped(struct cmdargs const *arg) static int ShowVersion(struct cmdargs const *arg) { - static char VarVersion[] = "PPP Version 2.0-beta"; - static char VarLocalVersion[] = "$Date: 1998/04/25 10:48:53 $"; - - prompt_Printf(arg->prompt, "%s - %s \n", VarVersion, VarLocalVersion); + prompt_Printf(arg->prompt, "PPP Version %s - %s\n", Version, VersionDate); return 0; } diff --git a/usr.sbin/ppp/command.h b/usr.sbin/ppp/command.h index 1bd0b37ebfb3..d9a4dc340d48 100644 --- a/usr.sbin/ppp/command.h +++ b/usr.sbin/ppp/command.h @@ -15,7 +15,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: command.h,v 1.12.2.10 1998/04/14 23:17:03 brian Exp $ + * $Id: command.h,v 1.12.2.11 1998/04/16 00:25:55 brian Exp $ * * TODO: */ @@ -51,6 +51,9 @@ struct cmdtab { #define IsAccepted(x) ((x) & NEG_ACCEPTED) #define IsEnabled(x) ((x) & NEG_ENABLED) +extern const char Version[]; +extern const char VersionDate[]; + extern int IsInteractive(struct prompt *); extern void InterpretCommand(char *, int, int *, char ***); extern void RunCommand(struct bundle *, int, char const *const *, diff --git a/usr.sbin/ppp/datalink.c b/usr.sbin/ppp/datalink.c index f8b81dd49427..3d939d84dfb5 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.49 1998/04/28 01:25:11 brian Exp $ + * $Id: datalink.c,v 1.1.2.50 1998/04/30 23:52:53 brian Exp $ */ #include <sys/types.h> @@ -32,10 +32,12 @@ #include <netinet/ip.h> #include <sys/un.h> +#include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <termios.h> +#include <unistd.h> #include "mbuf.h" #include "log.h" @@ -113,7 +115,7 @@ datalink_HangupDone(struct datalink *dl) dl->phone.chosen = "N/A"; if (dl->bundle->CleaningUp || - (dl->physical->type == PHYS_STDIN) || + (dl->physical->type == PHYS_DIRECT) || ((!dl->dial_tries || (dl->dial_tries < 0 && !dl->reconnect_tries)) && !(dl->physical->type & (PHYS_PERM|PHYS_DEDICATED)))) { LogPrintf(LogPHASE, "%s: Entering CLOSED state\n", dl->name); @@ -207,7 +209,7 @@ datalink_UpdateSet(struct descriptor *d, fd_set *r, fd_set *w, fd_set *e, result = 0; switch (dl->state) { case DATALINK_CLOSED: - if ((dl->physical->type & (PHYS_STDIN|PHYS_DEDICATED|PHYS_1OFF)) && + if ((dl->physical->type & (PHYS_DIRECT|PHYS_DEDICATED|PHYS_1OFF)) && !bundle_IsDead(dl->bundle)) /* * Our first time in - DEDICATED never comes down, and STDIN & 1OFF @@ -529,8 +531,7 @@ datalink_LayerFinish(void *v, struct fsm *fp) } struct datalink * -datalink_Create(const char *name, struct bundle *bundle, - const struct fsm_parent *parent, int type) +datalink_Create(const char *name, struct bundle *bundle, int type) { struct datalink *dl; @@ -575,7 +576,7 @@ datalink_Create(const char *name, struct bundle *bundle, dl->name = strdup(name); peerid_Init(&dl->peer); - dl->parent = parent; + dl->parent = &bundle->fsm; dl->fsmp.LayerStart = datalink_LayerStart; dl->fsmp.LayerUp = datalink_LayerUp; dl->fsmp.LayerDown = datalink_LayerDown; @@ -685,7 +686,7 @@ datalink_Destroy(struct datalink *dl) void datalink_Up(struct datalink *dl, int runscripts, int packetmode) { - if (dl->physical->type & (PHYS_STDIN|PHYS_DEDICATED)) + if (dl->physical->type & (PHYS_DIRECT|PHYS_DEDICATED)) /* Ignore scripts */ runscripts = 0; @@ -697,7 +698,7 @@ datalink_Up(struct datalink *dl, int runscripts, int packetmode) bundle_NewPhase(dl->bundle, PHASE_ESTABLISH); dl->state = DATALINK_OPENING; dl->reconnect_tries = - dl->physical->type == PHYS_STDIN ? 0 : dl->cfg.reconnect.max; + dl->physical->type == PHYS_DIRECT ? 0 : dl->cfg.reconnect.max; dl->dial_tries = dl->cfg.dial.max; dl->script.run = runscripts; dl->script.packetmode = packetmode; @@ -913,3 +914,159 @@ datalink_State(struct datalink *dl) return "unknown"; return states[dl->state]; } + +struct datalink * +datalink_FromBinary(struct bundle *bundle, int fd) +{ + struct datalink *dl = (struct datalink *)malloc(sizeof(struct datalink)); + u_int retry; + int got, get; + + /* + * We expect: + * .----------.----------.------.--------------. + * | datalink | name len | name | physical len | + * `----------'----------'------'--------------' + * We then pass the rest of the stream to physical. + */ + + got = fullread(fd, dl, sizeof *dl); + if (got != sizeof *dl) { + LogPrintf(LogWARN, "Cannot receive datalink" + " (got %d bytes, not %d)\n", got, sizeof *dl); + close(fd); + free(dl); + return NULL; + } + + got = fullread(fd, &get, sizeof get); + if (got != sizeof get) { + LogPrintf(LogWARN, "Cannot receive name length" + " (got %d bytes, not %d)\n", got, sizeof get); + close(fd); + free(dl); + return NULL; + } + + dl->name = (char *)malloc(get + 1); + got = fullread(fd, dl->name, get); + if (got != get) { + LogPrintf(LogWARN, "Cannot receive name" + " (got %d bytes, not %d)\n", got, get); + close(fd); + free(dl->name); + free(dl); + return NULL; + } + dl->name[get] = '\0'; + + dl->desc.type = DATALINK_DESCRIPTOR; + dl->desc.next = NULL; + dl->desc.UpdateSet = datalink_UpdateSet; + dl->desc.IsSet = datalink_IsSet; + dl->desc.Read = datalink_Read; + dl->desc.Write = datalink_Write; + + mp_linkInit(&dl->mp); + *dl->phone.list = '\0'; + dl->phone.next = NULL; + dl->phone.alt = NULL; + dl->phone.chosen = "N/A"; + + dl->bundle = bundle; + dl->next = NULL; + memset(&dl->dial_timer, '\0', sizeof dl->dial_timer); + dl->dial_tries = 0; + dl->reconnect_tries = 0; + dl->parent = &bundle->fsm; + dl->fsmp.LayerStart = datalink_LayerStart; + dl->fsmp.LayerUp = datalink_LayerUp; + dl->fsmp.LayerDown = datalink_LayerDown; + dl->fsmp.LayerFinish = datalink_LayerFinish; + dl->fsmp.object = dl; + + retry = dl->pap.cfg.fsmretry; + authinfo_Init(&dl->pap); + dl->pap.cfg.fsmretry = retry; + + retry = dl->chap.auth.cfg.fsmretry; + authinfo_Init(&dl->chap.auth); + dl->chap.auth.cfg.fsmretry = retry; + + got = fullread(fd, &get, sizeof get); + if (got != sizeof get) { + LogPrintf(LogWARN, "Cannot receive physical length" + " (got %d bytes, not %d)\n", got, sizeof get); + close(fd); + free(dl->name); + free(dl); + dl = NULL; + } else if ((dl->physical = modem_FromBinary(dl, fd)) == NULL) { + free(dl->name); + free(dl); + dl = NULL; + } else + chat_Init(&dl->chat, dl->physical, NULL, 1, NULL); + + return dl; +} + +int +datalink_ToBinary(struct datalink *dl, int fd) +{ + int len, link_fd; + + /* + * We send: + * .----------.----------.------.--------------. + * | datalink | name len | name | physical len | + * `----------'----------'------'--------------' + */ + + if (fd != -1) { + int err; + + err = 0; + if (write(fd, dl, sizeof *dl) != sizeof *dl) + err++; + len = strlen(dl->name); + if (write(fd, &len, sizeof(int)) != sizeof(int)) + err++; + if (write(fd, dl->name, len) != len) + err++; + len = sizeof(struct physical); + if (write(fd, &len, sizeof(int)) != sizeof(int)) + err++; + + if (err) { + LogPrintf(LogERROR, "Failed sending datalink\n"); + close(fd); + fd = -1; + } + } + + link_fd = modem_ToBinary(dl->physical, fd); + + free(dl->name); + free(dl); + + return link_fd; +} + +void +datalink_Rename(struct datalink *dl) +{ + int f, n; + char *name; + + n = strlen(dl->name); + name = (char *)malloc(n+3); + for (f = n - 1; f >= 0; f--) + if (!isdigit(dl->name[f])) + break; + n = sprintf(name, "%.*s-", dl->name[f] == '-' ? f : f + 1, dl->name); + sprintf(name + n, "%d", atoi(dl->name + f + 1) + 1); + LogPrintf(LogPHASE, "Rename link %s to %s\n", dl->name, name); + free(dl->name); + dl->physical->link.name = dl->name = name; +} diff --git a/usr.sbin/ppp/datalink.h b/usr.sbin/ppp/datalink.h index 4600a1720ecd..c8172c0297dd 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: datalink.h,v 1.1.2.18 1998/04/18 01:01:20 brian Exp $ + * $Id: datalink.h,v 1.1.2.19 1998/04/24 19:16:02 brian Exp $ */ #define DATALINK_CLOSED (0) @@ -104,9 +104,10 @@ struct datalink { #define descriptor2datalink(d) \ ((d)->type == DATALINK_DESCRIPTOR ? (struct datalink *)(d) : NULL) -extern struct datalink *datalink_Create(const char *name, struct bundle *, - const struct fsm_parent *, int); +extern struct datalink *datalink_Create(const char *name, struct bundle *, int); extern struct datalink *datalink_Clone(struct datalink *, const char *); +extern struct datalink *datalink_FromBinary(struct bundle *, int); +extern int datalink_ToBinary(struct datalink *, int); extern struct datalink *datalink_Destroy(struct datalink *); extern void datalink_GotAuthname(struct datalink *, const char *, int); extern void datalink_Up(struct datalink *, int, int); @@ -119,3 +120,4 @@ extern int datalink_Show(struct cmdargs const *); extern int datalink_SetRedial(struct cmdargs const *); extern int datalink_SetReconnect(struct cmdargs const *); extern const char *datalink_State(struct datalink *); +extern void datalink_Rename(struct datalink *); diff --git a/usr.sbin/ppp/defs.c b/usr.sbin/ppp/defs.c index aaf746d55bd5..e55c648454cc 100644 --- a/usr.sbin/ppp/defs.c +++ b/usr.sbin/ppp/defs.c @@ -23,11 +23,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: defs.c,v 1.11.4.8 1998/04/10 13:19:07 brian Exp $ + * $Id: defs.c,v 1.11.4.9 1998/04/23 03:22:50 brian Exp $ */ #include <stdlib.h> +#include <sys/errno.h> #include <time.h> #include <unistd.h> @@ -47,3 +48,21 @@ randinit() srandom(time(NULL)^getpid()); #endif } + +ssize_t +fullread(int fd, void *v, size_t n) +{ + size_t got, total; + + for (total = 0; total < n; total += got) + switch ((got = read(fd, (char *)v + total, n - total))) { + case 0: + return total; + case -1: + if (errno == EINTR) + got = 0; + else + return -1; + } + return total; +} diff --git a/usr.sbin/ppp/defs.h b/usr.sbin/ppp/defs.h index 79c7ad4b531a..f7197b112d77 100644 --- a/usr.sbin/ppp/defs.h +++ b/usr.sbin/ppp/defs.h @@ -15,7 +15,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: defs.h,v 1.29.2.13 1998/04/10 13:19:07 brian Exp $ + * $Id: defs.h,v 1.29.2.14 1998/04/23 03:22:51 brian Exp $ * * TODO: */ @@ -32,6 +32,7 @@ #endif #define TUN_PREFIX "/dev/tun" /* tunnel device prefix */ +#define PPPMPIPE "pppmpipe" /* Multilink pipe program name */ #define MODEM_SPEED B38400 /* tty speed */ #define SERVER_PORT 3000 /* Base server port no. */ @@ -71,10 +72,11 @@ /* physical::type values (OR'd in bundle::phys_type) */ #define PHYS_MANUAL 1 /* Manual link */ #define PHYS_DEMAND 2 /* Dial-on-demand link (-auto) */ -#define PHYS_STDIN 4 /* Incoming link (-direct) */ +#define PHYS_DIRECT 4 /* Incoming link (-direct) */ #define PHYS_DEDICATED 8 /* Dedicated link (-dedicated) */ #define PHYS_PERM 16 /* Dial immediately, stay connected (-ddial) */ #define PHYS_1OFF 32 /* Dial immediately, delete when done. (-background) */ #define PHYS_ALL 63 extern void randinit(void); +extern ssize_t fullread(int, void *, size_t); diff --git a/usr.sbin/ppp/fsm.c b/usr.sbin/ppp/fsm.c index a0964ed767ac..cf587a20246f 100644 --- a/usr.sbin/ppp/fsm.c +++ b/usr.sbin/ppp/fsm.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: fsm.c,v 1.27.2.32 1998/04/24 19:15:38 brian Exp $ + * $Id: fsm.c,v 1.27.2.33 1998/04/28 01:25:15 brian Exp $ * * TODO: */ @@ -507,8 +507,14 @@ FsmRecvConfigReq(struct fsm *fp, struct fsmheader *lhp, struct mbuf *bp) case ST_ACKRCVD: if (ackaction) { NewState(fp, ST_OPENED); - (*fp->fn->LayerUp)(fp); - (*fp->parent->LayerUp)(fp->parent->object, fp); + if ((*fp->fn->LayerUp)(fp)) + (*fp->parent->LayerUp)(fp->parent->object, fp); + else { + (*fp->fn->LayerDown)(fp); + FsmInitRestartCounter(fp); + FsmSendTerminateReq(fp); + NewState(fp, ST_CLOSING); + } } break; case ST_ACKSENT: @@ -542,8 +548,14 @@ FsmRecvConfigAck(struct fsm *fp, struct fsmheader *lhp, struct mbuf *bp) case ST_ACKSENT: FsmInitRestartCounter(fp); NewState(fp, ST_OPENED); - (*fp->fn->LayerUp)(fp); - (*fp->parent->LayerUp)(fp->parent->object, fp); + if ((*fp->fn->LayerUp)(fp)) + (*fp->parent->LayerUp)(fp->parent->object, fp); + else { + (*fp->fn->LayerDown)(fp); + FsmInitRestartCounter(fp); + FsmSendTerminateReq(fp); + NewState(fp, ST_CLOSING); + } break; case ST_OPENED: (*fp->fn->LayerDown)(fp); diff --git a/usr.sbin/ppp/fsm.h b/usr.sbin/ppp/fsm.h index d32f31848a66..39e5ac1c1e3f 100644 --- a/usr.sbin/ppp/fsm.h +++ b/usr.sbin/ppp/fsm.h @@ -15,7 +15,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: fsm.h,v 1.16.2.13 1998/04/03 19:21:21 brian Exp $ + * $Id: fsm.h,v 1.16.2.14 1998/04/07 00:53:42 brian Exp $ * * TODO: */ @@ -54,7 +54,7 @@ struct fsm_decode { }; struct fsm_callbacks { - void (*LayerUp) (struct fsm *); /* Layer is now up (tlu) */ + int (*LayerUp) (struct fsm *); /* Layer is now up (tlu) */ void (*LayerDown) (struct fsm *); /* About to come down (tld) */ void (*LayerStart) (struct fsm *); /* Layer about to start up (tls) */ void (*LayerFinish) (struct fsm *); /* Layer now down (tlf) */ diff --git a/usr.sbin/ppp/id.c b/usr.sbin/ppp/id.c index 0f49f9f13d7a..c76d5d03cd65 100644 --- a/usr.sbin/ppp/id.c +++ b/usr.sbin/ppp/id.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: id.c,v 1.6.4.7 1998/04/25 10:49:01 brian Exp $ + * $Id: id.c,v 1.6.4.8 1998/04/28 01:25:19 brian Exp $ */ #include <sys/types.h> @@ -215,27 +215,27 @@ ID0logout(const char *device) } int -ID0bind_un(int s, const struct sockaddr_un *name, int namelen) +ID0bind_un(int s, const struct sockaddr_un *name) { int result; ID0set0(); - result = bind(s, (const struct sockaddr *)name, namelen); + result = bind(s, (const struct sockaddr *)name, sizeof *name); LogPrintf(LogID0, "%d = bind(%d, \"%s\", %d)\n", - result, s, name->sun_path, namelen); + result, s, name->sun_path, sizeof *name); ID0setuser(); return result; } int -ID0connect_un(int s, const struct sockaddr_un *name, int namelen) +ID0connect_un(int s, const struct sockaddr_un *name) { int result; ID0set0(); - result = connect(s, (const struct sockaddr *)name, namelen); + result = connect(s, (const struct sockaddr *)name, sizeof *name); LogPrintf(LogID0, "%d = connect(%d, \"%s\", %d)\n", - result, s, name->sun_path, namelen); + result, s, name->sun_path, sizeof *name); ID0setuser(); return result; } diff --git a/usr.sbin/ppp/id.h b/usr.sbin/ppp/id.h index ee3ae91210ed..2b02bb7ac35a 100644 --- a/usr.sbin/ppp/id.h +++ b/usr.sbin/ppp/id.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: id.h,v 1.3.4.2 1998/04/17 22:05:19 brian Exp $ + * $Id: id.h,v 1.3.4.3 1998/04/28 01:25:20 brian Exp $ */ struct utmp; @@ -41,5 +41,5 @@ extern int ID0uu_lock(const char *); extern int ID0uu_unlock(const char *); extern void ID0login(struct utmp *); extern void ID0logout(const char *); -extern int ID0bind_un(int, const struct sockaddr_un *, int); -extern int ID0connect_un(int, const struct sockaddr_un *, int); +extern int ID0bind_un(int, const struct sockaddr_un *); +extern int ID0connect_un(int, const struct sockaddr_un *); diff --git a/usr.sbin/ppp/ipcp.c b/usr.sbin/ppp/ipcp.c index c077cec511b7..89624ac2f3e8 100644 --- a/usr.sbin/ppp/ipcp.c +++ b/usr.sbin/ppp/ipcp.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: ipcp.c,v 1.50.2.46 1998/04/25 10:49:09 brian Exp $ + * $Id: ipcp.c,v 1.50.2.47 1998/04/28 01:25:26 brian Exp $ * * TODO: * o More RFC1772 backwoard compatibility @@ -81,7 +81,7 @@ struct compreq { u_char compcid; }; -static void IpcpLayerUp(struct fsm *); +static int IpcpLayerUp(struct fsm *); static void IpcpLayerDown(struct fsm *); static void IpcpLayerStart(struct fsm *); static void IpcpLayerFinish(struct fsm *); @@ -684,7 +684,7 @@ IpcpLayerDown(struct fsm *fp) IpcpCleanInterface(ipcp); } -static void +static int IpcpLayerUp(struct fsm *fp) { /* We're now up */ @@ -700,7 +700,7 @@ IpcpLayerUp(struct fsm *fp) if (ipcp_SetIPaddress(fp->bundle, ipcp->my_ip, ipcp->peer_ip, 0) < 0) { LogPrintf(LogERROR, "IpcpLayerUp: unable to set ip address\n"); - return; + return 0; } #ifndef NOALIAS @@ -725,6 +725,7 @@ IpcpLayerUp(struct fsm *fp) throughput_start(&ipcp->throughput, "IPCP throughput", Enabled(fp->bundle, OPT_THROUGHPUT)); bundle_DisplayPrompt(fp->bundle); + return 1; } static int diff --git a/usr.sbin/ppp/lcp.c b/usr.sbin/ppp/lcp.c index a79fad28970b..8d498099b3ec 100644 --- a/usr.sbin/ppp/lcp.c +++ b/usr.sbin/ppp/lcp.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: lcp.c,v 1.55.2.49 1998/04/25 10:49:12 brian Exp $ + * $Id: lcp.c,v 1.55.2.50 1998/04/28 01:25:27 brian Exp $ * * TODO: * o Limit data field length by MRU @@ -71,7 +71,7 @@ struct lqrreq { u_long period; /* Reporting interval */ }; -static void LcpLayerUp(struct fsm *); +static int LcpLayerUp(struct fsm *); static void LcpLayerDown(struct fsm *); static void LcpLayerStart(struct fsm *); static void LcpLayerFinish(struct fsm *); @@ -96,6 +96,9 @@ static struct fsm_callbacks lcp_Callbacks = { NullRecvResetAck }; +static const char *lcp_TimerNames[] = + {"LCP restart", "LCP openmode", "LCP stopped"}; + static const char *cftypes[] = { /* Check out the latest ``Assigned numbers'' rfc (rfc1700.txt) */ "???", @@ -185,16 +188,23 @@ GenerateMagic(void) } void +lcp_SetupCallbacks(struct lcp *lcp) +{ + lcp->fsm.fn = &lcp_Callbacks; + lcp->fsm.FsmTimer.name = lcp_TimerNames[0]; + lcp->fsm.OpenTimer.name = lcp_TimerNames[1]; + lcp->fsm.StoppedTimer.name = lcp_TimerNames[2]; +} + +void lcp_Init(struct lcp *lcp, struct bundle *bundle, struct link *l, const struct fsm_parent *parent) { /* Initialise ourselves */ int mincode = parent ? 1 : LCP_MINMPCODE; - static const char *timer_names[] = - {"LCP restart", "LCP openmode", "LCP stopped"}; fsm_Init(&lcp->fsm, "LCP", PROTO_LCP, mincode, LCP_MAXCODE, 10, LogLCP, - bundle, l, parent, &lcp_Callbacks, timer_names); + bundle, l, parent, &lcp_Callbacks, lcp_TimerNames); lcp->cfg.mru = DEF_MRU; lcp->cfg.accmap = 0; @@ -377,7 +387,7 @@ LcpLayerFinish(struct fsm *fp) LogPrintf(LogLCP, "%s: LcpLayerFinish\n", fp->link->name); } -static void +static int LcpLayerUp(struct fsm *fp) { /* We're now up */ @@ -388,6 +398,7 @@ LcpLayerUp(struct fsm *fp) async_SetLinkParams(&p->async, lcp); StartLqm(lcp); hdlc_StartTimer(&p->hdlc); + return 1; } static void diff --git a/usr.sbin/ppp/lcp.h b/usr.sbin/ppp/lcp.h index 101b4e9af338..bdfdb74aa1ce 100644 --- a/usr.sbin/ppp/lcp.h +++ b/usr.sbin/ppp/lcp.h @@ -15,7 +15,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: lcp.h,v 1.16.2.20 1998/04/16 00:26:06 brian Exp $ + * $Id: lcp.h,v 1.16.2.21 1998/04/23 03:22:56 brian Exp $ * * TODO: */ @@ -113,3 +113,4 @@ extern void lcp_Setup(struct lcp *, int); extern void lcp_SendProtoRej(struct lcp *, u_char *, int); extern int lcp_ReportStatus(struct cmdargs const *); extern void LcpInput(struct lcp *, struct mbuf *); +extern void lcp_SetupCallbacks(struct lcp *); diff --git a/usr.sbin/ppp/log.c b/usr.sbin/ppp/log.c index 730507a7691d..95db73531580 100644 --- a/usr.sbin/ppp/log.c +++ b/usr.sbin/ppp/log.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: log.c,v 1.25.2.10 1998/04/24 19:16:05 brian Exp $ + * $Id: log.c,v 1.25.2.11 1998/04/25 10:49:20 brian Exp $ */ #include <sys/types.h> @@ -47,6 +47,7 @@ static const char *LogNames[] = { "Command", "Connect", "Debug", + "Timer", "HDLC", "ID0", "IPCP", @@ -107,7 +108,9 @@ static int syslogLevel(int lev) { switch (lev) { - case LogDEBUG:return LOG_DEBUG; + case LogDEBUG: + case LogTIMER: + return LOG_DEBUG; case LogWARN: return LOG_WARNING; case LogERROR: diff --git a/usr.sbin/ppp/log.h b/usr.sbin/ppp/log.h index 2a834fba7be2..35796c36d8d1 100644 --- a/usr.sbin/ppp/log.h +++ b/usr.sbin/ppp/log.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: log.h,v 1.18.2.4 1998/04/19 23:08:35 brian Exp $ + * $Id: log.h,v 1.18.2.5 1998/04/24 19:15:44 brian Exp $ */ #define LogMIN (1) @@ -33,19 +33,20 @@ #define LogCOMMAND (4) #define LogCONNECT (5) #define LogDEBUG (6) /* syslog(LOG_DEBUG, ....) */ -#define LogHDLC (7) -#define LogID0 (8) -#define LogIPCP (9) -#define LogLCP (10) -#define LogLQM (11) -#define LogPHASE (12) -#define LogTCPIP (13) -#define LogTUN (14) /* If set, tun%d is output with each message */ -#define LogMAXCONF (14) -#define LogWARN (15) /* Sent to VarTerm else syslog(LOG_WARNING, ) */ -#define LogERROR (16) /* syslog(LOG_ERR, ....), + sent to VarTerm */ -#define LogALERT (17) /* syslog(LOG_ALERT, ....) */ -#define LogMAX (17) +#define LogTIMER (7) /* syslog(LOG_DEBUG, ....) */ +#define LogHDLC (8) +#define LogID0 (9) +#define LogIPCP (10) +#define LogLCP (11) +#define LogLQM (12) +#define LogPHASE (13) +#define LogTCPIP (14) +#define LogTUN (15) /* If set, tun%d is output with each message */ +#define LogMAXCONF (15) +#define LogWARN (16) /* Sent to VarTerm else syslog(LOG_WARNING, ) */ +#define LogERROR (17) /* syslog(LOG_ERR, ....), + sent to VarTerm */ +#define LogALERT (18) /* syslog(LOG_ALERT, ....) */ +#define LogMAX (18) struct mbuf; struct cmdargs; diff --git a/usr.sbin/ppp/main.c b/usr.sbin/ppp/main.c index 8d70a626f9bf..7233fd5b7bea 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.51 1998/04/25 10:49:26 brian Exp $ + * $Id: main.c,v 1.121.2.52 1998/04/28 01:25:30 brian Exp $ * * TODO: */ @@ -216,7 +216,7 @@ ProcessArgs(int argc, char **argv, int *mode) *mode = PHYS_1OFF; labelrequired = 1; } else if (strcmp(cp, "direct") == 0) - *mode = PHYS_STDIN; + *mode = PHYS_DIRECT; else if (strcmp(cp, "dedicated") == 0) *mode = PHYS_DEDICATED; else if (strcmp(cp, "ddial") == 0) { @@ -297,7 +297,7 @@ main(int argc, char **argv) #endif /* Allow output for the moment (except in direct mode) */ - if (mode == PHYS_STDIN) + if (mode == PHYS_DIRECT) prompt = NULL; else { const char *m; @@ -338,7 +338,7 @@ main(int argc, char **argv) if (!ValidSystem(label, prompt, mode)) { fprintf(stderr, "You may not use ppp in this mode with this label\n"); - if (mode == PHYS_STDIN) { + if (mode == PHYS_DIRECT) { const char *l; l = label ? label : "default"; LogPrintf(LogWARN, "Label %s rejected -direct connection\n", l); @@ -393,7 +393,7 @@ main(int argc, char **argv) } if (mode != PHYS_MANUAL) { - if (mode != PHYS_STDIN) { + if (mode != PHYS_DIRECT) { int bgpipe[2]; pid_t bgpid; @@ -498,10 +498,11 @@ DoLoop(struct bundle *bundle, struct prompt *prompt) handle_signals(); - descriptor_UpdateSet(&bundle->desc, &rfds, &wfds, &efds, &nfds); - descriptor_UpdateSet(&server.desc, &rfds, &wfds, &efds, &nfds); + /* This one comes first 'cos it may nuke a datalink */ descriptor_UpdateSet(&bundle->ncp.mp.server.desc, &rfds, &wfds, &efds, &nfds); + descriptor_UpdateSet(&bundle->desc, &rfds, &wfds, &efds, &nfds); + descriptor_UpdateSet(&server.desc, &rfds, &wfds, &efds, &nfds); /* If there are aren't many packets queued, look for some more. */ if (qlen < 20 && bundle->tun_fd >= 0) { diff --git a/usr.sbin/ppp/modem.c b/usr.sbin/ppp/modem.c index 4f7a9b46729c..0b76a95b7da6 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.58 1998/04/25 10:49:31 brian Exp $ + * $Id: modem.c,v 1.77.2.59 1998/04/28 01:25:31 brian Exp $ * * TODO: */ @@ -418,7 +418,7 @@ modem_lock(struct physical *modem, int tunno) if (*modem->name.full != '/') return 0; - if (modem->type != PHYS_STDIN && + if (modem->type != PHYS_DIRECT && (res = ID0uu_lock(modem->name.base)) != UU_LOCK_OK) { if (res == UU_LOCK_INUSE) LogPrintf(LogPHASE, "%s: %s is in use\n", @@ -461,7 +461,7 @@ modem_Unlock(struct physical *modem) ID0unlink(fn); #endif - if (modem->type != PHYS_STDIN && ID0uu_unlock(modem->name.base) == -1) + if (modem->type != PHYS_DIRECT && ID0uu_unlock(modem->name.base) == -1) LogPrintf(LogALERT, "%s: Can't uu_unlock %s\n", modem->link.name, fn); } @@ -487,7 +487,7 @@ modem_Open(struct physical *modem, struct bundle *bundle) if (modem->fd >= 0) LogPrintf(LogDEBUG, "%s: Open: Modem is already open!\n", modem->link.name); /* We're going back into "term" mode */ - else if (modem->type == PHYS_STDIN) { + else if (modem->type == PHYS_DIRECT) { if (isatty(STDIN_FILENO)) { LogPrintf(LogDEBUG, "%s: Open(direct): Modem is a tty\n", modem->link.name); @@ -591,7 +591,7 @@ modem_Open(struct physical *modem, struct bundle *bundle) if (modem->type != PHYS_DEDICATED) rstio.c_cflag |= HUPCL; - if (modem->type != PHYS_STDIN) { + if (modem->type != PHYS_DIRECT) { /* Change tty speed when we're not in -direct mode */ rstio.c_cflag &= ~(CSIZE | PARODD | PARENB); rstio.c_cflag |= modem->cfg.parity; @@ -605,7 +605,7 @@ modem_Open(struct physical *modem, struct bundle *bundle) (u_long)rstio.c_oflag, (u_long)rstio.c_cflag); if (ioctl(modem->fd, TIOCMGET, &modem->mbits) == -1) { - if (modem->type != PHYS_STDIN) { + if (modem->type != PHYS_DIRECT) { LogPrintf(LogERROR, "%s: Open: Cannot get modem status: %s\n", modem->link.name, strerror(errno)); modem_LogicalClose(modem); @@ -655,7 +655,7 @@ modem_Raw(struct physical *modem, struct bundle *bundle) if (!isatty(modem->fd) || Physical_IsSync(modem)) return 0; - if (modem->type != PHYS_STDIN && modem->fd >= 0 && !Online(modem)) + if (modem->type != PHYS_DIRECT && modem->fd >= 0 && !Online(modem)) LogPrintf(LogDEBUG, "%s: Raw: modem = %d, mbits = %x\n", modem->link.name, modem->fd, modem->mbits); @@ -818,7 +818,7 @@ modem_ShowStatus(struct cmdargs const *arg) prompt_Printf(arg->prompt, "closed\n"); prompt_Printf(arg->prompt, " Device: %s\n", *modem->name.full ? modem->name.full : - modem->type == PHYS_STDIN ? "stdin" : "N/A"); + modem->type == PHYS_DIRECT ? "stdin" : "N/A"); prompt_Printf(arg->prompt, " Link Type: %s\n", mode2Nam(modem->type)); prompt_Printf(arg->prompt, " Connect Count: %d\n", @@ -879,7 +879,7 @@ modem_DescriptorRead(struct descriptor *d, struct bundle *bundle, nointr_usleep(10000); n = Physical_Read(p, rbuff, sizeof rbuff); - if (p->type == PHYS_STDIN && n <= 0) + if (p->type == PHYS_DIRECT && n <= 0) datalink_Down(p->dl, 0); else LogDumpBuff(LogASYNC, "ReadFromModem", rbuff, n); @@ -908,3 +908,104 @@ modem_UpdateSet(struct descriptor *d, fd_set *r, fd_set *w, fd_set *e, int *n) { return Physical_UpdateSet(d, r, w, e, n, 0); } + +struct physical * +modem_FromBinary(struct datalink *dl, int fd) +{ + struct physical *p = (struct physical *)malloc(sizeof(struct physical)); + int got; + + /* + * We expect: + * .----------. + * | physical | + * `----------' + */ + + got = fullread(fd, p, sizeof *p); + if (got != sizeof *p) { + LogPrintf(LogWARN, "Cannot receive physical" + " (got %d bytes, not %d)\n", got, sizeof *p); + close(fd); + free(p); + return NULL; + } + p->link.name = dl->name; + throughput_init(&p->link.throughput); + memset(&p->Timer, '\0', sizeof p->Timer); + memset(p->link.Queue, '\0', sizeof p->link.Queue); + + p->desc.UpdateSet = modem_UpdateSet; + p->desc.IsSet = Physical_IsSet; + p->desc.Read = modem_DescriptorRead; + p->desc.Write = modem_DescriptorWrite; + p->desc.next = NULL; + p->type = PHYS_DIRECT; + p->dl = dl; + p->name.base = strrchr(p->name.full, '/'); + p->mbits = 0; + p->dev_is_modem = 1; + p->out = NULL; + p->connect_count = 1; + + p->link.lcp.fsm.bundle = dl->bundle; + p->link.lcp.fsm.link = &p->link; + memset(&p->link.lcp.fsm.FsmTimer, '\0', sizeof p->link.lcp.fsm.FsmTimer); + memset(&p->link.lcp.fsm.OpenTimer, '\0', sizeof p->link.lcp.fsm.OpenTimer); + memset(&p->link.lcp.fsm.StoppedTimer, '\0', + sizeof p->link.lcp.fsm.StoppedTimer); + p->link.lcp.fsm.parent = &dl->fsmp; + lcp_SetupCallbacks(&p->link.lcp); + + p->link.ccp.fsm.bundle = dl->bundle; + p->link.ccp.fsm.link = &p->link; + /* Our in.state & out.state are NULL (no link-level ccp yet) */ + memset(&p->link.ccp.fsm.FsmTimer, '\0', sizeof p->link.ccp.fsm.FsmTimer); + memset(&p->link.ccp.fsm.OpenTimer, '\0', sizeof p->link.ccp.fsm.OpenTimer); + memset(&p->link.ccp.fsm.StoppedTimer, '\0', + sizeof p->link.ccp.fsm.StoppedTimer); + p->link.ccp.fsm.parent = &dl->fsmp; + ccp_SetupCallbacks(&p->link.ccp); + + p->hdlc.lqm.owner = &p->link.lcp; + p->hdlc.ReportTimer.state = TIMER_STOPPED; + p->hdlc.lqm.timer.state = TIMER_STOPPED; + if (p->hdlc.lqm.method && p->hdlc.lqm.timer.load) + StartLqm(&p->link.lcp); + hdlc_StartTimer(&p->hdlc); + + p->fd = fd; /* Now talk down it :-) */ + throughput_start(&p->link.throughput, "modem throughput", + Enabled(dl->bundle, OPT_THROUGHPUT)); + /* Don't need a modem timer.... */ + /* Don't need to lock the device in -direct mode */ + + return p; +} + +int +modem_ToBinary(struct physical *p, int fd) +{ + int link_fd; + + /* + * We send: + * .----------. + * | physical | + * `----------' + */ + + hdlc_StopTimer(&p->hdlc); + StopLqrTimer(p); + + if (fd != -1 && write(fd, p, sizeof *p) != sizeof *p) { + LogPrintf(LogERROR, "Failed sending physical\n"); + close(fd); + fd = -1; + } + + link_fd = p->fd; + free(p); + + return link_fd; +} diff --git a/usr.sbin/ppp/modem.h b/usr.sbin/ppp/modem.h index ef1565635392..2d13c8da647f 100644 --- a/usr.sbin/ppp/modem.h +++ b/usr.sbin/ppp/modem.h @@ -15,7 +15,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: modem.h,v 1.16.2.14 1998/04/07 00:54:10 brian Exp $ + * $Id: modem.h,v 1.16.2.15 1998/04/10 13:19:14 brian Exp $ * * TODO: */ @@ -36,3 +36,5 @@ extern int modem_ShowStatus(struct cmdargs const *); extern void modem_Close(struct physical *); extern void modem_Offline(struct physical *); extern void modem_Destroy(struct physical *); +extern struct physical *modem_FromBinary(struct datalink *, int); +extern int modem_ToBinary(struct physical *, int fd); diff --git a/usr.sbin/ppp/mp.c b/usr.sbin/ppp/mp.c index bafcbf94d07c..5d6196d846ca 100644 --- a/usr.sbin/ppp/mp.c +++ b/usr.sbin/ppp/mp.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: mp.c,v 1.1.2.16 1998/04/25 10:49:35 brian Exp $ + * $Id: mp.c,v 1.1.2.17 1998/04/28 01:25:33 brian Exp $ */ #include <sys/types.h> @@ -241,13 +241,15 @@ mp_Up(struct mp *mp, struct datalink *dl) */ fd = mpserver_Open(&mp->server, &mp->peer); if (fd >= 0) { - LogPrintf(LogPHASE, "mp: Transfer link %s\n", mp->server.ifsun.sun_path); - bundle_SendDatalink(dl, fd); + LogPrintf(LogPHASE, "mp: Transfer link on %s\n", + mp->server.socket.sun_path); + mp->server.send.dl = dl; + mp->server.send.fd = fd; return MP_LINKSENT; } else if (!mpserver_IsOpen(&mp->server)) return MP_FAILED; else { - LogPrintf(LogPHASE, "mp: Listening on %s\n", mp->server.ifsun.sun_path); + LogPrintf(LogPHASE, "mp: Listening on %s\n", mp->server.socket.sun_path); LogPrintf(LogPHASE, " First link: %s\n", dl->name); /* Re-point our IPCP layer at our MP link */ @@ -529,6 +531,8 @@ mp_FillQueues(struct bundle *bundle) total = 0; for (dl = bundle->links; dl; dl = dl->next) { + if (dl->state != DATALINK_OPEN) + continue; if (dl->physical->out) /* this link has suffered a short write. Let it continue */ continue; @@ -554,6 +558,8 @@ mp_FillQueues(struct bundle *bundle) looped = 1; dl = bundle->links; } + if (dl->state != DATALINK_OPEN) + continue; if (len <= dl->mp.weight + LINK_MINWEIGHT) { mo = m; end = 1; @@ -599,7 +605,7 @@ mp_ShowStatus(struct cmdargs const *arg) prompt_Printf(arg->prompt, "Multilink is %sactive\n", mp->active ? "" : "in"); if (mp->active) prompt_Printf(arg->prompt, "Socket: %s\n", - mp->server.ifsun.sun_path); + mp->server.socket.sun_path); prompt_Printf(arg->prompt, "\nMy Side:\n"); if (mp->active) { @@ -780,6 +786,12 @@ mpserver_UpdateSet(struct descriptor *d, fd_set *r, fd_set *w, fd_set *e, { struct mpserver *s = descriptor2mpserver(d); + if (s->send.dl != NULL) { + bundle_SendDatalink(s->send.dl, s->send.fd); + s->send.dl = NULL; + s->send.fd = -1; + } + if (r && s->fd >= 0) { if (*n < s->fd + 1) *n = s->fd + 1; @@ -800,21 +812,20 @@ static void mpserver_Read(struct descriptor *d, struct bundle *bundle, const fd_set *fdset) { struct mpserver *s = descriptor2mpserver(d); + struct sockaddr in; int fd, size; - size = sizeof s->ifsun; - fd = accept(s->fd, (struct sockaddr *)&s->ifsun, &size); + size = sizeof in; + fd = accept(s->fd, &in, &size); if (fd < 0) { LogPrintf(LogERROR, "mpserver_Read: accept(): %s\n", strerror(errno)); return; } - if (s->ifsun.sun_family != AF_LOCAL) { /* ??? */ + if (in.sa_family != AF_LOCAL) /* ??? */ close(fd); - return; - } - - bundle_ReceiveDatalink(bundle, fd); + else + bundle_ReceiveDatalink(bundle, fd); } static void @@ -833,67 +844,74 @@ mpserver_Init(struct mpserver *s) s->desc.IsSet = mpserver_IsSet; s->desc.Read = mpserver_Read; s->desc.Write = mpserver_Write; + s->send.dl = NULL; + s->send.fd = -1; s->fd = -1; - memset(&s->ifsun, '\0', sizeof s->ifsun); + memset(&s->socket, '\0', sizeof s->socket); } int mpserver_Open(struct mpserver *s, struct peerid *peer) { + int f, l, fd; mode_t mask; - int f; if (s->fd != -1) { LogPrintf(LogERROR, "Internal error ! mpserver already open\n"); - close(s->fd); - memset(&s->ifsun, '\0', sizeof s->ifsun); + mpserver_Close(s); } - s->ifsun.sun_len = snprintf(s->ifsun.sun_path, sizeof s->ifsun.sun_path, - "%sppp-%s-%02x-", _PATH_VARRUN, - peer->authname, peer->enddisc.class); + l = snprintf(s->socket.sun_path, sizeof s->socket.sun_path, "%sppp-%s-%02x-", + _PATH_VARRUN, peer->authname, peer->enddisc.class); - for (f = 0; f < peer->enddisc.len; f++) { - snprintf(s->ifsun.sun_path + s->ifsun.sun_len, - sizeof s->ifsun.sun_path - s->ifsun.sun_len, + for (f = 0; f < peer->enddisc.len && l < sizeof s->socket.sun_path - 2; f++) { + snprintf(s->socket.sun_path + l, sizeof s->socket.sun_path - l, "%02x", *(u_char *)(peer->enddisc.address+f)); - s->ifsun.sun_len += 2; + l += 2; } - s->ifsun.sun_family = AF_LOCAL; + s->socket.sun_family = AF_LOCAL; + s->socket.sun_len = sizeof s->socket; s->fd = ID0socket(PF_LOCAL, SOCK_STREAM, 0); if (s->fd < 0) { LogPrintf(LogERROR, "mpserver: socket: %s\n", strerror(errno)); return -1; } - setsockopt(s->fd, SOL_SOCKET, SO_REUSEADDR, (struct sockaddr *)&s->ifsun, - sizeof s->ifsun); + setsockopt(s->fd, SOL_SOCKET, SO_REUSEADDR, (struct sockaddr *)&s->socket, + sizeof s->socket); mask = umask(0177); - - if (ID0bind_un(s->fd, &s->ifsun, sizeof s->ifsun) < 0) { - umask(mask); - f = sizeof s->ifsun; - getsockopt(s->fd, SOL_SOCKET, SO_ERROR, (struct sockaddr *)&s->ifsun, &f); - if (ID0connect_un(s->fd, &s->ifsun, sizeof s->ifsun) < 0) { - LogPrintf(LogPHASE, "mpserver: can't open bundle socket (%s)\n", - strerror(errno)); + if (ID0bind_un(s->fd, &s->socket) < 0) { + if (errno != EADDRINUSE) { + LogPrintf(LogPHASE, "mpserver: can't create bundle socket %s (%s)\n", + s->socket.sun_path, strerror(errno)); + umask(mask); close(s->fd); s->fd = -1; return -1; - } else { - /* We wanna donate our link to the other guy */ - int fd = s->fd; - s->fd = -1; - return fd; } - } else { umask(mask); - if (listen(s->fd, 5) != 0) { - LogPrintf(LogERROR, "mpserver: Unable to listen to socket" - " - BUNDLE overload?\n"); - mpserver_Close(s); + if (ID0connect_un(s->fd, &s->socket) < 0) { + LogPrintf(LogPHASE, "mpserver: can't connect to bundle socket %s (%s)\n", + s->socket.sun_path, strerror(errno)); + if (errno == ECONNREFUSED) + LogPrintf(LogPHASE, " Has the previous server died badly ?\n"); + close(s->fd); + s->fd = -1; + return -1; } + + /* Donate our link to the other guy */ + fd = s->fd; + s->fd = -1; + return fd; + } + + /* Listen for other ppp invocations that want to donate links */ + if (listen(s->fd, 5) != 0) { + LogPrintf(LogERROR, "mpserver: Unable to listen to socket" + " - BUNDLE overload?\n"); + mpserver_Close(s); } return -1; @@ -902,9 +920,18 @@ mpserver_Open(struct mpserver *s, struct peerid *peer) void mpserver_Close(struct mpserver *s) { + if (s->send.dl != NULL) { + bundle_SendDatalink(s->send.dl, s->send.fd); + s->send.dl = NULL; + s->send.fd = -1; + } + if (s->fd >= 0) { close(s->fd); - ID0unlink(s->ifsun.sun_path); + if (ID0unlink(s->socket.sun_path) == -1) + LogPrintf(LogERROR, "%s: Failed to remove: %s\n", s->socket.sun_path, + strerror(errno)); + memset(&s->socket, '\0', sizeof s->socket); s->fd = -1; } } diff --git a/usr.sbin/ppp/mp.h b/usr.sbin/ppp/mp.h index 61802da45d00..1bfb58d25200 100644 --- a/usr.sbin/ppp/mp.h +++ b/usr.sbin/ppp/mp.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: mp.h,v 1.1.2.7 1998/04/25 00:09:22 brian Exp $ + * $Id: mp.h,v 1.1.2.8 1998/04/28 01:25:34 brian Exp $ */ struct mbuf; @@ -58,7 +58,12 @@ struct peerid { struct mpserver { struct descriptor desc; int fd; /* listen()ing here */ - struct sockaddr_un ifsun; /* On this socket */ + struct sockaddr_un socket; /* On this socket */ + + struct { + struct datalink *dl; /* Send this datalink through */ + int fd; /* this descriptor when it's safe */ + } send; /* (in UpdateSet()) */ }; struct mp { diff --git a/usr.sbin/ppp/physical.c b/usr.sbin/ppp/physical.c index f4782680d831..7910a19cb049 100644 --- a/usr.sbin/ppp/physical.c +++ b/usr.sbin/ppp/physical.c @@ -16,29 +16,23 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: physical.c,v 1.1.2.26 1998/04/25 10:49:39 brian Exp $ + * $Id: physical.c,v 1.1.2.27 1998/04/28 01:25:37 brian Exp $ * */ #include <sys/types.h> -#include <sys/un.h> - -#include <sys/tty.h> #include <assert.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> #include <time.h> #include <unistd.h> #include <utmp.h> - +#include <sys/tty.h> #include "defs.h" - -/* XXX Name space pollution from hdlc.h */ #include "mbuf.h" - -/* Name space pollution for physical.h */ #include "timer.h" #include "lqr.h" #include "hdlc.h" @@ -48,10 +42,8 @@ #include "async.h" #include "ccp.h" #include "link.h" - #include "descriptor.h" #include "physical.h" - #include "log.h" #include "id.h" @@ -177,7 +169,7 @@ Physical_IsSet(struct descriptor *d, const fd_set *fdset) void Physical_Login(struct physical *phys, const char *name) { - if (phys->type == PHYS_STDIN && Physical_IsATTY(phys)) { + if (phys->type == PHYS_DIRECT && Physical_IsATTY(phys)) { if (phys->Utmp) LogPrintf(LogERROR, "Oops, already logged in on %s\n", phys->name.base); else { diff --git a/usr.sbin/ppp/ppp.8 b/usr.sbin/ppp/ppp.8 index 801aab51415b..09e29e711df6 100644 --- a/usr.sbin/ppp/ppp.8 +++ b/usr.sbin/ppp/ppp.8 @@ -1,4 +1,4 @@ -.\" $Id: ppp.8,v 1.97.2.23 1998/04/24 19:15:48 brian Exp $ +.\" $Id: ppp.8,v 1.97.2.24 1998/04/24 19:16:15 brian Exp $ .Dd 20 September 1995 .Os FreeBSD .Dt PPP 8 @@ -2101,10 +2101,14 @@ Clone the specified link, creating one or more new links according to the .Ar name argument(s). This command must be used from the .Dq link -command below. It is only available in multilink mode. Links may -be removed using the +command below unless you've only got a single link (in which case that +link becomes the default). This command is only available in multilink +mode. Links may be removed using the .Dq remove command below. +.Pp +The default link name is +.Dq deflink . .It close Op lcp|ccp If no arguments are given, or if .Dq lcp @@ -2218,10 +2222,9 @@ all argument is given, .Nm will exit despite the source of the command after closing all existing connections. -.It remove -This command removes the given link (specified via the -.Dq link -command). It is only available in multilink mode. A link must be +.It remove|rm +This command removes the given link. It is only really useful in +multilink mode. A link must be in the .Dv CLOSED state before it is removed. @@ -2374,7 +2377,7 @@ command), and standard error is read by .Nm and substituted as the expect or send string. If .Nm -is running in interactive mode, file descriptor 4 is attached to +is running in interactive mode, file descriptor 3 is attached to .Pa /dev/tty . .Pp For example (wrapped for readability); diff --git a/usr.sbin/ppp/systems.c b/usr.sbin/ppp/systems.c index e501f55e667f..54d41e8f133d 100644 --- a/usr.sbin/ppp/systems.c +++ b/usr.sbin/ppp/systems.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: systems.c,v 1.35.2.6 1998/04/10 13:19:21 brian Exp $ + * $Id: systems.c,v 1.35.2.7 1998/04/14 23:17:11 brian Exp $ * * TODO: */ @@ -187,7 +187,7 @@ static struct { } modes[] = { { PHYS_MANUAL, "interactive" }, { PHYS_DEMAND, "auto" }, - { PHYS_STDIN, "direct" }, + { PHYS_DIRECT, "direct" }, { PHYS_DEDICATED, "dedicated" }, { PHYS_PERM, "ddial" }, { PHYS_1OFF, "background" }, diff --git a/usr.sbin/ppp/timer.c b/usr.sbin/ppp/timer.c index 06487c7b0832..7d78a7a7833c 100644 --- a/usr.sbin/ppp/timer.c +++ b/usr.sbin/ppp/timer.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: timer.c,v 1.27.2.7 1998/04/19 23:09:03 brian Exp $ + * $Id: timer.c,v 1.27.2.8 1998/04/21 01:02:32 brian Exp $ * * TODO: */ @@ -73,7 +73,7 @@ StartTimer(struct pppTimer * tp) StopTimerNoBlock(tp); if (tp->load == 0) { - LogPrintf(LogDEBUG, "%s timer[%p] has 0 load!\n", tp->name, tp); + LogPrintf(LogTIMER, "%s timer[%p] has 0 load!\n", tp->name, tp); sigsetmask(omask); return; } @@ -89,10 +89,10 @@ StartTimer(struct pppTimer * tp) tp->rest = tp->load - ticks; if (t) - LogPrintf(LogDEBUG, "StartTimer: Inserting %s timer[%p] before %s " + LogPrintf(LogTIMER, "StartTimer: Inserting %s timer[%p] before %s " "timer[%p], delta = %ld\n", tp->name, tp, t->name, t, tp->rest); else - LogPrintf(LogDEBUG, "StartTimer: Inserting %s timer[%p]\n", tp->name, tp); + LogPrintf(LogTIMER, "StartTimer: Inserting %s timer[%p]\n", tp->name, tp); /* Insert given *tp just before *t */ tp->next = t; @@ -148,12 +148,12 @@ TimerService(void) { struct pppTimer *tp, *exp, *wt; - if (LogIsKept(LogDEBUG)) { + if (LogIsKept(LogTIMER)) { static time_t t; time_t n = time(NULL); /* Only show timers every second */ if (n > t) - ShowTimers(LogDEBUG, NULL); + ShowTimers(LogTIMER, NULL); t = n; } tp = TimerList; |
