I assume here, that you have working connection to IPX network over network card (say Ethernet) and working PPP with TCP/IP - that means your kernel is compiled with PPP and IPX support, pppd and ncpfs packages are installed and working. If you haven't, look first to Linux IPX-HOWTO and Linux PPP HOWTO.
To start IPX over PPP you have to do:
After these steps (described below) IPX over PPP should work.
If you want log on to NetWare server, you have to install also NetWare client (Microsoft or Novell), attached to "Dial-Up Adapter". In case of Microsoft client and NW 4.x server you have also install "Service for NetWare Directory Services".
On second Linux box node numbers n and m must be swapped. (IPX network number must be same!) To log on to NetWare server (mount NetWare server volume), you have to install ncpfs package.
First you have to reconfigure pppd - add some options to
/etc/ppp/options or /etc/ppp/options.ttySx,
which enables and configures IPX and IPXCP. More detailed explanation of
these options you will find in pppd manpage.
ipx
ipx-network 123abcd
ipx-node 1:0
ipx-routing 2
ipx-router-name Linux_router
ipxcp-accept-remote
If your Linux box has IPX connection only through one network card (say interface eth0), you don't need IPX routing, because eth0 and the peer are in same network segment and has same network number. But if you will start also PPP with IPX, then respective interface (say ppp0) is in another network segment and must have another network number. So Linux box must act also as IPX router between two network segments.
In the Novell environment there are two picies of information which are necessary to be propagated around the network. They are network routing information, propagated using RIP and the service advertisment propagated using SAP. Any router must support both of these protocols. Linux kernel supports IPX packet forvarding across interfaces according the IPX routing table and needs program to implement RIP and SAP to ensure that the IPX routing table is built correctly and updated periodically to reflect changes in the network status.
Here is also more detailed description of IPX routing.
Such an program is ipxripd daemon, developed by Volker Lendecke. Every 30 seconds, as well as on request on a HUP signal, it scans the file /proc/net/ipx_interface to find IPX networks the computer is directly connected to and sends RIP and SAP response and request packets to build routing table. If Linux box is directly connected to IPX network through NIC, routing daemon must be installed to use IPX over PPP.
You can find ipxripd at sunsite.unc.edu or download package with compiled binary from your distributor's site.
When after IPXCP negotiations IPX layer comes up, intrface ppp0 with his IPX parameters is added to file /proc/net/ipx_interface and pppd runs script /etc/ppp/ipx-up. That allows to send HUP signal to ipxripd to be sure, that /proc/net/ipx_interface will be rescanned and fresh routing table made.
#!/bin/sh
#
killall -HUP ipxd
In case of problems there are some steps, which will help to find out reason of troubles.
#!/bin/sh # # This script is run by the pppd after the link is established and # the IPX layer is brought up. # # This script is called with the following arguments: # Arg Name Example # $1 Interface name ppp0 # $2 The tty ttyS1 # $3 The link speed 38400 # $4 IPX network number # $5 Local IPX node address # $6 Remote IPX node address # $7 Local IPX routing protocol # $8 Remote IPX routing protocol # $9 Local IPX router name # $10 Remote IPX router name # $11 Optional ipparam parameter LOG=/tmp/ipxup.log echo "---" >> $LOG date >> $LOG echo "IPX layer up" >> $LOG echo "Killing -HUP the ipxd process..." >> $LOG killall -HUP ipxd cp /proc/net/ipx_interface /tmp/ipx_interface cp /proc/net/ipx_route /tmp/ipx_route echo "Number of parameters: $#" >> $LOG echo "Parameters:" >> $LOG echo "interface-name: $1" >> $LOG echo "tty-device: $2" >> $LOG echo "speed: $3" >> $LOG echo "network-number: $4" >> $LOG echo "local-IPX-node-address: $5" >> $LOG echo "remote-IPX-node-address: $6" >> $LOG echo "local-IPX-routing-protocol: $7" >> $LOG echo "remote-IPX-routing-protocol: $8" >> $LOG echo "local-IPX-router-name: $9" >> $LOG echo "remote-IPX-router-name: ${10}" >> $LOG echo "ipparam: ${11}" >> $LOG
Network Node_Address Primary Device Frame_Type 00AD7D16 0000F4B1A206 Yes eth0 802.2 00099999 00004FB1A206 No ppp0 EtherIIHere Linux box is connected to IPX network through Ethernet card, interface eth0 with frame 802.2, network number AD7D16, node address F4B1A206 and it's primary IPX interface. Interface ppp0 has network number 99999, node address 4FB1A206 and frame EtherII.
Network Router_Net Router_Node 00099999 Directly Connected 339E081C 00AD7D16 0060971D0C76 00088888 00AD7D16 0060971D0C76 00AD7D16 Directly ConnectedNetworks AD7D16 and 99999 are directly connected to Linux box (look /proc/net/ipx_interface above), and Linux box acts here as router between networks AD7D16 (eth0) and 99999 (ppp0).
Network AD7D16 is connected also with NetWare server, which has node number 60971D0C76. NetWare server acts as router to two another network segments with numbers 339E081C and 88888.
Routing table don't say anything about networks 339E081C and 88888. They can be for example another network segments, connected to NetWare server by another network cards. But according to this routing table, network segment 99999 (ppp0) can exchange IPX packets (through Linux box as router) with segment AD7D16, and then (through NetWare server as router) with network segments 339E081C and 88888.
In this specific case (that's routing table from our Linux box), network 339E081C is internal net of Netware server, network 88888 is physically on the same Ethernet card, but has another frame - Ethernet_II, which is necessary to run TCP/IP on NetWare server.
Solution.
Hartwig Felger
sent me letter with workaround.
Linux-kernel does a device-down, if the IP-Address should be changed.
That causes loss of IPX parameters of ppp0, if IPX layer was up
before IP layer. That's Linux 2.0.x problem, solved with 2.1.x and 2.2.x
kernels. Considerable part of this letter is in German, so I try to
explain shortly, what it make.