XRPi Home

Documentation Index
Alphabetic Index

XRPi Documentation - Miscellaneous

Permanent Links

Name

PERMLINKS -- Permanent NetRom Neighbour Links.

Synopsis

This file explains why XRPi tries to keep neighbour node links permanently open, why that is desirable, and why you shouldn't worry about it.

Description

Old-fashioned nodes close their AX25 level 2 links with neighbour nodes after a period of inactivity, which can be less than ideal...

Firstly, it takes a finite time to establish an AX25 L2 interlink from "cold", which adds an unnecessary extra delay for NetRom link setup, and for L3 frames which arrive infrequently. If it takes 5 seconds to establish a link, and a frame has to pass through 10 nodes, that's an extra 50 seconds of delay!

Secondly there is the very common and highly disruptive problem known as the "ONE WAY LINK". These can occur when an RF path fades, or when there is local interference, or when a transmitter, receiver, antenna, TNC or AX*P link malfunctions, leaving one node hearing the other but not vice versa.

When a one-way link occurs, one peer can hear the other's nodes broadcasts, but there is no reverse path. The node which received the broadcast mistakenly thinks it has a route to the node which made the broadcast, but since the two-way path required by an AX25 connection is not available, no connection can be made. No traffic can be transferred, so the neigbour node and all nodes advertised by him are unreachable.

To make matters worse, the node which received the broadcast advertises all the nodes learned via that broadcast to its other neighbours. So in turn they think they have routes to distant nodes, when in fact they don't. The network is seriously disrupted by one broken link, causing a black hole where all packets are LOST. This situation can not recover until the one way link is fixed.

The Better Way

In contrast, XRPi attempts to maintain permanent L2 links between neighbour nodes. You may find this disconcerting, but it has the following advantages:

Firstly, it removes the link establishment time, so NetRom traffic can be routed without delay, no matter how infrequently it arrives.

Secondly, it solves the "one way link" problem by promptly detecting when the link cannot accept traffic, and marking all nodes advertised by the peer as unusable, so that alternative routes can be used.

Lastly, it enables continuous measurement of route quality and round trip time, used in making routing decisions. RF links, especially long ones, can be remarkably variable throughout the day and night, and these problems can be discovered through the process of continuous link audit.

There is no need for concern. The only cost associated with keeping a link open is a tiny link check packet every 3 minutes. Hardly a great waste of bandwidth! Remember that the old-fashioned way has a bandwidth cost too - at least two packets to open a link and two to close it, in addition to the link check packets. The benefits of permanent links far outweigh the disadvantages.

How it Works

If port QUALITY and NODESINTERVAL are both non-zero, as soon as XRPi hears a nodes broadcast from a previously unknown neighbour, it will attempt to connect to it. If the connect is successful, the round trip time is measured, and the route is considered viable. The link is checked every 3 minutes, and will close if non-viable.

If the connect fails, the route is marked as unusable, therefore no nodes will be routed via it. The connection is retried at regular intervals.

If the path is marginal, connection attempts may sometimes succeed and sometimes fail. It is not worth using a route like this, so you can prevent it from re-trying by locking in the neighbour with a zero quality.

The "R" commands will show a ">" in the left-most column if the interlink is fully open, a "~" if it is opening or closing, or a blank if the link can't be opened. This provides a handy way of detecting link problems which might otherwise go un-noticed.

See also

ROUTES(1) -- NetRom Routes Commands.
XROUTER.CFG(8) -- Main Configuration File.