*/
#ifdef IPX_CHANGE
-#ifndef lint
-static char rcsid[] = "$Id: ipxcp.c,v 1.15 1999/04/01 07:08:47 paulus Exp $";
-#endif
+
+#define RCSID "$Id: ipxcp.c,v 1.19 2001/02/22 03:15:20 paulus Exp $"
/*
* TODO:
#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 */
ipxcp_options ipxcp_gotoptions[NUM_PPP]; /* Options that peer ack'd */
"Accept peer IPX network number", 1,
&ipxcp_allowoptions[0].accept_network },
{ "ipx-node", o_special, setipxnode,
- "Set IPX node number" },
+ "Set IPX node number", OPT_MULTIPART },
{ "ipxcp-accept-local", o_bool, &ipxcp_wantoptions[0].accept_local,
"Accept our IPX address", 1,
&ipxcp_allowoptions[0].accept_local },
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]);
+ int have_his = 0;
+ u_char our_node[6];
+ u_char his_node[6];
+ static int prio_our, prio_his;
+
+ memset (our_node, 0, 6);
+ memset (his_node, 0, 6);
+
+ end = setipxnodevalue (*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 >= prio_our) {
+ memcpy(&ipxcp_wantoptions[0].our_node[0], our_node, 6);
+ prio_our = option_priority;
+ }
+ if (have_his && option_priority >= prio_his) {
+ memcpy(&ipxcp_wantoptions[0].his_node[0], his_node, 6);
+ prio_his = option_priority;
+ }
return 1;
}
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)) {
return;
}
- ipxcp_is_up = 1;
np_up(f->unit, PPP_IPX);
/*
{
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);
}