X-Git-Url: https://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppd%2Fipxcp.c;h=000608deda07bb0878d51a8d3ea613a8a4bf43af;hp=840daf5ae3ae95d79c1894a9da1f2ecfd2069c57;hb=2883dd07101bf851e2ea368f0c04c91aea85cff2;hpb=9e64a7b4c1918fd3927f80832a97f747eac214de diff --git a/pppd/ipxcp.c b/pppd/ipxcp.c index 840daf5..000608d 100644 --- a/pppd/ipxcp.c +++ b/pppd/ipxcp.c @@ -1,27 +1,51 @@ /* * ipxcp.c - PPP IPX Control Protocol. * - * Copyright (c) 1989 Carnegie Mellon University. - * All rights reserved. + * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by Carnegie Mellon University. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The name "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifdef IPX_CHANGE -#ifndef lint -static char rcsid[] = "$Id: ipxcp.c,v 1.13 1999/03/19 01:22:09 paulus Exp $"; +#ifdef HAVE_CONFIG_H +#include "config.h" #endif +#ifdef IPX_CHANGE + /* * TODO: */ @@ -40,6 +64,7 @@ static char rcsid[] = "$Id: ipxcp.c,v 1.13 1999/03/19 01:22:09 paulus Exp $"; #include "pathnames.h" #include "magic.h" + /* global vars */ ipxcp_options ipxcp_wantoptions[NUM_PPP]; /* Options that we want to request */ ipxcp_options ipxcp_gotoptions[NUM_PPP]; /* Options that peer ack'd */ @@ -54,17 +79,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 */ @@ -89,44 +114,56 @@ static fsm_callbacks ipxcp_callbacks = { /* IPXCP callback routines */ /* * Command-line options. */ -static int setipxnode __P((char **)); -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, - "Enable IPXCP (and IPX)", 1 }, + "Enable IPXCP (and IPX)", OPT_PRIO | 1 }, { "+ipx", o_bool, &ipxcp_protent.enabled_flag, - "Enable IPXCP (and IPX)", 1 }, + "Enable IPXCP (and IPX)", OPT_PRIOSUB | OPT_ALIAS | 1 }, { "noipx", o_bool, &ipxcp_protent.enabled_flag, - "Disable IPXCP (and IPX)" }, + "Disable IPXCP (and IPX)", OPT_PRIOSUB }, { "-ipx", o_bool, &ipxcp_protent.enabled_flag, - "Disable IPXCP (and IPX)" } , - { "ipx-network", o_int, &ipxcp_wantoptions[0].our_network, - "Set our IPX network number", 0, &ipxcp_wantoptions[0].neg_nn }, + "Disable IPXCP (and IPX)", OPT_PRIOSUB | OPT_ALIAS }, + + { "ipx-network", o_uint32, &ipxcp_wantoptions[0].our_network, + "Set our IPX network number", OPT_PRIO, &ipxcp_wantoptions[0].neg_nn }, + { "ipxcp-accept-network", o_bool, &ipxcp_wantoptions[0].accept_network, "Accept peer IPX network number", 1, &ipxcp_allowoptions[0].accept_network }, - { "ipx-node", o_special, setipxnode, - "Set IPX node number" }, + + { "ipx-node", o_special, (void *)setipxnode, + "Set IPX node number", OPT_A2PRINTER, (void *)printipxnode }, + { "ipxcp-accept-local", o_bool, &ipxcp_wantoptions[0].accept_local, "Accept our IPX address", 1, &ipxcp_allowoptions[0].accept_local }, + { "ipxcp-accept-remote", o_bool, &ipxcp_wantoptions[0].accept_remote, "Accept peer's IPX address", 1, &ipxcp_allowoptions[0].accept_remote }, + { "ipx-routing", o_int, &ipxcp_wantoptions[0].router, - "Set IPX routing proto number", 0, + "Set IPX routing proto number", OPT_PRIO, &ipxcp_wantoptions[0].neg_router }, + { "ipx-router-name", o_special, setipxname, - "Set IPX router name" }, + "Set IPX router name", OPT_PRIO | OPT_A2STRVAL | OPT_STATIC, + &ipxcp_wantoptions[0].name }, + { "ipxcp-restart", o_int, &ipxcp_fsm[0].timeouttime, - "Set timeout for IPXCP" }, + "Set timeout for IPXCP", OPT_PRIO }, { "ipxcp-max-terminate", o_int, &ipxcp_fsm[0].maxtermtransmits, - "Set max #xmits for IPXCP term-reqs" }, + "Set max #xmits for IPXCP term-reqs", OPT_PRIO }, { "ipxcp-max-configure", o_int, &ipxcp_fsm[0].maxconfreqtransmits, - "Set max #xmits for IPXCP conf-reqs" }, + "Set max #xmits for IPXCP conf-reqs", OPT_PRIO }, { "ipxcp-max-failure", o_int, &ipxcp_fsm[0].maxnakloops, - "Set max #conf-naks for IPXCP" }, + "Set max #conf-naks for IPXCP", OPT_PRIO }, + { NULL } }; @@ -134,15 +171,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, @@ -181,7 +218,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] @@ -194,12 +231,11 @@ 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; - if (internal & IPX_NONE) + if (internal & BIT(IPX_NONE) ) external = IPX_NONE; else external = RIP_SAP; @@ -212,8 +248,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); @@ -222,8 +257,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; @@ -247,21 +281,35 @@ u_char *src, *dst; return src; } +static int ipx_prio_our, ipx_prio_his; + static int -setipxnode(argv) - char **argv; +setipxnode(char **argv) { - char *end; - - memset (&ipxcp_wantoptions[0].our_node[0], 0, 6); - memset (&ipxcp_wantoptions[0].his_node[0], 0, 6); - - end = setipxnodevalue (*argv, &ipxcp_wantoptions[0].our_node[0]); - if (*end == ':') - end = setipxnodevalue (++end, &ipxcp_wantoptions[0].his_node[0]); + u_char *end; + int have_his = 0; + u_char our_node[6]; + u_char his_node[6]; + + memset (our_node, 0, 6); + memset (his_node, 0, 6); + + end = setipxnodevalue ((u_char *)*argv, our_node); + if (*end == ':') { + have_his = 1; + end = setipxnodevalue (++end, his_node); + } if (*end == '\0') { ipxcp_wantoptions[0].neg_node = 1; + if (option_priority >= ipx_prio_our) { + memcpy(&ipxcp_wantoptions[0].our_node[0], our_node, 6); + ipx_prio_our = option_priority; + } + if (have_his && option_priority >= ipx_prio_his) { + memcpy(&ipxcp_wantoptions[0].his_node[0], his_node, 6); + ipx_prio_his = option_priority; + } return 1; } @@ -269,11 +317,26 @@ setipxnode(argv) return 0; } +static void +printipxnode(option_t *opt, void (*printer) (void *, char *, ...), void *arg) +{ + unsigned char *p; + + p = ipxcp_wantoptions[0].our_node; + if (ipx_prio_our) + printer(arg, "%.2x%.2x%.2x%.2x%.2x%.2x", + p[0], p[1], p[2], p[3], p[4], p[5]); + printer(arg, ":"); + p = ipxcp_wantoptions[0].his_node; + if (ipx_prio_his) + printer(arg, "%.2x%.2x%.2x%.2x%.2x%.2x", + p[0], p[1], p[2], p[3], p[4], p[5]); +} + 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; @@ -290,7 +353,7 @@ setipxname (argv) return 0; } - if (count >= sizeof (ipxcp_wantoptions[0].name)) { + if (count >= sizeof (ipxcp_wantoptions[0].name) - 1) { option_error("IPX router name is limited to %d characters", sizeof (ipxcp_wantoptions[0].name) - 1); return 0; @@ -298,6 +361,7 @@ setipxname (argv) dest[count++] = toupper (ch); } + dest[count] = 0; return 1; } @@ -306,8 +370,7 @@ setipxname (argv) * ipxcp_init - Initialize IPXCP. */ static void -ipxcp_init(unit) - int unit; +ipxcp_init(int unit) { fsm *f = &ipxcp_fsm[unit]; @@ -343,8 +406,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)); } @@ -354,8 +416,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; } @@ -365,8 +426,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) @@ -380,8 +440,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; @@ -397,8 +456,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]); } @@ -407,9 +465,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); } @@ -419,8 +475,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]); } @@ -430,8 +485,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]); } @@ -441,10 +495,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); } @@ -456,8 +507,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]); } @@ -467,8 +517,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; @@ -515,14 +564,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) @@ -536,10 +584,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. @@ -559,7 +604,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); @@ -585,10 +630,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; @@ -628,7 +670,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) { \ @@ -666,9 +708,8 @@ ipxcp_ackci(f, p, len) ACKCINETWORK (IPX_NETWORK_NUMBER, go->neg_nn, go->our_network); ACKCINODE (IPX_NODE_NUMBER, go->neg_node, go->our_node); ACKCINAME (IPX_ROUTER_NAME, go->neg_name, go->name); - ACKCIPROTO (IPX_ROUTER_PROTOCOL, go->neg_router, go->router); - ACKCIPROTO (IPX_ROUTER_PROTOCOL, go->neg_router, go->router); - ACKCIPROTO (IPX_ROUTER_PROTOCOL, go->neg_router, go->router); + if (len > 0) + ACKCIPROTO (IPX_ROUTER_PROTOCOL, go->neg_router, go->router); /* * This is the end of the record. */ @@ -693,10 +734,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; @@ -707,11 +745,11 @@ ipxcp_nakci(f, p, len) BZERO(&no, sizeof(no)); try = *go; - while (len > CILEN_VOID) { + while (len >= CILEN_VOID) { GETCHAR (citype, p); GETCHAR (cilen, p); len -= cilen; - if (len < 0) + if (cilen < CILEN_VOID || len < 0) goto bad; next = &p [cilen - CILEN_VOID]; @@ -722,7 +760,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; @@ -731,8 +771,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; @@ -801,10 +843,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; @@ -848,7 +887,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) { \ @@ -912,11 +951,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 */ @@ -1119,7 +1154,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); @@ -1215,8 +1250,7 @@ endswitch: */ static void -ipxcp_up(f) - fsm *f; +ipxcp_up(fsm *f) { int unit = f->unit; @@ -1266,6 +1300,7 @@ ipxcp_up(f) ipxcp_close(unit, "Interface configuration failed"); return; } + ipxcp_is_up = 1; /* set the network number for IPX */ if (!sipxfaddr(unit, go->network, go->our_node)) { @@ -1275,7 +1310,6 @@ ipxcp_up(f) return; } - ipxcp_is_up = 1; np_up(f->unit, PPP_IPX); /* @@ -1294,16 +1328,16 @@ ipxcp_up(f) */ static void -ipxcp_down(f) - fsm *f; +ipxcp_down(fsm *f) { IPXCPDEBUG(("ipxcp: down")); - if (ipxcp_is_up) { - ipxcp_is_up = 0; - np_down(f->unit, PPP_IPX); - } - cipxfaddr (f->unit); + if (!ipxcp_is_up) + return; + ipxcp_is_up = 0; + np_down(f->unit, PPP_IPX); + cipxfaddr(f->unit); + sifnpmode(f->unit, PPP_IPX, NPMODE_DROP); sifdown(f->unit); ipxcp_script (f, _PATH_IPXDOWN); } @@ -1313,8 +1347,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); } @@ -1325,9 +1358,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]; @@ -1377,12 +1408,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); } /* @@ -1394,11 +1425,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; @@ -1504,7 +1532,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; }