[2312] in linux-net channel archive

home help back first fref pref prev next nref lref last post

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


home help back first fref pref prev next nref lref last post