[2312] in linux-net channel archive
Re: ipx configuration over ppp connection
daemon@ATHENA.MIT.EDU (David Higgins)
Sat Mar 30 23:31:21 1996
From: "David Higgins" <dave@infra.com>
To: Davide Dolla <ddolla@lol.shiny.it>, linux-ppp@vger.rutgers.edu,
linux-net@vger.rutgers.edu
Date: Sat, 30 Mar 1996 19:55:32 EDT
Cc: torvalds@cs.helsinki.fi, net-patches@lxorguk.ukuu.org.uk
> Davide Dolla wrote:
> The problem is using the ppp interface as a ipx interface,
> pppd connection bring up correctly assign node address but i cannot
> ipxping the peer (the node address in the /proc/net/ipx_interface is
> set to zero - is this correct ?)
I just ran into this same problem myself and tracked it down to an
oversight (bug) in the kernel ipx support. The problem is that when
an ipx interface is created, only the device's hardware address is
used instead of also checking for a node address send to the create
function. Serial devices (at least in the ppp code) have no hardware
address.
Here is a diff file to apply which fixes the node address problem for
me. I still am not fully communicating (remote Win95 -> linux dial up
on Novell LAN), but this is a little closer.
[Sorry about sending to everyone, but I don't know who is maintaining
the ipx kernel code.]
--- net/ipx/af_ipx.orig Fri Mar 29 00:16:50 1996
+++ net/ipx/af_ipx.c Fri Mar 29 00:17:40 1996
@@ -853,6 +853,7 @@
unsigned short dlink_type = 0;
struct datalink_proto *datalink = NULL;
ipx_interface *intrfc;
+ int i;
if (idef->ipx_special == IPX_INTERNAL)
return ipxitf_create_internal(idef);
@@ -917,8 +918,14 @@
ipx_primary_net = intrfc;
intrfc->if_internal = 0;
intrfc->if_ipx_offset = dev->hard_header_len + datalink->header_length;
- memset(intrfc->if_node, 0, IPX_NODE_LEN);
- memcpy((char *)&(intrfc->if_node[IPX_NODE_LEN-dev->addr_len]), dev->dev_addr, dev->addr_len);
+ for (i=0; (i < IPX_NODE_LEN) && (idef->ipx_node[i] == 0); i++)
+ ;
+ if (i == IPX_NODE_LEN) {
+ memset(intrfc->if_node, 0, IPX_NODE_LEN);
+ memcpy((char *)&(intrfc->if_node[IPX_NODE_LEN-dev->addr_len]), dev->dev_addr, dev->addr_len);
+ }
+ else
+ memcpy (intrfc->if_node, idef->ipx_node, IPX_NODE_LEN);
ipxitf_insert(intrfc);
}
_________________________________________________________
David Higgins
InfraSystems, Inc.
dave@infra.com