X-Git-Url: https://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppd%2Fmain.c;h=c580f7c6e23d618e0ff7544b2083a25d5c3683d4;hp=ea5784a2e544a595271fb8bfc441989c61fa9e7b;hb=a3396b002507d72b3e1f1169bd02ae018539654b;hpb=52f746e5808055647a1401373ff0e062fcc9d80c diff --git a/pppd/main.c b/pppd/main.c index ea5784a..c580f7c 100644 --- a/pppd/main.c +++ b/pppd/main.c @@ -18,7 +18,7 @@ */ #ifndef lint -static char rcsid[] = "$Id: main.c,v 1.16 1994/08/25 06:55:21 paulus Exp $"; +static char rcsid[] = "$Id: main.c,v 1.19 1994/09/21 06:47:37 paulus Exp $"; #endif #include @@ -39,7 +39,6 @@ static char rcsid[] = "$Id: main.c,v 1.16 1994/08/25 06:55:21 paulus Exp $"; #include #include -#include "ppp.h" #include "pppd.h" #include "magic.h" #include "fsm.h" @@ -59,8 +58,6 @@ static char rcsid[] = "$Id: main.c,v 1.16 1994/08/25 06:55:21 paulus Exp $"; #define REQ_SYSOPTIONS 1 #endif -static char *pidpath = _PATH_PIDFILE; - /* interface vars */ char ifname[IFNAMSIZ]; /* Interface name */ int ifunit; /* Interface unit number */ @@ -78,11 +75,12 @@ int s; /* Socket file descriptor */ int phase; /* where the link is at */ int kill_link; +int open_ccp_flag; static int initfdflags = -1; /* Initial file descriptor flags */ -u_char outpacket_buf[MTU+DLLHEADERLEN]; /* buffer for outgoing packet */ -static u_char inpacket_buf[MTU+DLLHEADERLEN]; /* buffer for incoming packet */ +u_char outpacket_buf[PPP_MRU+PPP_HDRLEN]; /* buffer for outgoing packet */ +static u_char inpacket_buf[PPP_MRU+PPP_HDRLEN]; /* buffer for incoming packet */ int hungup; /* terminal has been hung up */ static int n_children; /* # child processes still running */ @@ -90,29 +88,29 @@ static int n_children; /* # child processes still running */ int baud_rate; /* prototypes */ -static void hup __ARGS((int)); -static void term __ARGS((int)); -static void chld __ARGS((int)); -static void incdebug __ARGS((int)); -static void nodebug __ARGS((int)); - -static void get_input __ARGS((void)); -void establish_ppp __ARGS((void)); -void calltimeout __ARGS((void)); -struct timeval *timeleft __ARGS((struct timeval *)); -void reap_kids __ARGS((void)); -void cleanup __ARGS((int, caddr_t)); -void close_fd __ARGS((void)); -void die __ARGS((int)); -void novm __ARGS((char *)); - -void log_packet __ARGS((u_char *, int, char *)); -void format_packet __ARGS((u_char *, int, +static void hup __P((int)); +static void term __P((int)); +static void chld __P((int)); +static void toggle_debug __P((int)); +static void open_ccp __P((int)); + +static void get_input __P((void)); +void establish_ppp __P((void)); +void calltimeout __P((void)); +struct timeval *timeleft __P((struct timeval *)); +void reap_kids __P((void)); +void cleanup __P((int, caddr_t)); +void close_fd __P((void)); +void die __P((int)); +void novm __P((char *)); + +void log_packet __P((u_char *, int, char *)); +void format_packet __P((u_char *, int, void (*) (void *, char *, ...), void *)); -void pr_log __ARGS((void *, char *, ...)); +void pr_log __P((void *, char *, ...)); -extern char *ttyname __ARGS((int)); -extern char *getlogin __ARGS((void)); +extern char *ttyname __P((int)); +extern char *getlogin __P((void)); /* * PPP Data Link Layer "protocol" table. @@ -127,11 +125,16 @@ static struct protent { void (*datainput)(); char *name; } prottbl[] = { - { LCP, lcp_init, lcp_input, lcp_protrej, lcp_printpkt, NULL, "LCP" }, - { IPCP, ipcp_init, ipcp_input, ipcp_protrej, ipcp_printpkt, NULL, "IPCP" }, - { UPAP, upap_init, upap_input, upap_protrej, upap_printpkt, NULL, "PAP" }, - { CHAP, ChapInit, ChapInput, ChapProtocolReject, ChapPrintPkt, NULL, "CHAP" }, - { CCP, ccp_init, ccp_input, ccp_protrej, ccp_printpkt, ccp_datainput, "CCP" }, + { PPP_LCP, lcp_init, lcp_input, lcp_protrej, + lcp_printpkt, NULL, "LCP" }, + { PPP_IPCP, ipcp_init, ipcp_input, ipcp_protrej, + ipcp_printpkt, NULL, "IPCP" }, + { PPP_PAP, upap_init, upap_input, upap_protrej, + upap_printpkt, NULL, "PAP" }, + { PPP_CHAP, ChapInit, ChapInput, ChapProtocolReject, + ChapPrintPkt, NULL, "CHAP" }, + { PPP_CCP, ccp_init, ccp_input, ccp_protrej, + ccp_printpkt, ccp_datainput, "CCP" }, }; #define N_PROTO (sizeof(prottbl) / sizeof(prottbl[0])) @@ -140,13 +143,14 @@ main(argc, argv) int argc; char *argv[]; { - int mask, i, nonblock; + int i, nonblock; struct sigaction sa; struct cmd *cmdp; FILE *pidfile; char *p; struct passwd *pw; struct timeval timo; + sigset_t mask; p = ttyname(0); if (p) @@ -241,8 +245,8 @@ main(argc, argv) SIGNAL(SIGTERM, term); /* Terminate */ SIGNAL(SIGCHLD, chld); - signal(SIGUSR1, incdebug); /* Increment debug flag */ - signal(SIGUSR2, nodebug); /* Reset debug flag */ + signal(SIGUSR1, toggle_debug); /* Toggle debug flag */ + signal(SIGUSR2, open_ccp); /* Reopen CCP */ /* * Lock the device if we've been asked to. @@ -309,7 +313,7 @@ main(argc, argv) (void) sprintf(ifname, "ppp%d", ifunit); /* write pid to file */ - (void) sprintf(pidfilename, "%s/%s.pid", pidpath, ifname); + (void) sprintf(pidfilename, "%s%s.pid", _PATH_VARRUN, ifname); if ((pidfile = fopen(pidfilename, "w")) != NULL) { fprintf(pidfile, "%d\n", pid); (void) fclose(pidfile); @@ -340,6 +344,13 @@ main(argc, argv) lcp_close(0); kill_link = 0; } + if (open_ccp_flag) { + if (phase == PHASE_NETWORK) { + ccp_fsm[0].flags = OPT_RESTART; /* clears OPT_SILENT */ + ccp_open(0); + } + open_ccp_flag = 0; + } get_input(); reap_kids(); /* Don't leave dead kids lying around */ } @@ -398,19 +409,19 @@ get_input() if (debug /*&& (debugflags & DBG_INPACKET)*/) log_packet(p, len, "rcvd "); - if (len < DLLHEADERLEN) { + if (len < PPP_HDRLEN) { MAINDEBUG((LOG_INFO, "io(): Received short packet.")); return; } p += 2; /* Skip address and control */ GETSHORT(protocol, p); - len -= DLLHEADERLEN; + len -= PPP_HDRLEN; /* * Toss all non-LCP packets unless LCP is OPEN. */ - if (protocol != LCP && lcp_fsm[0].state != OPENED) { + if (protocol != PPP_LCP && lcp_fsm[0].state != OPENED) { MAINDEBUG((LOG_INFO, "io(): Received non-LCP packet when LCP not open.")); return; @@ -431,9 +442,9 @@ get_input() if (i == sizeof (prottbl) / sizeof (struct protent)) { if (debug) - syslog(LOG_WARNING, "Unknown protocol (%x) received", + syslog(LOG_WARNING, "Unknown protocol (0x%x) received", protocol); - lcp_sprotrej(0, p - DLLHEADERLEN, len + DLLHEADERLEN); + lcp_sprotrej(0, p - PPP_HDRLEN, len + PPP_HDRLEN); } } } @@ -704,32 +715,31 @@ chld(sig) /* - * incdebug - Catch SIGUSR1 signal. + * toggle_debug - Catch SIGUSR1 signal. * - * Increment debug flag. + * Toggle debug flag. */ /*ARGSUSED*/ static void -incdebug(sig) +toggle_debug(sig) int sig; { - debug++; + debug = !debug; note_debug_level(); } /* - * nodebug - Catch SIGUSR2 signal. + * open_ccp - Catch SIGUSR2 signal. * - * Turn off debugging. + * Try to (re)negotiate compression. */ /*ARGSUSED*/ static void -nodebug(sig) +open_ccp(sig) int sig; { - debug = 0; - note_debug_level(); + open_ccp_flag = 1; } @@ -899,17 +909,17 @@ void format_packet(p, len, printer, arg) u_char *p; int len; - void (*printer) __ARGS((void *, char *, ...)); + void (*printer) __P((void *, char *, ...)); void *arg; { int i, n; u_short proto; u_char x; - if (len >= DLLHEADERLEN && p[0] == ALLSTATIONS && p[1] == UI) { + if (len >= PPP_HDRLEN && p[0] == PPP_ALLSTATIONS && p[1] == PPP_UI) { p += 2; GETSHORT(proto, p); - len -= DLLHEADERLEN; + len -= PPP_HDRLEN; for (i = 0; i < N_PROTO; ++i) if (proto == prottbl[i].protocol) break; @@ -988,7 +998,7 @@ void print_string(p, len, printer, arg) char *p; int len; - void (*printer) __ARGS((void *, char *, ...)); + void (*printer) __P((void *, char *, ...)); void *arg; { int c;