X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fipxcp.c;h=d39b14c4848106ca26840fa58dc6b1f2c63f387a;hb=431469a02ce74e5fe4b9943e86b9bfc272882fcb;hp=0cbd9da19990bffbdfc43f0e3c4990af079f5f73;hpb=96a47326d0073d66e287fb05fa34d119f46744ed;p=ppp.git diff --git a/pppd/ipxcp.c b/pppd/ipxcp.c index 0cbd9da..d39b14c 100644 --- a/pppd/ipxcp.c +++ b/pppd/ipxcp.c @@ -42,8 +42,6 @@ #ifdef IPX_CHANGE -#define RCSID "$Id: ipxcp.c,v 1.22 2003/07/28 12:25:41 carlsonj Exp $" - /* * TODO: */ @@ -62,7 +60,6 @@ #include "pathnames.h" #include "magic.h" -static const char rcsid[] = RCSID; /* global vars */ ipxcp_options ipxcp_wantoptions[NUM_PPP]; /* Options that we want to request */ @@ -78,17 +75,17 @@ ipxcp_options ipxcp_hisoptions[NUM_PPP]; /* Options that we ack'd */ /* * Callbacks for fsm code. (CI = Configuration Information) */ -static void ipxcp_resetci __P((fsm *)); /* Reset our CI */ -static int ipxcp_cilen __P((fsm *)); /* Return length of our CI */ -static void ipxcp_addci __P((fsm *, u_char *, int *)); /* Add our CI */ -static int ipxcp_ackci __P((fsm *, u_char *, int)); /* Peer ack'd our CI */ -static int ipxcp_nakci __P((fsm *, u_char *, int)); /* Peer nak'd our CI */ -static int ipxcp_rejci __P((fsm *, u_char *, int)); /* Peer rej'd our CI */ -static int ipxcp_reqci __P((fsm *, u_char *, int *, int)); /* Rcv CI */ -static void ipxcp_up __P((fsm *)); /* We're UP */ -static void ipxcp_down __P((fsm *)); /* We're DOWN */ -static void ipxcp_finished __P((fsm *)); /* Don't need lower layer */ -static void ipxcp_script __P((fsm *, char *)); /* Run an up/down script */ +static void ipxcp_resetci (fsm *); /* Reset our CI */ +static int ipxcp_cilen (fsm *); /* Return length of our CI */ +static void ipxcp_addci (fsm *, u_char *, int *); /* Add our CI */ +static int ipxcp_ackci (fsm *, u_char *, int); /* Peer ack'd our CI */ +static int ipxcp_nakci (fsm *, u_char *, int, int);/* Peer nak'd our CI */ +static int ipxcp_rejci (fsm *, u_char *, int); /* Peer rej'd our CI */ +static int ipxcp_reqci (fsm *, u_char *, int *, int); /* Rcv CI */ +static void ipxcp_up (fsm *); /* We're UP */ +static void ipxcp_down (fsm *); /* We're DOWN */ +static void ipxcp_finished (fsm *); /* Don't need lower layer */ +static void ipxcp_script (fsm *, char *); /* Run an up/down script */ fsm ipxcp_fsm[NUM_PPP]; /* IPXCP fsm structure */ @@ -113,10 +110,10 @@ static fsm_callbacks ipxcp_callbacks = { /* IPXCP callback routines */ /* * Command-line options. */ -static int setipxnode __P((char **)); -static void printipxnode __P((option_t *, - void (*)(void *, char *, ...), void *)); -static int setipxname __P((char **)); +static int setipxnode (char **); +static void printipxnode (option_t *, + void (*)(void *, char *, ...), void *); +static int setipxname (char **); static option_t ipxcp_option_list[] = { { "ipx", o_bool, &ipxcp_protent.enabled_flag, @@ -170,15 +167,15 @@ static option_t ipxcp_option_list[] = { * Protocol entry points. */ -static void ipxcp_init __P((int)); -static void ipxcp_open __P((int)); -static void ipxcp_close __P((int, char *)); -static void ipxcp_lowerup __P((int)); -static void ipxcp_lowerdown __P((int)); -static void ipxcp_input __P((int, u_char *, int)); -static void ipxcp_protrej __P((int)); -static int ipxcp_printpkt __P((u_char *, int, - void (*) __P((void *, char *, ...)), void *)); +static void ipxcp_init (int); +static void ipxcp_open (int); +static void ipxcp_close (int, char *); +static void ipxcp_lowerup (int); +static void ipxcp_lowerdown (int); +static void ipxcp_input (int, u_char *, int); +static void ipxcp_protrej (int); +static int ipxcp_printpkt (u_char *, int, + void (*) (void *, char *, ...), void *); struct protent ipxcp_protent = { PPP_IPXCP, @@ -217,7 +214,7 @@ struct protent ipxcp_protent = { static int ipxcp_is_up; -static char *ipx_ntoa __P((u_int32_t)); +static char *ipx_ntoa (u_int32_t); /* Used in printing the node number */ #define NODE(base) base[0], base[1], base[2], base[3], base[4], base[5] @@ -230,8 +227,7 @@ static char *ipx_ntoa __P((u_int32_t)); */ static short int -to_external(internal) -short int internal; +to_external(short int internal) { short int external; @@ -248,8 +244,7 @@ short int internal; */ static char * -ipx_ntoa(ipxaddr) -u_int32_t ipxaddr; +ipx_ntoa(u_int32_t ipxaddr) { static char b[64]; slprintf(b, sizeof(b), "%x", ipxaddr); @@ -258,8 +253,7 @@ u_int32_t ipxaddr; static u_char * -setipxnodevalue(src,dst) -u_char *src, *dst; +setipxnodevalue(u_char *src, u_char *dst) { int indx; int item; @@ -286,10 +280,9 @@ u_char *src, *dst; static int ipx_prio_our, ipx_prio_his; static int -setipxnode(argv) - char **argv; +setipxnode(char **argv) { - char *end; + u_char *end; int have_his = 0; u_char our_node[6]; u_char his_node[6]; @@ -297,7 +290,7 @@ setipxnode(argv) memset (our_node, 0, 6); memset (his_node, 0, 6); - end = setipxnodevalue (*argv, our_node); + end = setipxnodevalue ((u_char *)*argv, our_node); if (*end == ':') { have_his = 1; end = setipxnodevalue (++end, his_node); @@ -321,10 +314,7 @@ setipxnode(argv) } static void -printipxnode(opt, printer, arg) - option_t *opt; - void (*printer) __P((void *, char *, ...)); - void *arg; +printipxnode(option_t *opt, void (*printer) (void *, char *, ...), void *arg) { unsigned char *p; @@ -340,10 +330,9 @@ printipxnode(opt, printer, arg) } static int -setipxname (argv) - char **argv; +setipxname (char **argv) { - char *dest = ipxcp_wantoptions[0].name; + u_char *dest = ipxcp_wantoptions[0].name; char *src = *argv; int count; char ch; @@ -377,8 +366,7 @@ setipxname (argv) * ipxcp_init - Initialize IPXCP. */ static void -ipxcp_init(unit) - int unit; +ipxcp_init(int unit) { fsm *f = &ipxcp_fsm[unit]; @@ -414,8 +402,7 @@ ipxcp_init(unit) */ static void -copy_node (src, dst) -u_char *src, *dst; +copy_node (u_char *src, u_char *dst) { memcpy (dst, src, sizeof (ipxcp_wantoptions[0].our_node)); } @@ -425,8 +412,7 @@ u_char *src, *dst; */ static int -compare_node (src, dst) -u_char *src, *dst; +compare_node (u_char *src, u_char *dst) { return memcmp (dst, src, sizeof (ipxcp_wantoptions[0].our_node)) == 0; } @@ -436,8 +422,7 @@ u_char *src, *dst; */ static int -zero_node (node) -u_char *node; +zero_node (u_char *node) { int indx; for (indx = 0; indx < sizeof (ipxcp_wantoptions[0].our_node); ++indx) @@ -451,8 +436,7 @@ u_char *node; */ static void -inc_node (node) -u_char *node; +inc_node (u_char *node) { u_char *outp; u_int32_t magic_num; @@ -468,8 +452,7 @@ u_char *node; * ipxcp_open - IPXCP is allowed to come up. */ static void -ipxcp_open(unit) - int unit; +ipxcp_open(int unit) { fsm_open(&ipxcp_fsm[unit]); } @@ -478,9 +461,7 @@ ipxcp_open(unit) * ipxcp_close - Take IPXCP down. */ static void -ipxcp_close(unit, reason) - int unit; - char *reason; +ipxcp_close(int unit, char *reason) { fsm_close(&ipxcp_fsm[unit], reason); } @@ -490,8 +471,7 @@ ipxcp_close(unit, reason) * ipxcp_lowerup - The lower layer is up. */ static void -ipxcp_lowerup(unit) - int unit; +ipxcp_lowerup(int unit) { fsm_lowerup(&ipxcp_fsm[unit]); } @@ -501,8 +481,7 @@ ipxcp_lowerup(unit) * ipxcp_lowerdown - The lower layer is down. */ static void -ipxcp_lowerdown(unit) - int unit; +ipxcp_lowerdown(int unit) { fsm_lowerdown(&ipxcp_fsm[unit]); } @@ -512,10 +491,7 @@ ipxcp_lowerdown(unit) * ipxcp_input - Input IPXCP packet. */ static void -ipxcp_input(unit, p, len) - int unit; - u_char *p; - int len; +ipxcp_input(int unit, u_char *p, int len) { fsm_input(&ipxcp_fsm[unit], p, len); } @@ -527,8 +503,7 @@ ipxcp_input(unit, p, len) * Pretend the lower layer went down, so we shut up. */ static void -ipxcp_protrej(unit) - int unit; +ipxcp_protrej(int unit) { fsm_lowerdown(&ipxcp_fsm[unit]); } @@ -538,8 +513,7 @@ ipxcp_protrej(unit) * ipxcp_resetci - Reset our CI. */ static void -ipxcp_resetci(f) - fsm *f; +ipxcp_resetci(fsm *f) { wo->req_node = wo->neg_node && ao->neg_node; wo->req_nn = wo->neg_nn && ao->neg_nn; @@ -586,14 +560,13 @@ ipxcp_resetci(f) */ static int -ipxcp_cilen(f) - fsm *f; +ipxcp_cilen(fsm *f) { int len; len = go->neg_nn ? CILEN_NETN : 0; len += go->neg_node ? CILEN_NODEN : 0; - len += go->neg_name ? CILEN_NAME + strlen (go->name) - 1 : 0; + len += go->neg_name ? CILEN_NAME + strlen ((char *)go->name) - 1 : 0; /* RFC says that defaults should not be included. */ if (go->neg_router && to_external(go->router) != RIP_SAP) @@ -607,10 +580,7 @@ ipxcp_cilen(f) * ipxcp_addci - Add our desired CIs to a packet. */ static void -ipxcp_addci(f, ucp, lenp) - fsm *f; - u_char *ucp; - int *lenp; +ipxcp_addci(fsm *f, u_char *ucp, int *lenp) { /* * Add the options to the record. @@ -630,7 +600,7 @@ ipxcp_addci(f, ucp, lenp) } if (go->neg_name) { - int cilen = strlen (go->name); + int cilen = strlen ((char *)go->name); int indx; PUTCHAR (IPX_ROUTER_NAME, ucp); PUTCHAR (CILEN_NAME + cilen - 1, ucp); @@ -656,10 +626,7 @@ ipxcp_addci(f, ucp, lenp) * 1 - Ack was good. */ static int -ipxcp_ackci(f, p, len) - fsm *f; - u_char *p; - int len; +ipxcp_ackci(fsm *f, u_char *p, int len) { u_short cilen, citype, cishort; u_char cichar; @@ -699,7 +666,7 @@ ipxcp_ackci(f, p, len) } #define ACKCINODE(opt,neg,val) ACKCICHARS(opt,neg,val,sizeof(val)) -#define ACKCINAME(opt,neg,val) ACKCICHARS(opt,neg,val,strlen(val)) +#define ACKCINAME(opt,neg,val) ACKCICHARS(opt,neg,val,strlen((char *)val)) #define ACKCINETWORK(opt, neg, val) \ if (neg) { \ @@ -763,10 +730,7 @@ ipxcp_ackci(f, p, len) */ static int -ipxcp_nakci(f, p, len) - fsm *f; - u_char *p; - int len; +ipxcp_nakci(fsm *f, u_char *p, int len, int treat_as_reject) { u_char citype, cilen, *next; u_short s; @@ -792,7 +756,9 @@ ipxcp_nakci(f, p, len) no.neg_nn = 1; GETLONG(l, p); - if (l && ao->accept_network) + if (treat_as_reject) + try.neg_nn = 0; + else if (l && ao->accept_network) try.our_network = l; break; @@ -801,8 +767,10 @@ ipxcp_nakci(f, p, len) goto bad; no.neg_node = 1; - if (!zero_node (p) && ao->accept_local && - ! compare_node (p, ho->his_node)) + if (treat_as_reject) + try.neg_node = 0; + else if (!zero_node (p) && ao->accept_local && + ! compare_node (p, ho->his_node)) copy_node (p, try.our_node); break; @@ -871,10 +839,7 @@ bad: * ipxcp_rejci - Reject some of our CIs. */ static int -ipxcp_rejci(f, p, len) - fsm *f; - u_char *p; - int len; +ipxcp_rejci(fsm *f, u_char *p, int len) { u_short cilen, citype, cishort; u_char cichar; @@ -918,7 +883,7 @@ ipxcp_rejci(f, p, len) } #define REJCINODE(opt,neg,val) REJCICHARS(opt,neg,val,sizeof(val)) -#define REJCINAME(opt,neg,val) REJCICHARS(opt,neg,val,strlen(val)) +#define REJCINAME(opt,neg,val) REJCICHARS(opt,neg,val,strlen((char *)val)) #define REJCIVOID(opt, neg) \ if (neg && p[0] == opt) { \ @@ -982,11 +947,7 @@ ipxcp_rejci(f, p, len) * CONFNAK; returns CONFREJ if it can't return CONFACK. */ static int -ipxcp_reqci(f, inp, len, reject_if_disagree) - fsm *f; - u_char *inp; /* Requested CIs */ - int *len; /* Length of requested CIs */ - int reject_if_disagree; +ipxcp_reqci(fsm *f, u_char *inp, int *len, int reject_if_disagree) { u_char *cip, *next; /* Pointer to current and next CIs */ u_short cilen, citype; /* Parsed len, type */ @@ -1189,7 +1150,7 @@ ipxcp_reqci(f, inp, len, reject_if_disagree) case IPX_ROUTER_NAME: if (cilen >= CILEN_NAME) { int name_size = cilen - CILEN_NAME; - if (name_size > sizeof (ho->name)) + if (name_size >= sizeof (ho->name)) name_size = sizeof (ho->name) - 1; memset (ho->name, 0, sizeof (ho->name)); memcpy (ho->name, p, name_size); @@ -1285,8 +1246,7 @@ endswitch: */ static void -ipxcp_up(f) - fsm *f; +ipxcp_up(fsm *f) { int unit = f->unit; @@ -1364,8 +1324,7 @@ ipxcp_up(f) */ static void -ipxcp_down(f) - fsm *f; +ipxcp_down(fsm *f) { IPXCPDEBUG(("ipxcp: down")); @@ -1384,8 +1343,7 @@ ipxcp_down(f) * ipxcp_finished - possibly shut down the lower layers. */ static void -ipxcp_finished(f) - fsm *f; +ipxcp_finished(fsm *f) { np_finished(f->unit, PPP_IPX); } @@ -1396,9 +1354,7 @@ ipxcp_finished(f) * interface-name tty-name speed local-IPX remote-IPX networks. */ static void -ipxcp_script(f, script) - fsm *f; - char *script; +ipxcp_script(fsm *f, char *script) { char strspeed[32], strlocal[32], strremote[32]; char strnetwork[32], strpid[32]; @@ -1448,12 +1404,12 @@ ipxcp_script(f, script) argv[6] = strremote; argv[7] = strproto_lcl; argv[8] = strproto_rmt; - argv[9] = go->name; - argv[10] = ho->name; + argv[9] = (char *)go->name; + argv[10] = (char *)ho->name; argv[11] = ipparam; argv[12] = strpid; argv[13] = NULL; - run_program(script, argv, 0, NULL, NULL); + run_program(script, argv, 0, NULL, NULL, 0); } /* @@ -1465,11 +1421,8 @@ static char *ipxcp_codenames[] = { }; static int -ipxcp_printpkt(p, plen, printer, arg) - u_char *p; - int plen; - void (*printer) __P((void *, char *, ...)); - void *arg; +ipxcp_printpkt(u_char *p, int plen, + void (*printer) (void *, char *, ...), void *arg) { int code, id, len, olen; u_char *pstart, *optend; @@ -1575,7 +1528,7 @@ ipxcp_printpkt(p, plen, printer, arg) case TERMREQ: if (len > 0 && *p >= ' ' && *p < 0x7f) { printer(arg, " "); - print_string(p, len, printer, arg); + print_string((char *)p, len, printer, arg); p += len; len = 0; }