Linux DECnet Networking Layer Information¶
1. Other documentation….¶
- Project Home Pages-http://www.chygwyn.com/ - Kernel info-http://linux-decnet.sourceforge.net/ - Userland tools-http://www.sourceforge.net/projects/linux-decnet/ - Status page
2. Configuring the kernel¶
Be sure to turn on the following options:
- CONFIG_DECNET (obviously)
- CONFIG_PROC_FS (to see what’s going on)
- CONFIG_SYSCTL (for easy configuration)
if you want to try out router support (not properly debugged yet)you’ll need the following options as well…
- CONFIG_DECNET_ROUTER (to be able to add/delete routes)
- CONFIG_NETFILTER (will be required for the DECnet routing daemon)
Don’t turn on SIOCGIFCONF support for DECnet unless you are really surethat you need it, in general you won’t and it can cause ifconfig tomalfunction.
Run time configuration has changed slightly from the 2.4 system. If youwant to configure an endnode, then the simplified procedure is as follows:
- Set the MAC address on your ethernet card before starting _any_ othernetwork protocols.
As soon as your network card is brought into the UP state, DECnet shouldstart working. If you need something more complicated or are unsure howto set the MAC address, see the next section. Also all configurations whichworked with 2.4 will work under 2.5 with no change.
3. Command line options¶
You can set a DECnet address on the kernel command line for compatibilitywith the 2.4 configuration procedure, but in general it’s not needed any more.If you do st a DECnet address on the command line, it has only one purposewhich is that its added to the addresses on the loopback device.
With 2.4 kernels, DECnet would only recognise addresses as local if theywere added to the loopback device. In 2.5, any local interface addresscan be used to loop back to the local machine. Of course this does notprevent you adding further addresses to the loopback device if youwant to.
N.B. Since the address list of an interface determines the addresses forwhich “hello” messages are sent, if you don’t set an address on the loopbackinterface then you won’t see any entries in /proc/net/neigh for the localhost until such time as you start a connection. This doesn’t affect theoperation of the local communications in any other way though.
The kernel command line takes options looking like the following:
decnet.addr=1,2
the two numbers are the node address 1,2 = 1.2 For 2.2.xx kernelsand early 2.3.xx kernels, you must use a comma when specifying theDECnet address like this. For more recent 2.3.xx kernels, you mayuse almost any character except space, although a. would be the mostobvious choice :-)
There used to be a third number specifying the node type. This optionhas gone away in favour of a per interface node type. This is now setusing /proc/sys/net/decnet/conf/<dev>/forwarding. This file can beset with a single digit, 0=EndNode, 1=L1 Router and 2=L2 Router.
There are also equivalent options for modules. The node address canalso be set through the /proc/sys/net/decnet/ files, as can other systemparameters.
Currently the only supported devices are ethernet and ip_gre. Theethernet address of your ethernet card has to be set according to the DECnetaddress of the node in order for it to be autoconfigured (and then appear in/proc/net/decnet_dev). There is a utility available at the aboveFTP sites called dn2ethaddr which can compute the correct ethernetaddress to use. The address can be set by ifconfig either before orat the time the device is brought up. If you are using RedHat you canadd the line:
MACADDR=AA:00:04:00:03:04
or something similar, to /etc/sysconfig/network-scripts/ifcfg-eth0 orwherever your network card’s configuration lives. Setting the MAC addressof your ethernet card to an address starting with “hi-ord” will cause aDECnet address which matches to be added to the interface (which you canverify with iproute2).
The default device for routing can be set through the /proc filesystemby setting /proc/sys/net/decnet/default_device to thedevice you want DECnet to route packets out of when no specific routeis available. Usually this will be eth0, for example:
echo -n "eth0" >/proc/sys/net/decnet/default_device
If you don’t set the default device, then it will default to the firstethernet card which has been autoconfigured as described above. You canconfirm that by looking in the default_device file of course.
There is a list of what the other files under /proc/sys/net/decnet/ doon the kernel patch web site (shown above).
4. Run time kernel configuration¶
This is either done through the sysctl/proc interface (see the kernel webpages for details on what the various options do) or through the iproute2package in the same way as IPv4/6 configuration is performed.
Documentation for iproute2 is included with the package, although there isas yet no specific section on DECnet, most of the features apply to bothIP and DECnet, albeit with DECnet addresses instead of IP addresses anda reduced functionality.
If you want to configure a DECnet router you’ll need the iproute2 packagesince its the _only_ way to add and delete routes currently. Eventuallythere will be a routing daemon to send and receive routing messages foreach interface and update the kernel routing tables accordingly. Therouting daemon will use netfilter to listen to routing packets, andrtnetlink to update the kernels routing tables.
The DECnet raw socket layer has been removed since it was there purelyfor use by the routing daemon which will now use netfilter (a much cleanerand more generic solution) instead.
5. How can I tell if its working?¶
Here is a quick guide of what to look for in order to know if your DECnetkernel subsystem is working.
- Is the node address set (see /proc/sys/net/decnet/node_address)
- Is the node of the correct type(see /proc/sys/net/decnet/conf/<dev>/forwarding)
- Is the Ethernet MAC address of each Ethernet card set to matchthe DECnet address. If in doubt use the dn2ethaddr utility availableat the ftp archive.
- If the previous two steps are satisfied, and the Ethernet card is up,you should find that it is listed in /proc/net/decnet_dev and alsothat it appears as a directory in /proc/sys/net/decnet/conf/. Theloopback device (lo) should also appear and is required to communicatewithin a node.
- If you have any DECnet routers on your network, they should appearin /proc/net/decnet_neigh, otherwise this file will only contain theentry for the node itself (if it doesn’t check to see if lo is up).
- If you want to send to any node which is not listed in the/proc/net/decnet_neigh file, you’ll need to set the default deviceto point to an Ethernet card with connection to a router. This isagain done with the /proc/sys/net/decnet/default_device file.
- Try starting a simple server and client, like the dnping/dnmirrorover the loopback interface. With luck they should communicate.For this step and those after, you’ll need the DECnet librarywhich can be obtained from the above ftp sites as well as theactual utilities themselves.
- If this seems to work, then try talking to a node on your localnetwork, and see if you can obtain the same results.
- At this point you are on your own… :-)
6. How to send a bug report¶
If you’ve found a bug and want to report it, then there are several thingsyou can do to help me work out exactly what it is that is wrong. Usefulinformation (_most_ of which _is_ _essential_) includes:
- What kernel version are you running ?
- What version of the patch are you running ?
- How far though the above set of tests can you get ?
- What is in the /proc/decnet* files and /proc/sys/net/decnet/* files ?
- Which services are you running ?
- Which client caused the problem ?
- How much data was being transferred ?
- Was the network congested ?
- How can the problem be reproduced ?
- Can you use tcpdump to get a trace ? (N.B. Most (all?) versions oftcpdump don’t understand how to dump DECnet properly, so includingthe hex listing of the packet contents is _essential_, usually the -x flag.You may also need to increase the length grabbed with the -s flag. The-e flag also provides very useful information (ethernet MAC addresses))
7. MAC FAQ¶
A quick FAQ on ethernet MAC addresses to explain how Linux and DECnetinteract and how to get the best performance from your hardware.
Ethernet cards are designed to normally only pass received network framesto a host computer when they are addressed to it, or to the broadcast address.
Linux has an interface which allows the setting of extra addresses foran ethernet card to listen to. If the ethernet card supports it, thefiltering operation will be done in hardware, if not the extra unwanted packetsreceived will be discarded by the host computer. In the latter case,significant processor time and bus bandwidth can be used up on a busynetwork (see the NAPI documentation for a longer explanation of theseeffects).
DECnet makes use of this interface to allow running DECnet on an ethernetcard which has already been configured using TCP/IP (presumably using thebuilt in MAC address of the card, as usual) and/or to allow multiple DECnetaddresses on each physical interface. If you do this, be aware that if yourethernet card doesn’t support perfect hashing in its MAC address filterthen your computer will be doing more work than required. Some cardswill simply set themselves into promiscuous mode in order to receivepackets from the DECnet specified addresses. So if you have one of thesecards its better to set the MAC address of the card as described aboveto gain the best efficiency. Better still is to use a card which supportsNAPI as well.
8. Mailing list¶
If you are keen to get involved in development, or want to ask questionsabout configuration, or even just report bugs, then there is a mailinglist that you can join, details are at:
9. Legal Info¶
The Linux DECnet project team have placed their code under the GPL. Thesoftware is provided “as is” and without warranty express or implied.DECnet is a trademark of Compaq. This software is not a product ofCompaq. We acknowledge the help of people at Compaq in providing extradocumentation above and beyond what was previously publicly available.
Steve Whitehouse <SteveW@ACM.org>