======Section 9 - Miscellaneous Topics======
==== AD-HOC ====
AD-HOC(9) XROUTER REFERENCE MANUAL 26/9/2023
**NAME**
AD-HOC -- Ad-Hoc Networking.
**DESCRIPTION**
"Ad-hoc" networking (AHN) is a variant of AXUDP linking. It
differs from "normal" AXUDP in that the UDP/IP parameters of
the link partners are not specified in advance, and instead
of "one PORT per link", all AHN links share the same PORT.
As the partners' UDP/IP details are not known in advance, AHN
is "passive", i.e. like an AXTCP server, it must wait for
incoming connections. Thus AHN can only be used at ONE end of
a link.
Upon receipt of an incoming AXUDP packet, XRouter "remembers"
its UDP/IP parameters, and uses them to return the replies.
At present, the UDP/IP parameters are remembered for only ten
minutes, but as long as the AX25 T3 (link check) time is less
than that, the link check packets prevent the parameters
from expiry.
The "ODN" command currently lists the stored parameters.
AHN can be used at the same time as "normal" AXUDP, and they
can both share the same INTERFACE. But there must only be one
PORT devoted to AHN. If you try to specify more than one AHN
port, XRouter will refuse to start.
**CONFIGURATION**
An AHN PORT requires an AXUDP INTERFACE in XROUTER.CFG, for
example:
INTERFACE=9
TYPE=AXUDP
MTU=256
ENDINTERFACE
(Choose the interface number to suit yourself).
Only TYPE=AXUDP and MTU= are required, all other parameters
are ignored (at present).
The minimum configuration for an AHN PORT is as follows:
PORT=9
ID=Ad-Hoc Networking
INTERFACENUM=9
IPLINK=0.0.0.0
UDPLOCAL=10094
LEARN=1
ENDPORT
IPLINK has no default value. It must be a proper dotted-quad
IP address i.e."0.0.0.0", not "0". This "special" IP address
is what tells it to be an Ad Hoc Networking port.
UDPLOCAL is the UDP "port" number upon which XRouter listens
for incoming AHN packets. This MUST be different from any
UDP ports used by "normal" AXUDP. Don't forget to "port
forward" incoming UDP to this address.
Note that UDPREMOTE must not be used.
If there's an ETHERNET port available, XRouter will use its
own IP stack for AHN, otherwise it will use the Linux stack.
If you want to "force" the use of the Linux stack, for
example if the link partner is on the same machine, add the
following line to the PORT configuration:
IPADDRESS=127.0.0.1
Finally, LEARN tells XRouter to remember the IP address and
udp port of the peer.
**CAVEATS**
AHN allows unplanned and unregulated linking between nodes,
and is therefore deprecated. Unknown nodes which come and go
at random can distort the network and cause excessive network
management traffic. The facility was provided only because
there was a demand for it. It's just another tool in the
networking tool box.
It is assumed that the link partner receives AXUDP on the
same UDP port as it sends from. If this is not the case, AHN
will not work, and normal AXUDP must be used.
**SEE ALSO**
AXTCP(9) -- AX25 over TCP.
AXUDP(9) -- AX25 over UDP.
LEARN(7) -- Learn Unsolicited AX*P Peer Details.
XROUTER.CFG(8) -- Main Configuration File
----
==== APPLS ====
APPLS(9) XROUTER REFERENCE MANUAL 19/10/2023
**NAME**
APPLS -- Application Support.
**DESCRIPTION**
In this context, "applications" refers to programs which use
XRouter to provide their connectivity with the outside world.
Unlike its 16 bit forerunner, XRouter does not provide the
BPQ Host API, but it does provide the following means for
supporting applications:
- AGW TCPHOST Interface
- WA8DED Hostmode Emulation
- TNC2 Emulation
- KISS / SLIP / PPP
- Remote Host Protocol (RHP)
- Proxies
- TCP applications (e.g. QtTermTcp)
Defining Applications
~~~~~~~~~~~~~~~~~~~~~
Some applications, such as those using the TNC2 emulator, do
not accept incoming connections, and this section doesn't
apply to them. Nor does it apply to applications accessed
via KISS / SLIP / PPP or proxies. For the remainder,
read on...
In order for applications to be able to accept incoming
connections, they must be specified in XROUTER.CFG, using
APPL configuration blocks.
Each definition block must begin with APPL= and must
end with ENDAPPL. There must be a separate block for each
application. Applications which use more than one stream
need only a single definition. The APPL block should contain
one or more of the following keywords:
APPLNAME The nickname or shortcut by which the application
is accessed from XRouter's command line. e.g.
"PMS". If a user types this name at the command
prompt, they will be connected to the application.
APPLCALL The AX25 layer 2 callsign which the application
will use. If specified, the application will accept
AX25 L2 connects to this callsign, subject to the
setting of APPLMASK (see below).
APPLALIAS The AX25 layer 2 "alias" used by the application.
If specified, the application will accept AX25 L2
connects to this callsign, subject to the setting
of APPLMASK (see below).
APPLQUAL Netrom quality to broadcast (0-255). If a non-zero
value is specified here, the APPLCALL will be
included in Net/Rom nodes broadcasts and the
application will be connectible at AX25 layer 4.
The higher the quality, the further the node entry
will propogate.
APPLFLAGS defaults to 0 if omitted. The flags are as follows:
Bit Value Action
------------------
0 1 Application has SYSOP privileges.
1 2 Allow "guest" users to access the appl.
2 4 XRouter sends "Connected to (applcall)"
to the user upon connection to an
application. This is not required if the
application sends its own "Connected to"
message.
3 8 XRouter sends "Connected to (usercall) to
the application when a user connects.
APPLTYPE is only required for TCP applications at present.
The format is APPLTYPE=TCP,[ip_addr:]tcp_port
(ip_addr is only required if the application is on
a different computer)
Most fields within an application definition block are
optional - you may have for instance choose to have an
APPLNAME but no APPLCALL, meaning the application could only
be reached by typing the applname at the command prompt.
Or you could have an APPLCALL but no APPLNAME, in which case
the application would be directly connectable, but wouldn't
be reachable from a command line shortcut.
The application number must be between 1 and 8. Some BPQHOST
applications have fixed application numbers, e.g. BBS's and
PMS's must usually be the first application and Host programs
such as PAC4 are usually the second. However, since BPQHOST
API isn't currently implemented, the choice of application
number is arbitrary at present.
Example for a Bulletin Board System application using WA8DED
hostmode. It is accessed by typing "BBS" at the command
prompt or by connecting via AX25 or NetRom to the callsign
GB7PZT or the alias PZTBBS:
APPL=3
APPLNAME=BBS
APPLCALL=GB7PZT
APPLALIAS=PZTBBS
APPLQUAL=100
APPLFLAGS=4
ENDAPPL
In the following example, the application has no callsigns or
quality, so it can only be reached by issuing the command
"HOST" at the command prompt:
APPL=2
APPLNAME=HOST
ENDAPPL
Example for incoming connections to a TCP application such as
QTTERMTCP. It can be acessed by an AX25L2 connection to G9ZZZ
or by typing "SYSOP" at the command prompt. QtTermTCP is set
up to listen on TCP port 8015:
APPL=1
APPLNAME=SYSOP
APPLTYPE=TCP,8015
APPLCALL=G9ZZZ
ENDAPPL
AX25 Visibility
~~~~~~~~~~~~~~~
If you want an application to be directly connectible on a
particular port, the application must have an APPLCALL, an
APPLALIAS or both, and the corresponding bit in that port's
APPLMASK must be set.
APPLMASK specifies which applications will be directly
connectible on a given port. The default is 255, which
allows all applications. The value is made up by adding
together the desired selection from the following numbers:
1 - Enable Application 1
2 - Enable Application 2
4 - Enable Application 3
8 - Enable Application 4
16 - Enable Application 5
32 - Enable Application 6
64 - Enable Application 7
128 - Enable Application 8
For example, if a port's definition contains "APPLMASK=9", it
will only allow direct connections to applications 1 and 4 on
that port, providing those applications have either an
APPLCALL or an APPLALIAS.
Downlinking From Applications
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Certain settings of a port's CFLAGS may prevent all
downlinking on that port. For example, in a mixed CB/HAM
node you may need to use CFLAGS=1 to prevent CB users from
making L2 downlinks on the HAM port. But that would also
prevent HAM applications from downlinking on that port.
This can be solved by setting bit 2 (decimal value 4) of
CFLAGS, which allows applications to downlink
unconditionally.
Setting this flag allows applications to make L2 downlinks on
ports which are closed to users, e.g. CFLAGS=1 prevents
everyone excepts sysops from downlinking, whereas CFLAGS=5
prevents everyon except sysops and applications from
downlinking. See CFLAGS for more details.
**SEE ALSO**
AGWHOST(6) -- AGW Application Support.
CFLAGS(7) -- Connection Control Flags.
DEDHOST(9) -- WA8DED Hostmode Emulator.
RHP(9) -- Remote Host Protocol.
TNC2(9) -- TNC2 Emulator.
XROUTER.CFG(8) -- Main Configuration File.
----
==== APRS ====
APRS(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
APRS -- Automatic Packet Reporting System.
**DESCRIPTION**
APRS is (currently) an acronym for "Automatic Packet
Reporting System", although the name tends to change from
time to time! (it was originally called "Automatic *Position*
Reporting System, and there has been talk of re-branding it
to Automatic PRESENCE Reporting System).
It is a protocol that uses AX25 UI frames and digipeaters to
report a wide variety of parameters such as position, speed,
weather, bearing, status, objects, frequencies and so on.
XRouter includes the following sub-systems that support or
make use of APRS:
- APRS Generic Digipeating
- APRS Igate
- APRS Server
- APRS Messaging Shell
- APRS Weather reports
- APRS DX recording
- APRS Queries
- Positions, distances & directions in MH lists
Generic digipeating is a complex type of digipeating which
responds to special digipeater addresses, and modifies a
packet's digipeater addresses in transit. It also prevents
duplicates and looping.
The Igate is a client daemon that allows APRS data to flow to
and from between the Internet APRS system and RF ports,
messaging shell etc.
The APRS server allows APRS applications such as UI-view to
use XRouter to access all the APRS data handled by XRouter.
The APRS messaging shell allows users to send and receive
APRS messages and bulletins.
Weather reports are received via RF and/or Igate, and are
made available for users to read using the WX command.
The DX feature stores a list of the furthest stations heard
via RF.
APRS Queries allow RF users to query which nodes are on
channel, what DX they heard, what messages are waiting etc.
MHeard lists are able to display the positions, bearings and
distances of stations that broadcast APRS data.
Specifying XRouter's Position
~~~~~~~~~~~~~~~~~~~~~~~~~~
In order for most of these systems to work, XRouter needs to
know its position on the globe. There are currently three
ways to achieve this...
The easiest method is to use the "LOCATOR=" directive in
XROUTER.CFG, which enables you to specify an approximate
location at the centre of a 1Km "Maidenhead" locator square,
e.g. "LOCATOR=IO82VJ".
If you don't know your LOCATOR square, an alternative method
is to use lATITUDE and LONGITUDE directives in XROUTER.CFG.
These are specified in decimal degrees, which can easily be
found from Google Maps. East and North are positive numbers,
while South and West are specified as negative numbers. You
should not append N S E or W.
Another method, which allows more precise (or less precise
if you prefer) positioning, is to include an APRS-style
position in IDTEXT, starting within the first 40 characters.
The format is "!ddmm.mmN/dddmm.mmE#" where dd represents
degrees of latitude/longitude and mm.mm represents minutes
to two decimal places. "N" and "E" may be replaced by "S"
and "W" as appropriate. For example:
IDTEXT
!5224.00N/00215.00W# Kidderminster Router (KDRMIN)
***
You are urged to use at least one of these methods to define
XRouter's position. It really does make Packet more
interesting!
APRS Generic Digipeating
~~~~~~~~~~~~~~~~~~~~~~~~
XRouter supports APRS generic digipeating for RELAY, WIDE,
TRACE, TRACEn-N and WIDEn-N aliases.
Generic digipeating is configured on a port by port basis,
using the flags marked "*" in "DIGIFLAG" as follows:
1 Digipeat UI frames (note 1)
2 Digipeat non-UI frames (note 1)
*4 Enable RELAY generic digipeating.
*8 Enable TRACE generic digipeating.
*16 Enable WIDE (Well sited stations only!)
*32 Allow APRS 3rd party digi via L4.
*64 Allow digipeating to Internet (IGate).
*128 Allow digipeating from Internet (IGate).
*256 Enable UITRACE digipeating
*512 Enable UIFLOOD digipeating
Add the appropriate numbers together to enable the
desired combination of services.
Note 1: Irrespective of the generic digipeater settings, you
may choose to allow regular digipeating (i.e. using XRouter's
normal callsign or alias) on APRS ports, allow regular
UI-only digipeating, or disable regular digipeating
altogether, by manipulating bits 0 and 1 of DIGIFLAG.
SSID Substitution Digipeating
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
UITRACE and UIFLOOD represent two special addresses that are
suffixed with pseudo-SSID's, e.g. "TRACE4-4" and "WIDE2-2".
These addresses can digipeat several times. The first digit
specifies the maximum number of hops, and the second is the
hop counter, which is decremented each time the frame is
digipeated.
These two addresses behave slightly differently however. When
a frame is digipeated on the alias specified by UITRACE, each
digipeater inserts its own callsign in the digipeater list,
and decrements the "SSID". Frames digipeated on the UIFLOOD
address have their SSIDs decremented, but the digi doesn't
insert its own callsign.
For the sake of consistency with UI-View, UITRACE defaults to
"TRACE", giving TRACEn-n digipeating, and UIFLOOD defaults to
WIDE, giving WIDEn-n digipeating.
New-N Paradigm
~~~~~~~~~~~~~~
According to the APRS "New-N Paradigm", RELAY, TRACE and WIDE
are deprecated, UITRACE should be set to "WIDE", and UIFLOOD
should be set to a "state" code (e.g. "GBR" for the UK).
One of the main reasons for the New-N Paradigm was the fact
that some of the older digipeaters would digipeat the same
packets over and over. This does not happen with XRouter.
Not everyone agrees with the "New-N Paradigm, so the choice
of which features to enable is left you you.
Mixing Modes
~~~~~~~~~~~~
In quiet areas, you may wish to mix APRS and normal
connected-mode operations on the same port, and that is the
default if you enable any of the above flags in DIGIFLAG.
However, in most areas, APRS tends to be on a separate
frequency reserved for "unconnected nets", and you may wish
to prevent people from connecting to the node or downlinking
from it on your APRS-only ports.
The CFLAGS keyword can be used in the PORT section of the
XROUTER.CFG file to control uplinking and downlinking as
follows:
0 Prevent uplinking and downlinking.
1 allow uplinking only.
2 allow downlinking only.
3 allow both up and downlinking.
ID Beacons
~~~~~~~~~~
Whilst all sysops are urged to include an APRS position in
their normal IDTEXT, a dedicated APRS port may require a more
detailed and cryptic ID beacon, therefore you may define a
different IDTEXT for each port if necessary.
A "regular" port would include a position followed by some
human-readable text, whereas the APRS-only ports would
include additional data such as power / height / gain /
direction, wind speed, bowel movements etc., in encoded
format.
The IDTEXT may be sent via digipeaters by including the
IDPATH keyword in the relevant port configuration section of
XROUTER.CFG.
Dupe Suppression
~~~~~~~~~~~~~~~~
XRouter checks for its own callsign or alias in previously
used digipeaters to prevent digi looping. It will not
digipeat frames it originated, and will not digipeat the
same frame within 9 seconds.
DX Facility
~~~~~~~~~~~
The "DX [port]" command shows the best received APRS DX. It
only works if XRouter's position has been defined as
described earlier.
The DXFLAGS keyword in the .CFG file controls whether or not
the DX list contains callsigns heard via digipeaters.
The DX list may be queried by RF stations, by means of APRS
queries.
APRS / UI-View queries
~~~~~~~~~~~~~~~~~~~~~~
XRouter responds to the following general queries:
?APRS? All stations query.
~\xFD~ UI-View general query.
?IGATE? Igate query.
The response to the first two is the ID beacon for the port,
which should contain the APRS position and station type. The
response to the ?IGATE? query shows the message and local
user counts.
The following "directed" queries (directed at portcall) are
supported:
?APRSD Directly heard stations list.
Responds with a list of stations heard directly
on the receiving port (i.e. not via digipeaters
or via 3rd party networks)
?APRSM Un-delivered messages query.
If there are any un-delivered or expired
messages addressed to the sender of the query,
they are re-activated and transmitted on the
port which received the query.
?APRSP Station Position.
If the sysop has defined XRouter's position, it
is sent in response to this query.
?APRSS Station status.
The response consists of the software type and
version plus a list of the enabled generic
digipeater calls.
?PING?
?APRST Trace Route.
Both of these return the route by which the
query was received.
~\xFE~n UI-View "ping".
The response to this query is a UI-View ack for
the ping id.
~\FC~n UI-View "DX" query.
Responds with a UI-View ack, followed by details
of the best DX heard directly by XRouter
(digipeated packets are NOT included!)
See www.aprs.org for more info about APRS.
**SEE ALSO**
AMSG(1) -- APRS Messaging Mode.
APRS-SRV(9) -- APRS Server.
APRS-SVC(9) -- NetRomX APRS Service.
DX(1) -- Display Distant APRS stations.
IGATE(9) -- APRS Igate.
MHEARD(1) -- Display Recently Heard Stations.
MHEARD(9) -- About the MHeard Facility.
WX(1) -- Display APRS Weather Information.
XROUTER.CFG(8) -- Main Configuration File.
----
==== APRS-SRV ====
APRS-SRV(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
APRS-SRV -- APRS Server.
**DESCRIPTION**
XRouter includes a rudimentary APRS server, which enables
suitable APRS clients, such as UI-View, to connect to it on
the LAN and exchange APRS traffic. The number of concurrent
clients is not limited.
The server is available via NetRomX service 14, and TCP/IP.
TCP Port Number
~~~~~~~~~~~~~~~
The server listens for incoming connections on TCP port 1448.
There is a tradition of choosing port numbers for APRS
servers which represent the frequencies used by APRS, hence
port 1448 was chosen because XRouter originates in the UK,
and many European countries use 144.800 MHz.
Overview Of Server
~~~~~~~~~~~~~~~~~~
The following APRS packets are sent to clients:
- APRS traffic received by any of XRouter's radio ports.
- Traffic sent by other clients.
- Traffic sent by users of XRouter's APRS messaging shell.
- Filtered traffic from Internet APRS servers (if
XRouter's IGATE is connected to an Internet APRS server)
APRS packets from clients are distributed as follows:
- To other clients, excluding the sender.
- To XRouter's APRS messaging shell.
- To radio ports (only if client is fully registered)
- To Internet APRS servers via IGATE (if IGATE enabled).
Registration and Login
~~~~~~~~~~~~~~~~~~~~~~
Registration of clients is necessary to prevent unauthorised
use of radio frequencies by unlicensed people.
This may seem overly restrictive if your system is only used
on a private LAN, but if you are connected to the Internet,
it is essential.
For example, if an unlicensed user connects to your server
via the Internet, he must be prevented from sending traffic
to your local RF ports. He must also be prevented from
sending traffic via your IGATE (if it is enabled) into the
Internet system, and thence to other people's RF ports.
Therefore, clients are required to complete a log-in process
before they are allowed to send any traffic. Log-in is not
required for receive-only operations.
The server accepts two different types of login. When a
user registers an APRS client program such as UI-View, he
receives a "validation number" which XRouter uses in
combination with the callsign to verify the user. Verified
users may send traffic to local RF ports, or if IGATE is
active, via other IGATES.
If the user has NOT registered his copy of UI-View, the
default validation number of "-1" allows him to send traffic
to other clients and to the Internet, but that traffic will
not be gated locally to RF, and is marked in such a way that
it will not be gated to RF by other IGATES. This allows
unregistered clients to communicate with each other via the
Internet, but not via RF. The client may only send APRS
packets whose source callsign matches the login callsign.
The alternative login system allows clients to verify
themselves by supplying their callsign and a password which
has been agreed with the sysop. The password replaces the
validation number in a login string.
The login string is the only "command" accepted by the APRS
server, and must take the form:
"user pass "
where could be either a validation number or a
text string, for example, "user g8pzt pass beanzmeanzheinz",
or "user g7zzz pass 32751". Login is not acknowledged.
The Client Connection
~~~~~~~~~~~~~~~~~~~~~
There is no time-out on client connections, therefore there
is no need for the client to send "keep-alive" signals.
If the client connection is too slow to cope with the
incoming data rate, packets to the client may be discarded.
Local <> Internet Server Gating
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If IGATE is not running, no packets are gated to or from the
Internet.
Packets received from the Internet are not gated to clients
unless they satisfy the IFILTER (Internet Filter) filtering
rules in IGATE.CFG. Likewise, packets received from clients
are not gated to the Internet unless they satisfy the
PFILTER (Packet Filter) rules.
The following traffic is NOT gated from RF to Internet
- Packets in "third party" format.
- Packets which do not include the network identifier
"TCPIP" in the digi path.
- Packets which include the dummy callsigns NOGATE or
RFONLY in the digi path.
Using UI-View as a Client
~~~~~~~~~~~~~~~~~~~~~~~~~
Select Setup/APRS Server Setup.
In the box marked "Select A Server", enter the hostname and
TCP port number of XRouter's APRS server, e.g.
"myserver:1448" or "192.168.0.2:1448". If the client is on
the same computer as XRouter, use "localhost:1448" or
"127.0.0.1:1448". (If you use a private hostname, you may
need to add a suitable entry into the HOSTS file in the
WINDOWS directory, or Linux equivalent.)
Check the boxes marked "Open the gateway" and "Gate local
messages".
If you have a registered version of UI-View, check the box
marked "APRServe log on required", and enter your validation
number.
If your copy of UI-View is unregistered, you will be able to
log on to XRouter's APRS server with the default validation
number of -1, but your packets will not be gated to RF.
To obtain full privileges using an unregistered copy, you
must have a password, which must be registered with your
callsign in XRouter's USERPASS.SYS file. The callsign must
not include the SSID, e.g. if UI-View's callsign is
"G8PZT-11", the entry in USERPASS.SYS should simply be
"G8PZT". Un-check the "APRServe log on required" box, and
in the box marked "Text to send upon connection" enter
UI-View's callsign (with SSID) and your password in the
following form:
user g8pzt-11 pass virago
**SEE ALSO**
APRS(9) -- APRS in XRouter.
APRS-SVC(9) -- NetRomX APRS Service.
APRSPORT(7) -- TCP Port for APRS Server.
IGATE(9) -- APRS-Internet Gateway.
IGATE.CFG(8) -- Igate Configuration File.
TCP-PORTS(6) -- TCP Service Ports.
USERPASS.SYS(8) -- User Passwords File.
XROUTER.CFG(8) -- Main Configuration File.
----
==== APRS-SVC ====
APRS-SVC(9) XROUTER REFERENCE MANUAL 22/9/2023
**NAME**
APRS-SVC -- NetRomX APRS Service.
**DESCRIPTION**
NetRomX standard service 14 is an "APRS server". This relays
APRS packets in the following way:
The server sends the following APRS packets to clients:
- Traffic received by any of XRouter's radio ports.
- Traffic sent by other clients of the server.
- Traffic sent by users of XRouter's APRS msg shell.
- Filtered traffic from Internet APRS servers (if
XROUTER's IGATE is connected to such a server)
APRS packets from clients to server are distributed as
follows:
- To other clients, excluding the sender.
- To XRouter's APRS messaging shell.
- To radio ports
- To Internet APRS servers via IGATE (if IGATE is running).
Traffic is in plain ASCII text, with lines delimited by
Carriage Return (CR) (ASCII 13). For example:
MB7UYL>APXR01:=5224.00N/00215.00Wn Kidderminster, Worc's
{Xrouter 501y}
VE2PKT-4>ID:!4625.96N/07237.66WB 147.435Mhz 1.2Kb, VE2PKT-4,
XRPI Router
VK2DOT-1>ID:!3323.21S/15121.42E# Niagara Park Node -
(VK2DOT-1) 44.136.16.1
No login is required, and no commands are accepted. Simply
disconnect when you are finished.
**SEE ALSO**
APRS(9) -- APRS in XRouter.
APRS-SRV(9) -- APRS Server.
IGATE(9) -- APRS-Internet Gateway.
SERVICES(9) -- NetRomX Standard Services.
**APRS-SVC(9) END OF DOCUMENT**
----
==== ARP ====
ARP(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
ARP -- Address Resolution Protocol
**DESCRIPTION**
The Address Resolution Protocol handles the association
between IP addresses and "hardware" (Ethernet or AX25)
addresses.
In order for IP datagrams to be handled by AX25 or Ethernet
links, they must first be "wrapped" in AX25 or Ethernet
packets.
The destination addresses of these packets is determined by
the process of "Address Resolution".
For example, imagine that you want to send an IP datagram to
one of your neighbour nodes via RF. TNC's don't understand
IP, so you can't simply transmit a raw IP datagram onto the
airwaves. Your node must first "wrap" the datagram in an
AX25 frame addressed to the neighbour node. Upon receipt by
the neighbour, the frame is "unwrapped", and the IP datagram
contained therein is handled by the IP router.
Exactly the same process is required to send IP over
Ethernet, except that Ethernet frames are used instead.
The destination address is usually obtained from an "ARP
Table", that stores each neighbour's IP addresses along with
their AX25 or Ethernet address. This table can be built
manually using ARP commands, or dynamically. A typical ARP
table would contain entries similar to this:
IP Address Type Hardware addr
------------------------------------------
44.131.91.2 AX25 G8PZT
44.131.90.6 AX25 G8JVM-5
192.168.0.23 Ether 00:12:34:66:21:DA
If the destination address is not in the ARP table, XRouter
broadcasts an "ARP request" packet, asking if anyone knows
the hardware address associated with the destination IP
address. The destination node replies with an "ARP reply",
giving the AX25 address that the datagram should be
addressed to. XRouter adds this data to the ARP table, then
uses it to wrap and send the datagram.
The "ARP entries" in the table usally have a finite lifetime
(usually 15 minutes), because neighbours sometimes change
their hardware addresses. This lifetime may be altered by
the sysop.
When an entry gets too old, it is purged from the table,
forcing XRouter to send another ARP request, thus picking up
the new hardware address. The sysop may override this by
"locking-in" ARP entries.
A router other than the destination may reply to an ARP
request if it is the gateway to a "hidden" network containing
the destination. This is called "proxy ARP", is implemented
in XRouter and is detailed in RFC1027.
The ARP protocol is detailed in RFC826.
**SEE ALSO:**
ARP(1) -- ARP Commands.
----
==== AUDIO ====
AUDIO(9) XROUTER REFERENCE MANUAL 2/9/2023
**NAME**
AUDIO -- Audio Output.
**DESCRIPTION**
Raspberry Pi's and modern laptops do not have the traditional
"PC speaker", so they cannot play the usual console bells and
alerts. However, a sound device can be used instead.
To enable sounds (assuming a suitable sound device is
present), put the following directive anywhere in XROUTER.CFG
# Audio device for sound output:
# Default OSS device is /dev/dsp (/dev/audio on Rasp pi)
#
AUDIODEVICE=/dev/dsp
#
This uses OSS, (a) because OSS has been found to work much
better than ALSA, and (b) because ALSA requires the host
machine to have the "libasound" library installed. The
XRouter philosophy is to avoid dependencies where possible.
Having said that, XRouter can be supplied in "with-ALSA"
versions if required.
In order to use sound, on some platforms you may need to
first run the command:
sudo modprobe snd-pcm-oss
The command only needs to be run once. Thereafter XRouter
can be started and stopped without needing to use it again.
On some platforms the modprobe command is not needed at all,
but Linux has been gradually phasing out OSS, making it ever
more awkward to use.
You could add "snd-pcm-oss" into the /etc/modules file, which
causes it to load the module at bootup.
If snd-pcm-oss is not found on the system, and cannot be
installed from a repository, one method which has been found
to be successful is to run XRouter from within an OSS
"wrapper" program such as "aoss" like this:
"aoss /home/pi/xrouter/xrpi"
**CAVEATS**
The downside of OSS is that it won't share the audio device,
so if you have XRouter's audio enabled but another app is
already using the sound device, XRouter will fail at boot.
**SEE ALSO**
AUDIODEVICE(7) -- Specify Audio Device
BELL(1) -- Console sounds control
XROUTER.CFG(8) -- Main Configuration File.
----
==== AUTOQUAL ====
AUTOQUAL(9) XROUTER REFERENCE MANUAL 19/10/2023
**NAME**
AUTOQUAL -- Automatic Route Quality.
**DESCRIPTION**
Automatic Route Quality Measurement" (Autoqual) is an optional
tool to help sysops set consistent and meaningful NetRom route
qualities.
Background
~~~~~~~~~~
NetRom makes routing decisions based on a fairly arbitrary
metric, i.e. the "route quality", which is assigned by sysops,
and disseminated in nodes broadcasts.
In the better-managed parts of the NetRom network, route
qualities tend to be assigned according to the baud rate of
the link, with adjustments for retry rates, duplex / simplex
and shared channels.
However, there is no standard methodology for assigning
quality, so not only will each sysop's notion of quality
differ from that of other sysops, but also he will probably
incorrectly assign the relative qualities of his own links.
This leads to inconsistency and distorted routing.
In other parts of the network, route qualities are simply
assigned to 192 regardless of how good or bad the link is.
This also leads to inconsistency and less-than-optimal
routing decisions.
The actual "goodness" of a link may continually change with
atmospheric conditions, data throughput, other channel
activity, QRM etc. At certain times of day for example, it
may be better to use an alternative link.
A more accurate notion of "goodness" is simply the "Round
Trip Time" (RTT) for the link, i.e. the time taken to send a
packet and get a reply. After all, this is what *really*
matters to users. A link which responds quickly (i.e. with a
low RTT) is perceived by users to be better than a link which
responds slowly. The RTT will track changes in retry rate,
channel loading etc.
The RTT can be easily and consistently measured by software
on a continuous basis, thus the "goodness" of the link is
accurately known at all times, and all routers of the same
type will give comparable values independently of the sysop's
notions of quality.
Implementation
~~~~~~~~~~~~~~
XRouter continually measures the RTT of neighbour links and
uses the smoothed value to calculate a notional "route
quality" every 5 minutes. The maximum, minimum and standard
deviation of this quality are calculated and recorded for
later display, and the value is further smoothed.
The smoothed calculated quality is displayed by the "R Q"
command, and can either be used as a guide to allow the sysop
to fix the RQ at a sensible value, or if the route has been
configured for it, XRouter can use it dynamically, by setting
the route's quality to the calculated value.
This RTT to quality conversion is tailored to the British
notion of quality, which gives somewhat lower but more
meaningful qualities than used elsewhere. For example, a
typical 1200 baud half-duplex link with low retry rate would
produce a calculated quality around 120. A good 9600 baud half
duplex link would equate to around 190, with 210 for a really
good full duplex 9k6 link.
RTT measurement primarily uses L3RTT frames, but in their
absence it also uses measurements of traffic throughput and
retry rate.
Enabling Automatic Route Quality
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Route quality calculation is automatic and continuous.
However the calculated value is not actually used without the
sysop's consent.
In order to allow the route quality to be automatically
adjusted, the sysop must specify a RQ between 256 and 511
when adding a route using the "ROUTE ADD" command.
Alternatively, setting the PORT quality between 256 and 511
will cause all *new* routes (not locked in ones) learned on
that port to use automatic quality.
A quality between 256 and 511 will instruct XRouter to use
"automatic" quality, with an initial value of (qual-256).
**SEE ALSO**
ROUTES(1) -- Add, Drop and List NetRom Routes.
QUALITY(7) -- Default NetRom Quality.
----
==== AXIP ====
AXIP(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
AXIP -- AX25-over-IP Tunnelling.
**DESCRIPTION**
AXIP is AX25 "encapsulated" within IP datagrams. This
enables AX25 systems to communicate with each other via
TCP/IP networks (e.g. the Internet). The frame structure is
as follows :
.-----------.------------------------.-----.
| IP header | AX25 frame | CRC |
'-----------'------------------------'-----'
(20 bytes) (Typically 15-340 bytes) 2 bytes
The AX25 links created using AXIP can in turn support NetRom
and amateur TCP/IP, just like real radio links.
Setting Up AXIP Links
~~~~~~~~~~~~~~~~~~~~~~
Assuming you have a prospective AXIP partner, you would set
up an AXIP link as follows:
1) Configure and test IP routing between you and your
partner. If you don't have reliable IP routing there's no
point in proceeding!
If you are linking via the Internet, it makes sense to
use the Internet IP addresses for this purpose, rather
than the amateur (44.x.x.x) ones, because the routing is
more reliable and the throughput is faster.
2) If your partner has a dynamic IP address, they must have
an account with a "dynamic DNS" provider, and you must
use the hostname thus provided for all operations. If
you use the IP address instead, the link will stop
working when the address changes.
3) If you wish to use your prospective partner's hostname
(e.g. "g8pzt.ath.cx") instead of their IP address, your
system needs access to a Domain Name Server (DNS). This
would usually be provided by Linux nowadays, so you may
remove all "DNS=" lines from XROUTER.CFG.
4) If using the partner's hostname, verify that
"PING " resolves the address correctly.
5) Add an AXIP interface to XROUTER.CFG as follows:
INTERFACE=7
TYPE=AXIP
MTU=256
ENDINTERFACE
(Choose the interface number to suit yourself).
This interface can support an unlimited number of AXIP
PORTs. You may define multiple interfaces if your ports
need different MTU's.
Only TYPE=AXIP and MTU= are required, all other
parameters are ignored (at present).
6) For each AXIP partner, add a PORT similar to this:
PORT=8
ID=AXIP link with WA3IP
INTERFACENUM=7 <-- Points to INTERFACE above
IPLINK=55.73.88.69
FRACK=2000
RESPTIME=200
ENDPORT
You must specify at least ID, INTERFACENUM, and IPLINK.
IPLINK is the remote host's IP address or hostname. It is
more efficient to use IP addresses, if you are able to do
so, because it removes the need to resolve the hostnames,
but see (2) above. The assigned "protocol number" for
AXIP is 93 (decimal).
MAC parameters such as TXDELAY, TXTAIL, FULLDUP, PERSIST,
SLOTTIME, SOFTDCD etc. are meaningless for AXIP, but
FRACK, RESPTIME, PACLEN, MAXFRAME, QUALITY etc. operate
as normal.
On fast internet links you may wish to use a much lower
FRACK, say 2000ms, than on radio. It is not recommended
that you reduce it much below 1000ms, as it needs to be
*at least* twice the worst round-trip time plus the other
end's RESPTIME.
RESPTIME is probably the one which will have most effect
on the responsiveness of the AX25 link, because it
controls the time delay between receiving a packet and
sending an ACK. It should be just a little more than the
time it takes to receive a maximum length packet. For
example, at a data rate of 56Kbits/sec, a 256 byte packet
lasts less than 50msec, so RESPTIME=50 would be adequate.
However the timing jitter due to operating under Windows
means that RESPTIME should be more like 200ms.
7) If XRouter is indirectly connected to the Internet via an
intermediate router, that router will probably be using
some form of NAT (Network Address Translation) to share
one "public" IP address between several systems on your
LAN. The "front end" router will probably route outgoing
AXIP without problem, but it will not know where to send
incoming AXIP unless explicitly configured.
Configuring such a router for AXIP usually involves
specifying a protocol number (93 for AXIP), and the LAN
IP address of a machine to which it should be routed,
i.e. XRouter's LAN IP address.
You are advised that not all domestic routers can be
configured to route incoming AXIP as it is not a
commercially recognised protocol. Some routers only
allow TCP and UDP port redirection, with no provision for
any other protocol. If you or your link partner have
such a router, you may need to consider AXUDP instead -
see later.
8) Your link partner must set up a reciprocal arrangement,
i.e. their IPREMOTE must be set to your public IP address
or hostname.
If everything has been set up correctly, you should be able
to connect with your new neighbour node immediately, at least
at AX25 layer 2. You can test this by entering the command
"C n ALIAS-1", where n is the PORT number of your link, and
ALIAS is the node alias of your link partner. If this doesn't
work, you or your partner have made a mistake somewhere in
the configuration.
Even if everything is configured correctly, it may take a
while for NetRom to configure itself for the new link, as the
nodes need to exchange NODES broadcasts first. Once they
have done so, there should be no delays in future.
Notes
~~~~~
You may of course use AXIP to communicate between nodes on
the LAN, as long as they are not on the same machine.
If you have more than one node on your LAN using AXIP, your
Internet router is only able to direct incoming AXIP to *one*
of them. This means you can only have one AXIP node per
public IP address.
DO NOT set up an AXIP link to a link partner if you already
have an AXUDP link. This is a common mistake, and is likely
to cause problems!
Using one port per neighbour may seem wasteful, but it is a
reliable method, and it allows you to monitor exactly what is
going on.
IP Routing Over AXIP
~~~~~~~~~~~~~~~~~~~~
As mentioned earlier, you may route amateur IP (44.x.x.x) over
your new AXIP link, and are encouraged to do so. Whilst the
amprnet purists will argue that this is not as efficient as
IP-over-IP (since it uses a few more bytes), it is a LOT
easier to set up, and doesn't require that your domestic
router and operating system can route IP-over-IP (many
routers are not able to route incoming IP-over-IP to a
specific PC, and Windows' IP stack totally blocks IP-over-IP).
To route amateur IP over an AXIP link, simply add an IP route
entry directing the required subnet to your neighbour's IP
address on the AXIP port using datagram mode. For example, if
the AXIP port is port 8, and the link partner (44.136.20.2)
is able to accept all amprnet traffic for Australia, the
entry would look like this:
IP ROUTE ADD 44.136.0.0/16 44.136.20.2 8 d
The source IP address for this mode of routing is the
IPADDRESS of the AXIP port. Therefore, if XRouter's main
IPADDRESS (in XROUTER.CFG) is not a 44-net address, you must
override it with a 44-net address on the AXIP port. If the
main IPADDRESS is a 44-net address, which is the recommended
configuration, do not specify IPADDRESS in the PORT
configuration block.
**SEE ALSO**
AXUDP(9) -- AX25-over-UDP Encapsulation
IP(1) -- IP Routing / Configuration Commands.
IPENCAP(9) -- IP-in-IP Encapsulation.
IPLINK(1) -- Display / Set a Port's IPLINK.
IPLINK(7) -- Peer Address of a Link.
IP-PRIMER(9) -- IP Addressing / Routing Primer.
IPROUTE.SYS(8) -- IP Routing / Configuration File.
XROUTER.CFG(8) -- Main Configuration File
----
==== AXSCTRL ====
AXSCTRL(9) XROUTER REFERENCE MANUAL 19/10/2023
**NAME**
AXSCTRL -- TCP/IP Access Control.
**SYNOPSIS**
This file deals with "access control", and is mainly of
concern if your system is directly connected to a non-amateur
TCP/IP network such as the Internet.
**DESCRIPTION**
Some of the users who access your system via the Internet may
be genuine Radio Amateurs, who may legitimately downlink on
radio frequencies, while other users may not. And different
countries may have different rules governing the
inter-connection of radio and non-radio networks.
Therefore some form of configurable access control is
required, and this is provided by the entries in ACCESS.SYS,
which specify the login requirements according to the
caller's IP address. For example you may specify that hosts
on your private LAN require no password.
If ACCESS.SYS is not present, the default action is for logins
to require a valid callsign only.
The entries in ACCESS.SYS allow various levels of access
control, e.g. username only, valid amateur radio callsign
only, username plus password, and valid callsign plus
password. They may also be configured for "guest access".
This is intended to let people look around, but not to do
anything that would cause a transmission to be made.
Guests are prevented from using the SEND, CHAT and CONNECT
commands, and from sending APRS messages using the APRS
messaging shell. For the TELNET command they are restricted
by the rules in the file TELGUEST.ACL. If that file is not
present, guests are denied access to the TELNET command.
Guests are not necessarily unlicenced people. They may simply
be hams who don't yet have a password for your system.
If an entry in ACCESS.SYS specifies that a login password is
required, the password should be located in file USERPASS.SYS.
Failure to meet the access requirements results in immediate
disconnection of the caller.
Sysop access using the "@" command, RLOGIN (tcp port 513) and
FTP do not use USERPASS.SYS, and are all controlled instead
by entries in the sysop password file, PASSWORD.SYS.
The "@" command, which is normally performed on publicly
visible radio links, uses the password to send a grid of
numbers, from which the caller must select one line and send
the matching characters from the password.
FTP uses the password grid method, but can be configured to
use use plain password (secure wired links only) if SYSOP=1
has been included in the appropriate PORT configuration in
XROUTER.CFG.
RLOGIN must only be used on secure wired networks because the
caller must send the password itself.
Access to the APRS server is normally controlled by the
"Validation number" which the user obtains from the author of
his APRS client program upon registration. However, if the
user has not registered his client, he may be granted access
to the server by including his callsign and a password in
USERPASS.SYS.
The Telnet Proxy and AGWHOST servers also use passwords in
USERPASS.SYS.
For further information you are referred to the sections
detailing the ACCESS.SYS, PASSWORD.SYS and USERPASS.SYS
files.
**SEE ALSO**
ACCESS.SYS(8) -- Telnet Access Control File.
APRS-SRV(9) -- APRS Server.
IDS(9) -- Intrusion Detection System.
PASSWORD.SYS(8) -- Sysop Password File.
USERPASS.SYS(8) -- User Passwords File.
XROUTER.CFG(8) -- Main Configuration File.
----
==== AXTCP ====
AXTCP(9) XROUTER REFERENCE MANUAL 29/9/2023
**NAME**
AXTCP -- AX25-over-TCP Tunnelling.
**DESCRIPTION**
AXTCP is AX25 "encapsulated" within a TCP stream. This
enables AX25 systems to communicate with each other via TCP/IP
networks (e.g. the Internet) in a similar way to AXIP and
AXUDP. The frame structure is as follows:
.-----.--------.---------.--------------------.-----.
| Len | IP hdr | TCP hdr | AX25 frame | CRC |
'-----'--------'---------'--------------------'-----'
Bytes: 2 20 20 Typically 15-340 2
(Len = (framelength-2), CRC = Cyclic Redundancy Check)
AXTCP is particularly useful when it isn't possible to route
AXIP or AXUDP, as detailed below:
The Problem
~~~~~~~~~~~
Many people in the UK use mobile broadband "dongles" to
provide their Internet connection, either because it's a lower
cost option than fixed-line broadband, or because the latter
is not available in their area, or because they're "roving".
As an example of the latter, a "mobile" node may be
established in a vehicle and used to provide a local packet
"hot-spot" for special events, emergency datacomms etc. It may
be using mobile broadband, WiFi or other available Internet
connections, and it is highly unlikely that such a connection
could be configured to route AXIP or AXUDP.
The characteristics of mobile Internet which prevent the use
of AXIP or AXUDP are that (a) the subscriber's IP address is
volatile (so you can't set IPLINK), and (b) the subscriber is
on a private network behind a NAT firewall, which doesn't pass
incoming AXIP or AXUDP traffic!
The solution
~~~~~~~~~~~~
AXTCP offers a solution to these problems. It differs from
AXIP and AXUDP in three respects:
- Firstly, it uses a bidirectional stream protocol (TCP/IP)
which guarantees that the packets can flow in both
directions, even through several stages of NAT and
firewalling.
- Secondly, it uses a client-server approach where the fixed
server has no need to know the mobile client's IP address
and port number. The connection is initiated by the client,
and the server simply responds via that connection.
- And thirdly, the TCP protocol ensures that no AX25 packets
are lost.
The AX25 links created using AXTCP can in turn support NetRom
and amateur TCP/IP, just like real radio links.
To use AXTCP, the "static" node is configured as an AXTCP
server, and the "mobile" node as an AXTCP client.
Configuring XRouter for AXTCP
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AXTCP is enabled by declaring an INTERFACE with TYPE=AXTCP. A
single PORT is then attached to that interface.
AXTCP interfaces can act as server, client, or both at once,
depending on which keywords are included.
An AXTCP server can support several simultaneous client
connections, and a client can connect to several servers
simultaneously.
Note: When configuring a server, you must ensure that incoming
TCP/IP connections are directed to the server's TCP port, i.e.
there must be suitable NAT entries or "port forwarding" set
up in the Internet "front end" router.
Example AXTCP Server Interface
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following configures an AXTCP server, listening for
clients on TCP port 9393:
INTERFACE=5 <-- change to suit yourself
TYPE=AXTCP
MTU=256
INTNUM=9393 <- Server port
ENDINTERFACE
The INTNUM parameter activates the server and specifies the
TCP port that it listens on. If this is zero, or not
specified, the server is disabled.
Example AXTCP Client Interface
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This specifies a client which connects with the KIDDER node,
whose address is g8pzt.ath.cx, port 9393:
INTERFACE=5
TYPE=AXTCP
MTU=256
CONFIG=KIDDER g8pzt.ath.cx 9393
ENDINTERFACE
The CONFIG directive is used to specify a server, thereby
activating client mode. The format is as follows:
CONFIG=
You may specify additional servers, by including a CONFIG for
each one. There is no limit to the number of CONFIG
directives that can be used with a single interface.
Combined AXTCP Client/Server Interface
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A combined interface is specified by including both INTNUM and
CONFIG directives. For example, this combines a server
listening on TCP port 9393 with 3 client connections:
INTERFACE=5
TYPE=AXTCP
INTNUM=9393
MTU=256
CONFIG=DORSET 216.23.45.91 10093
CONFIG=WALES gw3xr.dyndns.org 9394
CONFIG=Brum bm23.ath.cx 7507
ENDINTERFACE
This is just an example, and it could only be used at a
"static" node, in which case the client connections could
be replaced by AXIP or AXUDP anyway.
Such a configuration *couldn't* be used for "mobile" node,
because there's no way of directing incoming TCP port 9393 to
a mobile server!
AXTCP PORT Settings
~~~~~~~~~~~~~~~~~~~
A PORT attached to an AXTCP interface needs no special
configuration, and should simply be configured with
parameters (FRACK, RESPTIME, RFBAUDS) approriate to a high
speed connection, for example:
PORT=8
ID=AXTCP Operations
INTERFACENUM=5
FRACK=2000
RESPTIME=200
RFBAUDS=56000
ENDPORT
MAC parameters such as TXDELAY, TXTAIL, SLOTTIME, PERSIST,
FULLDUP, SOFTDCD etc. are meaningless for AXUDP, but FRACK,
RESPTIME, PACLEN, MAXFRAME, QUALITY etc. operate as normal.
On fast internet links you may wish to use a much lower FRACK,
say 2000ms, than on radio. It is not recommended that you
reduce it much below 1000ms, as it needs to be *at least*
twice the worst round-trip time plus the other end's RESPTIME.
RESPTIME is probably the one which will have most effect on
the responsiveness of the AX25 link, because it controls the
time delay between receiving a packet and sending an ACK. It
should be just a little more than the time it takes to receive
a maximum length packet. For example, at a data rate of
56Kbits/sec, a 256 byte packet lasts less than 50msec, so
RESPTIME=50 would be adequate. However the timing jitter due
to operating under Windows means that RESPTIME should be more
like 200ms.
By default, all AXTCP connections use the same PORT, but if
you prefer to use one port per neighbour, see the following
section. You must NOT attach more than one PORT to an AXTCP
interface.
Multiple Interfaces / Ports
~~~~~~~~~~~~~~~~~~~~~~~~~~~
A single AXTCP server can accommodate many clients, so there
is no practical need to use more than one AXTCP interface and
port.
This is analogous to having several nodes on the same radio
frequency, except that the nodes don't see each other's
transmissions, and there is no "hidden station" effect.
You may however prefer to assign each AXTCP partner to a
seperate port, analogous to having a dedicated radio
frequency for each neighbour. In this case you may configure
several interfaces, each with a single PORT attached.
The only proviso is that if INTNUM is used, no two AXTCP
interfaces may use the same INTNUM.
Transaction Logging
~~~~~~~~~~~~~~~~~~~
If the AXTCP option of LOGFLAGS is non-zero, XRouter logs
AXTCP connections and disconnections, otherwise nothing is
logged.
**NOTES**
When a client connects to a server, it should immediately be
possible to force an AX25 level 2 connection from either
client or server, by entering the command "C n ALIAS-1",
where n is the AXTCP port number, and ALIAS is the node alias
of the peer.
However, it may take a few minutes for the client and server
to commence NetRom operations, because each end must first
receive a nodes broadcast from the other. The link-up time
will be shorter if a prior link has been made recently. It
is hoped to speed up the linking time in a later version.
**SEE ALSO**
AXTCP-IFACE(6) -- AXTCP Interface.
AXIP(9) -- AX25-over-IP Encapsulation
AXUDP(9) -- AX25-over-UDP Encapsulation
XROUTER.CFG(8) -- Main Configuration File
----
==== AXUDP ====
AXUDP(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
AXUDP -- AX25-over-UDP Tunnelling.
**DESCRIPTION**
AXUDP is AX25 "encapsulated" within UDP datagrams. This
enables AX25 systems to communicate with each other via
TCP/IP networks (e.g. the Internet). The frame structure is
as follows:
.-----------.------------.------------------------.-----.
| IP header | UDP header | AX25 frame | CRC |
'-----------'------------'------------------------'-----'
(20 bytes) (8 bytes) (Typically 15-340 bytes)
It is slightly less efficient than AXIP, because there is an
extra 8 byte UDP header between the IP header and AX25
portion of the frame, but the difference is not significant.
One of the problems with AXIP is that many domestic routers
cannot be configured to route AXIP to a specific PC. And even
if they can, it can only be routed to one PC. This means you
can only have one AXIP node per public IP address.
The major advantage of AXUDP over AXIP is that it can usually
be handled by domestic Internet routers without problem. And
since UDP is a "ported" protocol (AXIP is "portless") you may
have more than one AXUDP node on the same public IP address,
by assigning them different UDP ports. The domestic router is
then able to route incoming packets according to UDP port.
The AX25 links created using AXUDP can in turn support NetRom
and amateur TCP/IP, just like real radio links.
**OPTIONS**
There are two main ways to set up formal AXUDP links, namely
"One-Link-Per-Port" (recommended) or "Many-Links-Per-Port"
(the BPQ way). Configuration of these is discussed later.
Although "One-Link-Per-Port" uses more PORTs, it is the more
flexible option. It is analagous to a full duplex radio link
on a private frequency. It allows all the link parameters to
be configured independently of any other link. It also allows
the traffic to be monitored and captured without clutter from
other traffic. It is more efficient in terms of processing,
and supports connections to any of the peer's callsigns,
SSIDs or aliases without any extra configuration.
The "Many-Links-Per-Port" option is analogous to a radio link
on a shared frequency. All ax25 connections have to share the
same PORT parameters, and it is difficult to monitor one link
without clutter from the others. It is computationally less
efficient, and only supports connections to pre-defined SSIDs
and aliases.
Both of the above methods can co-exist.
**CONFIGURATION**
Assuming you have a prospective AXUDP partner, both of the
above mentioned methods require steps 1 through 5 below:
1) Configure and test IP routing between you and your
partner. If you don't have reliable IP routing there's no
point in proceeding!
If you are linking via the Internet, it makes sense to
use the Internet IP addresses for this purpose, rather
than the amateur (44.x.x.x) ones, because the routing is
more reliable and the throughput is faster.
2) If your partner has a dynamic IP address, they must have
an account with a "dynamic DNS" provider, and you must
use the hostname thus provided for all operations. If
you use the IP address instead, the link will stop
working when the address changes.
3) If you wish to use your prospective partner's hostname
(e.g. "g8pzt.ath.cx") instead of their IP address, your
system needs access to a Domain Name Server (DNS). This
would usually be provided by Windows or Linux nowadays,
so you may remove all "DNS=" lines from XROUTER.CFG.
4) If using the partner's hostname, verify that
"PING " resolves the address correctly.
5) Add an AXUDP interface to XROUTER.CFG as follows:
INTERFACE=9
TYPE=AXUDP
MTU=256
ENDINTERFACE
(Choose the interface number to suit yourself).
This interface can support an unlimited number of AXUDP
PORTs. You may define multiple interfaces if your ports
need different MTU's.
Only TYPE=AXUDP and MTU= are required, all other
parameters are ignored (at present).
Step 6 has two mutually exclusive alternatives. 6a is for
"One-Link-Per-Port" and 6b is for "Multiple-Links-Per-Port".
6a) One-Link-Per-Port:
For each AXUDP partner, add an AXUDP port similar to this:
PORT=8
ID=AXUDP link with VK1UDP
INTERFACENUM=9
IPLINK=27.69.88.73
UDPLOCAL=93
UDPREMOTE=93
FRACK=2000
RESPTIME=200
ENDPORT
You must specify at least ID, INTERFACENUM, and IPLINK.
IPLINK is the link partner's IP address or hostname. It
is more efficient to use IP addresses, if you are able to
do so, because it removes the need to resolve the
hostnames, but see (2) above.
UDPLOCAL and UDPREMOTE are the UDP "service port" numbers
for each end of the link, and if omitted they default to
93 (don't confuse these with *protocol number* 93, which
is AXIP). The numbers are independent, e.g. you may use
93 for UDPLOCAL and 10093 for UDPREMOTE).
MAC parameters such as TXDELAY, TXTAIL, FULLDUP, PERSIST,
SLOTTIME, SOFTDCD etc. are meaningless for AXUDP, but
Layer 2 parameters such as FRACK, RESPTIME, PACLEN,
MAXFRAME, QUALITY etc. operate as normal.
On fast Internet links you may wish to use a much lower
FRACK, say 2000ms, than on radio. It is not recommended
that you reduce it much below 1000ms, as it needs to be
*at least* twice the worst round-trip time plus the other
end's RESPTIME.
RESPTIME is probably the one which will have most effect
on the responsiveness of the AX25 link, because it
controls the time delay between receiving a packet and
sending an ACK. It should be just a little more than the
time it takes to receive a maximum length packet. For
example, at a data rate of 56Kbits/sec, a 256 byte packet
lasts less than 50msec, so RESPTIME=50 would be adequate.
However the timing jitter due to operating under Windows
means that RESPTIME should be more like 200ms.
6b) Multiple-Links-Per-Port
This mode requires only ONE port, configured similar to
the following:
PORT=8
ID=AXUDP links
INTERFACENUM=9
IPLINK=0.0.0.0
UDPLOCAL=10093
PEER=VK2DOT:DOTXR vk2dot.dyndns.org 9394
PEER=G8PZT-7 127.0.0.1 2345
PEER=G9DUM-3:DUMMY g9dum.ath.cx 10078
FRACK=2000
RESPTIME=200
ENDPORT
IPLINK must be present and must be exactly "0.0.0.0",
otherwise it won't work.
UDPLOCAL is the UDP service number on which XRouter
listens for incoming AXUDP packets. This MUST be different
from the service numbers used on any other PORTs.
Note that UDPREMOTE must NOT be used in this case. The
PEER statements are used instead.
7) If XRouter is indirectly connected to the Internet via an
intermediate router, that router will probably be using
some form of NAT (Network Address Translation) to share
one "public" IP address between several systems on your
LAN. The "front end" router will probably route outgoing
AXUDP without problem, but it will not know where to send
incoming AXUDP unless explicitly configured.
Configuring such a router for AXUDP usually involves
specifying a UDP port number (your UDPLOCAL as specified
above), and the LAN IP address of a machine to which it
should be routed, i.e. Xrouter's LAN IP address. This is
sometimes called "port forwarding". There are websites
(e.g. portforward.com) dedicated to showing you how to do
this for most makes of router.
Some routers don't have the facility to open specific UDP
ports, but at the very least should allow you to direct
all UDP traffic to a specified IP address.
8) Your link partner must set up a reciprocal arrangement,
i.e. their UDPREMOTE must match your UDPLOCAL and vice
versa.
If everything has been set up correctly, you should be able
to connect with your new neighbour node immediately, at least
at AX25 layer 2. You can test this by entering the command
"C n ALIAS-1", where n is the PORT number of your link, and
ALIAS is the node alias of your link partner. If this doesn't
work, you or your partner have made a mistake somewhere in
the configuration.
Even if everything is configured correctly, it may take a
while for NetRom to configure itself for the new link, as the
nodes need to exchange NODES brodcasts first. Once they have
done so, there should be no delays in future.
**NOTES**
You may of course use AXUDP to communicate between nodes on
the LAN, or even on the same machine.
If you have more than one node on your LAN using AXUDP, your
UDPLOCAL must not be the same as the UDPLOCAL (or equivalent
thereof) of any other node on your LAN. There are two
reasons for this; Firstly, for a given UDP port, NAT routers
cannot direct direct incoming traffic to more than one LAN IP
address at a time. Secondly, only one application on a PC
may "own" a given UDP port number.
Unlike other software, you *DO NOT* need a different UDPLOCAL
for each AXUDP port. It is quite common for link partners to
specify that they will transmit AXUDP to you on a UDP port
that is different to your other UDPLOCAL settings. There is
absolutely *NO* valid reason for this! It makes life more
complicated for you, and you have to set up extra "port
forwarding" entries in your NAT router. For these reasons
you are strongly advised to use the same UDPLOCAL for all
AXUDP partners on a given node. As a rule, you may NOT tell
a link partner what his UDPLOCAL should be, no more than he
should dictate what your UDPLOCAL should be. Instead, he
should specify which UDP port he is listening on (which
becomes your UDPREMOTE), and in return you tell him which UDP
port you are listening on (which becomes his UDPREMOTE).
DO NOT set up an AXUDP link to a link partner with whom you
already have an AXIP link. This is a common mistake, and is
likely to cause problems!
**IP ROUTING**
As mentioned earlier, you may route amateur IP (44.x.x.x)
over your new AXUDP link, and are encouraged to do so. Whilst
the amprnet purists will argue that this is not as efficient
as IP-over-IP (since it uses a few more bytes), it is a LOT
easier to set up, and doesn't require that your domestic
router and operating system can route IP-over-IP (many
routers are not able to route incoming IP-over-IP to a
specific PC, and Windows' IP stack blocks IP-over-IP).
To route amateur IP over an AXUDP link, simply add an IP
route entry directing the required subnet to your neighbour's
IP address on the AXUDP port using datagram mode. For
example, if the AXUDP port is port 8, and the link partner
(44.136.20.2) is able to accept all amprnet traffic for
Australia, the entry would look like this:
IP ROUTE ADD 44.136.0.0/16 44.136.20.2 8 d
The source IP address for this mode of routing is the
IPADDRESS of the AXUDP port. Therefore, if XRouter's main
IPADDRESS (in XROUTER.CFG) is not a 44-net address, you must
override it with a 44-net address on the AXUDP port. If the
main IPADDRESS is a 44-net address, which is the recommended
configuration, do not specify IPADDRESS in the PORT
configuration block.
**SEE ALSO**
AD-HOC(9) -- Ad-Hoc Networking.
AXIP(9) -- AX25-over-IP Encapsulation
IP(1) -- IP Routing / Configuration Commands.
IPENCAP(9) -- IP-in-IP Encapsulation.
IPLINK(1) -- Display / Set a Port's IPLINK.
IPLINK(7) -- Peer Address of a Link.
IP-PRIMER(9) -- IP Addressing / Routing Primer.
IPROUTE.SYS(8) -- IP Routing / Configuration File.
LEARN(7) -- Learn Unsolicited AX*P Peer Details.
UDPLOCAL(1) -- Display / Set a Port's UDPLOCAL.
UDPREMOTE(1) -- Display / Set a Port's UDPREMOTE.
XROUTER.CFG(8) -- Main Configuration File
----
==== BCAST ====
BCAST(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
BCAST -- UI Broadcasting.
**DESCRIPTION**
XRouter has the ability to "re-broadcast" a received UI frame
onto several ports at once. This can be thought of as a
"one-to-many" PIPE, but there are subtle differences:
Whereas pipes conduct all frames of the selected type(s),
virtually regardless of source and destination addresses
(unless they are selective pipes), the broadcast function
acts only upon UI frames, and only if the source and
destination addresses match those specified by the sysop.
Another difference is that frames may be broadcast to
different groups of ports depending on the destination
address. For example, FBB unproto headers from a BBS may be
rebroadcast on certain user-access ports only, while mail
beacons may be distributed to a different, possibly
overlapping, set of ports.
You may alternatively use this feature as a "filtered pipe"
between two ports, allowing only UI frames with acceptable
source and destination callsigns to pass through.
Note that this feature does not require a "connection" to
XRouter, it is purely an unconnected mode. It was developed
to allow BBS's to distribute mail beacons and "unproto" mail
headers. You may use it (or not) how you wish.
You should be aware that broadcast traffic takes precedence
over all other frames, so an excessively high level of
broadcast activity may cause other outbound traffic on the
destination port to be delayed. However, it is unlikely that
anyone will notice this effect unless the channel is
seriously overloading.
Broadcasting is controlled by two keywords in each PORT
section of the XROUTER.CFG file. The first keyword is BCAST,
which is used to specify the destination addresses to be
broadcasted.
For example, BCAST=MAIL,FBB will re-broadcast received
non-digipeater UI frames addressed either to FBB or MAIL.
The frames addressed to FBB will be broadcast on all ports
which have FBB in their BCAST list, and those addressed to
MAIL are broadcast on all ports which have MAIL in the BCAST
list.
If no matching ports are found, the frame is broadcast only
on the port upon which it is received. If you don't need the
broadcast function, simply omit (or comment out) the BCAST
directive.
The second keyword is BCFROM, which is used to specify a list
of callsigns from whom frames will be accepted for broadcast.
You may use this to restrict the broadcast facility to
certain senders only. BCFROM applies only to frames
*directly* received on the port for which it is specified.
e.g. BCFROM=GB7PZT,GB7MAX stipulates that only frames from
GB7MAX and GB7PZT will be accepted for broadcast. If the
keyword is omitted, the broadcast facility is unrestricted.
For both keywords, the list of callsigns must be separated by
commas, and must include no spaces.
**CAVEATS**
Be careful not to configure BCAST and PIPE together in a way
which causes infinite loops. This is a common cause of
crashes.
**SEE ALSO**
BCAST(7) -- Destinations for UI Broadcasting.
BCFROM(7) -- Approved UI Broadcasters.
PIPES(9) -- Frame Pipes.
XROUTER.CFG(8) -- Main Configuration File.
----
==== CHARGEN ====
CHARGEN(9) XROUTER REFERENCE MANUAL 7/9/2023
**NAME**
CHARGEN -- Character Generator Service
**SYNOPSIS**
This file describes XRouter's Character Generator service,
which is intended for testing purposes.
**DESCRIPTION**
The CHARGEN service generates a stream of characters for
testing purposes. It is very bandwidth hungry and should be
used with caution. It uses the same "well known" service
number (19) as the TCP/IP version.
Upon opening a connection to NetromX service 19, the server
starts sending lines of characters to the caller, and
continues until the caller send "/x" followed by newline,
or closes the connection. The server accepts no other
commands.
Conforming to the de-facto standard, each line of 72
characters is offset by one. This creates a pattern which
makes it easy to spot dropped characters. Here's an idea
of what it looks like:
c g8pzt 19
G8PZT-1:MOBILE} Trying G8PZT::19...
G8PZT-1:MOBILE} Connected to G8PZT::19
"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[
$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\
%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]
&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^
'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a
and so on...
**SEE ALSO**
SERVICES(9) -- NetRomX Services.
----
==== CHAT-SRV ====
CHAT-SRV(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
CHAT-SRV -- CHAT Server.
**DESCRIPTION**
XRouter's integral chat server allows groups of users to hold
live multi-way conversations without having to manage several
TNC streams at once.
It is available to all callers, and is accessed by using the
CHAT command at the main prompt, or by connecting to NetRomX
service 2, or by connecting directly to the server's callsign
or alias. TCP/IP users can additionally access it by
TELNETting to port 3600 (this port can be reassigned or
disabled using the CHATPORT directive in XROUTER.CFG).
Sysops have a "always-on" chat window for chatting amongst
themselves on channel 1234, and there is a "chat monitor"
window for keeping an eye on chat activity.
The server is tri-standard, i.e. it can exist on, and
interact with, 3 completely different types of chat network
simultaneously, namely XRchat, "Tampa Ping Pong Converse",
and W0RLI RoundTable chat, as used by BPQ.
XRouter's chat server is a fully functional RoundTable node,
however data is NEVER transferred between networks. e.g. what
is said on the RoundTable network is never propogated around
the XRchat network and vice versa.
Channels
~~~~~~~~
The "XRchat" system has 32767 channels or " chat rooms", each
of which can support an unlimited number of users, so it is
possible for groups to have their own "private" room, or to
reserve certain rooms for specific topics.
Channels 1 to 255 (except 101 - see below) are "local" to
each chat server, and the remaining channels 256-32767 are
"global", i.e. they are linked with all other XRouter chat
servers, providing there is at least one link set up with
another server.
Room 101 is a gateway to the W0RLI "RoundTable" / BPQChat
network, providing there is at least one link with a
RoundTable or BPQChat peer. Within room 101, users may create
and occupy private chat spaces called "topics". The default
topic at login is "general".
In addition to the "positive" channel numbers, there are
another 32768 channels numbered 0 to -32767. These
correspond to channels 0 to 32767 on the "Tampa Ping Pong"
system.
XRouter allows only limited interconnection between these two
systems, because the channel layouts and topologies are
completely incompatible. XRchat was specifically designed
for use on an anarchic, slow radio network, whereas Ping-Pong
requires a more planned network topology to avoid loops, and
is largely carried on Internet links. The sheer volume of
chat in the Ping-Pong system would overwhelm marginal radio
links.
Data received from Ping-pong is not propogated via the
XRouter chat interlinks and vice versa. In effect, XRouter
can be a stub Ping-Pong host, but not part of the Ping-Pong
backbone.
Channel 1000 is the default channel to which users are
assigned at log-on, but they may set their preferred login
channel using the "/CHANNEL DEFAULT" command.
Users may "join" as many channels as they wish, so they may
take part in several separate conversations at once. Users
may listen on any number of positive and negative channels
simultaneously, but may only *send* on one channel at a time.
Once logged onto a channel, anything sent by the user is
copied to all other users of that channel, except for lines
beginning with a forward slash (/), which are interpreted as
chat server commands. The distributed text is prefixed by
the channel number and the sender's callsign and name, to
allow the recipients to identify who sent it.
Commands
~~~~~~~~
All chat server commands begin with a forward slash (/), and
most of them may be abbreviated to the initial letter. The
/? command shows the available commands and syntax, while
/HELP gives more details.
The /NAME command is used to enter the user's first name, and
serves as a "login". Users are not permitted to join any
channels until they have supplied a name. TCP/IP users must
additionally supply a callsign with the /USER command.
/CHANNEL, /JOIN and /LEAVE are used to select the desired
channel, /WHO shows the active channels and who is using them,
and /QUIT terminates the chat session. The full command set
is shown in more detail in the command reference section.
Users who log on to more than one chat server at once are
treated as separate entities, and must supply their name and
callsign on each server. Note that the RoundTable network
does not allow a user to be logged on at more than one server,
but there are often valid reasons for doing so, therefore the
XRchat protocol allows multiple logins by design.
Configuration
~~~~~~~~~~~~~
The chat server is fully automatic and requires minimal
setting up. It is configured using entries in XROUTER.CFG as
follows:
CHATCALL defines the chat callsign for AX25 and NetRom
operations. A SSID of -8 is strongly recommended for all
XRchat systems.
CHATALIAS specifies the alias for AX25 and NetRom operations.
It is recommended that this should begin with something
geographically relevant, and end with "CHT" e.g. BHMCHT for
Birmingham, LDSCHT for Leeds etc., so it can be easily
identified in node tables.
CHATQUAL specifies the NetRom "quality" assigned to the chat
server and alias for L3/4 operations. If set to 0, the server
will not be visible on the network.
A setting of 255 makes the chat server as visible as the
node, which just fills up the nodes tables. A value somewhere
in between, to give medium visibility, is suggested.
CHATLOG specifies the amount of detail that is logged. A value
of 0 suppresses logging. Add together the values corresponding
to the desired options from this table:
1 Local user connect / disconnect event
2 Remote user connect / disconnect event
4 Peer server connect / disconnect event
8 Local channels 1-255 join / leave events
16 Public channel join / leave events
32 Log channel notifications
64 Log the text of conversations
128 Use a single logfile, instead of daily ones
CHATPORT adjusts or disables the TCP port which the chat
server normally listens on. The default is 3600, but you may
need to adjust this if you have another system or application
using that port.
CHATLINKS specifies the callsigns of other servers to link to.
- Only NetRom links are allowed with RoundTable/BPQChat peers.
- Only TCP/IP links are allowed to Tampa Ping-Pong peers.
- Links with XRChat peers may use either NetRom or TCP/IP,
but NetRom is the norm.
If NetRom linking is used, you must specify the peer's
CALLSIGN not the alias. The peer's callsign and alias must
exist in your nodes table, i.e. you can't link with peers
beyond the NetRom "horizon".
Unilateral linking is not allowed, and will not work. You
*must* co-ordinate it with your peers, such that you are in
their CHATLINKS list and they are in yours.
You should avoid linking to peer servers via slow links. If
the link isn't up to the job, frames will be dumped, and the
users will therefore get a poor service.
Peer links may be added and removed at any time using the
/LInks command.
Links With XRouter Peers
~~~~~~~~~~~~~~~~~~~~~~~~
NetRom links with XRouter chat peers are specified in
XROUTER.CFG as follows (you can put several peers in one
CHATLINKS directive, or use one directive per link, or any
combination thereof):
CHATLINKS=,,...
e.g. CHATLINKS=GB7GH-7,GB7BM-8,N0LBA-8
or at the chat command prompt:
/LI ADD
e.g. /LI ADD GB7BX-9
For TCP/IP links with XRouter chat peers, the IP address and
TCP "port" number must be specified, along with the CHATALIAS
of the peer server, and you can only specify one peer per
line.
CHATLINKS=:
e.g. CHATLINKS=67.69.96.23:3600 KDRCHT
or at the chat command prompt:
/LI ADD :
/LI ADD 67.69.96.23:3600 KDRCHT
Links with RoundTable/BPQ Peers
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Links with RoundTable/BPQ chat servers are defined similarly
to the XRchat NetRom case, except that the peer callsigns
must be prefixed with a '+', for example
CHATLINKS=+XE1FH-11,+N1FGR
or /LI ADD +XE1FH-11
The '+' is very important - it tells XRouter to use
RoundTable protocol instead of XRchat protocol!
Links with Tampa Ping-Pong Peers
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Links with Tampa Ping-Pong converse servers are specified in
XROUTER.CFG as follows. Note the is prefixed with
a '*' to distinguish it from an XRchat TCP entry:
CHATLINKS=: *
e.g. CHATLINKS=80.195.22.67:3601 *brmcht
Alternatively, use the /LINK ADD command
/LI ADD : *
e.g. /LI ADD 80.195.22.67:3601 *brmcht
**FILES**
The chat server stores user accounts in the CHAT subdirectory,
and reads its HELP files from CHAT/HELP/ subdirectory.
If transaction logging has been enabled by a non-zero CHATLOG
directive in XROUTER.CFG, chat server activity is recorded in
the LOG subdirectory. If the "use single logfile" option is
enabled, everything is logged to file CHATSERV.LOG, otherwise
it is logged to dialy logfiles with names in the form
yymmddCH.LOG, where yymmdd are the year, month and day.
**AVAILABILITY**
The chat server is available to all users. It is also
available via the HTTP and MQTT interfaces.
**SEE ALSO**
CHAT(1) -- CHAT command.
CHATCMDS(1) -- Chat server commands.
CHATALIAS(7) -- Chat Server Alias.
CHATCALL(7) -- Chat Server Callsign.
CHAT-SVC(9) -- NetRomX Chat Service.
CHATPORT(7) -- TCP Port for Chat Server.
MQTT-CHAT(9) -- MQTT Interface to Chat Server.
XROUTER.CFG(8) -- Main Configuration File.
----
==== CHAT-SVC ====
CHAT-SVC(9) XROUTER REFERENCE MANUAL 22/9/2023
**NAME**
CHAT-SVC -- NetRomX CHAT (Converse) Service.
**DESCRIPTION**
NetRomX "standard service" no. 8 connects to XRouter's
integral chat server. This server allows groups of users to
hold real-time (and non-real-time) text conversations.
The service is used by the "CHAT " command, but is
open to all, and no login is required.
The server has a comprehensive set of commands, which all
begin with a forward slash (/), for example /HELP. These are
fully documented in the CHATCMDS manual pages, and in the
chat server's own HELP system.
**SEE ALSO**
CHAT(1) -- CHAT command.
CHATCMDS(1) -- Chat server commands.
CHAT-SRV(9) -- Chat Server.
SERVICES(9) -- NetRomX Services
----
==== DAYT-SVC ====
DAYT-SVC(9) XROUTER REFERENCE MANUAL 7/9/2023
**NAME**
DAYTIME -- DAYTIME Service.
**DESCRIPTION**
The DAYTIME service returns the node's current local date and
time, for test or general interest purposes. It is accessed
via NetromX standard service 13.
Upon connection to service 13, the server sends the local
time as a single line of text. The response is currently like
this, but may change in future to include timezone and DST:
Thu May 20 16:37:24 2021
When the caller has received the text, the server terminates
the connection.
**SEE ALSO**
SERVICES(9) -- NetRomX Standard Services.
----
==== DEDHOST ====
DEDHOST(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
DEDHOST -- WA8DED Hostmode Emulation.
**DESCRIPTION**
XRouter can emulate a WA8DED TNC, in both "normal" mode and
"host" mode. This can be used for both manual operations and
application support, just like a real TNC. Many applications
are capable of using WA8DED host mode. See the MAN page for
WA8DED for details of normal emulation mode.
.---------. .-----.
User -->| XRouter |------RS232-------| BBS |
'---------' '-----'
The application may be located on the same machine as
XRouter, connected to it either via a pair of "virtual" COM
ports, or via a pair of "real" COM ports interconnected with
a null-modem cable.
Alternatively, the application may be located on a seperate
machine, using an RS232 null-modem cable to interconnect the
machines.
Configuring XRouter To Support Applications
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1) Decide how to interconnect the application and XRouter.
You can use either a pair of real COM ports and a
null-modem cable, or a tty/pty pair
2) Add an INTERFACE.
In XROUTER.CFG specify an interface similar to this, where
"x" represents the interface number...
INTERFACE=x
TYPE=ASYNC
COM=/dev/ttyUSB0
PROTOCOL=DEDHOST
APPLNUM=3
CHANNELS=4
SPEED=9600
FLOW=0
MTU=256
ENDINTERFACE
COM is the name of the serial device used to link to the
application (on DOS / Windows this would be a COM number).
CHANNELS specifies the max no. of host channels the
interface will provide (between 1 and 32). The total
number of host channels available to be shared between all
applications is 64. If XRouter cannot allocate the
requested number of channels it will fail to start. (In
versions up to 200e the number of channels was specified
by INTNUM. This is now deprecated.)
MTU must be 256
APPLNUM (1-16???) specifies which application is using
this interface. Corresponds to "n" in APPL=n (see below).
SPEED is the serial baud rate . Don't use too low a speed,
otherwise badly-written applications may lose sync due to
the time it takes for a poll to reach XRouter and the
reply to reach the application. Speeds of 9600 and above
should be OK.
FLOW must always be set to 0 or 4. Setting FLOW to any
value other than 0 or 4 may cause the application or
XRouter to hang. FLOW=4 is a special case which forces
the WA8DED emulator to default to host mode (see later).
- Don't use CHANNEL, IOADDR, or INTNUM keywords.
- Don't try to attach any PORTs to this interface, as they
are not required.
3) Define an Application:
In XROUTER.CFG add an APPL=n block, to specify the
application's callsign, alias, Netrom quality and
visibility. The "n" parameter must match the APPLNUM
specified in the INTERFACE block. For example:
APPL=3
APPLNAME=BBS
APPLCALL=GB7PZT
APPLALIAS=PZTBBS
APPLQUAL=100
APPLFLAGS=4
ENDAPPL
The application definition (APPL) block should contain one
or more of the following keywords:
APPLNAME is the nickname or shortcut by which the
application is accessed from the XRouter's
command line. In the example above, if a user
types "BBS" at the command prompt, they will be
connected to the application.
APPLCALL is the AX25 layer 2 callsign which the
application will use. If specified, the
application will accept AX25 L2 connects to this
callsign, subject to the setting of APPLMASK
(see below).
APPLALIAS is the AX25 layer 2 "alias" for use by the
application. If specified, the application will
accept AX25 L2 connects to this callsign, subject
to the setting of APPLMASK (see below).
APPLQUAL (0-255) is the Net/Rom quality to broadcast. If a
non-zero value is specified here, the APPLCALL
will be included in Net/Rom nodes broadcasts and
the application will be connectible at AX25 layer
4. The higher the quality, the further the node
entry will propogate.
APPLFLAGS defaults to 0 if omitted. A value of 4 instructs
XRouter to send "Connected to (applcall)" to the
user upon connection to an application. This may
be omitted if the application sends its own
"Connected to" message.
All fields within an application definition block are
optional - you may have for instance choose to have an
APPLNAME but no APPLCALL, meaning the application could
only be reached by typing the applname at the command
prompt. Or you could have an APPLCALL but no APPLNAME, in
which case the application would be directly connectible,
but wouldn't be reachable from a command line shortcut.
4) Set Application Visibility.
In XROUTER.CFG set the APPLMASK on each PORT that you wish
the application to appear on. The application will only
monitor traffic and send UNPROTOs on the ports which have
the application enabled via the APPLMASK.
The APPLMASK parameter specifies which applications are
directly connectible on a port. The default is 255, which
allows all applications. The value is made up by adding
together the required options from the following numbers:
1 - Enable Application 1
2 - Enable Application 2
4 - Enable Application 3
8 - Enable Application 4
16 - Enable Application 5
32 - Enable Application 6
64 - Enable Application 7
128 - Enable Application 8
Example: APPLMASK=5 (enable applications 1 and 3)
If you want an application to be directly connectible on a
port, it must have either an APPLCALL or an APPLALIAS (or
both), and the corresponding bit in that port's applmask
must be set.
5) Configure The Application
Finally, configure the application to use WA8DED hostmode
on the other of the chosen COM port pair, with the same
baud rate as specified in the INTERFACE block.
Default Mode
~~~~~~~~~~~~
The default mode (host mode / terminal mode) is controlled by
the FLOW parameter in the INTERFACE definition block. With
FLOW=0, XRouter's WA8DED emulation starts in non-host
("terminal") mode because most applications expect it that
way, therefore it allows them to sync up quickly.
However, some applications may expect the TNC to be in host
mode, and may fail to sync if FLOW=0. In this case, setting
FLOW=4 forces the WA8DED "TNC" to start in host mode.
This control is not a panacea. For example, If XRouter is
stopped and restarted while an application is running in
hostmode, everything should quickly sync up again if FLOW=4.
But this setting may prevent the application from syncing up
from cold.
Starting / Stopping Applications
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Where possible, XRouter should be started before the
application, and stopped after it, because some applications
malfunction if they don't see the expected responses when
they start up and shut down.
If an application doesn't close down "cleanly", it may take a
while to resync when it restarts. This is normal.
Hidden Applications
~~~~~~~~~~~~~~~~~~~
If you have an application that only makes outgoing
connections, you can omit the APPL block altogether. The
application will still work, but it won't accept incoming
connects.
Known Issues
~~~~~~~~~~~~
a) FBB 16-bit versions 700g and 700i use 100% CPU when
configured for WA8DED hostmode. The BBS seems to work OK
despite this. Although this is not an XRouter issue, we
are looking at ways to fix the problem.
b) WinFBB v701-35 often reports "Error initialising WA8DED
Driver" and fails to communicate with XRouter after that.
It usually boots cleanly if stopped and restarted. The
best setting for FLOW is 0.
c) With WinFBB v701-35, the sysop is able to open a gateway
connection to XRouter's command processor and make
outgoing connections. However, whilst incoming
connections are accepted, WinFBB only sends the SID
[FBB-701-ABFHMR$] and nothing else. It doesn't respond to
any command.
d) If XRouter is stopped and restarted within a short time,
WinFBB v701-35 will resync cleanly. However, if too long
an interval elapses before XRouter restarts, WinFBB goes
into meltdown and will never resync.
e) Although WinFBB 701-35 appears to run in DED mode, it
doesn't run properly, and is therefore unusable as a BBS
in this mode.
f) If Com0Com is used without the "enable buffer overrun"
option checked, closing the application may sometimes
cause XRouter to hang until the application is restarted.
Breaking out of host mode
~~~~~~~~~~~~~~~~~~~~~~~~~
If the emulator is inadvertently switched into, or left in,
host mode it can be easily be returned to terminal mode using
Hyperterm as follows:
- Send ctrl-a's slowly (1 or 2 per sec) until "INVALID
COMMAND" appears (it may take up to 256 ctrl-a's to make
this happen, but usually it will take a lot less). Stop
sending ctrl-a's as soon as the response appears. If you
inadvertently send one or two too many, *slowly* send up to
4 more ctrl-a's and the message should appear again.
- Send JHOST0 (there will be no response)
- Send and it should display the "* " to indicate that
it is in command mode.
Troubleshooting
~~~~~~~~~~~~~~~
1) XRouter reports "All Host Ports in use" upon first attempt
to connect to DEDHOST application:
- The APPLNUM in the INTERFACE definition block does not
match the application number specified in the APPL
definition block.
2) Application frequently loses sync:
- Serial port baud rate too low?
If the baud rate is too low, the data may take too long
to propogate back and forth between XRouter and the
application, causing the application to think it has
lost sync. Good applications would adjust their polling
rate according to the baud rate. Unfortunately some
don't!
- Serial port baud rate too high?
If the baud rate is too high the serial line may drop
characters, causing loss of sync. Another, more likely,
issue is that with high baud rates the "timeout" between
the application sending a poll and expecting a reply may
be too short for a multitasking operating system, even
though it is OK for a firmware TNC.
- FLOW not set to 0 or 4
- The PC is too busy.
Unlike a real TNC, XRouter does not have sole use of the
CPU. Other processes may "steal" CPU time, causing a
delay in responding to the application's polls. In most
cases this shouldn't happen, but some applications poll
too fast. The only solution is to avoid running
CPU-hungry applications on the same PC.
- Excessive tracing on XRouter's console.
Writing characters to the console is very CPU-intensive,
so having MON ON can cause delays in the poll-response
cycle if the amount of trace traffic is heavy. Turning
MON OFF or tracing fewer ports should alleviate the
problem.
3) XRouter hangs when application is stopped:
- XRouter's RS232 output buffer is full and something is
preventing it from emptying. - If using Com0Com virtual
COM port emulator, check the "Enable buffer overrun"
boxes - Use FLOW=0.
4) Application won't sync if XRouter is stopped and restarted
- XRouter's DEDHOST emulation starts in non-host mode
because most applications expect it that way. This
allows them to sync up quickly when they are started
AFTER XRouter. However, if XRouter is restarted while
the application is running, the application won't know
that XRouter is back in non-host mode, and will fail to
sync.
5) Can't connect to application on port N / Can't monitor
port N
- The port's APPLMASK is not set correctly (see above for
description of APPLMASK)
- There is a bug in early versions - Although up to 16
applications are allowed, if APPLNUM is more than 8, the
application cannot be connected to.
6) Application is monitoring port N uncesessarily.
- The default APPLMASK setting for each port allows access
to, and monitoring by, all applications. If you wish to
suppress connections and monitoring on a particular
port, you must set APPLMASK accordingly. To suppress all
applications, set the port's APPLMASK to 0.
Random Factoids...
~~~~~~~~~~~~~~~~~
- Uplinks and downlinks to DEDHOST applications show as link
type "DED" on XRouter's "Users" display.
**SEE ALSO**
WA8DED(9) -- WA8DED TNC Emulation.
XROUTER.CFG(8) -- Main Configuration File.
----
==== DHCP ====
DHCP(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
DHCP -- Dynamic Host Configuration Protocol.
**DESCRIPTION**
The acronym DHCP stands for Dynamic Host Configuration
Protocol. This is a client-server based protocol which
allows clients on a TCP/IP network to obtain their
configuration parameters from a server.
The protocol supports the transfer of a wide range of
configuration parameters such as the client's IP address,
netmask, DNS and gateway addresses, plus TCP/IP parameters
such as MSS, but is most commonly used to allocate dynamic
IP addresses to clients.
IP addresses are "leased" to clients for a period of time,
after which the client must renew the lease. Servers
generally attempt to re-assign the same IP address to the
same client.
DHCP in XRouter
~~~~~~~~~~~~~~~
XRouter includes a DHCP client, and a DHCP server may be
included in future, if the need arises. The full range of
configuration options is not supported, since in most XRouter
application scenarios they are not required. The options
currently supported are client's IP address and lease time,
DNS and gateway IP addresses.
The DHCP client is available only on Ethernet interfaces
which are using the EXTERNAL driver. Lease negotiation and
renewal are completely automatic, and the sysop need not be
concerned with the process.
Do you need DHCP?
~~~~~~~~~~~~~~~~~
If you wish to connect XRouter to an ISP via a cable modem,
e.g. to use it as an Internet Connection Sharing router, you
will probably need DHCP if your ISP uses dynamic IP
addressing. However, if your ISP assigns you a static IP
address you won't need DHCP.
You will not need DHCP if your connection to the ISP is via
dial-up PPP, because dynamic IP addresses are assigned as
part of the PPP negotiation process.
*** The above scenarios date back to the time when domestic
routers had not yet become commonplace, when Windows
"Internet Connection Sharing" was in its unreliable infancy,
and XRouter was running on DOS machines. Nowadays, with
modern ADSL and cable routers, and proper TCP/IP built into
Windows, it is unlikely that XRouter would be required to
provide the Internet Connection Sharing service.
The only reason you might wish to use DHCP these days is to
obtain a dynamic LAN IP address from your domestic router,
but this is not recommended practice. It is far better to use
static IP addresses when feasible, especially when you are
"port-forwarding" TCP and UDP ports to specific machines.
You do not need DHCP for normal amateur radio operations.
Enabling DHCP
~~~~~~~~~~~~~
In XROUTER.CFG, put "DHCP=1" in the appropriate port
definition block. There is no need to specify a port
IPADDRESS because one will be assigned by the DHCP server.
If however, a port IPADDRESS is specified (or it is not
specified but a global IP address is specified), that address
will be used for non-DHCP traffic until DHCP succeeds in
leasing a (possibly different) address. If the global
IPADDRESS is 0.0.0.0 or not specified, it will be assigned
by the first client which obtains a lease.
To disable DHCP, put "DHCP=0" in the PORT definition block,
or simply omit the keyword altogether.
The DHCP command displays DHCP status information, and is
detailed in DHCP(1).
**SEE ALSO**
DHCP(1) -- DHCP Commands.
DHCP(7) -- Obtain Port IP Using DHCP.
XROUTER.CFG(8) -- Main Configuration File.
----
==== DISC-SRV ====
DISC-SRV(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
DISC-SRV -- DISCARD Server.
**DESCRIPTION**
The DISCARD server is a "sink" session, whereby XRouter
ignores (discards) everything sent to it. This is a useful
tool for testing connections, throughput etc.
The server is accessed either by connecting to TCP port 9,
or by connecting to NetRomX serice number 9, or by issuing
the DISCARD command at XRouter's command prompt.
The service terminates upon receipt of "/x" followed by
newline, or when the caller disconnects.
The server is always available on NetRomX service 9, and
from the command line. It is available by default on TCP,
but that can be changed using the DISCARDPORT=n directive in
XROUTER.CFG. Setting the port to zero disables direct TCP
access to the server.
**SEE ALSO**
DISCARD(1) -- DISCARD Command.
DISC-SVC(9) -- NetRomX Discard Service.
SERVERS(9) -- Servers In XRouter
TCP-PORTS(6) -- TCP Service Ports.
XROUTER.CFG(8) -- Main Configuration File.
----
==== DISC-SVC ====
DISC-SVC(9) XROUTER REFERENCE MANUAL 22/9/2023
**NAME**
DISC-SVC -- NetRomX DISCARD Service.
**DESCRIPTION**
NetRomX service 9 is a DISCARD server. This is a "sink"
session, whereby XRouter ignores (discards) everything sent
to it. This is a useful tool for testing connections,
throughput etc.
The service terminates upon receipt of "/x" followed by
carriage return (ascii 13) , or when the caller disconnects.
No other commands are accepted.
The DISCARD server can also be accessed from XRouter's
command prompt, or by connection to TCP port 9, unless the
sysop disables it).
**SEE ALSO**
DISCARD(1) -- Start a Discard Session.
DISC-SRV(9) -- About the Discard Server
SERVICES(9) -- Servers In XRouter
TCP-PORTS(6) -- TCP Service Ports.
**DISC-SVC(9) END OF DOCUMENT**
----
==== DNS-SRV ====
DNS-SRV(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
DNS-SRV -- Domain Name Server.
**DESCRIPTION**
XRouter includes a basic DNS (Domain Name System) server,
which can answer DNS queries from other systems via the
standard UDP port 53.
This is a legacy from DOS XRouter, and is unlikely to be of
much practical use on the LAN port, since Windows / Linux can
perform the same function.
However, it may be of use via the radio and SLIP / PPP ports.
The server only answers one query per message. Only standard
queries for type A are currently answered. Recursion is
supported. Other query types may be supported in a later
version, if anyone requests that functionality.
The server can act as a DNS proxy, allowing XRouter to
function as an Internet Connection Sharing router for a
network of clients. The clients on the local "intranet" send
their DNS queries to XRouter, which either resolves them using
its own DNS lookup (DOMAIN.SYS), or queries an external DNS on
their behalf if necessary.
The "intranet" mentioned above could be hosts linked via SLIP,
PPP or even an IP-over-ham-radio LAN.
**SEE ALSO**
DOMAIN.SYS(8) -- Domain Resolution File.
----
==== DUN ====
DUN(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
DUN -- Dial-Up Networking.
**DESCRIPTION**
Dial-Up Networking (DUN) is a subsystem which allows XRouter
to connect to other TCP/IP systems via a dial-up Public
Switched Telephone Network (PSTN) link.
This could be used for example to connect with an Internet
Service Provider (ISP), enabling XRouter to link to other
systems via the Internet. Or (if you have unmetered telephone
calls) it could be used for linking one XRouter directly with
another via the PSTN on demand.
DUN basically consists of:
a) A script reader capable of configuring PPP,
controlling a modem and logging into a remote system.
b) A system to invoke these scripts when required.
Configuring DUN
~~~~~~~~~~~~~~~
Please see the manual section entitled "PSTN modem support"
for details of how to configure XRouter to use a modem.
Assuming you have a port configured for modem use, DUN
requires at least one dialler script, to control the dial and
login sequence.
Dialler scripts are ordinary text files containing script
commands as detailed below, one per line. Lines must not
exceed 256 characters in length. The script file can be named
as you wish, for example you might like to name your AOL dial
script "AOL.SCR". You will need to use this name later to
identify the script, so it makes sense to call it something
meaningful, rather than "SCRIPT1.TXT". Script files must
reside in the same directory as XRouter.EXE.
Next you must configure DUN to invoke your script whenever a
connection is required. This is done by using the DUN ADD
command to record the peer's IP address and the name of the
script used to make the connection to that peer. If you don't
know the IP address you may use a "dummy" address, e.g.
"1.1.1.1", because it is simply a handle used to invoke the
appropriate script. You should use one DUN ADD command for
each script.
Finally, you must add one or more entries to the IP routing
table whereby the "gateway" IP address is that of the peer
(or the dummy address as mentioned above).
For example, suppose your ISP is aol.com, and you want to
route all UK-bound IP traffic via them. There is a modem
connected to port 3, and you have created a suitable
connection script named AOL.SCR.
a) You don't know the IP address of AOL's router, so you
choose a dummy address of "10.10.10.10".
b) You then issue the command "DUN ADD 10.10.10.10 AOL.SCR",
or include it in IPROUTE.SYS or BOOTCMDS.SYS.
c) Finally, you add a routing entry as follows:
"IP ROUTE ADD 44.131.0.0/16 10.10.10.10 3 d"
which means "route all 44.131.x.x (UK) traffic via (dummy)
gateway 10.10.10.10 on port 3 (the modem port) using
datagram mode.
Whenever XRouter receives a frame with a destination address
in the 44.131 series, it will now invoke the dial script
AOL.SCR.
DUN Script Commands Overview
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CONTROL Raise / lower RS232 DTR signal.
MODE Protocol to use upon successful login.
PPP PPP configuration commands.
SEND Send text.
SLEEP Temporary pause.
WAIT Wait for text in received data.
DUN Script Commands In Detail
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CONTROL - Raise / Lower RS232 DTR signal.
Syntax: C[ontrol]
The CONTROL command is used to raise or lower the
RS232 DTR (Data Terminal Ready) line. Most modems
require the DTR signal to be "up", and will disconnect
or reset when it goes down. Those modems which do not
do this by default can usually be configured to do so
by including "&D2" in the initialisation string.
MODE - Set protocol to use upon successful login.
Syntax: M[ode]
Example: MODE PPP
MODE specifies the protocol to use after your system
has logged into the remote host, i.e. when the script
ends without error. It must precede the dialling and
login sequence, and any protocol dependent commands,
such as the PPP commands.
PPP - PPP configuration commands.
Syntax: P[pp] [arg]
Example: PPP IDLE 300
PPP commands are used to configure the PPP subsystem
for the connection being established. Note that
within DUN scripts the argument is omitted
because XRouter knows which port the script is using.
SEND - Send a line of text.
Syntax: S[end]
Example: SEND ATDT01674302153
The SEND command sends one line of text to the modem
or the remote host, for example modem initialisation
and dial commands, or login commands. The
argument may contain spaces, and the system will
append a carriage return/line feed.
SLEEP - Temporary pause.
Syntax: SL[eep]
Example: SLEEP 5000
The SLEEP command causes the script to pause for the
specified interval. For example, you would need a
short delay after issuing a modem reset command
before any more commands would be accepted by the
modem. When the pause is complete, script execution
continues on the next line.
WAIT - Wait for received text.
Syntax: W[ait] [exiterr]
Example: WAIT 5000 Password: exiterr
WAIT makes XRouter wait for specific responses from
the modem or remote host. specifies the
maximum wait interval. specifies the string
of characters (20 chars max, no spaces) to wait for.
When the string is seen in the received data stream,
the next script command is executed.
If "exiterr" is present, the script will abort if the
string is not seen before the interval expires. If
not present, the next script command will be executed
upon timeout.
Dial up networking may be administered "on the fly" using the
DUN command , which is detailed in the sysop command reference
section. The DUN ADD and DUN LOG commands may also be used in
IPROUTE.SYS and / or BOOTCMDS.SYS to configure the system at
boot time.
Example DUN script
~~~~~~~~~~~~~~~~~~
; Xrouter DUN script for establishing PPP connection with ISP
;
; Upon connection, the ISP sends some greetings text, then
; "Login:", and waits for login name.
;
; Upon receiving the login name it sends "Password:" and
; waits for the caller to send the password.
;
; Upon receiving the password, the ISP sends
; "Entering PPP mode".
;
;
; Drop DTR to reset any modem error condition
control down
;
; Wait for 1 sec
sleep 1000
;
; Raise DTR to allow normal operation
control up
;
; Specify the mode to use after link is established
mode ppp
;
; ISP requires PAP authentication: username=gb7pzt,
; password=bsfjflavs
ppp pap user gb7pzt bsfjflavs
;
; Get the modem's attention
send AT
;
; Wait for up to 5 secs for an "OK" response. Abort if none
wait 5000 OK exiterr
;
; Modem is awake. Dial the ISP
send ATDT01905643000
;
; Wait for up to 1 minute for the "user:" login prompt
wait 60000 user exiterr
;
; Prompt obtained. Send username
send gb7pzt
;
; Don't bother waiting for "password:" prompt, just send
; it after 1 sec.
sleep 1000
send bsfjflavs
;
; Wait for confirmation of entry to PPP mode
wait 30000 PPP exiterr
;
; ISP is now in PPP mode. XRouter will enter PPP mode when
; script ends
;
**FILES**
BOOTCMDS.SYS, IPROUTE.SYS and dialler scripts all reside in
the same director as XRouter.EXE.
**CAVEATS**
DUN development was halted abruptly before it had been
properly finalised, debugged and documented. You are
therefore urged to use it with caution, and report any bugs.
**SEE ALSO**
BOOTCMDS.SYS(8) -- Boot Up Commands File
DIAL(1) -- Dialler Commands.
DUN(1) -- Dial-Up Networking.
IPROUTE.SYS(8) -- IP Routing / Configuration File.
PPP(1) -- Point to Point Protocol Commands.
PSTN(9) -- PSTN Modem Support.
----
==== DX-SVC ====
DX-SVC(9) XROUTER REFERENCE MANUAL 22/9/2023
**NAME**
DX-SVC -- NetRomX DX Service.
**DESCRIPTION**
The "DX" service uses NetRomX service number 27. It is
normally used by the "DX " function.
It is not intended for direct connection by humans, but such
operation is possible, as described below:
Upon connection to service 27, the user must send a valid
DX command, such as "DX" to show the DX from all ports, or
"DX 16" to restrict the DX list to port 16. Only DX commands
are accepted; any other command will cause disconnection.
The connection is terminated by the server when the transfer
is complete.
It would be possible for automated network crawlers to use
this feature for harvesting DX lists.
**SEE ALSO**
MH-SVC(9) -- NetRomX MHeard Service.
SERVICES(9) -- NetRomX Standard Services.
----
==== DYNDNS ====
DYNDNS(9) XROUTER REFERENCE MANUAL 6/9/2023
**NAME**
DYNDNS -- Dynamic DNS Update Client.
**DESCRIPTION**
More and more people these days have dynamic IP addresses,
i.e. IP addresses which are assigned by their Internet Service
Provider and which may be different each time they log on.
Broadband users are permanently connected to the internet, but
even their IP addresses may be changed at any time by the ISP,
unless they pay extra for a static address.
For the normal internet user this is not a problem, because
no-one else needs to know their IP address. However, if you
want other people to be able to connect to your system, e.g.
if you are running a web server, they need to know your
current IP address. This is where the dynamic DNS providers
come in.
There are many organisations providing dynamic DNS services,
one of whom is DYNDNS.ORG. It is easy, and free, to set up an
account with dyndns.org, and after doing so you may choose one
or more hostnames for your system, for example "g8pzt.ath.cx".
All you then have to do is keep dyndns.org informed of your
current IP address, either manually or using an automatic
update client. Whenever someone asks their system to connect
to "g8pzt.ath.cx", they are given its current IP address.
Xrouter has an integral client for automatically maintaining
dynamic DNS entries at dyndns.org, thus obviating the need to
run an external client or perform manual updates. If the
client is enabled, and your IP address changes, the client
will update one or more hostname entries on the dyndns.org
DNS server. If you do not use dynamic dns, you need read no
further.
The client is enabled by including the directive DYNDNS=1 in
the relevant PORT configuration block in XROUTER.CFG, i.e. the
port which is connected to the Internet. DYNDNS=0 disables the
client, as does omitting the directive altogether. Note: you
must only use this directive on ONE port, and you may crash
XRouter if you try to use it on more than one.
The client requires a configuration file, DYNDNS.CFG, and it
creates a data file DYNDNS.BIN. The configuration file is
heavily commented, so it should be self-explanatory.
If your Xrouter is *directly* connected to the Internet, i.e.
via a PSTN modem or non-routing cable modem, the client simply
monitors the port IP address (which is assigned by the ISP
using IPCP or DHCP), and tells dyndns.org when it changes.
This mode is selected by putting "NO" on the "Use external IP
detection service" configuration line in DYNDNS.CFG.
However, if your connection to the Internet is via a NAT
router such as an ADSL modem/router or Windows ICS, the port
IP address will be a "private" one which no-one else could
access. In this case, the client can be configured to query an
external IP address detection service at regular intervals,
updating dyndns.org if a change is detected. This mode is
selected by putting "YES" on the "Use external IP detection
service" configuration line.
Free accounts on dyndns.org are removed if they haven't been
updated for 35 days. Thus, if your IP address hasn't changed
for 30 days, the client automatically sends an update to keep
the account refreshed.
You may have more than one hostname associated with your IP
address, but that's not a problem. In the "hostname(s) to be
updated" line, simply list the hostname, separated by commas.
Be careful not to include any spaces or mistakes in the line.
**FILES**
DYNDNS.CFG(8) -- Configuration file
**SEE ALSO**
DYNDNS(7) -- Enable / Disable Dynamic DNS Update Client.
XROUTER.CFG(8) -- Main Configuration File.
----
==== ECHO-SRV ====
ECHO-SRV(9) XROUTER REFERENCE MANUAL 6/9/2023
**NAME**
ECHO-SRV -- ECHO Server.
**DESCRIPTION**
The ECHO server simply echoes back to the user anything that
he sends. This is a useful tool for testing connections,
throughput etc.
The server is accessed by connecting to NetRomX service 7,
or to TCP port 7, or by issuing the ECHO command at
XRouter's command prompt.
An ECHO session can only be ended by sending "/x" or by
disconnection.
The server's TCP port may be changed by using the ECHOPORT
directive in XROUTER.CFG. Setting the port to zero prevents
TCP connections to the server.
**SEE ALSO**
ECHO(1) -- Start an Echo session.
ECHOPORT(7) -- Specify TCP port for ECHO server
SERVERS(9) -- Servers In XRouter
TCP-PORTS(6) -- TCP Service Ports.
XROUTER.CFG(8) -- Main Configuration File.
**ECHO-SRV(9) END OF DOCUMENT**
----
==== ECHO-SVC ====
ECHO-SVC(9) XROUTER REFERENCE MANUAL 22/9/2023
**NAME**
ECHO-SVC -- NetRomX ECHO Service.
**DESCRIPTION**
NetRomX service 7 is an ECHO server. This simply echoes back
to the user anything that he sends. This is a useful tool
for testing connections, throughput etc.
The session can only be terminated by sending "/x" or by
disconnection.
The server may also be accessed by connecting to TCP port 7,
or by issuing the ECHO command at XRouter's command prompt.
**SEE ALSO**
ECHO(1) -- Start an Echo session.
ECHOPORT(7) -- Specify TCP port for ECHO server
ECHO-SRV(9) -- About the Echo Server
SERVERS(9) -- Servers In XRouter
TCP-PORTS(6) -- TCP Service Ports.
----
==== FING-SRV ====
FING-SRV(9) XROUTER REFERENCE MANUAL 27/9/2023
**NAME**
FING-SRV -- FINGER Server.
**DESCRIPTION**
The FINGER Server allows users to "put a finger on" (i.e.
find information about) other users.
The server is accessed via the FINGER command at the main
prompt, or by connection to TCP port 79. The latter is
intended for use by FINGER clients only.
If the argument to the FINGER command is of the form
, where is usually (but not necessarily)
a callsign, the server looks in the FINGER subdirectory for a
text file of that name. If found it sends the contents to
the user.
If however the argument is of the form @, e.g.
"g8pzt@gb7pzt" the server activates a finger client, which
attempts to establish communication with the Finger server on
the specified to retrieve the desired data.
This server is only partly developed at present, and future
versions may return more information. For the moment, if you
wish to activate this feature, create a FINGER sub-directory
within the XRouter working directory, then simply create a
text file for each user, using the user's callsign or any
other preferred "nickname" as the filename. Use the name
"sysop" for yourself.
The files can contain anything you like, typically the user's
name, location, station details, QSL information etc. You
may wish to ask your users to submit a short summary about
themselves. Please respect people's privacy by including
only the details that they are happy to publish.
As an example, the file finger/g8pzt might contain the text:
Name: Paula
Qth: Kidderminster, Worc's IO82VJ
Age: (withheld ;-)
Other: Sysop G8PZT:KIDDER router, Sysop GB7PZT BBS, Fourpak
Secretary, Unemployed software author with special
interest in comms software. Author of: XServ AX25/IP
BBS, XRouter, XRPi, XS32, Uk White Pages system, PEARL
Off-line reader for Packet Radio, ELINK Echolink
repeater system, Rig control software...
The server is available by default, and requires no setting
up, other than the IP routing and the finger files.
The server's TCP port may be changed, or the server disabled,
by using the FINGERPORT=n directive in XROUTER.CFG. Setting
the port to zero disables the server.
**SEE ALSO**
FINGER(1) -- Finger Command.
SERVERS(9) -- Servers In XRouter
FINGERPORT(7) -- TCP Port for Finger Server.
TCP-PORTS(6) -- TCP Service Ports.
XROUTER.CFG(8) -- Main Configuration File.
----
==== FING-SVC ====
FING-SVC(9) XROUTER REFERENCE MANUAL 27/9/2023
**NAME**
FING-SVC -- NetRomX FINGER Service.
**DESCRIPTION**
NetRomX service 79 is a FINGER server. This server allows
users to "put a finger on" (i.e. find information about)
other users.
The server may also be accessed by connecting to TCP port 79,
or by issuing the FINGER command at XRouter's command prompt.
**SEE ALSO**
FINGER(1) -- Start a Finger session.
FINGERPORT(7) -- TCP port for Finger server
FING-SRV(9) -- About the Finger Server
SERVERS(9) -- Servers In XRouter
TCP-PORTS(6) -- TCP Service Ports.
----
==== FTP-SRV ====
FTP-SRV(9) XROUTER REFERENCE MANUAL 27/9/2023
**NAME**
FTP-SRV -- FTP Server.
**DESCRIPTION**
XRouter's inbuilt FTP sever allows remote sysops to upload,
download, list, rename and delete files, create and remove
directories etc., which is useful when XRouter is located
somewhere inaccessible, such as a garage or remote hilltop.
For example, new configuration and program files may be
uploaded, and the system can then be restarted to perform a
remote upgrade.
The FTP server is only available to sysops. It is protected
by a password grid, and is only accessible to those who have
a password registered in the sysop password file,
PASSWORD.SYS.
Access to all files, drives and directories is unrestricted,
because the FTP server is intended for remote system
maintenance, not as a public file repository. The HTTP and
NFTP servers may be used for that purpose instead.
The FTP server uses standard FTP commands, with the
exception of the USER and PASS login sequence, which are
tailored for use on a radio channel:
In addition to the normal password prompt, the server also
presents the user with a matrix of 5 lines of 5 numbers. The
user may respond either with a string of characters, as with
secure sysop login, or with the full password in plain text.
The grid response would be used on a public RF channel, and
the plain text password on a secure RF channel or wired link.
The server was originally intended for manual operation via
RF links, but automated FTP clients may be used on secure
links, because the password matrix is ignored by all types of
FTP client so far tested. They simply respond with the plain
text password.
There are no automated FTP clients that respond to the
password grid with a secure response, so you cannot (safely)
use them via an unsecured RF link. However, if you leave the
client's password field empty, it will usually prompt you to
enter a password upon connection, at which point you can
respond to the grid challenge.
You are advised not to transfer a password file or any other
sensitive material via insecure RF links.
The directory format is "Windows_NT" because that is the
format which gives the best results with the widest range of
FTP clients.
There is comprehensive help available at the FTP command
prompt, provided you have placed the FTP help files in the
HELP/FTP directory.
The transport mechanism for FTP is TCP/IP, therefore you must
have the appropriate IP routing configured if you wish to use
it via XRouter's IP stack. No configuration (other than some
form of TCP/IP network) is required for operation via the
host system's IP stack.
The TCP port used by the FTP server defaults to the standard,
i.e. 21. This may be changed for XRouter and/or the host
system's TCP/IP stacks using the optional FTPPORT directive
in XROUTER.CFG.
Access to the server may be controlled according to the
client's source IP address, by using appropriate entries in
ACCESS.SYS.
The FTP server commands are described in detail in the sysop
command reference section.
**SEE ALSO**
ACCESS.SYS(8) -- TCP/IP Access Control File.
AXSCTRL(9) -- TCP/IP Access Control.
FTP-CMDS(1) -- FTP Commands.
FTPPORT(7) -- TCP Port for FTP Server.
TCP-PORTS(6) -- TCP Service Ports.
XROUTER.CFG(8) -- Main Configuration File.
----
==== HELP ====
HELP(9) XROUTER REFERENCE MANUAL 29/12/2023
**NAME**
HELP -- Help system.
**DESCRIPTION**
Basic syntax help for most commands is built into XRouter,
and is available using the query (?) command, e.g. "? N"
displays the syntax of the NODES command.
More detailed help is implemented as separate files in the
HELP directory, allowing you to customise it, and add extra
help topics as desired. Each topic occupies a separate file,
with the filename the same as the topic name.
The "H *" command displays a sorted directory of all the
files with the extension ".HLP" (i.e. "topics"). The
extension is not displayed. "H " displays the contents
of that topic's file. e.g. "H DX" shows help for the DX
command. If the topic is mis-spelled, XRouter lists the
topics with similar names.
The help files don't occupy much space, but you may choose to
omit some or all of them if you are running a system with
limited storage.
In addition to the HELP system, sysops will find more
detailed information in the "sysop manual" using the MAN
command.
**FILES**
Help files are normal text files, with the extension changed
to ".HLP". They may be created and edited using a simple text
editor such as Notepad (windows) or Leafpad, nano etc (Linux).
All help files are located within the HELP directory, which
itself is in the directory containing XRouter.
English help files should be placed in the HELP directory
itself. Help files for other languages should be placed in
sub-directories of the HELP directory. For example, French
help files should be in HELP/FR/, Spanish help files in
HELP/ES/, German help files in HELP/DE/, and Dutch help files
in HELP/NL/.
Filenames, including the extensions, MUST be in UPPER CASE.
Lower case filenames and files without the .HLP extension are
ignored.
Try to keep the filenames concise, to save excessive typing.
The longer the filename, the more likely that a user will
mis-spell it.
Within the .HLP files, lines beginning with a semicolon ';'
are not displayed to users, so you can use them for comments,
such as file modification details.
Help files can be viewed from the console using
followed by . This browser window is only around 76
characters wide, so try to keep the lines shorter than this,
to preserve formatting. In any case, lines longer than 72
characters are bad practice, typopgraphically-speaking.
**HISTORY**
The help system originated long ago on DOS XRouter, and in
those days there was only limited association between filename
extensions and programs. I.e. in most cases, the extension
itself had no real meaning, other than to serve as a reminder
to humans what the file contained. Which is exactly why the
XRouter help files have the extension ".HLP", to distinguish
them from ".MAN" (manual), ".SYS" (system), .CFG
(configuration) and so on. In those days, most programs
could view and edit a text file, no matter what the extension.
Unfortunately, Windows assumes that a file with the extension
".HLP" is a Windows help file, and that ".SYS" is a Windows
system file. If you double click these files, Windows
complains that the format is wrong.
It would be more convenient for *Windows* if the files had
the extension .TXT instead of .HLP, but how would we then know
that they were help files? Therefore, XRouter continues to use
the traditional file names.
**SEE ALSO**
HELP(1) -- User Help Command.
MAN(1) -- Online Sysop's Manual.
----
==== HTTP-PROXY ====
HTTP-PROXY(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
HTTP-PROXY -- HTTP Proxy / Tunnel.
**DESCRIPTION**
HTTP Proxy
~~~~~~~~~~
The HTTP proxy accepts requests on the normal HTTP port and
forwards them to another server.
XRouter (google.com)
.------. .-------. .--------.
| user |-- HTTP --| proxy |-- HTTP --| target |
'------' ^ '-------' ^ '--------'
(GET http://www.google.com/) (GET /)
If a client sends an HTTP request containing an "absolute"
rather than relative URL, e.g. "GET http://www.google.com/",
XRouter's HTTP server recognises that this is not a "local"
request, and opens an HTTP connection to the target server, in
this case www.google.com. It then passes a modified request
and any subsequent HTTP headers to the target server, and
passes any responses back to the client.
Apart from rewriting the request to remove the http:// and
the target hostname, the proxy is fully transparent (a non-
transparent proxy rewrites the request headers).
If the target connection could not be established within a
reasonable time (controlled by PROXYTIMEOUT in HTTP.SYS), an
HTTP error message is returned to the client, and the client
connection is closed.
Downstream Proxy
~~~~~~~~~~~~~~~~
XRouter's HTTP proxy may be configured to pass selected
traffic to a "downstream" proxy. This is enabled by using a
directive with the following format in HTTP.SYS:
PROXY
e.g. "proxy 44.131.91.245 80 255.0.0.0"
is the IP address of the downstream proxy.
is the TCP port number of the downstream proxy.
when combined with the proxy address specifies
the range of addresses which are on the same
subnet as the downstream proxy. These addresses
bypass the downstream proxy, i.e. XRouter will
connect directly to them instead of via the
downstream proxy.
This kludge allows 44-net systems to use a further proxy to
gain a public (Internet) IP address when connecting non-44
websites. This is necessary because 44-net routing is
unreliable at best, i.e. if a 44-net browser tries to
connect directly to Google, the reply probably won't get
routed back.
For example, imagine a mobile station, consisting of a web
browser and XRouter, with an IP/AX25 link to a nearby gateway,
but no Internet connection. The IP address used over the
radio link is 44.131.91.3. The browser has been configured
to use XRouter's HTTP proxy, which means the IP source address
for all HTTP traffic from this station is 44.131.91.3.
192.168.0.1<->192.168.0.2 62.31.206.176 <-> 173.194.41.99
.------. .-------. .-------. .--------.
| user |----| proxy |-- RF Link --| proxy |- Inet-| Google |
'------' '-------' '-------' '--------'
44.131.91.3 <------> 44.131.91.245
(mobile station) (gateway)
Via the nearby gateway, whose IP address is 44.131.91.245,
the mobile station can happily browse 44-net (amprnet)
websites. But when it tries to use Google, the replies
aren't routed back.
However, if the local gateway has been set up with the
above PROXY command, the 44.x.x.x sites are connected directly
by the mobile XRouter's proxy (routed via the gateway), whilst
the non-44 sites are connected via the gateway's HTTP proxy.
At this second proxy, they gain a 62.31.206.176 source
address, which is reliably routable and doesn't rely on the
co-operation of others in the amprnet.
The obvious question is, why not use the gateway's proxy
directly, using NAT to translate the browser's IP address to
44.131.91.3? The answer is that Windows' TCP/IP settings are
tailored for fast wired links and are unsuitable for use via
packet radio. The intermediate (mobile) proxy makes the TCP/IP
radio-friendly.
HTTP Tunnel
~~~~~~~~~~~
The HTTP tunnel allows users located behind a corporate
firewall, which blocks all non-HTTP traffic, to access regular
telnet destinations. A Java client applet, such as XWEB.CLASS
(supplied) would be typically be used to set up the connection
through the tunnel.
.--------. .------. .--------.
| client |-- HTTP --| XRouter |-- Telnet --| target |
'--------' '------' '--------'
All traffic between the Java client and XRouter is carried on a
regular HTTP port 80 connection, which is allowed to pass
unhindered through the corporate firewall.
An HTTP tunnel connection begins like a regular HTTP session,
but instead of the GET method it uses CONNECT. For example:
CONNECT g8pzt.ath.cx:23 HTTP/1.1
Both host and port number must be present in the "URL" portion
of the request. The "host" portion may be either a hostname,
or an IP address in dotted decimal form.
If the request is denied because the destination is blocked by
the security rules, the HTTP error message is "403 Forbidden",
and the session terminates.
If the request is allowed (see "security" below), the server
attempts to connect to the specified host. If successful, it
then sends "200 Connection established" to the client,
followed by a blank line. The session then becomes fully
transparent, and the HTTP server plays no further part in any
transactions. The streams are full 8-bit binary.
Proxy / Tunnel Timeouts
~~~~~~~~~~~~~~~~~~~~~~~
By default, 30 seconds is allowed for name resolution, and
another 30 for the connection to establish. This timeout may
be altered using the PROXYTIMEOUT directive in HTTP.SYS (It
may need to be more than 60 sec via radio channels).
If the connection couldn't be established for any reason, the
server sends a 5xx failure message, and the session terminates.
Proxy / Tunnel Security
~~~~~~~~~~~~~~~~~~~~~~~
If not configured correctly, the HTTP tunnel and proxy could
pose a serious security risk, because they could allow users
to access destinations behind your firewall. In addition,
they could be used to access an external destination via your
IP address, thus hiding the identity of the caller.
Therefore by default the proxy and tunnel are disabled. In
order to enable them you must configure some security...
HTTP.ACL is the Egress Control file, i.e. it controls who the
users of the proxy / tunnel are allowed to connect to. If the
file is not present, or there are no suitable entries in the
file, the tunnel is blocked.
It is suggested that egress control is configured such that
"external" (i.e. Internet) users should only be allowed to
connect to specific "internal" (i.e. intranet) destinations,
such as the TELNET and CHAT servers, whilst intranet users may
be allowed to connect to any destination. See HTTP.ACL for
details.
**SEE ALSO**
HTTP.ACL(8) -- HTTP Proxy / Tunnel Egress Control File.
HTTP.SYS(8) -- HTTP Proxy / Rewrite Rules.
HTTP-SRV(9) -- HTTP Server.
----
==== HTTP-SRV ====
HTTP-SRV(9) XROUTER REFERENCE MANUAL 27/9/2023
**NAME**
HTTP-SRV -- HTTP Server.
**DESCRIPTION**
XRouter's HTTP server delivers HTML files from disk to user,
and also provides an HTML interface to XRouter for users and
for system management. The following functions are provided:
- HTML file server
- Server Side Includes
- Browser interface to XRouter
- URL Rewriting
- Malicious request blocking
- Java applet
- HTTP Proxy
- HTTP Tunnelling
(For details of the proxy / tunnel, please see the manual
section for HTTP-PROXY.)
Connectivity
~~~~~~~~~~~~
By default, the HTTP server uses the standard HTTP port,
which is TCP port 80, and the server is available via both
XRouter and the host system's IP stacks. It is also always
available as NetRomX service 80.
The TCP port number, and availability on each stack, may be
changed by using the HTTPPORT directive in XROUTER.CFG.
Setting the port number to zero disables the server on that
stack. See the HTTPPORT manual page for more information.
Server Root Directory
~~~~~~~~~~~~~~~~~~~~~
The HTTP server's "root" directory is specified using the
HTTPROOT directive in XROUTER.CFG, e.g. "HTTPROOT=C:\WEB".
This allows the HTML files to be located somewhere more
convenient, even on another drive if required.
If you omit this directive, the default will be a directory
called "HTTP" within the XRouter working directory. Users
are not able to "climb out" of that directory, and if they
attempt to do so they are IP-banned indefinitely.
If the directory doesn't exist, the server will not work.
For security reasons it is important that you don't use the
XRouter working directory as the HTTP root!
Default Page
~~~~~~~~~~~~
When servicing a request which doesn't include a filename in
the URL, (e.g. "http://g8pzt.ath.cx/") the server looks in
the HTTP root directory for a file called INDEX.HTM. If that
file is not present, it looks for DEFAULT.HTM. You may
therefore use either file as a "landing page" or an index to
your site.
An example INDEX.HTM is supplied for your guidance. It is by
no means a perfect web page, just something thrown together
to test a concept. You are encouraged to change it to suit
your own preferences. You may need to alter the address in
the "Connect" link to suit your own IP address / hostname.
The connect function is normally performed by a Java applet.
INDEX.HTM is meant as a default entry point for your XRouter
web site. Although XRouter's primary purpose is a router not
a server, and the primary purpose of its HTTP server is to
provide a web interface to the node, you may choose to create
a complex web site, of which the command interface is but a
small part.
You may prefer to use INDEX.HTM as a splash or menu page for
your site, putting the command interface on one or more linked
sub-pages. Or you may choose the opposite approach, putting
all the commands on the main page along with links to other
sites. The creativity is left to you...
Executing XRouter Commands
~~~~~~~~~~~~~~~~~~~~~~~
When the server receives a request whose URL begins with
"/exec?cmd=", e.g. it passes the command to XRouter for
execution, and serves a "template" page displaying the
response to the command. The template serves as a wrapper for
the text.
If the command has arguments, they must be passed as "arg1",
"arg2" etc. using the format "&arg1=x", where 'x' represents
the argument. There must be no spaces in the URL.
Example: "exec?cmd=n&arg1=h" - executes "N H"
If you wish to override the inbuilt html template, edit the
file EXEC.HTM, which was supplied with the installation
package, and put it in the XRouter working directory. This
file does not reside within the HTTP directory tree because
it is not intended to be served in the normal way.
If EXEC.HTM exists, the server will serve it in place of the
inbuilt template, replacing the tag with the result of
the executed command. EXEC.HTM does not currently support
Server Side Includes (see below).
Commands in Forms
~~~~~~~~~~~~~~~~~
Another way of executing XRouter commands is within HTML
forms.
The form tag's ACTION field should be "exec". Within radio
button elements the NAME field should be "cmd" and the
VALUE field should be the command plus any arguments, enclosed
in quotes. Further arguments can be specified with text input
elements, as shown in the following example:
Server Side Includes
~~~~~~~~~~~~~~~~~~~~
Server Side Includes (SSI) provide another means to generate
dynamic HTML. Special tags in the HTML files cause the server
to replace the tag with alternative data (such as the contents
of another file) when the file is served.
Server Side Includes are useful for including a common piece
of code throughout a site, such as a page header, a page
footer or a navigation menu. If the common code is modified,
all pages display the new code. This is preferable to having
to modify every page.
SSI has a simple syntax:
Directives are contained within HTML comments so that if SSI
is not enabled, users will not see the SSI directives on the
page, unless they look at its source.
Note that the syntax does not allow spaces anywhere between
the leading "<" and the directive. The tag must begin with
the exact sequence "
EXEC executes a command. The CMD parameter specifies that the
parameter value contains an XRouter command, and the parameter
value specifies the command and any argument(s). If the
command has arguments, the string should be enclosed in
quotes. Not all commands are allowed, only those which are
non-interactive and normally available to users. The results
of the execution are displayed to the user. If the response
contains tables, the whole directive should be enclosed in
tags to preserve the formatting.
Example:
FLASTMOD and FSIZE display the date when the specified
document was last modified, or the specified document's size.
The FILE or VIRTUAL parameters specify the document to use.
The FILE parameter defines the document as relative to the
current document path; the VIRTUAL parameter defines the
document as relative to the HTTP root.
Example:
INCLUDE allows the content of one document to be included in
another. The file or virtual parameters specify the file
(HTML page, text file, script, etc.) to be included. The FILE
parameter defines the included file as relative to the current
document path; the VIRTUAL parameter defines the included file
as relative to the HTTP root.
Example:
If the included file also contains Server Side Includes, they
will not be actioned.
Some servers will not execute SSI unless the HTML file has a
.SHTML, .SHTM or .STM extension. XRouter does not require
this.
SSI cannot be used in EXEC.HTM at present.
URL Rewriting
~~~~~~~~~~~~~
URL rewriting modifies the URL's of incoming requests,
according to a set of REWRITE rules in HTTP.SYS. This can be
used to organise widely-dispersed resources into a logical
directory tree.
The resources may be located on the same PC or even on
different servers, but can be made to look as if they are all
in the same tree on your server. This is done by replacing
parts of the requested URL with alternative strings of
characters.
For example, if you only have one public IP address, but you
have more than one HTTP server on your LAN which you wish to
make visible to the outside world, you could use non-standard
port numbers for the additional servers, but that is messy,
(e.g. http://g8pzt.atx.cx:8081). People cannot remember the
port numbers, let alone be bothered to type them in!
This is where XRouter can help, using URL rewriting plus the
HTTP proxy to redirect requests to any number of alternate
servers according to the first part of the URL. E.g. a URL
which begins with "/bbs" could be redirected to the web
server on your BBS.
If the rewritten URL begins with "http://{address}[:port]",
where {address} can be either a hostname or IP address, it is
treated as a proxy request, and redirected to the appropriate
server.
For more information see the manual section on HTTP.SYS.
Malicious Request Blocking
~~~~~~~~~~~~~~~~~~~~~~~~~~
XRouter's HTTP server doesn't suffer from the usual Windows
vulnerabilites, so malicious HTTP requests designed to
exploit them are simply a bandwidth-wasting nuisance
rather than a real threat. You can frustrate the hackers
by deploying the HTTPBAN.SYS file.
This file contains "signatures" or "templates" of typical
malicious request URL's. For example a request for
"default.ida" is part of a Code Red Worm attack, whilst
requests for "cmd.exe" are an attempt to locate vulnerable
Windows servers.
You can find out which are the common hacks by examining your
daily logfiles, looking for the "HR ... " (HttpRequest) lines.
Common ones are "/default.ida" and "/scripts".
The templates are compared in a sliding match with each
requested URL. If any part of the first 256 bytes of the URL
matches a template, the sender's IP address is entered into a
ban list and all further IP datagrams from that host are
ignored until XRouter is restarted. Up to 200 hosts can be
banned simultaneously.
For more information, see the manual section on HTTPBAN.SYS.
Java Applet
~~~~~~~~~~~
The Java applet XWEB.CLASS can be used to connect to XRouter
with a web browser.
The distribution archive contains the applet file, plus 3
rudimentary .HTM pages for you to examine or experiment with.
CONNECT.HTM is the menu page for 3 types of connection, and
would typically be accessed via a "connect" link on the main
page. You may however wish to put the 3 connect options
directly on the main page - it's up to you.
CONN23.HTM uses the Java applet to perform a normal telnet
connect to port 23. The port number is configurable (see
below), so you could clone the page for use with your chat
server.
CONN80.HTM uses the Java applet to perform a "tunnelled"
connection, which can be used via corporate firewalls which
block normal Telnet.
If you wish to use the above files and the applet, they
must be located within the HTTP tree.
You can change the applet colours and font, the number of rows
and columns displayed, and the connection mode (normal TELNET,
or HTTP tunnel), using tags in the HTML file. For
example: .
The parameters which can be specified are as follows:
Param name Default Description
-----------------------------------------------------------
rows 22 No. of rows in text window
cols 80 No. of columns in text window
bgcolour Dark grey Applet background colour.
borderColour Light grey Applet framework colour.
textBackground Black Background for text/cmd windows.
textColour White Colour of sent / rcvd text.
font Times Font style for sent / rcvd text
port 9999 TCP port number for connections.
mode Normal Connection mode (normal / proxy).
The only mandatory parameter is "port". This should normally
be 23 for a normal telnet connect or 80 for an http-tunnelled
connect, but you may use other values if you have moved or
translated your Telnet or HTTP ports.
Colours should be specified as a 24 bit hexadecimal number in
'C' style, e.g. 0xEECCFF, where the first 2 digits represent
the RED value, the second two digits represent the GREEN value
and the last two digits represent the BLUE value. Some
browsers can only display 216 discrete colours, so you should
preferably use the "browser-safe" values, which are all formed
from combinations of 00, 33, 66, 99, CC and FF.
The default font is quite small, and the characters are not of
a constant width, which means tables sent by XRouter will not
line up correctly. You may use the "font" parameter to
override the default. The recommended font is "Courier",
which is slightly larger and uses constant width characters.
Note: if the chosen font is not found on the client's device,
their default font will be used, so stick to the common ones.
You may need to reduce the number of rows or columns displayed
by the applet if you find it won't fit on a 640*480 screen. It
fits nicely on 800*600, but you may wish to optimise it for
another screen size, or even offer users the choice.
If you change the font, rows or cols, you may need to tweak
the WIDTH and HEIGHT attributes in the APPLET tag to prevent
parts of the applet from being obscured.
**FILES**
In XRouter root: EXEC.HTM, HTTP.SYS, HTTPBAN.SYS
In HTTP tree: INDEX.HTM, CONNECT.HTM, CONN23.HTM, CONN80.HTM,
XWEB.CLASS
**SEE ALSO**
HTTP.ACL(8) -- HTTP Proxy / Tunnel Egress Control File.
HTTP.SYS(8) -- HTTP Rewrite / Proxy Control File.
HTTP-PROXY(9) -- HTTP Proxy / Tunnel
HTTPBAN.SYS(8) -- HTTP URL Blocking File.
HTTP-SVC(9) -- NetRomX HTTP Service
HTTPPORT(7) -- TCP Port for HTTP Server.
TCP-PORTS(6) -- TCP Service Ports.
XROUTER.CFG(8) -- Main Configuration File.
----
==== HTTP-SVC ====
HTTP-SVC(9) XROUTER REFERENCE MANUAL 7/9/2023
**NAME**
HTTP-SVC -- NetRomX HTTP Service
**DESCRIPTION**
NetRomX Service 80 accesses XRLin's HTTP server, allowing
HTTP over Netrom.
HTTP over NetRom? Shock horror! What a phenomenally stupid
idea!!! Well maybe it is, maybe not? It's just another
communication tool.
This service is not new - it has been in XRouter since Jan
2013. If you access an XRouter's web interface via TCP/IP,
it's what allows you to click on certain nodes in the nodes
list, and go to their default pages.
Yes it might be slow, but if the HTML is kept clean and tight,
it is workable, and unlike the Internet, the addresses are
consistent. A node's "NetromWeb" address is simply its
callsign.
The service number is not affected by the setting of HTTPPORT,
which only affects TCP/IP access to the server.
**SEE ALSO**
HTTP-SRV(9) -- HTTP Server
SMS-SVC(9) -- Short Messaging Service.
SERVICES(9) -- NetRomX Standard Services.
----
==== IDS ====
IDS(9) XROUTER REFERENCE MANUAL 20/10/2023
**NAME**
IDS -- Intrusion Detection System.
**DESCRIPTION**
The purpose of XRouter's Intrusion Detection System (IDS) is
to detect, repel and warn the sysop of, suspicious or
malicious activities.
It mainly operates on IP, where most of the threats arise,
but also watches AX25 / Netrom. It does not need any setup
and should not interfere with normal operation.
The main indication of its presence is the "Security Monitor"
window, which displays any detected threats. Other than that,
there might be the occasional warning on the bottom right of
the "overview" window.
Security Monitor Window
~~~~~~~~~~~~~~~~~~~~~~~
Positioned between the "Overview" window and the "Consoles",
the "Security Monitor" is intended to remind / inform you of
any suspicious actitvity.
In most cases, this is just a waste of a window, showing all
zeros and mostly empty space. That's a good thing - it shows
you are (probably) safe.
However if you have any IP services enabled, the window might
come alive with activity. The top section shows an overview
of the threat statistics, whilst the rest of the window shows
the latest warning messages, in various colours according to
the severity of the threat.
There are 4 notification Levels as follows:
1 - IMPORTANT!: Intrusion / Escalation attempts (cerise)
2 - WARNING: Recon attempts (port scans etc (red)
3 - ADVISORY: Possible suspicious events (yellow)
4 - INFORMATIVE: Unusual events (white)
You can change which notifications are displayed using the
following command:
IDS V[erbosity] [level]
[level] is 0 (no notifications) to 4 (all notifications).
For example the command "IDS V 2" enables intrusion and recon
notifications only.
Pressing on the IDS window displays a pop-up box with
the notification levels, a brief description of the stats,
and a reminder of the IDS commands.
The various statistics displayed in the upper pane are
described in the section "IDS Statistics" below.
IDS Logging
~~~~~~~~~~~
The IDS notifications pane only has limited space, and you
can't watch it all the time, which is where IDS logging comes
in handy.
IDS events can be logged, either by enabling the IDS option
in the LOG directive, or by using the command "IDS LOG ON".
if IDS logging is enabled, some (but not all) IDS events are
logged to the file LOG/YYMMDD_IDS.LOG, where YYMMDD are the
2 digit year, month and day of the month.
Log entries are usually of the form:
**CAVEATS**
The IDS is not set in stone. It evolves and morphs as the
threatscape changes. Therefore some of the above may be out
of date already.
Nor does it claim to be a 100% foolproof system. XRouter's
primary purpose is for Amateur Packet Radio, not Internet
defence! The IDS must strike a balance between defending the
system, informing (but not overwhelming) the sysop, and not
getting in the way of normal operations.
**SEE ALSO**
IDS(1) -- Intrusion Detection System Commands.
IP(1) -- IP-related Commands.
ACL(1) -- IP Access Control List Commands.
LOG(7) -- Activity logging options
ACCESS.SYS(8) -- Telnet Access Control File.
IPBAN.SYS(8) -- Banned IP addresses File.
XROUTER.CFG(8) -- Main Configuration File.
AXSCTRL(9) -- TCP/IP Access Control.
----
==== IGATE ====
IGATE(9) XROUTER REFERENCE MANUAL 16/10/2023
**NAME**
IGATE -- APRS Internet Gateway.
**DESCRIPTION**
XRouter has an inbuilt APRS Igate, which allows received APRS
packets to be gated to an Internet APRS server, and packets
from the server to be gated to RF. You will need an APRS port
and an internet connection to take advantage of this.
Igate operation is controlled mainly by configuration settings
in file IGATE.CFG. If the file isn't present, the igate
daemon can be started, but nothing will happen. The file
includes keywords which specify the Internet APRS server
addresses, various timers controlling connections, the
filtering rules for gating packets, and the logging options.
In addition to the settings in IGATE.CFG there are a few in
XROUTER.CFG, which control whether or not the Igate daemon
starts at boot-up, and which ports may send to and receive
from the Internet.
Choosing and specifying Internet Servers
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The choice of server, and the TCP port to use on that server,
depends on where in the world you are located, and what sort
of data you're interested in. There are several types of
server, and the services they provide aren't always
comparable.
Some servers provide a "raw" data feed containing APRS
activity from all over the world, which can amount to a
considerable volume. Some also provide "filtered" or "local"
feeds, e.g. Ohio-only or messages-only.
There's no point in connecting to a "raw" feed if there is a
"local" feed available, as you will merely be wasting CPU
time and internet bandwidth downloading data you are going to
discard. APRS message-only feeds tend to be on port 1314,
whereas "raw" feeds tend to be on port 10151, or 2023 if
it's a Ahub server.
Using a browser to connect to http://server_address:14501
sometimes produces a status page containing useful server
addresses. You could start your search at "first.aprs.net".
In IGATE.CFG you may specify as many servers as you wish, each
on a separate line with the following format:
SERVER :
e.g. SERVER 128.196.58.1:1314
The port number must be separated from the IP address or
hostname by a colon so that the combined address:port forms a
contiguous string of characters with no spaces.
The servers are tried in rotation, starting with the first on
the list. If a connection attempt fails, or the link
subsequently closes, the next server is tried. When the end
of the list is reached it starts all over again at the first
one. The behaviour is modified by various timer settings
- see below.
You may find out which server is currently in use by using the
"TCP STATUS" command.
Connection Timers
~~~~~~~~~~~~~~~~~
There are various keywords which may be used in IGATE.CFG to
control the timings associated with connections to the
Internet servers, and they are as follows:
WAIT -- Time to wait for connection establishment.
Specifies the number of seconds to wait for connection
after sending a connect request. If not specified, the
default is 60.
If you have a permanent Internet connection, you may wish
to set a lower value, but if you're using dialup you may
wish to make it longer, e.g. 90 secs to allow time for
dialling and modem negotiation. If no response is
received from the server within the WAIT interval, the
next server in the SERVER list will be tried.
PAUSE -- Interval between successive tries.
Specifies the number of seconds to wait between successive
connection attempts to the same server. Default is 60
secs.
If a server goes down or fails to respond, there's no
point in aggressively trying to connect. For one thing,
if you have connection logging enabled you will build a
big logfile! This timer is mainly of use when you have
only one server in you SERVERS list, or when several
servers go down.
MAXTRIES -- No. of failed connect attempts allowed.
If a server consistently fails to respond to connect
attempts, there's a good chance it has gone temporarily or
permanently off line. The MAXTRIES value specifies the
maximum number of failed connect attempts allowed before a
server is ignored, and the default is 10. If the limit is
reached, that particular server will not be retried until
the SKIP interval (see below) expires.
SKIP -- "Blacklist" interval.
Specifies the amount of time for which a server will not
be tried after MAXTRIES failed connect attempts. This
effectively removes a server from the list for the SKIP
interval, after which it is placed back on the list.
Default is 3600 secs (1 hour).
Packet Filtering
~~~~~~~~~~~~~~~~
The Igate contains powerful packet filters, which can be
applied to traffic gated in both directions. The filtering
rules are specified in IGATE.CFG using IFILTER (internet to
packet) and PFILTER (Packet to internet) statements, the
general form of which are as follows:
xFILTER
Each field may include the following wildcards:
* Matches zero or more characters.
? Matches any single character.
# Matches a single digit.
@ Matches a single alphabetic character.
\ Escape - interpret next character literally.
The '*' character may only be used at the end of a field.
For example: "IFILTER G#@@@* * :*" will accept from the
internet feed only those packets sent by valid G0 to G9 + 3
letter callsigns, addressed to anyone, which contain APRS
messages.
The '\' (escape) character causes the next character to be
interpreted literally, instead of as a wildcard, e.g. "\*"
will match '*' and "\\" will match '\'.
A caret '^' at the start of any field will invert the sense of
the whole test, causing matching packets to be REJECTED, e.g.
IFILTER ^M7ABC * *
IFILTER * ^APZ244* !*
The first statement will reject all packets from M7ABC, and
the second will reject all static position reports sent to the
destination APZ244 (e.g. if they can't be trusted). Rejection
statements MUST be placed at the beginning of the filter
rules, before any catch-alls.
The maximum length of each field (pattern) is currently 10
characters. There is no limit to the number of xFILTER
statements you may specify. If no rules are specified,
nothing will be gated.
All valid APRS and UI-View packets (except 3rd party packets,
and those with NOGATE or RFONLY somewhere in the digi path)
received by the router are offered to the PFILTER, providing
the appropriate DIGIFLAGS are set (see below). Mic-E packets
are decoded to text before being offered to the Internet
servers because they may contain characters which won't pass
through the servers. This decoding takes place before
filtering.
You should be VERY careful when designing your filter rules,
as you could quite easily overload the RF channel by
attempting to gate too much data to it. There is little point
in gating non-local data.
To reduce unnecessary traffic, APRS "messages" are only gated
to RF if the recipient has been seen locally on RF within the
last hour.
Radius of Interest
~~~~~~~~~~~~~~~~~~
In IGATE.CFG the statement "RADIUS " sets a radius in
Kilometres from XRouter's position. Position reports from
within this radius are gated to RF, providing they pass the
IFILTER rules. The default radius is 100Km. Setting
"RADIUS 0" allows unlimited gating of positions.
Controlling gating direction / port(s)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Regardless of any other settings, an XRouter port will not
broadcast packets received from the Internet, or offer
received packets to the internet, unless the appropriate bits
are set in the port DIGIFLAG. You should add one or both of
the following values to DIGIFLAG:
Bit Value Option
------------------------------------------------
6 64 Enable gating from Packet to Internet.
7 128 Enable gating from Internet to Packet.
Packets accepted (i.e. passing IFILTER) from the Internet are
broadcast on ALL ports which have bit 7 of DIGIFLAG set, so be
careful not to lazily set DIGIFLAG to 255!
Activity logging
~~~~~~~~~~~~~~~~
Igate activity can be recorded in the file ./LOG/IGATE.LOG by
including a LOG keyword with non zero argument in IGATE.CFG.
The argument is a number made up as follows:
Bit Value Option
------------------------------------------------
0 1 Record Igate daemon start and stop events.
1 2 Record Inet server connections / disconnections.
2 4 Record frames sent from Internet to Packet.
3 8 Record frames sent from Packet to Internet.
The "record frames" options can generate a lot of data, so
they're intended mainly for testing purposes, e.g. making sure
your filters are correctly set. To avoid the logfile growing
too big, you are advised to periodically rename or otherwise
remove it, allowing a fresh one to start.
Starting and stopping the Igate daemon
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The daemon may be started and stopped at any time with the
commands "START IGATE" and "STOP IGATE". If the daemon is
already running, attempting to restart it will simply produce
an error message, as will trying to stop it if already
stopped.
The IGATE.CFG file is re-read each time the daemon is started,
so the configuration can be changed without stopping XRouter,
by editing the file (using Notepad or the PZTDOS line editor),
then re-starting the daemon. Editing can take place while
the daemon is running.
The daemon may be started automatically when XRouter boots, by
including IGATE=1 in the "global" section of XROUTER.CFG.
**SEE ALSO**
APRS(9) -- Automatic Packet Reporting System.
DIGIFLAG(1) -- Display / Set digipeat options.
EDIT(3) -- PZTDOS Line Editor.
IGATE.CFG(8) -- IGATE Configuration File.
START(1) -- Start Daemon Processes.
STOP(1) -- List / Stop Daemon Processes.
TCP(1) -- TCP status / configuration commands.
XROUTER.CFG(8) -- Main Configuration File.
----
==== INFO ====
INFO(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
INFO -- Info System.
**DESCRIPTION**
When the user issues the "I" command without any arguments,
the text specified by INFOMSG (in XROUTER.CFG) is sent to
him.
However, this command may also form the entry point for a
much more comprehensive information system which the sysop
may configure how he wishes. For example you may wish to
include details of the local packet network and clubs, and
maybe a set of tutorials on general packet topics...
In order to do this, the INFO directory must exist (within
the directory containing XRouter), and must contain the
desired info in the form of text files with the extension
".INF".
After using "I" by itself, the user will then be invited to
enter "I *" to list the available info topics. If the user
enters that command, the filenames (without the .INF) are
displayed in alphabetical order, and the user is invited to
read the files using the "I " form of the command.
If the user enters a filename which is not found,
XRouter displays a list of similar filenames.
The filename should be relevant to the contents, but try to
keep it fairly short. You should aim to keep each file
concise in order to save air time, preferably breaking
complex subjects into a series of small files with "see also"
references to link them. It is very frustrating for users to
begin reading a file only to discover it's not of interest,
and then having to wait a long time for it to finish! You
may use ANSI or HTML in the files, but not pure binary.
Within the .INF files, lines beginning with a semicolon ';'
are not displayed to users, so you can use them for comments,
such as file modification and version details.
**SEE ALSO**
HELP(9) -- Help System
INFO-SVC(9) -- NetRomX Information Service
----
==== INFO-SVC ====
INFO-SVC(9) XROUTER REFERENCE MANUAL 7/9/2023
**NAME**
INFO-SVC -- NetRomX Information Service
**DESCRIPTION**
Isn't it frustrating to connect to a node, only to find that
there is no INFO command, or the sysop hasn't bothered to set
up any information?
Where in the world is it? We aren't all familiar with country
prefixes!
What software is it running? That affects which commands we
must use to find information. What sort of node is it? Just a
router, or is it the node underlying a BBS or DX cluster?
Where can I find more information about the system, the
person or group responsible, the software etc?
The NetRomX "Information Service" (service no. 1) is intended
to answer some of your questions. It is accessed by
connecting to service 1 on any XRouter running version 501v
or later. For example, to connect to G8PZT's info service:
C G8PZT 1
The information is provided in a form which is readable by
both humans and machines. It is of the ": "
form, with each piece of information on a separate line.
Every keyword is unique. Only a few have been implemented so
far, although others are planned. Your suggestions would be
welcome.
The server closes the connection after sending the data.
The INFO command accomodates this feature, so the user
doesn't even have to remember the service number or add the
"stay" flag. The syntax is:
I[nfo] [nodecall | nodealias]
Here's a typical session:
info kidder
VK2DOT-1:DOTXR} Info:
Trying G8PZT::1...
VK2DOT-1:DOTXR} Connected to G8PZT::1
Node-Type: Host / Router
Node-Callsign: G8PZT
Node-Alias: KIDDER
QTH: Kidderminster, Worc's
Maidenhead: IO82VJ
Position: 52.400002 / -2.250000
Sysop-Callsign: (to be done)
Software-Type: AX25+NetRom+IP Router/Node
Software-Name: XrPi
Software-Version: 501y (19/7/20)
Software-Author: Paula G8PZT
Software-Info: http://vk2dot.dyndns.org/xrpi
Software-Uptime: 4d, 11h, 3m, 58s
Local-Time: Fri, 21 May 2021 03:27:06 +0000
Local-Sunrise: 05:05
Local-Sunset: 21:08
Netrom-Known: 250
Netrom-Neighbours: 6
AX25-Links: 6
Amprnet-IP: 44.136.16.6
Amprnet-Name: g8pzt.ampr.org
Netrom-Services: 1,2,7,8,9,13,14,16,18,19,21,23,80,87
VK2DOT-1:DOTXR} Welcome back
**SEE ALSO**
INFO(1) -- Display information.
INFO(9) -- Info system.
SERVICES(9) -- NetRomX Standard Services.
----
==== INP3 ====
INP3(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
INP3 -- Inter-Node Protocol 3.
**DESCRIPTION**
INP3 is version 3 of the so-called "Internode Protocol". This
is a protocol for exchanging time-based routing information
between neighbour nodes. Despite the misleading name, it is
not concerned with general inter-node traffic, only the
routing information.
INP3 is analogous to NetRom nodes broadcasts, except that the
information is "unicast" to each neighbour via the normal
AX25L2 inter-node links, instead of being broadcast via UI
frames.
NetRom nodes broadcasts and INP3 can happily co-exist on the
same network, as they are are concerned with different
metrics. NetRom broadcasts propogate route QUALITY, whilst
INP3 unicasts propogate TRIP TIME. These are two completely
different metrics, and there is NO valid way to convert one to
the other, especially quality to time, since route quality is
such a nebulous and subjective quantity.
However, there is one caveat: Some types of node software,
including Linux and (X)net (no relation to XRouter!) convert
time to quality and vice versa. This causes distorted routing
when qualities are converted to bogus trip times. Assigning
slightly lower route qualities to these neighbours helps to
prevent traffic being diverted through them.
The protocol is summarised below:
Information Exchange
~~~~~~~~~~~~~~~~~~~~
All INP3 routing information traffic between two neighbour
nodes is carried alongside regular inter-node traffic, by
AX25L2 numbered information frames with PID 0xCF (NetRom).
Link Quality Estimation
~~~~~~~~~~~~~~~~~~~~~~~
The "quality" of an inter-node link is determined by its mean
one-way frame transport time, usually measured by the exchange
of L3RTT frames. This value is called the Smoothed Neighbour
Transport Time (SNTT).
Trip Time
~~~~~~~~~
This is the all-important metric. For a given target node, it
is simply the sum of all the intermediate nodes' SNTTs. It is
measured in 10ms units, with a maximum (horizon) value of
60000, i.e. 600 seconds. A trip time of 60000 is used to mark
a route as unusable.
The sysop may set a local limit which is less than 60000 using
MAXTT. Routes which exceed the local limit are propogated
with the horizon value.
In this context "route" means a path through the network,
involving one or more intermediate nodes. The optimum route
to a target node is generally considered to be the one with
the lowest trip time.
Hop Count
~~~~~~~~~
Each inter-node link is counted as one HOP. This is a second
metric which is propogated alongside trip time. Routes with
lower hop counts are preferred. A hop count of 30 is
considered to be the horizon, and marks the route as unusable.
The sysop may set a local limit which is less than 30 using
MAXHOPS. Routes which exceed the local limit are propogated
with the horizon value.
Propogation of Routing Information
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A route via a neighbour is valid as long as it is regularly
updated in unicasts from that neighbor, with a trip time less
than the horizon. If the route is not regularly updated, or
the trip time reaches the horizon, that route is marked as
unusable. If the link with the neighbour is broken, all
routes via that neighbour are marked as unusable.
Routes with trip time below the horizon are called positive
information and represent available nodes. Positive
information is not time critical and, like NetRom nodes
broadcasts, is sent at scheduled intervals only.
Any update of positive information with a slower target time
(or route loss) is called negative information. This is
always propogated immediately.
Information about nodes which are routed via a neighbour is
never returned to that neighbour. Instead it is returned with
horizon values. This is called "poisoned reverse".
Packet Structure
~~~~~~~~~~~~~~~~
Routing information is exchanged using "Routing Information
Frames" (RIF), containing one or more Routing Information
Packet" (RIP). Each RIP contains information about one node,
such as callsign, trip time and hop count, plus optional
fields such as alias and IP address.
A RIF starts with a single identification byte of 0xFF. This
value is guaranteed not to appear in normal L3 frame headers
as the first byte. The end of the RIF is marked by a zero
byte, 0x00. The following diagram shows a RIF containing
one RIP:
Byt: 1 7 1 2 n 1
.------.----------.--------.-------------.-----------.------.
| 0xFF | | | | | 0x00 |
'------'----------'--------'-------------'-----------'------'
<------ Routing Information Packet --------->
<-------------- Routing Information Frame ---------------->
Callsign in AX25 format
No. of hops to target (1-30)
Trip time to target in 10ms units (1-60000)
Variable length options field as below:
Bytes: 1 1 n =
.----------.--------.--------------.
| | | |
'----------'--------'--------------'
Length of data field in bytes (0-255)
Type of data field (0=alias, 1=IP addr)
Data field.
**SEE ALSO**
L3RTT(9) -- Layer 3 Round Trip Time
MAXHOPS(7) -- Maximum Hop Count.
MAXTT(7) -- Maximum Trip Time.
QUALITY(1) -- NetRom Route Quality.
ROUTES(1) -- Add, Drop & List Neighbour Routes.
----
==== IP-CODES ====
IP-CODES(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
IP-CODES -- IP Country Codes.
**SYNOPSIS**
List of Amprnet region codes.
**DESCRIPTION**
Within Amprnet, the second octet from the left usually
represents a country or region. The following is a list of
those regions.
IPADDR REGION(s)
-----------------------------------------------
44.002 USA: California: Sacramento
44.004 USA: California: Si Valley - SFO
44.006 USA: California: Sta Barb/Ventura
44.008 USA: California: San Diego
44.010 USA: California: Orange Countyl
44.012 USA: Eastern Washington,Idaho
44.014 USA: Hawaii & Pacific Islands
44.016 USA: California: Los Angeles/Valley
44.017 USA: California: Antelope/Kern County
44.018 USA: California: San Brdo & Riverside
44.020 USA: Colorado: Northeast
44.022 USA: Alaska
44.024 USA: Washington:Western/Puget
44.026 USA: Oregon
44.028 USA: Texas: North
44.030 USA: New Mexico
44.032 USA: Colorado: Southeast
44.034 USA: Tennesee
44.036 USA: Georgia
44.038 USA: South Carolina
44.040 USA: Utah
44.042 USA: Mississippi
44.044 USA: Massachusetts:western
44.046 USA: Missouri
44.048 USA: Indiana
44.050 USA: Iowa
44.052 USA: New Hampshire
44.054 USA: Vermont
44.056 USA: Eastern&Central Mass
44.058 USA: West Virginia
44.060 USA: Maryland
44.062 USA: Virginia
44.064 USA: New Jersey: northern
44.065 USA: New Jersey: southern
44.066 USA: Delaware
44.068 USA: New York:
44.069 USA: New York: WNY
44.070 USA: Ohio - old
44.071 USA: Ohio - new
44.072 USA: Illinois
44.073 USA: Illinois
44.074 USA: North Carolina (east)
44.075 USA: North Carolina (west)
44.076 USA: Texas: south
44.077 USA: Texas: west
44.078 USA: Oklahoma
44.080 USA: Pennsylvania: eastern
44.082 USA: Montana
44.084 USA: Colorado: Western
44.086 USA: Wyoming
44.088 USA: Connecticut
44.090 USA: Nebraska
44.092 USA: Wisconsin
44.094 USA: Minnesota
44.096 USA: District of Columbia
44.098 USA: Florida
44.100 USA: Alabama
44.102 USA: Michigan
44.104 USA: Rhode Island
44.106 USA: Kentucky
44.108 USA: Louisiana
44.110 USA: Arkansas
44.112 USA: Pennsylvania: western
44.114 USA: N&S Dakota
44.116 USA: Oregon:NW&PDX,Vancouver
44.118 USA: Maine
44.120 USA: special use in Nevada
44.122 USA: Kansas Puckett
44.123 USA: Virgin Islands
44.124 USA: Arizona
44.125 USA: Southern Nevada, Northern Nevada
44.126 Puerto Rico
44.128 Reserved for testing
44.129 Japan
44.130 Germany
44.131 United Kingdom
44.132 Indonesia
44.133 Spain
44.134 Italy
44.135 Canada
44.136 Australia
44.137 Netherlands
44.138 Israel
44.139 Finland
44.140 Sweden
44.141 Norway
44.142 Switzerland
44.143 Austria
44.144 Belgium
44.145 Denmark
44.146 Philippines
44.147 New Zealand
44.148 Ecuador
44.149 Hong Kong
44.150 Slovenija
44.151 France
44.152 Venezuela
44.153 Argentina
44.154 Greece
44.155 Ireland
44.156 Hungary
44.157 Chile
44.158 Portugal
44.159 Thailand, Laos, Vietnam, Kampuchea
44.160 South Africa
44.161 Luxembourg
44.162 Cyprus
44.163 Central America: Panama, Costa Rica, Nicaragua,
44.163 Central America: Honduras, El Salvador
44.163 Central America: Guatamala, Belize, Netherland Antilles
44.164 Surinam, French Guiana, Guyana, Mozambique
44.164 Atlantic Equitorial Islands, Martinique
44.164 Trinidad&Tobago, Falkland Islands, Aruba
44.165 Poland
44.166 Korea
44.167 India, Bangladesh, Nepal, Burma
44.168 China, Taiwan
44.169 African Continent
44.170 Croatia
44.171 Colombia, Peru, Uruguay
44.172 Sri Lanka, Malaysia
44.173 Mexico
44.174 Brazil
44.175 Cuba, Dominican Republic, Haiti
44.176 Turkey
44.177 Czech Republic
44.178 Russia
44.179 Gibraltar, Malta/Gozo
44.180 Yugoslavia(Serbia&Montenegro)
44.181 Slowak Republic
44.182 Romania
44.183 Iceland
44.184 Lebanon
44.185 Bulgaria
44.186 Singapore
44.187 Lithuania, San Marino
44.188 Armenia, Azerbaijan, Belarus, Estonia, Georgia,
44.188 Kazakhstan, Kyrgyzstan, Latvia, Moldova,
44.188 Tajikstan, Turkmenistan, Ukraine, Uzbekistan
44.189 Bosnia & Herzegovinia
44.190 Pacific Islands, Guam
44.193 Outer Space
44.194 Oceana
44.195 Antarctica
44.196 Arctic
----
==== IPENCAP ====
IPENCAP(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
IPENCAP -- IP-in-IP Encapsulation.
**DESCRIPTION**
The orginal form of IP-within-IP encapsulation, used by
KA9Q NOS to tunnel amateur IP (amprnet or 44-net) datagrams
via the public Internet, was IPIP, which used protocol number
94. Somewhere in the mists of time, the protocol number was
changed to 4 and the protocol was renamed IPENCAP (usally
referred to as ENCAP, but sometimes still called IPIP).
The structure of both types is the same, and is shown below.
Only the IP "protocol" number is different. It can be seen
that the amprnet (inner) datagram is carried within the
"payload" section of a public (outer) IP datagram:
.------------------.--------------------------.
| Public IP header | Amprnet IP datagram |
'------------------'--------------------------'
<-------------- Public IP datagram ----------->
Unfortunately IPENCAP is deliberately blocked by Windows,
starting with XP Service Pack 2, as a "security measure".
Therefore, **unless you use the NdisXpkt driver**, it is not
possible to use IPENCAP via an **Ethernet adaptor** with XR32.
This is a Windows problem, not an XR32 problem!! However, it
is still possible to use IPEncap via SLIP and PPP links.
(Note that the older form of the protocol, IPIP (protocol 94)
*isn't* blocked by Windows, and may be therefore be used
without NdisXpkt.)
There are no sush restrictions on the DOS and Linux versions
of XRouter.
IPENCAP can be used to route amprnet datagrams across *any*
TCP/IP network, not just the Internet. For example it can be
used to tunnel datagrams between nodes on a LAN. In this case
the "outer" IP header would contain LAN IP addresses, and the
"inner" header might contain amprnet IP addresses.
The IPENCAP protocol is used extensively between amprnet
gateways. The routing entries to achieve this are found in
file ENCAP.TXT (usually only available by secure FTP). See
the MAN page for ENCAP.TXT for more info.
Configuring IPENCAP
~~~~~~~~~~~~~~~~~~~
Note: For the purposes of this guide it is assumed that your
connection to the Internet is via a domestic NAT/PAT router
with firewall.
This may sound obvious, but in order to create any form of
tunnel between amprnet hosts, each host needs both an amprnet
(44.x.x.x.) and a public (e.g. 62.x.x.x) address. You MUST
ensure that your amprnet IP address is specified as XRouter's
"main" address, by including the line IPADDRESS=44.x.x.x near
the top of the XROUTER.CFG file (replacing x.x.x with your IP
address).
If you are using the EXTERNAL interface (which allows XRouter
to use its own IP stack), you then "override" the main address
on the port which connects to the LAN or Internet, by
including a different IPADDRESS= statement in the PORT block.
If you are not using the EXTERNAL interface, Windows or Linux
provides the LAN/Internet IP address for you.
Secondly, you and your link partner(s) must set up and test
IP routing between your public (i.e. non-44.x.x.x) IP
addresses. You cannot proceed until this step is complete!
IPENCAP encapsulation is specified by IP ROUTE entries with
mode "e" (encap). For example, the format to use in
IPROUTE.SYS is as follows:
IP ROUTE ADD 44.131.91.0/24 66.23.18.2 0 encap
The first IP address is the amateur IP address, or range
thereof, to be routed via this IPENCAP tunnel. If you don't
fully understand this format, see the MAN page for the IP
command.
The second address is the public IP address or hostname of the
link partner to whom the first address(es) will be routed. It
is more efficient to use an IP address if possible, rather
than a hostname, but the hostname may be required if the
partner's public IP address changes frequently. (DO NOT put
the partner's 44-net address in here!)
The last but one field (which is normally an XRouter PORT
number in normal route entries) is ignored and you set it to
zero.
Mode "encap" signifies IPENCAP encapsulation.
In ENCAP.TXT and XENCAP.TXT the format is as follows:
route addprivate 44.0.0.0/8 encap 66.23.18.2
In either case the mode "encap" can be abbreviated to "e"
alone.
Be aware that IPENCAP is subject to your access control rules,
and depending on your existing rules you may need to add the
following line to your rules in IPROUTE.SYS...
ACL PERMIT 0.0.0.0/32 0.0.0.0/0
Internet Routers
~~~~~~~~~~~~~~~~
If you wish to route IPENCAP across the Internet, don't forget
to specify a routing for IP *protocol* 4 (note *protocol* not
TCP/UDP port) in any "front-end" routers:
If XRouter is indirectly connected to the Internet via an
intermediate router, that router will probably be using some
form of NAT (Network Address Translation) to share one
"public" IP address between several systems on your LAN. The
"front end" router will probably route outgoing IPENCAP
without problem, but it will not know where to send incoming
IPENCAP unless explicitly configured.
Configuring such a router for IPENCAP usually involves
specifying a protocol number (4 for IPENCAP), and the LAN IP
address of a machine to which it should be routed, i.e.
XRouter's LAN IP address.
You are advised that not all domestic routers can be
configured to route *incoming* IPENCAP as it is not a
commercially recognised protocol. Some routers only allow
TCP and UDP port forwarding, with no provision for any other
protocol. If you or your link partner have such a router,
you may need to consider IPUDP instead.
**SEE ALSO**
ENCAP.TXT(8) -- Amprnet Encapsulated Routing File.
IP(1) -- IP Routing / Configuration Commands.
IPIP(9) -- IPIP Protocol.
IPROUTE.SYS(8) -- IP Routing / Configuration File.
IPUDP(9) -- IP-within-UDP Encapsulation.
XROUTER.CFG(8) -- Main Configuration File.
----
==== IPIP ====
IPIP(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
IPIP -- IPIP Encapsulation.
**DESCRIPTION**
IPIP is the "old" form of IP-within-IP encapsulation, used by
KA9Q NOS to tunnel amateur IP (amprnet or 44-net) datagrams
via the public Internet. Somewhere in the mists of time, the
protocol number was changed to 4 and the protocol was renamed
IPEncap (usally referred to as ENCAP).
The structure of both types is the same, and is shown below.
Only the IP "protocol" number is different. It can be seen
that the amprnet (inner) datagram is carried within the
"payload" section of a public (outer) IP datagram:
.------------------.--------------------------.
| Public IP header | Amprnet IP datagram |
'------------------'--------------------------'
<-------------- Public IP datagram ----------->
Unfortunately IPEncap is deliberately blocked by Windows,
starting with XP Service Pack 2, as a "security measure".
Therefore, **unless you use the NdisXpkt driver**, it is not
possible to use IPEncap with XR32. This is a Windows
problem, not an XR32 problem!! There are no such restrictions
on the DOS and Linux versions of XRouter.
IPIP provides an alternative to IPEncap that ISN'T blocked by
Windows. If you are using the NDIS driver, IPIP is provided
automatically. If you are not using NDIS, you need to put
IPIP=1 in XROUTER.CFG in order to activate IPIP.
IPIP can be used to route amprnet datagrams across *any*
TCP/IP network, not just the Internet. For example it can be
used to tunnel datagrams between nodes on a LAN. In this case
the "outer" IP header would contain LAN IP addresses, and the
inner IP header might contain amprnet addresses.
Configuring IPIP
~~~~~~~~~~~~~~~~
Note: For the purposes of this guide it is assumed that your
connection to the Internet is via a domestic NAT/PAT router
with firewall.
This may sound obvious, but in order to create any form of
tunnel between amprnet hosts, each host needs both an amprnet
(44.x.x.x.) and a public (e.g. 62.x.x.x) address. You MUST
ensure that your amprnet IP address is specified as XRouter's
"main" address, by including the line IPADDRESS=44.x.x.x near
the top of the XROUTER.CFG file (replacing x.x.x with your IP
address).
If you are using the EXTERNAL interface (which allows XRouter
to use its own IP stack), you then "override" the main IP
address on the port which connects to the LAN or Internet, by
including a different IPADDRESS= statement in the PORT block.
If you are not using the EXTERNAL interface, Windows or Linux
provides the LAN/Internet IP address for you.
Secondly, you and your link partner(s) must set up and test
IP routing between your public (i.e. non-44.x.x.x) IP
addresses. You cannot proceed until this step is complete!
IPIP encapsulation is specified by IP ROUTE entries with mode
"i". For example, the format to use in IPROUTE.SYS is as
follows:
IP ROUTE ADD 44.131.91.0/24 66.23.18.2 0 ipip
The first IP address is the amateur IP address, or range
thereof, to be routed via this IPIP tunnel. If you don't
fully understand this format, see the MAN page for the IP
command.
The second address is the public IP address or hostname of the
link partner to whom the first address(es) will be routed. It
is more efficient to use an IP address if possible, rather
than a hostname, but the hostname may be required if the
partner's public IP address changes frequently. (DO NOT put
the partner's 44-net address in here!)
The last but one field (which is normally an XRouter PORT
number in normal route entries) is ignored and you set it to
zero.
Mode "ipip" signifies IPIP encapsulation.
In XENCAP.TXT the format is as follows:
route addprivate 44.0.0.0/8 ipip 66.23.18.2
In either case the mode "ipip" can be abbreviated to "i"
alone. Mode "ipip" is allowed in XENCAP.TXT but not in
ENCAP.TXT.
Be aware that IPIP is subject to your access control rules,
and depending on your existing rules you may need to add the
following line to your rules in IPROUTE.SYS...
ACL PERMIT 0.0.0.0/32 0.0.0.0/0
Internet Routers
~~~~~~~~~~~~~~~~
If you wish to route IPIP across the Internet, don't forget to
specify a routing for IP *protocol* 94 (note *protocol* not
TCP/UDP port) in any "front-end" routers:
If XRouter is indirectly connected to the Internet via an
intermediate router, that router will probably be using some
form of NAT (Network Address Translation) to share one
"public" IP address between several systems on your LAN. The
"front end" router will probably route outgoing IPIP without
problem, but it will not know where to send incoming IPIP
unless explicitly configured.
Configuring such a router for IPIP usually involves specifying
a protocol number (94 for IPIP), and the LAN IP address of a
machine to which it should be routed, i.e. XRouter's LAN IP
address.
You are advised that not all domestic routers can be
configured to route *incoming* IPIP as it is not a
commercially recognised protocol. Some routers only allow
TCP and UDP port forwarding, with no provision for any other
protocol. If you or your link partner have such a router,
you may need to consider IPUDP instead.
**SEE ALSO**
IP(1) -- IP Routing / Configuration Commands.
IPENCAP(9) -- IPENCAP Protocol.
IPROUTE.SYS(8) -- IP Routing / Configuration File.
IPUDP(9) -- IP-within-UDP Encapsulation.
XROUTER.CFG(8) -- Main Configuration File.
----
==== IP-PRIMER ====
IP-PRIMER(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
IP-PRIMER -- IP Addressing / Routing Primer.
**IP ADDRESSES**
All IP addresses consist of a 32 bit binary number, which
is composed of four 8-bit binary numbers. For clarity they
are usually expressed as four decimal numbers separated by
dots, the so called "dotted quad" form, for example
44.131.91.2.
Each of the numbers which make up the quad can range from
0 to 255, i.e. 256 numbers in total. The numbers 0, 128
and 255 are usually reserved for special purposes.
The most significant (leftmost) number identifies the
"network" within the whole Internet. 44 was originally
allocated to Amateur Packet Radio, or "ampr.org". However,
the upper quarter of this range has now been sold off, so
44 is no longer exclusively amprnet.
Within the so-called "amprnet", the second number from the
left usually identifies the country, although in the USA it
generally identifies a state. In some parts of the world it
identifies a group of countries. In our example 131 is the
code for the whole UK. Numbers 192 and above no longer
belong to amprnet.
The third number from the left identifies the "region"
within the country or state, and in our example region 91
is North Worcestershire.
The rightmost number identifies up to 256 separate users
within the region. The addresses within a region are
sometimes allocated on a first come first served" basis,
or sometimes in groups to allow further subdivision of a
region.
**IP ROUTING**
Unlike NetRom routing, IP routing is often explicitly defined
by the sysop, although just like NetRom it can be automated
using RIP (Routing Information Protocol). The IP equivalent
of a NetRom "nodes table" is the "IP routes table". This can
be initialised using entries in IPROUTE.SYS.
The basic idea is that, for any destination IP address,
XRouter must send the IP packet (usually called a
"datagram") either directly to the destination (if it's on
the LAN or within radio range), or to a "gateway" which
knows how to reach the destination. In the most extreme
case, you can simply send all non-local IP traffic to a
gateway, who will handle it for you.
Since there are billions of IP addresses, it would be
impractical to define a route for every possible
destination. This is where the hierarchical structure
of IP addresses come to your aid.
If you are in the USA, you don't need to know explicitly
how to route to everyone in the UK. All you need to know
is how to route to the UK, then the routers within the UK
will do the work for you. If you don't know a route to
the UK, simply route the traffic to a gateway who does.
There is always someone willing to act a a gateway on your
behalf.
Routing decisions are made using a special combination of
IP addresses and "bits", for example 44.0.0.0/8. This tells
XRouter to compare the destination IP address of datagrams
with the leftmost 8 bits of 44.0.0.0, ignoring the
rightmost 24 bits. This will match any address beginning
with 44, i.e. the whole of amprnet (as was). Since the
rightmost 24 bits are ignored, 44.131.91.2/8 would have
*exactly* the same effect.
The higher the number of bits, the more precise the match,
for example 44.131.0.0/16 would "catch" all datagrams
addressed to the UK, 44.131.91.0/24 would catch all
datagrams addressed to North Worcestershire, UK, and
44.131.91.2/32 would match only one destination, namely
44.131.91.2. The "/32" is always the default if the
number of bits is not specified.
Having "caught" a destination, the remainder of a routing
entry tells XRouter which gateway (if any) to send it to,
which port to send it on, and what mode to use.
IP routing is usually specified in IPROUTE.SYS using
commands like this:
IP ROUTE ADD [/len] [mode [metric]]
Example: IP ROUTE ADD 44.131.93.0/24 44.131.93.240 5 d
This would route all region 93 traffic (44.131.93.0 -
44.131.93.255) to the gateway 44.131.93.240 on port 5
using datagram mode.
**ROUTING MODES**
The routing [mode] indicates how the traffic is to to be
handled, and is specified using a single letter as
follows:
d = Datagram (direct)
e = Encap (ip-over-ip protocol 4)
i = IPIP (ip-over-ip protocol 94)
n = Netrom (ip-over-netrom)
r = Reject
s = Silent discard
u = IPUDP (ip-over-UDP)
v = Virtual circuit (ip-over-ax25)
k = Kernel
"Datagram" is the usual mode, and is the default if "mode"
is omitted. It transmits datagrams "raw" inside
SLIP, PPP, Ethernet or AX25 UI frames, according
to the protocol used on the the destination port.
There is no error correction at the link layer,
so datagram mode should only be used on wire
links, or RF links with low loss rates.
"Virtual Circuit" mode gives better performance on less
than perfect RF links. It transports the
IP datagrams inside AX25 frames,
detecting and correcting errors at the
link layer.
"Netrom" mode is less efficient, but can "tunnel" datagrams
across non-ip sections of the network by wrapping
them in Netrom layer 3 frames.
"Encap" mode is used for IP/IP encapsulation, i.e. sending
44-net datagrams across the Internet by "wrapping"
them in datagrams with public Internet addresses.
This uses IP protocol number 4. Unfortunately, in
some cases Windows blocks this protocol (see below).
"IPIP" is the original IP-within-IP encapsulation mode,
using IP protocol number 94, and has the advantage
that it is not blocked by Windows.
"IPUDP" mode is similar to Encap and IPIP, except that the
datagrams are first wrapped in UDP before being
transported in IP. The advantage is that UDP is
usually able to pass through routers which don't
support IPIP or IPEncap, and can be selectively
routed to different machines according to the UDP
service port numbers.
"Reject" entries are used to reject traffic destined for
systems which don't exist, or are which not
reachable via any port. If simply routed on the
default port, such datagrams would waste resources
and would probably end up looping back to us.
Datagrams matching a "reject" entry are rejected
by returning an ICMP "destination unreachable"
report to the sender. The "gateway" ip address
should be 0.0.0.0 and the port number is ignored.
"Silent Discard" entries are similar to "Reject", except
that they simply dump the unwanted
datagrams without sending an ICMP error
report. This saves bandwidth when the
problem is persistent, and is more
suitable than "Reject" for suppressing
malicious network probes.
"Kernel" mode is a dummy mode. It tells XRouter to use the
host operating system's TCP/IP services to handle
this traffic. It is intended only as a last resort,
e.g. when operating without the EXTERNAL intarface.
The host O/S allows XRouter to originate and
terminate TCP, UDP, IPIP, ICMP and AXIP, but not to
*route* those protocols. Therefore, using a mode
"k" entry you may Telnet and Ping from XRouter, but
you are not allowed to route 3rd party traffic, e.g.
from RF to Internet.
**ENCAP BLOCKING**
Starting with Windows XP Service Pack 2, the IPEncap (encap)
protocol 4 was blocked by Windows for so-called "security
reasons".
Therefore if you are using WinXPSP2 or a later O/S, encap
mode can only be used via Ethernet if XR32 is able to
bypass Windows and talk directly to the Ethernet card using
the NDISXPKT driver. But this driver is currently only
available for Windows 2000 and XP.
This means that, until an NDIS driver is written for later
versions of Windows, you are not able to use encap mode on
those platforms.
However this only applies to Ethernet. If you have a SLIP
or PPP (i.e. serial cable) link with another system, you
may use encap mode whatever operating system is in use.
Linux does not block IPEncap, but you may need to give
XRouter the required privileges to use it.
**ADDRESS RESOLUTION PROTOCOL (ARP)**
ARP is responsible for mapping gateway IP addresses to
"hardware" (i.e. AX25 or Ethernet) addresses.
In order to send an IP datagram over an AX25 or Ethernet
network, it must be "wrapped" in an AX25, Ethernet, or
Netrom packet, and that packet will need a destination
address appropriate to that network. For example, to route
a datagram to 44.131.91.2 it must be wrapped in an AX25
packet addressed to GB7PZT-5.
The system *will* sometimes work without any ARP entries,
due to the process of "ARP resolution", whereby a router
can make a broadcast asking adjacent systems if they know
the hardware address for a given IP address, but this
process takes time and the adjacent routers may not know
the answer. Thus, for RF links at least, it is advisable
to put ARP entries for each of your direct RF neighbours
int IPROUTE.SYS. The general form of an ARP entry is:
ARP is the neighbour's IP address in dotted quad form.
is the hardware address type, i.e. "ax25"
"netrom" or "ether".
is the hardware address, i.e. AX25 callsign or
Ethernet address.
Example ARP entries:
This one causes datagrams bound for 44.131.90.6 to be
wrapped in AX25 packets addressed to GB7IPT-9:
arp add 44.131.90.6 ax25 GB7IPT-9
Whereas the following will send datagrams bound for
44.131.95.7 to the G7GHP-5 system via the GB7DIG digipeater.
Up to 8 digipeaters may be used in a single comma-delimited
string:
arp add 44.131.95.7 ax25 G7GHP-5,GB7DIG
This one will wrap datagrams destined for 44.131.24.1 in
Netrom packets addressed to node GB7CX:
arp add 44.131.24.1 netrom GB7CX
The following will wrap the datagrams in ethernet packets.
arp add 44.131.91.9 ether 00:00:1B:2C:04:81
ARP PUBLISH is used in cases where one system is "hidden"
behind another, and allows other systems to discover the
correct hardware address to use.
For example, say 44.131.91.127 is only reachable via
44.131.91.245. Unless all the local systems were
specifically configured to route to 91.127 via 91.245,
they wouldn't know how to do it. Including the entry:
"arp publish 44.131.91.127 ax25 g8pzt" on the 91.245
(g8pzt) router causes it to respond to anyone who asks
for the hardware address for 91.127, giving its own ax25
address.
**SEE ALSO**
ARP(1) -- Address Resolution Protocol Commands.
IP(1) -- IP Routing / Configuration Commands
IPROUTE.SYS(8) -- IP Router Control File.
----
==== IPUDP ====
IPUDP(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
IPUDP -- IP-over-UDP Tunnelling.
**DESCRIPTION**
The "Amateur Packet Radio IP Network" (amprnet) is a private
network for transferring TCP/IP between amateur radio
stations. It was originally assigned the class A IP address
block 44.x.x.x, but although it is notionally part of the
wider Internet, the public Internet has limited knowledge of
how to route it.
To solve this problem, amprnet traffic is usually wrapped or
"encapsulated" within publicly-routable IP datagrams. At the
destination gateway the frame is "unwrapped" to reveal the
original amprnet datagram.
IPUDP is IP encapsulated in UDP/IP. It allows amateur IP to
be transported across other IP networks such as the Internet,
to form "Virtual Private Networks" (VPN's).
In contrast to IPIP and IPEncap, which transport the private
(e.g. amateur) IP directly inside the payload portion of a
public (e.g. Internet) IP datagram, IPUDP transports the
private datagram in the payload portion of a UDP frame, which
is itself transported as payload in a public IP datagram.
This requires 8 bytes more overhead than IPIP, but it is far
more flexible.
.------------------.----------------------------------.
| Public IP header | UDP Header | Amprnet IP datagram |
| 62.31.20.2 | 94->94 | 44.131.91.2 |
| -> 82.31.65.8 | | ->44.68.1.5 |
'------------------'------------'---------------------'
<---------------- Public IP datagram --------------->
IPUDP Packet Structure
(In the above diagram, the amprnet (44-net) datagram
forms the payload of a publicly-routable UDP/IP
datagram. The IP addresses are for illustrative
purposes only.)
IPIP and IPENCAP, hereafter collectively referred to as
IP-in-IP, are "portless" protocols, and it is therefore
difficult (in come cases impossible) to make them pass
through some types of domestic NAT / PAT router which rely on
translating TCP and UDP service port numbers in order to
share a public IP address among several LAN hosts.
IPUDP overcomes this limitation because it transports the data
using a well known protocol (UDP) which NAT / PAT routers can
understand, thus it can get through where IP-in-IP cannot.
For example, it is easy to configure even the most basic
domestic router to route incoming UDP port 94 to a specific
machine on the LAN, but it is not often possible to do the
same with IP *protocol* 4.
The IPUDP protocol currently defaults to UDP port 94 for no
better reason than because the number was easy to remember,
being the same as the original protocol number for IPIP. In
addition, there were no other well-known protocols using this
port number. If difficulties are encountered with port 94,
please inform the protocol originator (G8PZT). There's nothing
to stop you using any other UDP port number.
IPUDP is only used for tunnelling amateur IP through the
public Internet, or for situations where conventional routing
isn't possible (e.g. XR32 without NdisXpkt). It would be
pointless when routing via a radio link.
IPUDP tunnels are one-way. To create two-way IPUDP routing,
the other end of a link needs to set up a reverse tunnel.
However, the reverse route needn't necessarily use a tunnel.
When To Use IPUDP
~~~~~~~~~~~~~~~~~
If you are running a Linux version of XRouter, most of this
following section may be ignored, and you can jump to the
final two paragraphs...
The Windows version of XRouter (XR32) was originally designed
to be used with the NdisXpkt driver, which allowed it to have
its own LAN IP address and IP stack. In this mode it could
route anything, just like its DOS predecessor (XR16).
However, there is no 64-bit version of the NdisXpkt driver,
so XR32 was subsequently made "dual-mode", such that it could
be made to run with or without the driver.
Without the NdisXpkt driver, XR32 was forced to use facilities
provided by the Windows TCP/IP stack. Those facilities were
limited, and in some cases were deliberately crippled by
Microsoft. For example, later versions of Windows XP prevent
the use of IPENCAP (protocol number 4).
Since no-one likes having to install and load drivers, the
majority of sysops now tend to use XR32 without NdisXpkt.
However this is a "basic" mode, with limited facilities,
compared to the "full" (NdisXpkt) mode. It was only intended
as a stop-gap measure, until a 64-bit driver could be written.
In basic mode, XR32 can originate and terminate all the common
protocols (TCP, UDP, ICMP etc.), but cannot actually route raw
IP via the *Ethernet* NIC without some form of encapsulation.
(SLIP / PPP connections are not restricted in this way)
As mentioned above, XR32 in "basic" mode cannot currently use
the IPENCAP protocol, so your options for routing IP via an
Ethernet NIC are limited to the following:
a) Route IP across existing AXUDP/AXIP links.
This is the least efficient in terms of packet overhead,
although that is of litle concern on a broadband
connection! It is easy to set up, but the downside is that
you can only route traffic to your immediate AXUDP or AXIP
neighbours, not the wider world. However, if everyone sets
up their default routes to direct the traffic to and from
an IPENCAP-capable gateway, this should be no barrier.
b) Use original IPIP protocol (protocol number 94).
This is the most efficient, and allows you to make a single
hop (as far as 44-net is concerned) tunnel to *any*
gateway that can accept IPIP protocol 94. In order to
receive this protocol however, your Internet router must be
capable of routing by PROTOCOL, which many routers aren't.
This protocol doesn't involve AX25 at all.
c) Use IPUDP protocol.
This option also allows you to hop directly to any other
gateway, providing they can handle IPUDP, and it doesn't
use AX25. It is only marginally less efficient than IPIP,
and as mentioned previously, it has the advantage that it
is easy to route through NAT/PAT routers.
Although DOS and Linux versions of XRouter (and XR32 in
"full" mode) allow IPEncap, you cannot use IPEncap if your
Internet router can't handle it. In this case, IPUDP may be
the preferable option.
Even if your domestic Internet router can handle the IP-in-IP
protocols (4 and 94), it can only route such traffic to ONE
host on the LAN. But it can route IPUDP to multiple hosts, if
different UDP port numbers are used.
Creating An IPUDP Tunnel
~~~~~~~~~~~~~~~~~~~~~~~~
(Note: For the purposes of this guide it is assumed that your
connection to the Internet is via a domestic NAT/PAT router
with firewall.)
The following may sound obvious, but in order to create any
form of tunnel between amprnet hosts, each host needs both an
amprnet (44.x.x.x.) and a public (e.g. 62.x.x.x) address. You
MUST ensure that your amprnet IP address is specified as
XRouter's "main" address, by including the line
IPADDRESS=44.x.x.x near the top of the XROUTER.CFG file
(replacing x.x.x with your IP address).
If you are using the EXTERNAL interface (which allows XRouter
to use its own IP stack), you then "override" this IP address
on the Ethernet port, by including an IPADDRESS= statement in
the Ethernet PORT block. The IP adress should be approriate
for your LAN. If you are not using the EXTERNAL interface,
Windows or Linux provides the LAN IP address instead.
Secondly, you and your link partner(s) must set up and test IP
routing between your public (i.e. non-44.x.x.x) IP addresses.
You cannot proceed until this step is complete!
If you are using a domestic router between XRouter and the
Internet, you must "open" UDP port 94 to direct incoming IPUDP
traffic to XRouter's LAN address. This must be a "static"
(permanent and unchanging) translation, not a transient or
"port triggered" one.
Finally, for each tunnel destination you must add an IP route
entry into IPROUTE.SYS, similar to the following:
IP ROUTE ADD 44.131.91.0/24 62.31.206.176 0 u
The first IP address is the amateur IP address, or range
thereof, to be routed via this IPUDP tunnel. If you don't
fully understand this format, see the manual sections
detailing IPROUTE.SYS and the IP ROUTE ADD command.
The second address is the public IP address or hostname of the
link partner to whom the first address(es) will be routed. It
is more efficient to use an IP address if possible, rather
than a hostname, but the hostname may be required if the
partner's public IP address changes frequently. (DO NOT put
the partner's 44-net address in here!)
The last but one field (which is normally an XRouter PORT
number in normal route entries) is used in IPUDP entries to
modify the UDP service number. "0" is the recommended
setting, meaning "use default" (see below).
Mode "u" signifies IPUDP encapsulation.
Reassigning the IPUDP Port Number
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Since you can only have one application using a given UDP port
number per IP stack, you are not able to run more than one
copy of XRouter on the same machine unless you reassign or
disable the IPUDP ports to avoid contention. You may do this
using the IPUDPPORT=n keyword anywhere in XROUTER.CFG, where
n is a number between 0 and 65535.
It is recommended that you use port 94 (the default) as the
primary port, 95 as the first alternative, 96 for the second,
97 for the third, and so on, as these numbers are not assigned
to any particular service. You should avoid using the numbers
associated with standard services such as DNS (53), DHCP (67
and 68), AXUDP (93), WINS (135) and so on. For a
comprehensive list search for "assigned numbers" on the web.
Please bear in mind that if you reassign your IPUDP port,
others will not be able to route IPUDP to you unless you
inform them of the new number.
Routing to Alternative UDP port
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Creating an IPUDP tunnel to a peer who has reassigned his
IPUDP port is relatively simple, as the following example
shows:
IP ROUTE ADD 44.131.91.0/24 62.31.206.176 95 u
Note the "95" in the last but one field, which tells XRouter
to address the packets to UDP port 95 instead of the default
port 94. That's all there is to it!
Disabling IPUDP
~~~~~~~~~~~~~~~
If you are using XRouter for AX25/Netrom only, and don't wish
to take part in the amprnet, then you probably won't have
included an IPADDRESS= line in XROUTER.CFG. In this case all
IP facilities, including IPUDP, are disabled automatically.
However, you may have an IP address but wish to disable IPUDP
for other reasons. You can do this easily by including the
directive "IPUDPPORT=0", anywhere in XROUTER.CFG.
More Info
~~~~~~~~~
This file is too big already. For FAQ and troubleshooting
info, please see the MAN page entitled IPUDP-FAQ.
**SEE ALSO**
IP(1) -- IP Routing / Configuration Commands.
IPENCAP(9) -- IPENCAP Protocol.
IPIP(9) -- IPIP Protocol.
IPROUTE.SYS(8) -- IP Routing / Configuration File.
IPUDP(9) -- IP-within-UDP Encapsulation.
IPUDP-FAQ(9) -- IPUDP Frequently Asked Questions.
NDISXPKT(9) -- NDISXPKT Driver.
XROUTER.CFG(8) -- Main Configuration File.
----
==== IPUDP-FAQ ====
IPUDP-FAQ(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
IPUDP-FAQ -- IPUDP FAQ / Troubleshooting.
**DESCRIPTION**
This document contains Frequently Asked Questions and
troubleshooting information related to the IPUDP protocol.
It is a work in progress...
IPUDP Frequently Asked Questions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Q) Under what circumstances should I use IPUDP?
A) You might consider using IPUDP in the following
situations:
- When you cannot use IPEncap because are running XRouter
on Windows without the NdisXpkt driver.
- When your Internet router cannot handle "portless"
protocols such as IPIP, IPEncap, AXIP etc.
- When you have an existing system that requires your
Internet router to route IPENCAP to it (you can only
have one IPENCAP host per public IP address).
- When you have more than one system on the same public
IP address and require independent routing to each.
- When you have more than one XRouter on the same machine,
with different 44-net addresses.
- When you wish to route between 44-net systems on your
LAN that can't use IPEncap.
- Just for the fun of it! :-)
Q) Can I Send IPUDP To Anyone?
A) No. It is believed that IPUDP is only implemented by
XRouter at the time of writing.
Q) If I use IPUDP, can I still use other forms of IP routing?
A) Yes. You can safely "mix and match" your IP routing
modes to suit your own requirements. What you mustn't
do is have identical route table entries with different
modes. Nothing dangerous will happen, but XRouter will
ignore the duplicates.
Q) Do I need an AXIP interface to use IPUDP?
A) No. IPDUP is completely unrelated to AX25, AXIP, AXUDP
etc. and does not need a special INTERFACE or PORT.
Q) Do I need ENCAP.TXT?
A) No, not for IPUDP itself, but you may need it if you
intend to use IPEncap alongside IPUDP.
There is an XRouter-only version of ENCAP.TXT called
XENCAP.TXT, which can accept routing modes other than
"encap". Place it into your XRouter working directory
and type IP ROUTE LOAD to read it into your routing
table.
If you wish to add your system(s) to the list so that
they can receive IPUDP traffic, please email
g8pzt[at]blueyonder.co.uk, stating your callsign, the
subnet address(s) that you handle, your public IP
address, and your IPUDP port number if it isn't 94.
Troubleshooting
~~~~~~~~~~~~~~~
IPUDP is a well-proven technology. When things don't work,
it is always due to a configuration error, not a fault in
XRouter.
Try PINGing the destination host to see if XRouter generates
an error message. Some of the errors so far observed are
listed below:
o Boot up error: "IPUDP Initialisation error 20048"
The IPUDP port is already in use by another process on the
PC. This error is usually caused by trying to run more
than one XRouter on the same machine. You must use the
IPUDPPORT keyword in XROUTER.CFG to disable IPUDP on all
but one XRouter, or to assign a different port number to
each one.
o Error 9x02 (No memory)
This should never happen, but if it does, Windows must be
seriously overloaded! This is a transient error, and
should clear itself. If not, close some apps.
o Error 9206 (Permission denied)
The IP Access Control List is preventing the packet from
being sent because the combination of source and
destination IP addresses is not within one of the ranges
you have defined to be "legal". Possible causes are:
- XRouter's "main" IP address not defined, or is not a
44-net address.
- Incorrect configuration of IP Access Control List.
Try commenting out all the ACL entries in IPROUTE.SYS and
reloading the file. If this fixes the problem, there is
a faulty of missing entry. You may need to add the
following entry: ACL PERMIT 0.0.0.0/32 0.0.0.0/0
o Error 9411
The IPUDP subsystem was not initialised because the main IP
address was not defined, or because IPUDPORT is set to 0 in
XROUTER.CFG.
o No Response From Target
Assuming you have set up the route entry correctly, there
are many possible reasons for failure. The following list
is by no means exhaustive:
- Your system has no viable route to the target's public
IP address. Try PINGing or Telnetting to that address.
Note that if IP QUIET or firewalling is active, you may
not get a reply to your PINGs.
- There is a higher priority but non-functional route in
the IP routing table, preventing the IPUDP route from
being used.
- There's a problem with your or your partner's Internet
connection.
- The target system is currently off-line for maintenance.
- The target's sysop has disabled IPUDP, or has reassigned
the IPUDPPORT.
- The target's Internet router is not set up to route IPUDP
to his XRouter, or the response is via IPUDP and your
Internet router is not set up to route it to your
XRouter.
- The target's IP addresses are set up incorrectly.
- The target hasn't configured a route that leads back to
you. Note that he doesn't need to configure a *direct*
route back to you, he may send it via other routers or
gateways.
- An intermediate router is dropping the return packets.
- The response is IPUDP and the target is replying to the
wrong UDP port number.
- The response is via IPEncap and your Internet router is
not set up to route it, or your system is not using
NdisXpkt (Windows only), and can therefore not accept
IPEncap.
**SEE ALSO**
IP(1) -- IP Routing / Configuration Commands.
IPENCAP(9) -- IPENCAP Protocol.
IPIP(9) -- IPIP Protocol.
IPROUTE.SYS(8) -- IP Routing / Configuration File.
IPUDP(9) -- IP-within-UDP Encapsulation.
NDISXPKT(9) -- NDISXPKT Driver (Windows Only).
XROUTER.CFG(8) -- Main Configuration File.
**IPUDP-FAQ(9) END OF DOCUMENT**
----
==== KISS ====
KISS(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
KISS -- KISS Protocol.
**DESCRIPTION**
KISS (Keep It Simple, Stupid) is a simple protocol which
encapsulates AX25 frames for transmission over serial (e.g.
RS232) lines. The framing method is identical to SLIP.
There is no flow control or error handling in the original
protocol.
The protocol specifies the following special characters:
Name Hex Dec Purpose
---------------------------
FEND 0xC0 192 Frame End
FESC 0xDB 219 Frame Escape
TFEND 0xDC 220 Transposed FEND
TFESC 0xDD 221 Transposed FESC
The FEND characters mark the start and end of the frame
containing the encapsulated datagram as follows:
.------.------.-------.------.
| FEND | Type | Data | FEND |
'------'------'-------'------'
In order to ensure that the FEND character only occurs at the
start and end of the frame, FENDs which occur within the
unencapsulated data are "escaped" to the two byte sequence
FESC TFEND. Likewise FESC is escaped to the sequence
FESC TFESC.
It is permissible (but not obligatorry) for two frames to
share a FEND:
.------.------.-------.------.------.-------.------.
| FEND | Type | Data | FEND | Type | Data | FEND |
'------'------'-------'------'------'-------'------'
The first byte of each frame, after the FEND, is a "type"
indicator. This byte is broken into two 4-bit nibbles such
that the low-order nibble indicates the command number (given
in the table below) and the high-order nibble indicates the
port number for that particular command. In systems with
only one HDLC port, it is by definition Port 0. In
multi-port TNCs, the upper 4 bits of the type indicator byte
can specify one of up to sixteen ports.
The following commands are defined:
Command Function Comments
--------------------------------------------------------------
0 Data frame The rest of the frame is data received
from / to be sent to the HDLC channel.
1 TXDELAY The next byte is the transmitter keyup
delay in 10 ms units. The default
start-up value is 50 (i.e. 500 ms).
2 PERSIST The next byte is the persistence
parameter, p, scaled to the range 0-255
with the following formula: P=p*256-1
The default value is P=63 (i.e. p=0.25).
3 SLOTTIME The next byte is the slot interval in 10
ms units. The default is 10 (i.e. 100ms).
4 TXTAIL The next byte is the time to hold up the
TX after the FCS has been sent, in 10 ms
units. This command is obsolete, and is
included here only for compatibility
with some existing implementations.
5 FULLDUP The next byte is 0 for half-duplex,
nonzero for full-duplex. The default is 0
(i.e. half-duplex).
6 SetH/w Specific for each TNC. In the TNC-1,
this command sets the modem speed. Other
implementations may use this function for
other hardware-specific functions.
255 Return Exit KISS and return control to a higher
level program. This is useful only when
KISS is incorporated into the TNC along
with other applications.
--------------------------------------------------------------
Only command 0 is allowed in frames from TNC to host.
Commands 1 to 6 are used to set TNC parameters, and are
usually sent at 5 minute intervals.
Limitations Of Plain KISS
~~~~~~~~~~~~~~~~~~~~~~~~~
In the original protocol, there is no error detection to
protect against noise and corruption on the RS232 lines.
More seriously, the host has no way of knowing how much data
is queued in the TNC awaiting transmission. A busy channel
could prevent the TNC from transmitting, causing the host's
FRACK timer to repeat frames, which simply add to the queue.
When the channel clears, the original frame and all the
repeats are spewed out in one huge transmission, causing the
other end of the link to respond with a load of acks. In bad
cases, the AX25 module retries out, so when the channel
clears, the original frame, plus repeats, plus a string of
frames are sent!
KISS With Checksum
~~~~~~~~~~~~~~~~~~
Checksum-KISS appends a single byte checksum to the "data"
portion of the frame, to detect line errors. Frames that
fail the checksum test are silently discarded. The upper
layer eventually detects the loss and re-sends the frame.
KISS With Acknowledgement (ACKMODE)
~~~~~~~~~~~~~~~~~~~~~~~~~
When operating in this mode, the host attaches a 16-bit
"serial number" to each frame (between the "type" and "data"
fields), and the TNC sends an "acknowledgement" frame to the
host when it has transmitted that frame on-air. This enables
the host to know how much data is queued, and to start its
AX25 timers at the correct time. This mode uses the command
code of 12 for both data frames and the acknowledgements.
Polled KISS
~~~~~~~~~~~
In this mode, the TNC does not send any data to the host until
it is asked to do so by a POLL command (command number 14).
This allows several TNC's to be multiplexed together (usually
with a diode matrix) onto one COM port, which removes the need
for one COM port per TNC. Up to 16 TNC's can be multiplexed
onto one COM port. Each TNC must have a different "address",
i.e. in the upper nybble of the Type field.
Serial Line Parameters
~~~~~~~~~~~~~~~~~~~~~~
Serial lines used for KISS must run at 8 data bits. Flow
control must be hardware or none, as XON/XOFF flow control
would interfere with the protocol.
If flow control is used, the cable must contain at least 5
cores, namely TXD, RXD, RTS, CTS and GND. If flow control is
not used, only TXD, RXD and GND are required.
When KISS is used to connect a PC to a TNC, a "straight
through" cable is used, because a TNC is considered a DTE
(Data Terminal Equipment).
When KISS is used to interconnect two applications, some form
of NULL MODEM is required. In the case of "real"
RS232 this could be an actual null modem device, or a cable
that is wired such that the TXDs at each end go to the RXDs
at the other end, and the RTSs at each end go to the CTSs at
the other. "Virtual" COM port pairs such as Com0Com include
this functionality as standard.
Configuring a KISS Link
~~~~~~~~~~~~~~~~~~~~~~~
KISS can be used to link XRouter with KISS TNC's, or with
other KISS systems via real or "virtual" COM ports. A typical
configuration in XROUTER.CFG would be as follows:
INTERFACE=1
TYPE=ASYNC <-- Serial RS232
COM=1 <-- COM port number (*)
PROTOCOL=KISS <-- Use KISS
SPEED=38400 <-- Baud rate
FLOW=0 <-- No flow control
MTU=256 <-- See below
KISSOPTIONS=NONE <-- Plain KISS
ENDINTERFACE
(*) On Linux versions COM specifies a TTY device name.
MTU specifies the largest size for the data portion of an AX25
frame, and the largest IP datagram that can be handled. This
should be set to 256 for KISS TNC's because they usually have
small packet buffers. For KISS links not using TNC's, MTU may
be set larger, up to 1500.
KISSOPTIONS are as follows:
NONE - Plain KISS (most TNC's use this) (default)
POLLED - For TNCs which send only when polled.
CHECKSUM - Packets protected by checksum. You can
only use this option if your TNC supports it.
ACKMODE - For TNC's which inform XRouter when a frame has
been transmitted on air.
SLAVE - XRouter will act like a polled KISS TNC,
sending only when commanded to do so.
Polled and slave are mutually exclusive.
BPQKISS eproms require POLLED and CHECKSUM, and their use
of ackmode is optional.
The PORT is configured like this:
PORT=3
ID=144.675MHz User Port
INTERFACENUM=1
CHANNEL=B
ENDPORT
CHANNEL is only required if the TNC is not using its default
channel / port.
KISS TNC's
~~~~~~~~~~
Most TNC's can be switched into KISS mode using a command
such as "KISS ON", but they have a tendency to randomly drop
back to command mode. Therefore it is more usual to replace
the EPROM with a purpose made KISS EPROM. There are several
versions, such as BPQKISS, JKISS, KISS and 220KISS. These
usually default to channel A, but can be "patched" for other
channels.
For example the BPQKISS EPROM may be patched for different
KISS channels by changing the byte at address 20(hex) in the
PROM as follows:
Channel Byte-20h Channel Byte-20h
---------------- ----------------
A 00h I 80h
B 10h J 90h
C 20h K A0h
D 30h L B0h
E 40h M C0h
F 50h N D0h
G 60h O E0h
H 70h P F0h
Once in KISS mode, the only way to switch a conventional TNC
back to normal mode is to send the sequence 192, 255, 192 on
the serial line. This can be done using a terminal program
and the numeric keypad, or a simple program such as
KISSOFF.EXE.
Dial-Up KISS
~~~~~~~~~~~~
A temporary KISS connection may be established over an XRouter
dial-up link using the MODE command in the DUN script. This
is only likely to be of use where phone calls are free!
**SEE ALSO**
DUN(9) -- Dial-up Networking.
SLIP(9) -- Serial Line Internet Protocol.
XROUTER.CFG(8) -- Main Configuration File.
----
==== L2FRAG ====
L2FRAG(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
L2FRAG -- AX25 Layer 2 Fragmentation.
**DESCRIPTION**
Data originated by XRouter is always packaged into the correct
sized frames for the underlying link. For AX25, this size is
specified by PACLEN, which defines the largest payload of an
information-bearing frame.
However XRouter has no control over the size of NetRom
datagrams originated at other systems, which may be larger
than the PACLEN of the AX25 L2 link onto which they are to be
routed.
To cope with this situation, XRouter includes a layer 2
fragmentation scheme, which (if enabled) breaks the datagram
into two or more PACLEN (or smaller) chunks. This scheme is
only used for connected-mode AX25 (LAPB). It supersedes an
earlier NetRom-specific fragmentation scheme which appears to
be no longer used.
A fragmented datagram is indicated by the presence of a
2-byte PID (Protocol Identifier) field in place of the usual
single-byte field. The first byte has the decimal value 8,
indicating that a second PID byte follows. The second byte
indicates how many segments (up to 127) remain to be sent.
The first segment is indicated by the value 128, and the last
segment by 0, i.e. no fragments left.
Whether or not XRouter uses fragmentation is controlled by
bit 4 of CFLAGS (decimal 16). If this bit is set, XRouter
fragments outgoing datagrams if necessary. If the flag is
not set, datagrams are sent unfragmented. This flag should
only be set if the peer is known to be capable (xNOS systems
usually are).
If a fragmented datagram is received from a peer, that peer
is assumed to be capable of fragmentation, and XRouter will
enable fragmentation (and re-assembly of received fragments)
regardless of the setting of bit 4 of CFLAGS.
Compatible Systems
~~~~~~~~~~~~~~~~~~
xNOS and all versions of XRouter are known to be compatible
with this scheme. The status of others such as BPQ32, PE1CHL
Net etc. are unknown at the time of writing (2013). Reports
would be appreciated.
**SEE ALSO**
CFLAGS(7) -- Connection Control Flags
L3FRAG(9) -- NetRom Layer 3 Fragmentation.
PACLEN(1) -- AX25 Max Packet Length.
----
==== L3FRAG ====
L3FRAG(9) XROUTER REFERENCE MANUAL 16/10/2023
**NAME**
L3FRAG -- NetRom Layer 3 Fragmentation.
**DESCRIPTION**
Long ago there was a proposed scheme for fragmenting NetRom L3
datagrams that were larger than the PACLEN of the underlying
AX25 L2 link. This involved breaking large datagrams into
PACLEN (or smaller) fragments, and manipulating bits in the L2
Protocol Identifier (PID), to indicate whether the L2 frame
contained the first, intermediate or last fragment of a NetRom
datagram.
The PID values were as follows:
Hex Dec Meaning
---------------------------------------------
CF 207 First & last (i.e. only) fragment
8F 128 First fragment
4F 64 Last fragment
0F 15 Intermediate fragment.
The scheme was implemented in XRouter, but was not understood
by BPQ, which was a popular node software of the time.
Therefore the code had to be disabled. It is not known which,
if any, modern software implements this scheme.
The fragmentation scheme described above is believed to have
been superseeded by a general-purpose L2 fragmentation scheme
as described in the MAN page entitled L2FRAG.
**SEE ALSO**
L2FRAG(9) -- AX25 Layer 2 Fragmentation.
PACLEN(1) -- AX25 Max Packet Length.
----
==== L3RTT ====
L3RTT(9) XROUTER REFERENCE MANUAL 7/9/2023
**NAME**
L3RTT -- Layer 3 Round Trip Time.
**DESCRIPTION**
L3RTT is an acronym for "Layer 3 Round Trip Time". L3RTT is a
protocol for measuring the round trip time (RTT) of links.
Round trip time is used to estimate the performance of a link.
The smoothed one-way trip time is used in making routing
decisions, and during the automatic estimation of route
QUALITY (Autoqual).
Whilst the layer *2* RTT for a link can be estimated by timing
how long it takes to get an acknowledgement to a given AX25L2
frame, this doesn't tell the full story. The RTT may be good,
yet the link may be experiencing delays simply because there
is too much traffic queued on the link.
L3RTT uses a special type of NetRom layer 3 packet which is
immediately reflected back by the neighbour if it understands
the protocol. This packet is queued with other link traffic,
so it gives a more accurate estimate of the layer 3 RTT at
that moment. The interval between queueing the L3RTT packet
and receiving the returned packet is the layer 3 RTT.
XRouter sends L3RTT packets on already-open neighbour node
links at 5 minute intervals. L3RTT does not open closed
links.
L3RTT frame format:
~~~~~~~~~~~~~~~~~~
Bytes: 7 7 1 1 1 1 1 1 1
.-------.-------.-------.---.---.---.---.---.--------.----.
| l3src | L3dst | l3ttl | 0 | 0 | 0 | 0 | 5 | | CR |
'-------'-------'-------'---'---'---'---'---'--------'----'
<----- L3 Header ------><- Dummy L4header -><- Payload -->
is the sender's NODECALL
is L3RTT-0
is 2 (decremeted to 1 by recipient)
The dummy header simulates L4 , and the
field is as follows (one space between each field):
6 10 10 10 10 6 11 n n n
Frame ID "L3RTT:"
Time stamp (10ms units)
Smoothed Round Trip Time
Last round trip time.
Unique ID for this packet.
Nodealias of sender.
INP3 version identifier: "LEVEL3_V2.1"
Software name and version e.g. "XRouter201c"
Max trip time (10ms units) e.g. "$M60000"
Flags field: "$N" indicates INP3 capable
**NOTES**
The above formatting can no longer be relied upon, as some
faulty 64-bit softwares are overflowing the 10-byte fields!
Some people complain that the L3RTT packets are too long. But
that's the point! They are supposed to simulate typical data
bearing frames. Short packets would give over-optimistic
measurements, and may succeed on poor links where longer
data-bearing packets would be subject to retries.
**SEE ALSO**
AUTOQUAL(9) -- Automatic Route Quality
QUALITY(1) -- Netrom Route Quality
----
==== MENU ====
MENU(9) XROUTER REFERENCE MANUAL 24/10/2023
**NAME**
MENU -- Console Pop-up Menu.
**DESCRIPTION**
Console sysops can access a GUI-style "pop-up" menu at any
time by hitting ALT_M (i.e. pressing the ALT and M keys
together) at any time.
This one-line "main" menu pops up on top of the the second
line of the display, which is usually the title bar for
whichever XRouter "window" is currently being displayed.
At the time of writing the top-level options are "File, View
and Help. The first character of each menu item is
highlighted in red, signifying that it is a "hot-key", i.e.
the menu item can be directly accessed by pressing the
highlighted key. ALT_F, ALT_V and ALT_H directly access the
(F)ile, (V)iew and (H)elp menus respectively.
The left and right arrow keys navigate the top level menu,
highlighting the selected item in white text on a blue
background. As each main memu item is selected, a "drop-down"
sub-menu appears beneath it.
The sub-menus also have "hot-keys" and highlighted items.
The highlight can be moved using the up and down arrow keys,
and the menu item can be actioned using the RETURN key. Or
the item can be directly actioned using the hot key.
For example, there are 3 ways to save the nodes table using
this menu system:
Firstly, ALT_M displays the main menu, where you can use the
left or right arrow keys to select the (F)ile menu, the up
and down arrow keys to select (S)ave nodes, then hit RETURN
to perform the action.
The second method is to use ALT_F to display the (F)ile menu,
then select (S)ave Nodes using the up and down arrows and
RETURN key as before.
The third method is simply to use ALT_F followed by S.
This menu system is a forgotten work in progress, still a
very long way from completion. Feedback and suggestions are
always welcome.
**OPTIONS**
ALT+M Top level menu
ALT+F (F)ile menu
(R)eload IP routes
(S)ave nodes table
E(X)it program
ALT+H (H)elp menu
(A)bout XRouter
(H)elp Topics
(M)anual Topics
(I)nfo Topics
(C)onfig Info
ALT+V (V)iew menu
C(L)ear Window
S(Y)sop Chat
(C)hat Monitor
(S)ession Monitor
(N)odes Monitor
(R)outes Monitor
(X)router Status
Sec(U)rity Monitor
Console (1)
Console (2)
Console (3)
The (H)elp, (M)an and (I)nfo Topics options display lists of
the available topics. The lists can be navigated using the
arrow keys, and the topic can be viewed in a scrollable
window by hitting RETURN on the highlighted topic.
**NOTE**
On the Windows version (XR32), the menu is accessed simply by
tapping the ALT key, but this is not possible on Linux
because Linux terminals don't produce a keycode when the ALT
key is pressed by itself.
----
==== MHEARD ====
MHEARD(9) XROUTER REFERENCE MANUAL 18/10/2023
**NAME**
MHEARD -- "Monitor Heard".
**DESCRIPTION**
MHEARD is another legacy command name from early TNC days.
The MHEARD facility lists recently heard stations, and may be
enabled or disabled for any port. It records callsigns in
reverse order of reception, with the most recent at the top of
the list, along with other useful information, such as the
date/time, position, type, and the number of frames heard.
This allows sysops and users alike to discover who else the
node can hear, to aid the search for suitable digipeaters, and
to diagnose problems.
Even on linking-only ports, where there is only usually one
partner, it provides a useful indication when the frequency
is being encroached upon, either by deliberate squatting,
unauthorised attempts to link, or lift conditions.
It is therefore recommended that you enable MHEARD on all
ports, and indeed this is the default. The ability to disable
MHEARD (to save memory) was necessary in DOS XRouter, but
memory is not an issue in Windows and Linux versions.
If you have set your LOCATOR, or have included an APRS-style
position report in your ID beacon, XRouter will know its own
position and will display position, distance and bearing for
any stations which broadcast APRS positions. This is a great
aid to network mapping, and it would be nice if everyone were
to add APRS positions to their ID beacons.
If a station was heard via a digipeater, the digipeater call
is also shown, and the letter "D" is shown in the "type"
field. If the heard station is a node, the letter "N" is
displayed. If it is sending IP traffic, "I" is shown, and if
it is sending ARP traffic, "A" is shown.
Within XROUTER.CFG, the "MHEARD=n" directive is used in each
PORT definition block to enable or disable the MHEARD facility
and to set the size of the list. For example "MHEARD=50",
enables it and sets the table size to record a maximum of 50
callsigns. If the directive is omitted, the default size is
15 callsigns.
You can control which types of station are recorded in the MH
list using the "MHFLAGS=n" directive in XROUTER.CFG, or by
using the MHFLAGS command during run-time. The default value
for n is 255 (show everything), and the number is formed by
adding numbers representing the desired options as follows:
1 Record directly heard stations
2 Record directly heard digipeaters
4 Record digipeated stations
8 Record direct/digipeated separately for each station
16 Preserve MHeard list across reboot
For example "MHFLAGS=3" would show directly heard stations and
digipeaters, but not the stations heard via digipeaters.
If the "Preserve MHeard lists across reboot" option is set,
the PORTs MHEARD list is saved to disk at exit and re-loaded
at startup. The list is also saved at regular intervals.
A port's mheard list may be cleared by using the
"MHCLEAR " command. You may clear all MH lists
by specifying port 0.
The MHEARD list is available to sysops and users alike, using
the MH command (see command reference section).
**SEE ALSO**
DX(1) -- DX list.
J(1) -- Recent Sessions.
MHCLEAR(1) -- Clear MHeard list.
MHEARD(1) -- Display recently heard stations.
MHFLAGS(7) -- Set MHeard options.
MHSIZE(1) -- Adjust size of MHeard list.
MHEARD(7) -- MHeard size/enable directive
XROUTER.CFG(8) -- Main Configuration File.
----
==== MH-SVC ====
MH-SVC(9) XROUTER REFERENCE MANUAL 22/9/2023
**NAME**
MH-SVC -- NetRomX MHeard Service.
**DESCRIPTION**
The MHEARD service uses NetRomX service number 26. It is
normally used by the "MHEARD " function.
It is not intended for direct connection by humans, but such
operation is possible, as described below:
Upon connection to service 26, the user must send a valid
MHEARD command, such as "MH 0" to list the ports on which
MHeard is available, or "MH 16" to obtain the MH list for
port 16. Only MHeard commands are accepted, any other
command will cause disconnection.
The connection is terminated by the server when the transfer
is complete.
It would be possible for automated network crawlers to use
this feature for harvesting MHeard lists, using the data for
example to build a map showing who can hear whom.
**SEE ALSO**
DX-SVC(9) -- NetRomX DX List Service.
SERVICES(9) -- NetRomX Standard Services.
----
==== MOD128 ====
MOD128(9) XROUTER REFERENCE MANUAL 18/10/2023
**NAME**
MODULO128 -- AX25 Modulo-128.
**DESCRIPTION**
Modulo-128 is an extension to AX25, with sequence numbers
from 0 to 127 instead of the usual 0 to 7. This allows a
much bigger MAXFRAME (up to 63) to be used, and is primarily
of use on good links.
On conventional (Modulo-8) AX25 links, much of the
inter-node traffic consists of short frames containing level
4 control information. These frames are interspersed with
data-bearing frames, which themselves may be only partially
full. Thus a router may transmit 7 frames in one go, but
the transmission may only be a few hundred bytes in total.
This is inefficient, due to the delays associated with
channel access, TXDELAY, TXTAIL, RESPTIME etc. On fast,
error-free links the data arrives in short bursts, separated
by long gaps of inactivity.
With Modulo-128, many more frames can be packed into a
single transmission, so the channel overheads become less
significant.
Because the largest allowed MAXFRAME value for Modulo-128
is 63, there can never be any sequence number ambiguity, and
this allows frame "re-sequencing", or "selective reject".
With normal AX25, if the first frame of a multi-frame set is
lost, the whole set of frames must be re-transmitted.
If Modulo-128 is used however, the "good" frames are stored
by the recipient, and only the lost frame is re-sent.
Together with the stored frames, this completes the set, and
the whole set can be acked. This is a much more efficient
strategy.
XRouter is capable of both Modulo-128, and frame
resequencing.
Modulo-128 frames are displayed on the trace screen as
"EAX25" (Extended AX25) instead of "AX25", and are initiated
by a new frame type "SABME" (Set Asynchronous Balanced Mode
Extended). You will notice the sequence numbers being
displayed as ""
The method of activation isn't fully decided as yet. If a
caller requests Modulo-128 (by sending an SABME frame),
XRouter will respond with and go into Modulo-128 mode.
The strategy for outgoing links is more complex. If the
port MAXFRAME is greater than 7, *ALL* level 2 downlinks on
that port will be tried using Modulo-128 (i.e. XRouter will
send instead of . This is not on user ports,
since hardly any users are EAX25 compatible.
If the called system is Modulo-128 capable, the correct
response to is , otherwise the correct response
according to the AX25 protocol is either or ,
which will cause XRouter to fall back to normal Modulo-8
AX25.
Most systems do answer correctly, but there may however be
some systems which do not properly implement AX25, for
example by silently discarding frames, and it will
not be possible to link to these systems if MAXFRAME is
greater than 7. This may be addressed in a future version.
It is more likely that Modulo-128 would be used on
inter-node links with other XRouters, Linux and PE1CHL nodes,
so to activate it, simply define a MAXFRAME > 7 for those
routes which require it. If the port is dedicated to one
link, you can set the port MAXFRAME > 7 instead.
**SEE ALSO**
ROUTES(1) -- NetRom Route commands.
MAXFRAME(7) -- Maximum Unacked AX25 Frames Directive.
XROUTER.CFG(8) -- Main Configuration File.
----
==== MQTT-BLOG ====
MQTT-BLOG(9) XROUTER REFERENCE MANUAL 26/9/2023
**NAME**
MQTT-BLOG -- MQTT Interface to Sysop's Blog.
**DESCRIPTION**
The sysop's blog may be operated via XRouter's inbuilt MQTT
broker, and/or via an external broker, by subscribing or
publishing to certain topics.
This facility is incomplete. The curently available
functionality is documented in the next section.
**OPTIONS**
a) Receive Notifications of Blog Events:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Topic: xrouter/event/{nodecall}/blog
The payload of an event notification is an un-named JSON
object containing the following fields:
Name Type Description
-----------------------------------------------------------
"id" integer Article/post number.
"rcvd" string Date/time of message creation (*).
"size" integer Length of the blog text in bytes.
"from" string Callsign of the post's creator.
"subject" string Topic of the post (32 chars max)
"text" string Body of the post (plain ASCII)
"event" string Type of event ("posted" or "deleted")
(*) in format "1997-09-14T23:47:00Z"
b) Retrieve a Blog Post:
~~~~~~~~~~~~~~~~~~~~~~~~
Topic: xrouter/get/{nodecall}/blog/msg/{msgnum}
The response payload is an un-named JSON object containing
the following fields:
Name Type Description
-----------------------------------------------------------
"id" integer Article/post number.
"rcvd" string Date/time of message creation (*).
"size" integer Length of the blog text in bytes.
"from" string Callsign of the post's creator.
"subject" string Topic of the post (32 chars max)
"text" string Body of the post (plain ASCII)
(*) in format "Mon, 14 Sep 1997 23:47:00 GMT"
c) Post a Blog Article / Reply:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Topic: xrouter/put/{nodecall}/blog
The payload must be a JSON object containing the following
fields:
Name Type Description
-----------------------------------------------------------
"sender" string Callsign of sender
"replyto" integer No. of msg being replied to (0=new)
"subject" string Subject of the post (32 chars max)
"text" string Body of the post (unlimited size)
Response: None unless QOS > 0
**LIMITATIONS**
The blog's MQTT interface does not yet notify "like" events,
nor does it allow article listings, deletion, "liking", or
the retrieval of replies. Those functions will be added in a
future version
**SEE ALSO**
BLOG(1) -- Access Sysop's Blog.
BLOGFLAGS(7) -- Options For Sysop's Blog.
REST-BLOG(9) -- REST Interface to Blog.
MQTT-CLI(9) -- MQTT Client
MQTT-SRV(9) -- MQTT Server / Broker.
----
==== MQTT-CHAT ====
MQTT-CHAT(9) XROUTER REFERENCE MANUAL 26/9/2023
**NAME**
MQTT-CHAT -- MQTT Interface to Chat Server.
**DESCRIPTION**
The chat server may be operated via XRouter's inbuilt MQTT
broker, and/or via an external broker, by subscribing or
publishing to certain topics.
This facility is incomplete. The curently available
functionality is documented in the next section.
**OPTIONS**
a) Receive Notifications of Chat Events:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
These events are published by XRouter whenever someone
joins or leaves a channel, changes name, personal text or
channel topic, or sends a nmessage.
Subscribe Topic: xrouter/event/{nodecall}/chat/{event-type}
Event-types are:
join User joins a channel
leave User leaves a channel
name User sets or changes name
pers User sets or changes personal text
topic User sets or changes channel topic
msg User sends a chat message
The payload of an event notification is an un-named JSON
object containing the following fields:
Name Type Description
-----------------------------------------------------
"user" string Callsign of user
"host" string Alias of chatserver the user is on
"name" string User's name
"time" string Time of event in form HH:MM
"channel" number Channel number (*1)
"topic" string Topic name for channel (*2)
"pers" string Personal text (*3)
"reason" string Reason for leaving channel (*4)
(*1) "channel" not present in "name" or "pers" events
(*2) "topic" only present in "topic" events
(*3) "pers" only present in "pers" events
(*4) "reason" only present in "leave" events
Internally the event time is stored as a 32bit unsigned
integer, representing the number of seconds since 1/1/70. It
could be sent as a number instead of a string, if that was
easier for the consuming client?
Channel numbers can range from -32767 to +32767. Negative
channels are used for Tampa Ping Pong chat. Channel 101 is
BPQ (W0RLI's RoundTable) chat. Channel numbers between 0 and
999, except 101, are local only. Channels > 999 are
distributed to all XRChat servers.
b) List Chatserver Channels and Users:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If the client publishes a "get" request, XRouter responds by
publishing the requested data to a similar "status" topic.
Request Topic: xrouter/get/{nodecall}/channels
Response Topic: xrouter/status/{nodecall}/channels
The response payload is a JSON array, which may be empty. If
present, each array element (channel) has at least the
following fields:
Name Type Description
----------------------------------------------------
"number" number Channel number (-32767 to 32767)
"topic" string Channel topic, e.g. "RoundTable"
"users" array List of users on the channel
The "users" array may be empty. If any users are present, a
user array element contains the following fields:
Name Type Description
----------------------------------------------------
"user" string User ID (usually callsign)
"host" string Alias of their chat server
"name" string User's name
"idle" string Elapsed time since activity
"stat" string Short presence/status text
"pers" string Personal text
"qth" string Home town
Some fields may be empty, e.g. personal text and QTH.
Idle time is "0s" to "59s", then "1h" to "23h", then "1d"
upwards.
Short presence/status codes are:
"Offline" Not on chat
"Avail" Available to chat
"Busy" Possibly watching, but likely too busy to reply
"BRB" Be Right back - very short break
"Away" Away from computer for a while
"Lunch" Out to lunch
"Phone" On the phone, will be back
"D.N.D" Do Not Disturb. Don't involve me
"Asleep" Gone to bed, so not watching live
"In&Out" Reading and responding intermittently
Example:
pub xrouter/get/G8PZT-1/channels
xrouter/status/G8PZT-1/channels
[
{
"number": 101,
"topic": "RoundTable",
"users": [
]
},
{
"number": 1000,
"topic": "Welcome",
"users": [
"user": "G8PZT-4",
"host": "MOBCHT",
"name": "Paula",
"idle": "1m",
"stat": "Avail,",
"pers": "Programming again!"
"qth": "kidderminster"
]
},
{
"number": 1234,
"topic": "Sysop Chat",
"users": [
]
}
]
c) Post a Chat Message:
~~~~~~~~~~~~~~~~~~~~~~~
Publish Topic: xrouter/put/{nodecall}/chat
The payload must be a JSON object containing the following
fields:
Name Type Description
------------------------------------------------------
"sender" string Callsign of sender
"channel" number Destination channel
"name" string Sender's name
"text" string Body of the message
Channel numbers can range from -32767 to +32767. Negative
channels are used for Tampa Ping Pong chat. Channel 101 is
BPQ (W0RLI's RoundTable) chat. Channel numbers between 0 and
999, except 101, are local only. Channels > 999 are
distributed to all XRChat servers.
Response: None unless QOS > 0
**LIMITATIONS**
The chat MQTT interface is only a proof-of-concept at this
stage, and some details may change. More functionality will
be added in a future version.
**SEE ALSO**
CHAT(1) -- Connect to Chat Server.
CHAT-SRV(9) -- About the chat server.
MQTT-CLI(9) -- MQTT Client
MQTT-SRV(9) -- MQTT Server / Broker.
----
==== MQTT-PMS ====
MQTT-PMS(9) XROUTER REFERENCE MANUAL 26/9/2023
**NAME**
MQTT-PMS -- MQTT Interface to Personal Message System.
**DESCRIPTION**
The PMS may be operated via XRouter's inbuilt MQTT
broker, and/or via an external broker, by subscribing or
publishing to certain topics.
This facility is incomplete. The curently available
functionality is documented in the next section.
**OPTIONS**
a) Receive Notifications of PMS Message Events:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
These events are published by XRouter whenever someone
creates, reads, or kills a message, and when a message is
delivered to the recipient's PMS.
Subscription Topic: xrouter/event/{nodecall}/pmsg
The payload of an event notification is an un-named JSON
object containing the following fields:
Name Type Description
-----------------------------------------------------
"number" integer Message number.
"mid" string Message ID (MID or BID)
"rcvd" string Date/time of message reception (*1).
"size" integer Length of the message body in bytes.
"type" string Type of message: (A, P, B, E, T etc)
"status" string Message status: (R, F, U etc) (*2)
"to" string Destination address (*3)
"from" string Callsign of the message's creator.
"subject" string Message subject (32 chars max)
"event" string Event type (*4)
(*1) in format "1997-09-14T23:47:00Z"
(*2) type and status may in future be unambiguous words
(*3) e.g. "g8pzt", "all@gbr", "g8pzt@gb7pzt.#24.gbr.eu"
(*4) event types are as follows:
"newmsg" New message
"fwded" Message has been forwarded
"read" Message has been read
"killed" Message has been killed
Example:
{
"number": 117,
"mid": "47DCE8A17PZT"
"size": 67,
"type": "P",
"to": "G8PZT@DOTPMS",
"from": "G9DUM",
"subject": "test 1",
"event": "newmsg"
}
b) Retrieve a Message:
~~~~~~~~~~~~~~~~~~~~~~
Publish Topic: xrouter/get/{nodecall}/mail/msg/{msgnum}
The response payload is an un-named JSON object containing
the following fields:
Name Type Description
-----------------------------------------------------
"number" integer Message number.
"mid" string Message ID (MID or BID)
"rcvd" string Date/time of message reception (*1).
"size" integer Length of the message body in bytes.
"type" string Type of message: (A, P, B, E, T etc)
"status" string Message status: (R, F, U etc) (*2)
"to" string Destination address (*3)
"from" string Callsign of the message's creator.
"subject" string Message subject (32 chars max)
"text" string Body of the message (*4)
(*1) in format "1997-09-14T23:47:00Z"
(*2) type and status may in future be unambiguous words
(*3) e.g. "g8pzt", "all@gbr", "g8pzt@gb7pzt.#24.gbr.eu"
(*4) Message body includes all RFC822 and routing headers
c) Post a Message:
~~~~~~~~~~~~~~~~~~
Publish Topic: xrouter/put/{nodecall}/mail
The payload must be a JSON object containing the following
fields:
Name Type Description
------------------------------------------------------
"from" string Callsign of sender
"to" string Destination (see below)
"type" string Only "P" or "B" at present
"subject" string Subject of message (32 chars max)
"text" string Body of the message
For private messages the destination may be just a callsign,
or @. For bulletins it may
be simply or @. For email it is
@.
Response: None unless QOS > 0
**LIMITATIONS**
The PMS's MQTT interface is only a proof-of-concept at this
stage, and some details may change. More functionality will
be added in a future version.
**SEE ALSO**
PMS(1) -- Access Personal Message System.
PMS(9) -- About the Personal Pessage System.
REST-PMS(9) -- REST Interface to PMS.
MQTT-CLI(9) -- MQTT Client
MQTT-SRV(9) -- MQTT Server / Broker.
----
==== MQTT-PUB ====
MQTT-PUB(9) XROUTER REFERENCE MANUAL 23/9/2023
**NAME**
MQTT-PUB -- MQTT Publisher.
**DESCRIPTION**
The MQTT "publisher" is an inbuilt MQTT client daemon which,
if enabled, automatically connects to an *external* MQTT
broker (server), and publishes data to it. The broker may be
on the LAN or in the cloud.
The broker's IP address or hostname is specified using
MQTTSERVADDR in XROUTER.CFG, and its TCP port number by
MQTTSERVPORT, which defaults to 1883. If the broker address
is not specified (the default condition), or the broker port
is set to 0, the publisher is disabled.
If enabled, various information is sent to the broker in JSON
format, including station configuration, layer 2, 4 and 7
events such as connections and disconnections, radio control
events such as PTT, frequency and mode changes, PMS message
events, chat server events, raw packet data and so on. As
proof of concept, a web-based chat server interface has been
demonstrated.
The term "publisher" is somewhat of a misnomer, as the data
flow is bi-directional.
Therefore any client of the external broker may not only
passively receive "pushed" data from XRouter, but may also
"push" data to XRouter, and "pull" data from it on request.
By publishing to "getter" topics, a client may request status
reports, such as lists of AX25 L2 links, routes, nodes, L4
circuits, sessions, recent sessions, chat server status,
MHeard and DX lists etc.
By publishing to "putter" topics, a client may also send data
to the node, such as chat, PMS and control mesages, raw
packet data etc. Ulitmately it should be possible to provide
a full MQTT-based interface to packet radio.
See MQTT-SRV(9) for the list of getter and putter topics.
**SEE ALSO**
MQTT-CLI(9) -- MQTT Client
MQTT-SRV(9) -- MQTT Server / Broker
MQTT-SVC(9) -- NetRomX MQTT Service
MQTTSERVADDR(7) -- Hostname / IP of Externam MQTT Broker
MQTTSERVPORT(7) -- TCP Port for External MQTT Broker
XROUTER.CFG(8) -- Main Configuration File.
----
==== MQTT-SRV ====
MQTT-SRV(9) XROUTER REFERENCE MANUAL 23/9/2023
**NAME**
MQTT-SRV -- MQTT Server / Broker.
**DESCRIPTION**
XRouter has an inbuilt MQTT broker (server), which allows
MQTT clients to exchange information with XRouter, with each
other, and with an external broker.
The broker may be enabled on XRouter and/or Linux IP stacks
using the MQTTPORT directive in XROUTER.CFG. The usual TCP
port number for MQTT is 1883.
Although primarily intended for use via the LAN, the broker
is also available via NetRomX service 1883 for anyone who
wants to experiment with MQTT over radio.
Clients may "publish" data to "topics", and may "subscribe"
to topics, in order to receive any data published to that
topic.
XRouter automatically publishes "events", both to the
internal MQTT broker, and if configured to do so, to an
external broker.
The information, which is published in JSON format, includes
station configuration, layer 2, 4 and 7 events such as
connections and disconnections, radio control events such as
PTT, frequency and mode changes, PMS message events, chat
server events, raw packet data and so on. As proof of
concept, a web-based chat server interface has been
demonstrated.
A client may also request status reports, such as lists of
AX25 L2 links, routes, nodes, L4 circuits, sessions, recent
sessions, chat server status, MHeard and DX lists etc.
A client may also send information to the node, such as chat,
PMS and control mesages. Ultimately it should be possible to
provide a full MQTT-based interface to packet radio. That bit
is left up to you!
**OPTIONS**
Subscription Topics:
~~~~~~~~~~~~~~~~~~~~
Subscribing to any of the following topics causes XRouter to
publish data asynchronously, to the same topic:
xrouter/event/{nodecall}/blog Sysop's Blog Events
xrouter/event/{nodecall}/chat/{evtype} Chat Events
xrouter/event/{nodecall}/circuit NetRom L4 Cct Events
xrouter/event/{nodecall}/link AX25 Link Events
xrouter/event/{nodecall}/pmsg PMS Message Events
xrouter/event/{nodecall}/radio/{number} Radio Events
xrouter/event/{nodecall}/session Session Layer Events
xrouter/event/{nodecall}/wall Message "wall" Events
xrouter/event/{nodecall}/wx[/{call}] Weather data events
xrouter/ax25/{nodecall}/rcvd/{portnum} Raw AX25 Frames Rx'd
xrouter/ax25/{nodecall}/sent/{portnum} Raw AX25 Frames Tx'd
xrouter/ipv4/{nodecall}/rcvd Raw IPV4 Frames Rcvd
xrouter/ipv4/{nodecall}/sent Raw IPV4 Frames Sent
xrouter/kiss/{nodecall}/rcvd/{ifacenum} KISS Frames Received
xrouter/kiss/{nodecall}/sent/{ifacenum} KISS Frames Tx'd
xrouter/nr3b/{nodecall}/rcvd Netrom Traffic Rx'd
xrouter/nr3b/{nodecall}/sent Netrom Traffic TX'd
Getter Topics:
~~~~~~~~~~~~~~
These are used to obtain information *from* XRouter on demand.
Publishing to any of these topics elicits a reply from
XRouter, with "get" replaced by "status" in the topic:
xrouter/get/{nodecall}/blog/msg/{msgnum} Retrieve a blog post
xrouter/get/{nodecall}/channels Chat channel occupancy
xrouter/get/{nodecall}/circuits Netrom L4 circuits
xrouter/get/{nodecall}/config Node Configuration Info
xrouter/get/{nodecall}/jlist Recent Sessions
xrouter/get/{nodecall}/links AX25 circuits
xrouter/get/{nodecall}/mheard Port "MHeard" Lists
xrouter/get/{nodecall}/nodes NetRom Nodes Table
xrouter/get/{nodecall}/node/{call} Info For Specific Node
xrouter/get/{nodecall}/recent Recent chat messages
xrouter/get/{nodecall}/routes NetRom Neighbour Routes
xrouter/get/{nodecall}/users Current Sessions
xrouter/get/{nodecall}/wall/msg/{msgnum} Retrieve a wall post
Putter Topics:
~~~~~~~~~~~~~~
These are used to send information *to* XRouter. They don't
elicit any response, other than a PUBACK if QOS > 0.
xrouter/put/{nodecall}/ax25/{portnum} Send raw AX25 (*1)
xrouter/put/{nodecall}/blog Post a blog article
xrouter/put/{nodecall}/chat Send a CHAT message
xrouter/put/{nodecall}/ipv4 Send raw IP datagram
xrouter/put/{nodecall}/kiss/{ifacenum} Send raw KISS Frame
xrouter/put/{nodecall}/nr3b Send raw NetRom (*2)
xrouter/put/{nodecall}/wall Post a wall message
xrouter/put/{nodecall}/wx Post local weather data
(*1) Without HDLC framing or CRC
(*2) Routable datagrams only, no L3RTT, INP3 or Nodes bcasts!
**CAVEATS**
This system is by no means finished. There's a lot more that
could be done, but it needs someone to actually USE it and
provide feedback.
**SEE ALSO**
MQTT-BLOG(9) -- MQTT Interface to Sysop's Blog.
MQTT-CLI(9) -- MQTT Client
MQTT-SVC(9) -- NetRomX MQTT Service.
MQTT-PUB(9) -- MQTT Publisher.
MQTT-WALL(9) -- MQTT Interface to Message Wall.
MQTTPORT(7) -- TCP Port for MQTT Broker.
XROUTER.CFG(8) -- Main Configuration File.
----
==== MQTT-SVC ====
MQTT-SVC(9) XROUTER REFERENCE MANUAL 22/9/2023
**NAME**
MQTT-SVC -- NetRomX MQTT Broker Service.
**DESCRIPTION**
NetRomX service 1883 connects to XRouter's inbuilt MQTT
broker, allowing MQTT over NetRom for anyone who wants to
experiment.
This may be a bad idea, but we don't know until we give it
a go!
It may be that we have to restrict the types of data that
can be sent and received, to avoid death-loops.
**SEE ALSO**
MQTT-PUB(9) -- MQTT Publisher.
MQTT-SRV(9) -- MQTT Server / Broker
SERVICES(9) -- NetRomX Standard Services
----
==== MQTT-WALL ====
MQTT-WALL(9) XROUTER REFERENCE MANUAL 26/9/2023
**NAME**
MQTT-WALL -- MQTT Interface to Message Wall.
**DESCRIPTION**
The message "wall" may be operated via XRouter's inbuilt MQTT
broker, and/or via an external broker, by subscribing or
publishing to certain topics.
This facility is incomplete. The curently available
functionality is documented in the next section.
**OPTIONS**
a) Receive Notifications of Wall Events:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Topic: xrouter/event/{nodecall}/wall
The payload of an event notification is an un-named JSON
object containing the following fields:
Name Type Description
-----------------------------------------------------------
"id" integer Article/post number.
"rcvd" string Date/time of message creation (*).
"size" integer Length of the text portion in bytes.
"from" string Callsign of the post's creator.
"text" string Body of the post (plain ASCII)
"event" string Type of event ("posted" or "deleted")
(*) in format "Mon, 14 Sep 1997 23:47:00 GMT"
b) Retrieve a Wall Post:
~~~~~~~~~~~~~~~~~~~~~~~~
Topic: xrouter/get/{nodecall}/wall/msg/{msgnum}
The response payload is an un-named JSON object containing
the following fields:
Name Type Description
-----------------------------------------------------------
"id" integer Article/post number.
"rcvd" string Date/time of message creation (*).
"size" integer Length of the text in bytes.
"from" string Callsign of the post's creator.
"text" string Body of the post (plain ASCII)
(*) in format "Mon, 14 Sep 1997 23:47:00 GMT"
c) Post a Wall Message / Reply:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Topic: xrouter/put/{nodecall}/wall
The payload must be a JSON object containing the following
fields:
Name Type Description
-----------------------------------------------------------
"sender" string Callsign of sender
"text" string Body of the post (unlimited size)
Response: None unless QOS > 0
**LIMITATIONS**
The wall's MQTT interface does not yet notify "like" events,
nor does it allow article listings, deletion, "liking", or
the retrieval of replies. Those functions will be added in a
future version
**SEE ALSO**
WALL(1) -- Access Message Wall / Guestbook.
WALLFLAGS(7) -- Options For Message Wall.
REST-WALL(9) -- REST Interface to Wall.
MQTT-SRV(9) -- MQTT Server / Broker.
----
==== MQTT-WX ====
MQTT-WX(9) XROUTER REFERENCE MANUAL 26/9/2023
**NAME**
MQTT-WX -- MQTT Interface to Weather System.
**DESCRIPTION**
If XRouter has a source of weather information, e.g. APRS
broadcasts, local sensors or an online source, weather updates
can be received from XRouter's inbuilt MQTT broker by
subscribing to the "weather events" topic, i.e.
xrouter/event/{nodecall}/wx
Weather data stored on XRouter can also be retrieved at any
time using MQTT "get" requests.
A "get" request is an MQTT "publish" packet with a topic of
the general form:
xrouter/get/{nodecall}/{resource}
Such requests are actioned directly by XRouter and are NOT
published to other clients.
The response from XRouter is published to a topic of the
general form:
xrouter/status/{nodecall}/{resource}
The response payload is either a JSON object or a JSON array,
depending on the requested resource.
The response is sent only to the client making the request.
There are curently two possible {resource} types, namely the
"station ID" of a weather station, or "allwx". Station ID's
are usually callsigns, but may take other forms such as
"LOCAL", "SHED", "SHACK" and so on.
LOCAL is the primary resource for locally sourced weather
information. Unlike the other resources it maintains max/min
values and times, trends and so on.
Weather information can also be uploaded to XRouter from a
local source (e.g. RTL_433), via the MQTT server.
**OPTIONS**
a) Receive Notifications of Weather Reports:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Subscribe Topic: xrouter/event/{nodecall}/wx
The payload of a weather event is an un-named JSON object
containing some or all of the following fields:
Name Type Description
-----------------------------------------------------------
"id" string Station id, e.g. "G8PZT" or "LOCAL"
"lat_deg" number Latitude of WX station in degrees
"lon_deg" number Longitude of wx station in degrees
"dist_km" number Distance from our node in kilometres
"dir_deg" number Direction from our node in degrees
"dt" integer Observation time, secs since 1/1/70
"observed" string Date and time of observation (*1)
"pressure_mb" number Air pressure in millibars
"temperature_C" number Air temperature in degrees C
"humidity" number Relative Humidity in percent
"dewpoint_C" number Dew point in degrees Centigrade
"heat_index_C" number Heat index in deg Centigrade
"wind_chill_C" number Wind Chill in degrees Centigrade
"wind_mph" number Wind speed in miles per hour
"wind_dir_deg" number Wind direction in degrees
"gust_mph" number Wind gust speed in miles per hour
"raintoday_mm" number Total rain since midnight in mm
"rain1h_mm" number Current rainfall rate mm/hour
"rain24h_mm" number Total rain in past 24 hours in mm
"sunrise" string Sunrise time at the station hh:mm
"sunset" string Sunset time at the station hh:mm
"daylight_hours" number Hours between sunrise and set
(*1) As "dt" but human-readable e.g. 2024-03-14T15:19:59Z
b) Requesting Weather Data From a Specific Station:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Publish Topic: xrouter/get/{nodecall}/wx/{station_id}
Reply topic: xrouter/status/{nodecall}/wx/{station_id}
The reply payload is an anonymous JSON object, containing
the fields detailed in section (a) above.
c) Requesting All Available Weather Data:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Publish Topic: xrouter/get/{nodecall}/allwx
Reply topic: xrouter/status/{nodecall}/allwx
The reply payload is an anonymous JSON array, containing zero
or more JSON objects. Each object, representing one weather
station, contains the fields detailed in section (a) above.
d) Uploading Weather Data To XRouter:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Publish Topic: xrouter/put/{nodecall}/wx
Payload: JSON object containing weather data.
The exact format of the payload is configurable by the sysop,
to match the fields used by the originating MQTT source. The
default values as as follows:
Name Type Description
  --------------------------------------------------------
"model" string Sensor make/model
"id" string Sensor identifier
"time" string Observation time (mandatory) (*1)
"pressure" number Air pressure in millibars
"temperature_c" string Air temperature in degrees C (*2)
"humidity" integer Relative humidity in percent
"wind_avg_m_s" string Wind speed in metres per sec (*3)
"wind_max_m_s" string Gust speed in metres per sec (*3)
"wind_deg" string Wind direction in degrees (*4)
"rain_mm" string Total rainfall in mm (*5)
"light_lux" string Solar Irradiance in lux (*6)
"uv" integer UV level
"uvi" integer UV Index
"battery_ok" integer Sensor battery indication
(*1) Observation time is mandatory. Acceptable formats are
Unix epoch (i.e. secs since 1/1/1970), a date/time like
"yyyy-mm-dd hh:mm:ss", or "yyyy-mm-ddThh:mm:ssZ". e.g.
"2024-03-14T15:19:59Z".
(*2) Temperature defaults to centigrade, unless the value
string is suffixed by the letter "F" (case independent).
If the value contains a decimal point, it is assumed to
be in degrees. If there is no decimal point, it
signifies tenths of a degree. In this mode, negative
temperatures using either 12-bit or 16-bit "two's
complement" are accepted.
e.g. "10.1" and "101" both mean 10.1 degrees Centigrade.
"50.5F or "505 F" or "50.5 f" all mean 50.5 degrees
Fahrenheit. "65540" means -1.5 degrees Centigrade if the
sensor is using 16-bit two's complement.
(*3) Wind speeds default to miles per hour if no units are
present in either the field name or the value string.
If the field name contains "m_s" or the value string
contains "m/s", the units are metres per second.
If the field name contains "km_h" or the value string
contains "km/h" the units are kilometres per hour.
(*4) Wind direction may be specified in whole degrees (0-359),
or as cardinal points, e.g. "N", "W", "SSE" etc.
(*5) If the field name contains "mm" or the value contains a
decimal point, the rainfall units are assumed to be
millimetres, otherwise they are assumed to be cumulative
"bucket tips". The default bucket size of 0.3mm, can be
changed using the WXBUCKET directive in XROUTER.CFG.
(*6) Light level defaults to watts per square metre, but can
be specified in Lux by appending "lux", e.g. "4568 lux".
The uploaded data is assumed to be from a local sensor, and
is therefore stored under the station ID "LOCAL". Future
versions may allow for extra sensors, as per the REST API.
**EXAMPLES**
xrouter/event/G8PZT/wx - Get weather notifications
xrouter/get/G8PZT/wx/G6GUH-7 - Retrieve WX data from G6GUH-7
xrouter/get/G8PZT/allwx - Retrieve all weather data
**SEE ALSO**
WX(1) -- Display Weather Information.
WX(9) -- Weather Information System.
REST-WX(9) -- REST Interface to Weather System.
MQTT-SRV(9) -- MQTT Server / Broker.
----
==== NAT ====
NAT(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
NAT -- Network Address Translation.
**DESCRIPTION**
Section 1 - About Network Address Translation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In order for a computer (sometimes called a "host") to
communicate with other computers using TCP/IP it must have an
IP address. This is a 32 bit number unique to that machine,
and it is composed of four 8 bit fields which hosts use to
make routing decisions.
Theoretically, there could be 2**32 unique addresses (just
over 4000 million), but in practice the figure is a lot lower
because some of the addresses are not used. This is due to
the way addresses are separated into classes and assigned to
networks.
For example, the "class A" address series 44.x.x.x is assigned
to the amateur radio network and contains 2**24 (16.7 million)
addresses. Within this series, the series 44.131.x.x is
assigned to the UK, and contains 2**16 (65536) addresses.
Taking this further, the series 44.131.91.x is assigned to
north Worcestershire and contains 2*8 (256) addresses, yet
there are only a couple of IP stations in north
Worcestershire. So the remaining IP addresses are "wasted".
A similar wastage occurs in every county in the UK and every
country in the world.
Although there are only a couple of registered IP stations in
the 44.131.91.x series, each station may be running more than
one computer. Some of these machines are nothing to do with
amateur radio and therefore are not entitled to a 44.x.x.x
series IP address. In addition, registering IP addresses is a
lengthy procedure which is impractical for dealing with a home
network in which computers are rearranged frequently.
In order to cater for these private and experimental networks,
a number of address ranges were set aside for "unregistered"
use. One such series is 192.168.0.x which can cater for up to
256 hosts. Any one of these addresses may be used in millions
of private networks at once, thus alleviating the shortage of
IP addresses.
A problem arises if an "unregistered" host on a private
network needs to communicate with a host on the "registered"
network. Packets from the unregistered (local) host can be
routed to the registered (global) host, but since the local
host is unregistered, and the same address is used many places
at once, the network has no way of knowing where to send the
replies.
This is where Network Address Translation (NAT) comes to the
rescue. NAT operates on each datagram, substituting one IP
address with another.
For instance a local address such as 192.168.0.2 can be
translated to a globally recognised one, such as 44.131.91.2,
allowing a host on a LAN to access, and be visible to, the
global network.
Consider this example:
Registered IP Unregistered IP
44.131.91.2 192.168.0.2
44.131.91.3 192.168.0.16
Packets arriving from the global network addressed to
44.131.91.2 are re-addressed to 192.168.0.2 and routed to the
appropriate machine on the local network, while those
addressed to 44.131.91.3 are re-addressed to 192.168.0.16 and
routed to that machine.
In the reverse direction, packets originating from host
192.168.0.2 on the LAN, destined for the global network, have
their source address changed to the globally recognised
44.131.91.2, and 192.168.0.16 is translated to 44.131.91.3.
This one to one mapping of one address to another is called
STATIC NAT, (also known as RFC1631 NAT) and is implemented in
Xrouter.
Port Address Translation
~~~~~~~~~~~~~~~~~~~~~~~~
With Static NAT, if you have more than one local host which
needs to be visible on the global network, you must own more
than one registered IP address. A refinement of NAT, called
Port Address Translation (PAT) allows one registered IP
address to be shared by many unregistered hosts, by
manipulating the "service port" numbers in TCP and UDP packet
headers.
For example, consider the following mappings:
Global address Port Local address Port
-------------- ---- ------------- ----
44.131.91.2 777 192.168.0.1 1024
44.131.91.2 778 192.168.0.2 1024
44.131.91.2 779 192.168.0.5 1631
TCP segments originating from port 1024 on local host
192.168.0.1, and destined for the global network, are
re-addressed to look like they originated from port 777 on
the globally-recognised host 44.131.91.3. Likewise, segments
from port 1631 on local host 192.168.0.5 are made to look like
they originated from port 779 on global host 44.131.91.2. The
translations are reversed for incoming segments.
PAT can be static or dynamic. With static PAT, the sysop must
set up the translation table as in the example above. Dynamic
PAT builds the table automatically, and the entries are
removed when they're finished with. This makes the two
systems behave very differently, as discussed below.
Static PAT
~~~~~~~~~~
This form of PAT consistently translates a global address/port
pair to an equivalent local address/port pair and vice versa.
Since the mappings are permanent and predictable, the
designated ports on the local hosts are visible to the global
network. This is ideal for making local servers (e.g. SMTP,
HTTP, POP3) globally visible.
Static PAT can be used to multiplex several hosts onto one IP
address, or it can simply be used to manipulate port numbers,
for example to create "virtual hosts" as shown below:
Global address Port Local Address Port
44.131.91.2 80 192.168.0.1 8000
44.131.91.3 80 192.168.0.1 8001
44.131.91.4 80 192.168.0.1 8002
The outside world sees 3 web servers (port 80 is the HTTP
port), with the IP addresses 44.131.91.2, 91.3 and 91.4, yet
in reality there are 3 separate web server processes (ports
8001, 8002, 8003) running on one host.
There is a problem with static PAT however. TCP/IP server
processes use predictable port numbers. For instance, HTTP
servers usually use port 80 (although they can often be
re-configured for a different port), which means that incoming
TCP segments addressed to port 80 will always go to the web
server, and the server will reply using the same port as the
source.
TCP/IP *clients* on the other hand tend to use unpredictable
port numbers. For example, the first Telnet client session on
a freshly booted Windows98 system will use port 1024, the next
session will use port 1025 and so on. With static PAT, set up
to translate port 1024 to an outside world address/port pair,
the first Telnet session will succeed, but the second and
subsequent ones will fail.
Therefore as a general rule, static PAT is useful for making
local SERVERS globally visible, but not for accessing the
global network using local CLIENTS. It's a one way street.
This effect can be exploited to prevent LAN users from
accessing the global network.
Dynamic PAT
~~~~~~~~~~~
Dynamic PAT is commonly used to multiplex several hosts onto
one IP address a process called "Overloading", and it tends to
act as a one way street in the opposite direction to static
PAT.
Translation entries are created when a local host originates a
connection to the global network, and are removed when that
connection is closed. Thus dynamic PAT cannot generally be
used to make local servers globally visible, but outgoing
connections can be made without hindrance.
This creates a simple "firewall", preventing your local hosts
from attacks from the global network.
Both static and overloaded PAT are implemented in XRouter.
Limitations of NAT / PAT
~~~~~~~~~~~~~~~~~~~~~~~~
Unfortunately, NAT and PAT are not completely transparent to
the user, and there are certain situations which they cannot
handle.
IP, ICMP, TCP and UDP packet headers each contain a
"checksum", and the IP addresses and service port numbers are
included in the calculation. This means that any change to the
address or port numbers requires all the checksums to be
recalculated and re-inserted.
In most cases it is sufficient to manipulate the packet
headers alone, but some protocols convey IP address and TCP
port numbers in the data portion of the packet, and these
present more of a problem.
ICMP error reports return part of the faulty datagram, and
that part must be re-translated and the checksums recalculated
if the process is to remain completely invisible to the user.
Certain FTP transactions convey an IP address and port number,
expressed in ASCII, in the data. NAT must look for these and
change them. Besides being a non-trivial operation, the
problem with this is that the translated addresses may occupy
a different amount of space when expressed in ASCII, so NAT
must build a new packet, and must adjust the TCP sequence
numbers on every subsequent packet.
There are other applications which similarly embed addressing
information in the data portion of the packet, and strictly
speaking, the TCP/IP layers must remain unaware of this
information as it is of a higher layer. In this respect NAT
breaks normal layering rules.
PAT achieves multiplexing by translating service port numbers,
but some protocols do not use service port numbers at all, so
these can not pass through PAT. For example, ICMP, IPIP and
AXIP can only pass through static NAT, whereas AXUDP and IPUDP
can pass through PAT.
The following protocols and traffic will pass through NAT:
Protocol Supported Traffic / Applications
-------------------------------------------------
RIP ?
ICMP Ping, Traceroute etc.
AXIP Ax25 tunnelling
IPIP IP tunnelling.
UDP AXUDP, IPUDP, DNS, TFTP
TCP Telnet, HTTP, SMTP, NNTP, POP, Finger, Rlogin
Plus any other traffic which does not use
TCP/IP addresses in the application data.
Only the following protocols / traffic will pass through PAT:
Protocol Supported Traffic / Applications
-------------------------------------------------
UDP AXUDP, IPUDP, DNS, TFTP
TCP Telnet, HTTP, SMTP, NNTP, POP, Finger, Rlogin
Plus any other traffic which does not use
TCP/IP addresses in the application data.
Section 2 - Configuring NAT / PAT on Xrouter
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The "NAT" commands are used for configuring both NAT and PAT
on the fly. They can also be embedded in the IPROUTE.SYS or
BOOTCMDS.SYS files to configure the system at startup.
The following commands are available:
NAT ADD Adds entries to the translation table.
NAT DROP Deletes entries from the translation table.
NAT LIST Displays the translation table.
Syntax is as follows:
NAT ADD STATIC [:port] [:port] [tcp | udp]
NAT ADD OVERLOAD
The first form adds static NAT and PAT entries, and the second
form is used only for adding overloaded dynamic PAT entries.
In each case represents the "private" or
"unregistered" IP address of a host on the stub network, and
represents a globally recognised or "registered"
address.
In the STATIC case, if port numbers are specified, TCP and UDP
traffic matching the specified IP addresses will be translated
ONLY if it also matches the specified ports. If ports are not
specified, all traffic is translated. If the optional
protocol is specified, only traffic of that protocol will be
translated by that entry.
The OVERLOAD case does not accept port numbers, and it
requires a subnet mask to be specified. The mask is used in
combination with the local address to form a range of
addresses which will be accepted for translation. For
example, if the local address is 192.168.0.0 and the netmask
is 255.255.255.240, addresses 192.168.0.0 to 192.168.0.15
inclusive will be translated.
NAT DROP [:port] [tcp | udp]
Simple entries, i.e. those in which the protocol shows "ALL"
and the port numbers are zero, can be removed by the form:
"NAT DROP " e.g. "NAT DROP 192.168.0.2".
If the translation table entry includes port numbers, the
form:
"NAT DROP [:port]" is required, e.g.
"NAT DROP 192.168.0.2:23".
If the translation entry is protocol-specific, the protocol
must be specified when removing the entry, e.g.:
"NAT DROP 192.168.0.2 TCP".
NAT LIST
This command currently requires no arguments.
Order of Entries in NAT table
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The order of entries within the translation table is
important, because XRouter will translate upon the first
matching entry. This gives you maximum flexibility to cater
for your particular needs. As a general rule, port-specific
and protocol-specific entries should be declared before
non-specific "catch-all" entries. Overload entries can be
declared anywhere, providing they don't inadvertently "hide"
a static translation for the same address.
Consider this example:
NAT ADD STATIC 192.168.0.2:87 44.131.91.2:23 TCP
NAT ADD STATIC 192.168.0.2 44.131.91.2
NAT ADD OVERLOAD 192.168.0.0 44.131.91.3 255.255.255.240
In the above example, TCP frames originating from port 87 on
local host 192.168.0.2 will be translated by the first entry,
to look like they originated from port 23 on global host
44.131.91.2.
UDP and all other TCP frames from that host will be translated
by the second entry, which leaves the port numbers alone.
This entry also translates "portless" protocols such as AXIP,
ICMP, IPIP etc.
The third entry translates any TCP or UDP frame originating
from local hosts 192.168.0.0 to 192.168.0.15, excluding
192.168.0.2, to look as if it originated at 44.131.91.3.
If the second entry had been placed before the first, it would
never have been executed, because the non-specific static
entry would have intercepted *every" frame from 192.168.0.2.
If the overload entry had been placed first, it would have
intercepted every TCP and UDP frame from local hosts 0 to 15,
so the port specific static would never have been executed.
Routing Table Requirements
~~~~~~~~~~~~~~~~~~~~~~~~~~
In addition to the translation table entries, you must ensure
that IP routing to the target system is correctly configured.
Network Address Translation is applied *before* the packet is
routed. This means that for "outbound" packets, i.e. those
originating on the "private" subnet, routing to the "public"
net should be defined. For "inbound" packets, i.e. those
originating on the public net, addressed to one of the global
NAT addresses, the should be a routing entry which will route
the translated address to the *private* subnet. This is best
illustrated with an example:
In IPROUTE.SYS....
ROUTE ADD 44.0.0.0/8 44.131.90.6 11 d
ROUTE ADD 192.168.0.1/32 * 14 d
NAT ADD STATIC 192.168.0.1 44.131.91.3
The first entry routes all outbound 44-net packets to peer
44.131.90.6 on port 11.
The second entry routes packets addressed to 192.168.0.1 onto
port 14 which is the Ethernet LAN.
The third entry translates destination address 44.131.91.3 on
incoming packets into 192.168.0.1 before sending the packet on
the LAN as dictated by the second entry.
Internet Connection Sharing
~~~~~~~~~~~~~~~~~~~~~~~~~~~
If one of XRouter's ports is connected to the Internet (e.g.
by dialup or cable modem), you may use dynamic PAT to allow
other computers on a LAN to share the connection. Assuming
the computers on your LAN use addresses in the range
192.168.0.1 to 192.168.0.255 (this is the range normally used
by Windows), the NAT entry should look like this:
NAT ADD OVERLOAD 192.168.0.0 0.0.0.0 255.255.255.0
Note the special 0.0.0.0 entry, which tells XRouter to
translate the source address on outgoing frames to the address
of the port on which they are sent. This is required if your
Internet connection uses a dynamic IP address, but if your
address is static you may insert it in place of the 0.0.0.0.
If you don't have a DNS server on your LAN, you will need to
set up the LAN computers to use Xrouter as their DNS. You
will also need to tell XRouter the address of at least one
external DNS, either by including a "DNS=" statement
in XROUTER.CFG, or by using a "DNS ADD " command.
XRouter will then act as proxy DNS for the computers on the
LAN.
Summary
~~~~~~~
a) Use NAT ADD... in IPROUTE.SYS to define translations.
b) Add IP routing for the *global* NAT addresses.
c) Use NAT... commands to display / adjust NAT on the fly.
d) Report problems to me.
References:
~~~~~~~~~~~
RFC791 - Internet Protocol
RFC792 - Internet Control Message protocol
RFC793 - Transmission Control Protocol
RFC1631 - The IP Network Address Translator
RFC1700 - Assigned Numbers
RFC1918 - Address Allocation for Private Intranets
**SEE ALSO**
NAT(1) -- NAT Commands
IPROUTE.SYS(8) -- IP Routing / Configuration File
----
==== NCMP ====
NCMP(9) XROUTER REFERENCE MANUAL 25/10/2023
**NAME**
NCMP -- NetRom Control Message Protocol.
**SYNOPSIS**
NCMP has been implemented in XRouter since July 2001. It is
an extension to the NET/ROM protocol, facilitating extra
tools for network administration, such as network probing
and unknown route reporting. It was described in Packet
White Paper PWP106, most of which is reproduced below.
**INTRODUCTION**
The Netrom Control Message Protocol is part of ISO Layer 3,
and sits just above the routing sub-layer. It is intended to
be transparently routable by any NET/ROM node, whether or not
that node implements the protocol.
To that end it uses NET/ROM "protocol extension" packets,
which should (in theory) be routed "as-is" by any node which
doesn't understand them.
**PACKET STRUCTURE**
NCMP datagrams consist of a normal Layer 3 NET/ROM header,
followed by the NCMP header, which may in some cases be
followed an optional NCMP payload.
The NCMP header is of variable length, and its first 5 bytes
occupy the space normally used by a NET/ROM layer 4 header,
as depicted in the diagram below:
|<------------- NCMP Header ----------->|
-----------------------------------------------------------
| L3hdr | Fam | Prot | Type | Code | 00 | (opt) | (Payload) |
-----------------------------------------------------------
Field Bytes Description
--------------------------------------------------------
L3hdr 15 NET/ROM Layer 3 Header
Fam 1 Protocol Family = NET/ROM = 0x0f
Prot 1 Protocol = NCMP = 0x00
Type 1 Type of NCMP packet (see below)
Code 1 Usage depends on "type".
Opt var Additional fields present in some types only
Payload var Optional payload present in some types only
The upper 4 bits of the TYPE are reserved for future
expansion, and are set to zero in this version. The lower 4
bits encode the packet type as follows:
Type Purpose
-----------------------------------
0 Probe Request
1 Probe Reply
2 Echo Request
3 Echo Reply
4 Routing Information Unicast
5 Destination Unreachable
**PACKET TYPES**
The following diagrams omit the L3 header for clarity:
Type 0: Probe Request
-------------------------------------------------
| 0F | 00 | Type=0 | TTL | 00 | Tick(h) | Tick(l) |
-------------------------------------------------
"TTL" is a Time To Live, limiting the no. of hops the
probe may propagate. This value is also copied into the
L3 TTL field.
"Tick" is a 16 bit tick counter, sent high octet first.
This is returned unmodified by the responder, and used
to calculate the Round Trip Time (RTT).
A node which responds to a probe request must return the
whole datagram (including any additional fields not
specified above), after changing the NCMP type from 0 to
1 and inserting the TTL from the L3 header into the NCMP
TTL field.
Type 1: Probe Reply
-------------------------------------------------
| 0F | 00 | Type=1 | TTL | 00 | Tick(h) | Tick(l) |
-------------------------------------------------
"TTL" is the TTL from the L3 header of the rcvd probe.
"Tick" is the 16 bit tick count from the probe datagram
Type 2: Echo Request
------------------------------------------------------
| 0F | 00 | Type=2 | TTL | 00 | ID | Seq | Opt payload |
-------------------------------------------------------
"TTL" is the initial Layer 3 TTL
"ID" is a unique 16 bit identifier, sent high octet
first, allowing the originator to match responses with
the requests.
"Seq" is a 16 bit sequence number, sent high octet first.
Usually carries a timestamp, allowing the RTT to be
computed.
Type 3: Echo Reply
-------------------------------------------------------
| 0F | 00 | Type=3 | TTL | 00 | ID | Seq | Opt payload |
-------------------------------------------------------
"TTL" is the TTL from the L3 header of the received
request.
The ID, SEQ and Payload fields must be returned
unmodified.
Type 4: Routing Information Unicast
-----------------------------------------------
| 0F | 00 | Type=4 | xx | 00 | INP3 Data |
-----------------------------------------------
"xx" = unused field
Type 5: Destination Unreachable
-----------------------------------------------
| 0F | 00 | Type=5 | Code | 00 | Returned Data |
-----------------------------------------------
"Returned Data" is the first 28 octets of the unrouted
datagram.
"Code" is as follows:
Code Meaning Explanation
---------------------------------------------------------
0 Host Unknown The router does not know the
destination node.
1 Host Unreachable The destination node is known, but
there are no viable routes at this
time, due to obsolescence or link
failure.
2 Net Unreachable The number of hops to the target
system is more than the remaining
Time To Live.
3 Proto Unreachable The destination node does not know
how to handle the requested
protocol.
4 Service Unreach The requested service is not
implemented at the destination
node.
5 TTL Exceeded The datagram could not be routed
any further because its Layer 3
Time to Live reached zero.
6 Frag Required The datagram is too large for the
outgoing link, and the link does
not support fragmentation.
7 Source Quench The datagram could not be handled
at this time due to insufficient
resources. This situation is
temporary. Upon receipt of this
message, the sender should reduce
the sending rate.
**PROBES**
Probe datagrams are intended for "peer discovery". In this
context, PEER means another NCMP-capable node. At this time,
only XRouters are NCMP-capable, but wider adoption would be
desirable.
Probes are currently dispatched with an initial TTL of 6, to
nodes with a quality of 20 or more and a one way trip time
below 1 minute. These figures are likely to be revised down
in future. If no reply is received, the probe interval
increases.
Upon receipt of a probe, no matter whom it is addresed to,
an NCMP peer returns it to the sender. Thus only the nearest
peers are discovered.
**INFORMATION EXCHANGE**
The purpose of peer discovery is to facilitate the transfer
of additional network-related information across a legacy
network, most of which which doesn't, and probably never
will, embrace INP3.
Such information may include a node's position, town,
software type and version, contact details, Amprnet IP
address, available services and so on. These things make
Packet Radio more interesting.
Once a peer had been identified, XRouters are able to
exchange INP3 data "tunneled" inside NCMP type 4 datagrams,
even if the intervening nodes are not INP3-capable.
A consequence of this exchange is to allow expansion of, and
experimentation with, INP3-like options, without breaking the
existing INP3 protocol. When proven, such extensions could
be incorporated into the "official" INP3 standard if there
was agreement.
**ECHO REQUESTS**
Echo requests are intended for testing the network, and are
invoked using XRouter's NPING (Netrom Ping) and NTRACERT
(Netrom Traceroute) commands.
**SUPERVISORY**
"Destination unreachable" messages are intended to improve
the user experience, by quickly reporting network problems,
instead of leaving the user waiting for a reply that will
never come.
For instance, if the user tries to connect to a node that is
in the nodes table but no longer has a viable end-to-end
path, one of the intervening nodes should quickly return a
"destination unreachable" message, and the user would be
informed. Without this, the user could typically wait six
minutes (L4T1 * L4RETRIES) for a "Connect failed" response.
With the exception of echo and probe, NCMP datagrams are
never sent in response to NCMP.
**SEE ALSO**
NPING(1) -- Send NetRom Echo Request(s).
NTRACERT(1) -- NetRom TraceRoute.
PEERS(1) -- Show Nearest NCMP-capable nodes.
INP3(9) -- Inter-Node Protocol 3.
----
==== NDISXPKT ====
NDISXPKT(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
NDISXPKT -- NDIS Driver for XRouter (XR32 only).
**DESCRIPTION**
NdisXpkt is an optional kernal-mode driver which allows XR32
to share an Ethernet NIC with Windows, and to have its own
completely independent IP address.
The driver was written for XR32 in 2006 by Anthony Martin
M1FDE, sadly now silent key.
Unfortunately, it can only be used with Windows 2000 and
Windows XP.
Do I Need NdisXpkt?
~~~~~~~~~~~~~~~~~~~
The NdisXpkt driver is only required if you wish to share an
Ethernet NIC with Windows. XR32 will work without it, but you
will not have the full range of XR32's functionality.
Without NdisXpkt XR32 is not able to:
- Have its own Ethernet LAN IP address
- Route "raw" IP via the Ethernet NIC.
- Trace any raw IP activity via Ethernet NIC.
- Use IPEncap encapsulation via Ethernet NIC.
If you don't need any of the above, you don't need NdisXpkt.
Explanation
~~~~~~~~~~~
Without the NdisXpkt driver, XR32 is forced to use facilities
provided by the Windows TCP/IP stack. Those facilities are
limited, and in some cases are deliberately crippled by
Microsoft. For example, later versions of Windows XP block
the use of IPENCAP (protocol number 4).
Since no-one likes having to install and load drivers, the
majority of sysops now tend to use XR32 without NdisXpkt.
However this is a **basic** mode, with limited facilities,
compared to the "full" (NdisXpkt) mode. It was only intended
as a stop-gap measure, until a 64-bit driver could be written.
In basic mode, XR32 can originate and terminate all the common
higher-level protocols (TCP, UDP, ICMP etc.), but cannot
handle datagrams via the *Ethernet* NIC at the raw IP layer
(IP via SLIP, PPP or IP-over-AX25 connections are not
restricted however). This means that XR32 cannot act as an
IP router for datagrams to or from the LAN, unless those
datagrams are encapsulated. And it cannot trace IP headers
to/from the LAN, although it is able to trace the "inner" IP
headers of encapsulated datagrams.
If you are using Win2000 or WinXp, and wish to install
NdisXpkt, please read on...
Installing NdisXpkt
~~~~~~~~~~~~~~~~~~~
Before you can use NdisXpkt, it must be installed and started.
NdisXpkt comes in two flavours, one for Windows 2000 and one
for Windows XP. Install only the one to match your operating
system. The distribution package contains both, in separate
directories named "Windows 2000" and "Windows XP".
There are detailed installation instructions with screenshots
in the INSTALL.HTM document of the NdisXpkt package. They are
summarised here:
a) To install drivers, you need to log in using an account
with Administrator priviledges.
b) Extract the files from the .zip archive into a temporary
directory on your hard drive. You can remove this
directory when you've finished installing. Remember where
you put them - you'll need them later.
c) Open the control panel and double-click "Network
Connections".
d) You may only have one or two network connections in the
lower part of the pane. Select one of the network
connections. It doesn't matter which you choose, a new
driver will bind itself with all of them. If you don't
have any networks in the lower pane, you need to install
one. Either a network card, a USB network adapter, or a
wireless LAN. This driver can't be used without one.
e) Hold the right mouse button and select "Properties" in the
menu that appears.
f) This window shows the different protocols that are bound
to this network device. We want to install something, so
click the button marked "Install..."
g) On the dialog that appears, select "Protocol" and click
"Add".
h) You don't want any of the standard choices, so click
"Have Disk". The "Install From Disk" dialog should appear.
i) Click "Browse" and navigate to the folder where you
unzipped the files. It will only show you .inf files.
When you've found "ndispkt.inf", select it and click
"Open", then "OK".
j) Digital signing is not required for NDIS drivers, so click
OK to install.
k) The LAN connection properties box should now show
"NdisXpkt" in the list.
l) Click "Close" and you're done.
Uninstalling NdisXpkt
~~~~~~~~~~~~~~~~~~~~~
a) Make sure XR32 is not running, otherwise the system may
not allow the driver to be stopped and uninstalled.
b) Proceed as above until you reach the network connections
properties box.
c) Select the NdisXpkt protocol in the scrollable list.
d) Click "Uninstall". Windows reminds you that uninstalling
removes it from all network ports.
e) Click "Yes". At this point the protocol should disappear
from the list.
f) Click "Close".
Starting NdisXpkt
~~~~~~~~~~~~~~~~~
To start the driver manually, open a command window and type:
net start NdisXpkt
At which point you should see the response:
"The NdisXpkt service was started successfully".
Note that the driver name is case sensitive and must be typed
EXACTLY as above. If you type it any other way, the driver
will start but will not be available to XR32.
NdisXpkt only needs to be started once per session. You only
need to start it again if you restart the operating system.
It is hoped to automate the startup in future versions of
XR32.
In the meantime, you should be able to start NdisXpkt and
XR32 using a batch file containing the following instructions:
CD \MyProgs\XR32 <-- or wherever your XR32 is
net start NdisXpkt
XR32
The batch file can be created using Notepad and saved as
"STARTXR32.BAT" or something like that. Test it to make sure
it works. It may need a short delay between "net start" and
"XR32" to allow time for the NdisXpkt service to start. A 4
second delay can be achieved by insterting "Ping localhost"
When you are sure that the batch file is working, drag it
(or a shortcut to it) into Start Menu\Programs\Startup, and
it should execute when Windows boots.
Configuring an NdisXpkt INTERFACE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XR32 interfaces to NdisXpkt driver via an EXTERNAL interface,
which is declared in XR32.CFG as follows:
INTERFACE=1
TYPE=EXTERNAL ; External device driver
ID=Ethernet LAN
PROTOCOL=ETHER
MTU=1064
ETHADDR=00:07:95:fa:d9:3b
ENDINTERFACE
Note that the ETHADDR is mandatory and must match the MAC
address used by the chosen NIC. To find your NIC's MAC
address, open a command window and type
IPCONFIG /ALL
then look for "Physical address", e.g.
Ethernet adapter Local Area Connection:
Physical Address. . . : 00-07-95-FA-D9-3B
Alternatively, type "ROUTE PRINT" and look for the name of
the NIC in the list, e.g.
Interface List
0x1 ....................... MS TCP Loopback interface
0x2 ...00 07 95 fa d9 3b .. SiS 900 PCI Fast Ethernet
As you can see, there are several different ways of depicting
a MAC / physical / Ethernet address. XR32 requires the use of
colons ':' between the 6 pairs of characters.
Configuring a PORT
~~~~~~~~~~~~~~~~~~
The Ethernet port is declared like this:
PORT=1
ID=Ethernet
INTERFACENUM=1
IPADDRESS=192.168.0.2
NETMASK=255.255.255.0
etc...
Make sure you choose a different IP address to the one
Windows is using!
Note: The use of interface type EXTERNAL for NdisXpkt is a
temporary measure, liable to change in future.
**SEE ALSO**
IP-STACKS(6) -- TCP/IP Stacks in XR32
MPORT(1) -- Set port to monitor
----
==== NFTP-SRV ====
NFTP-SRV(9) XROUTER REFERENCE MANUAL 7/9/2023
**NAME**
NFTP-SRV -- Netrom File Transfer Protocol Server
**DESCRIPTION**
NFTP (Netrom File Transfer Protocol) is basically a form of
FTP over NetRom. It uses fairly standard FTP server commands,
but unlike FTP, in its simplest form it shares a single
stream for both commands and data.
NFTP uses NetRomX service 21, the same number as regular FTP.
Strictly speaking, NFTP is a misnomer, because the protocol
can be used over any reliable byte-ordered stream, be that
AX25, NetRom or TCP.
Although NFTP can be used by anyone, it is primarily intended
for sysops to exchange files with each other. The protocol
permits limited access to "public" files without login.
The server can be accessed in one of 3 ways:
If the source node is NetromX-capable, the user can connect
directly to service 21 on the target node. For example,
"C G8PZT 21". A typical response is shown:
c g8pzt 21
DOTXR:VK2DOT-1} Trying G8PZT::21...
DOTXR:VK2DOT-1} Connected to G8PZT::21
220 G8PZT NFTP ready - Restrictions apply
Alternatively, the SYSOP of the source node may use the
"NFTP " command to invoke an NFTP client which
connects to the target node. This client is not available to
non-sysops, but there's no restriction on standalone clients.
If the source node is *not* NetromX-capable, the user must
connect to the target node then issue the NFTP command,
supplying the target node's callsign as an argument.
For example, if the user was connected to VK2DOT and wanted
to connect to G8PZT's server, he would issue "C G8PZT",
wait for connection, then issue "NFTP G8PZT":
c g8pzt
DOTXR:VK2DOT-1} Connected to G8PZT
nftp g8pzt
G8PZT:KIDDER} Trying server
220 G8PZT NFTP ready - Restrictions apply
Once connected to the server, the HELP command reveals the
available commands and their syntax:
help
211-Cmds: ABOR CWD HELP LIST MDTM NLST NOOP
211-Cmds: PASS PWD QUIT REST RETR STOR TYPE USER
211-(Additional commands available after login)
211-
211 Use HELP for syntax etc.
help stor
211-STOR Upload file to server
211 Syntax: STOR
Login (using USER and PASS commands) is optional, and
intended only for sysops.
Unlogged users are restricted to a "public" directory, which
by default is located at FTP/public. The true location is not
shown to users. They cannot climb out of this directory, nor
create any directories within it. It is purely a space for
sysops and unlogged users to place publicly accessible files,
such as useful documents, software etc. For example:
list
150 OK 286
04-19-2021 02:41AM .
06-20-2020 04:07AM ..
04-19-2021 02:41AM 49375 repeaterlist.csv
04-19-2021 02:36AM 93162 rfc8200.txt
4 file(s) 150,729 bytes
2 dir(s) 398,048 bytes free
226 File sent ok
The main protocol differences between FTP and NFTP are in the
commands and responses associated with the transfer of data,
i.e. commands like LIST, STOR and RETR.
When a file or directory listing is requested using LIST or
RETR, the server replies with the line "150 OK n", where n is
the exact filesize in bytes.
After receiving this line, the client must treat the next
"n" received bytes as data, to be saved or displayed. After
sending the data, the server sends the line
"226 File sent ok", and is ready for the next command.
The syntax to upload a file is "STOR ",
for example, "STOR 96507 xrpi-manual.txt". If this is
acceptable to the server, it responds "150 OK ".
Upon receiving this line, the client must send exactly
bytes of data. The server will not return to command
mode until it has received at least the specified number of
bytes. Any excess bytes sent by the client are discarded by
the server.
Thus you can read text files directly to your monitor, and
create them directly from your keyboard if required.
**NOTE**
Service 20 is reserved for possible future use as a separate
"data" channel.
**SEE ALSO**
NFTP(1) -- Start Netrom File Transfer Protocol Session.
NFTP-SVC(9) -- NetRomX NFTP Service.
SERVICES(9) -- NetRomX Standard Services.
----
==== NFTP-SVC ====
NFTP-SVC(9) XROUTER REFERENCE MANUAL 22/9/2023
**NAME**
NFTP-SVC -- NetRomX File Transfer Service.
**DESCRIPTION**
NetRomX service 21 connects to XRouter's NFTP server. This
server allows files to be transferred across the NetRom
network instead of TCP/IP. It uses similar commands to FTP,
but shares a single stream for commands and data.
The NFTP server is also available from XRouter's command
prompt.
For more information, see NFTP(9).
**SEE ALSO**
NFTP(1) -- Start Netrom File Transfer Protocol Session.
NFTP-SRV(9) -- About the NFTP Server.
SERVICES(9) -- NetRomX Standard Services.
**NFTP-SVC(9) END OF DOCUMENT**
----
==== NTTY-SVC ====
NTTY-SVC(9) XROUTER REFERENCE MANUAL 7/9/2023
**NAME**
NTTY-SVC -- NetRomX TTYLink Service
**DESCRIPTION**
NetromX Service 87 is Netrom access to TTYLink - keyboard to
keyboard chat with the sysop. It is equivalent to telnetting
to TCP service 87, or using the YELL command on the target
node.
When a client connects to the server, the sysop of the server
is paged, and has 90 seconds to respond. The page consists of
a pop-up dialog on top of the sysop's current window, and an
audible sound. Note the latter only works on older-style PC's
which have a "PC Speaker", or have AUDIODEVICE defined.
At any point during or after the 90 seconds, the client has
the option to leave a short one-line message (160 chars max)
or to abort the call.
If the sysop takes more than 90 seconds to respond, and the
client has not disconnected, the sysop can still use the
"talk" command to initiate a chat with the caller.
Here's an example session where the sysop responds:
c mobile 87 s
VK2DOT-1:DOTXR} Trying G8PZT-1
VK2DOT-1:DOTXR} Connected to G8PZT-1
TTYLINK at MOBILE:G8PZT-1
Calling sysop for 90 seconds..
Type 'M' at any time to leave a short message,
or 'Q' to quit...
*** G8PZT-1 has come online to talk ***
Hello, why are you calling me?
Because I want to, silly!
Fair enough, it's mad talking to oneself you know...
I know, but no-one else is around.
Ok, bye for now
*** The other end terminated the chat
VK2DOT-1:DOTXR} Welcome back
And here's a session where the sysop didn't respond.
Although not strictly TTYlink, it is a useful compromise,
rather than allow an important call to be missed:
c mobile 87 s
VK2DOT-1:DOTXR} Trying G8PZT-1
VK2DOT-1:DOTXR} Connected to G8PZT-1
TTYLINK at MOBILE:G8PZT-1
Calling sysop for 90 seconds..
Type 'M' at any time to leave a short message,
or 'Q' to quit...
No response, please type a short (1 line) message now...
(or enter a blank line to skip this step)
Can you call me back to discuss xrpi release asap?
Message saved for sysop
Goodbye
VK2DOT-1:DOTXR} Welcome back
The message is stored in the sysop's PMS, and a flashing
asterisk on the top left corner of the status bar alerts the
sysop to its presence. The sysop can then access their PMS
to read the message like this:
CMD(B/H/K/L/R/S/?)>
l
Msg# Stat Rcvd Time To From Subject
6 PR 22/05 03:25 SYSOP G8PZT TTYLink msg from
G8PZT@VK2DOT-1
CMD(B/H/K/L/R/S/?)>
r 6
Msg#: 6
Rcvd: 22/05 03:25
From: G8PZT
To: SYSOP
Subj: TTYLink msg from G8PZT@VK2DOT-1
Can you call me back to discuss XRPi release asap?
CMD(B/H/K/L/R/S/?)>
It's all a bit untidy at present, but will hopefully be
tidied up in future revisons.
**SEE ALSO**
TALK(1) -- Talk to a user or another sysop.
TTYLINK(1) -- Keyboard chat with another TCP/IP system.
YELL(1) -- Page the sysop.
AUDIO(9) -- Audio Output.
SERVICES(9) -- NetRomX Standard Services.
----
==== PERMLINKS ====
PERMLINKS(9) XROUTER REFERENCE MANUAL 18/10/2023
**NAME**
PERMLINKS -- Permanent NetRom Neighbour Links.
**SYNOPSIS**
This file explains why XRouter 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, XRouter 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 XRouter 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 (adjustable via T3), 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 ROUTES commands will show a ">" in the left-most column
if the interlink is fully open, a "~" if it is opening or
closing, or an "x" if the link can't be opened or has failed.
This provides a handy way of detecting link problems which
might otherwise go un-noticed.
**SEE ALSO**
ROUTES(1) -- NetRom Routes Commands.
NODESINT(7) -- Nodes Broadcast Interval.
QUALITY(7) -- Default NetRom Quality.
XROUTER.CFG(8) -- Main Configuration File.
----
==== PIPES ====
PIPES(9) XROUTER REFERENCE MANUAL 18/10/2023
**NAME**
PIPES -- Frame Pipes.
**DESCRIPTION**
Frame pipes allow frames received (and optionally sent) on
one port to be copied to another port.
A typical use might be to allow a PMS on one port to see
the traffic on another port, e.g. UNPROTO headers from a
local BBS.
Note that this is *not* the same as digipeating. With
digipeating, the user must specify a digipeater in the path,
but with frame piping the packets are tunneled from one port
to another with no intervention from the user.
The facility is enabled by including the PIPE keyword within
a port definition, e.g. PIPE=4 would pipe frames to port 4.
If PIPE=0, or the keyword is omitted altogether, no piping
takes place.
**SELECTIVE PIPES**
By default, pipes are not selective, i.e. they pass traffic
from any source callsign to any destination callsign (with
the exception of Budlisted callsigns of course). On a busy
channel, this could result in a lot of unnecessary traffic
being piped.
Pipes can be made selective however, by adding a comma
delimited callsign list, e.g. "PIPE=4 GB7PZT,KDRBBS". This
reduces the loading on the destination port, by piping only
those frames with the specified callsigns in the destination
field.
Pipes can also be made selective in terms of the types of
traffic they pipe (AX25, NetRom etc). This is controlled
by PIPEFLAG (see OPTIONS below)
**BIDIRECTIONAL PIPES**
A pipe normally only allows traffic in one direction, so in
order to have two way traffic you must either set up a
reverse pipe on the partner port, for example:
(on port 3) PIPE=4 ; Pipe frames to port 4
(on port 4) PIPE=3 ; Pipe frames to port 3
Or you may configure the pipe to be bi-directional, by
setting the appropriate value in PIPEFLAG (see below)
If a frame is piped on a bi-directional pipe, the source
callsign is remembered so that responses will be piped back
to the sender. XRouter remembers the last 20 callsigns that
used a pipe.
Bidirectional pipes are useful in cases where a BBS has a
front end router. Simply set up bi-directional selective
pipes from each user port to the BBS port. The BBS will
then allow direct connection and will respond to resync
requests.
Bi-directional pipes are actually only quasi-bi-directional,
because they can only send *responses* in the reverse
direction. In the above BBS example, outgoing connections
cannot be initiated to callsigns which haven't already used
the pipe.
For most purposes this isn't a problem, because it is the
users that tend to initiate the connections, not the BBS.
However, there may be cases where the BBS needs to poll the
user's PMS, or to initiate forwarding to another BBS. If the
callsign is remembered from a previous session, this will
work, otherwise it will fail.
The only way to have truly unconditional two-way piping is
to set up forward and reverse pipes as detailed above.
**OPTIONS**
The types of frame to be piped can be controlled using the
optional PIPEFLAG keyword, which is ignored unless piping
is active.
The value for PIPEFLAG is made up by adding together the
desired options represented by the following numbers:
1 - UI frames *not* addressed to nodecall/alias.
2 - Non-UI frames *not* addressed to nodecall/alias.
4 - UI frames addressed to nodecall/alias.
8 - Non-UI frames addressed to nodecall/alias.
16 - UI frames transmitted by the router.
32 - Non-UI frames transmitted by the router.
64 - Allow budlisted users to be piped.
128 - Netrom & nodes broadcast frames.
256 - IP / ARP frames.
512 - Bi-directional piping.
e.g. PIPEFLAG=5 will pipe all received UI frames, but not
those which originated from XRouter itself.
If PIPEFLAG is not specified, the default value is 3, which
pipes all regular AX25 Layer 2 traffic. You are *STRONGLY*
recommended to use the default value unless you specifically
need to see additional traffic.
**LIMITATIONS**
You may pipe several ports to a single destination port, but
you can only have one *outgoing* pipe from any port.
**CAVEATS**
Pipes are capable of generating an immense amount of traffic,
so use them with care - your target port MUST be capable of
dealing with the traffic load, and you should avoid setting
up a combination of pipes which might cause an endless loop!
**FILES**
The PIPE and PIPEFLAG directives are used in the PORT
sections of XROUTER.CFG.
**SEE ALSO**
PIPE(1) -- Display / Set Frame pipe.
PIPEFLAG(7) -- Frame Pipe Option Flags.
BCAST(9) -- Frame Broadcasting.
XROUTER.CFG(8) -- Main Configuration File
----
==== PMS ====
PMS(9) XROUTER REFERENCE MANUAL 10/1/2024
**NAME**
PMS -- Personal Message Server / Mailbox.
**SYNOPSIS**
This file describes XRouter's inbuilt mailbox which can be
used for both private messages and bulletins. The terms "PMS"
and "mailbox" are used interchangeably.
**DESCRIPTION**
XRouter's mailbox is a no-frills message storage and retrieval
system which was originally intended for exchanging messages
between users and the sysop, hence the legacy name PMS.
The mailbox understands SIDs (System IDentifiers), MIDs
(Message IDentifiers) and BIDs (Bulletin IDentifiers),
hierarchical addressing, bulletins, MBL forwarding and reverse
forwarding, so it can also be used to exchange private mail
and bulletins with a full-service Bulletin Board System
(BBS). In fact it is a mini-BBS in its own right, as users
may leave bulletins for others to read.
There is no limit to the number of messages or the size of a
message. If a disk is available, messages are stored on the
disk and will persist until killed, or expired by age. If no
disk is available, messages are stored in RAM and will be lost
if XRouter is restarted.
If there is unread private mail addressed to the sysop, the
latter is alerted by "PMS" flashing to the left of the node
callsign on the top status bar.
**BASIC CONFIGURATION**
The mailbox can be configured in one of several "modes"
controlled by the PMSTYPE directive in XROUTER.CFG. The
default is mode 1 i.e. standard PMS. To configure the mailbox
as a full BBS instead, use PMSTYPE=4. See the section 7 page
for PMSTYPE.
The mailbox is always available from the node's command line,
but if you want to enable "direct" AX25 connections, you must
configure at least PMSCALL in XROUTER.CFG.
If you want your mailbox to be visible on the NetRom networ
as well, you must additionally add PMSALIAS and a non-zero
PMSQUAL. For example:
PMSCALL=G8PZT-2
PMSALIAS=PZTPMS
PMSQUAL=50
If you plan to exchange mail with other systems, you must set
the PMSHADDR directive in XROUTER.CFG. Also note that the
agreed specification for mail forwarding does not allow SSID's
in mailbox callsigns, so even if PMSCALL includes an SSID, the
mailbox "identity", as far as the mail forwading system is
concented, is PMSCALL without SSID.
Additional configuration options can be specified in PMS.CFG,
which is explained in its own section 8 MAN page.
**CONNECTING TO THE MAILBOX**
Whatever the setting of PMSTYPE, the mailbox can always be
accessed using the "PMS" command or by a connection to
NetRomX service 2.
If PMSTYPE=4, the mailbox is accessed via the "BBS" command
instead. If the "PMS" command is used in this mode, only
personal mail is shown by default.
In addition, if PMSCALL is defined in XROUTER.SYS, users may
perform an AX25 level 2 connect directly to the PMSCALL.
(PMSCALL must not not be the same as NODECALL)
If PMSALIAS and a suitable PMSQUAL are also defined, users may
also connect directly to the mailbox from another node, using
"legacy" NetRom.
At the time of writing there is no direct TCP/IP access to the
the PMS, because a regular Telnet connection followed by the
issuing of the "PMS" command is sufficient.
**COMMANDS**
The mailbox has its own rudimentary command set, separate from
the node commands. The following is a possibly incomplete list.
(A full list can be obtained using the command "? **")
[n1 n2..] Read message(s)
? [*] Syntax and brief help
A[bort] Aborts paused message reading/listing
B[ye] Disconnect from the PMS.
CB [dist] Copy any type of message to a bulletin
CP [at] Copt any type of message to a private msg
EH Edit header fields for (*3)
EX[port] Export msg to (*3)
H[elp] Display list of commands.
HO[ld] Hold a message (*3)
FF Force Forwarding run (*3)
FP Force Polling run (*3)
H[elp] [topic] Display help for PMS command or topic
I[nfo] Display all WP info for
I@ List users with as their 'home' BBS
IC List users with pallsign (*1)
IH List users at hierarchical address
IM[port] Import message(s) from MBL-format file (*3)
IN List users called (*1)
IQ List users at (*1)
IZ List users at / locator (*1)
J [max] Show most recent [max] callers (default 10)
K[ill] Kill one or more messsages
K> Kill messages TO (*1)(*2)
K< Kill messages FROM (*1)(*2)
K@ Kill messages AT (*3)
KF [call] Kill Forwarded msgs [TO call] (*1)(*3)
KH [call] Kill Held msgs [TO call] (*1)(*3)
KM Kill Mine (messages you have read)
KR [call] Kill Read messages [TO call] (*1)(*3)
L[ist] List messages and bulletins.
L[ist] List messages starting at number
L[ist] List messages from numbers to
L> List messages TO callsign or category
L< List messages FROM callsign
L@ List messages AT a distribution
L$ [to] List messages waiting to be forwarded
LA List oldest messages (same as LO)
LB [n] List [max of n] Bulletins backwards
LC [cat] List bulletin categories (*1)
LF [to] List sucessfully Forwarded messages
LH List held messages (*3)
LL List the Last (most recent) messages
LM List Mine (all messages addressed to you)
LN List New (unread) mail addressed to you
LO List oldest messages (same as LA)
LP [n] List [max of n] Private messages
LR [to] List private mail that has been read
LS List messages whose subject contains
LT List messages containing in body
LU [to] List Unread messages
M[ine] List messages sent by you
MB Make Bull from file to category (*3)
MF Make File from message (*3)
MFH Make File from message, incl headers (*3)
MP Make Private message from a file (*3)
N[ext] Read next message in a "reading list"
N[ame] [name] Display or set your name in White Pages
NC [on | off] Display/set your ANSI colour preference
NH [bbs] Display or set your Home BBS
NI Summary of your user record
NP [lines] Set pagination [0=off]
NQ [qth] Display or set your QTH
NZ [zip] Display or set your Zip / Locator
Q[uit] Stop reading a list of messages
R> Read messages TO callsign or category
R< Read messages FROM callsign
R@ Read messages AT a distribution
R[ead] Read msg(s), hiding routing headers.
RH Read message(s) showing routing headers
RM Read Mine (all messages addressed to you)
RN Read New (unread) mail addressed to you
S[end] Send a message to sysop.
SB Send bulletin to
SF Stop Forwarding run (*3)
SP Send personal message to
SR Send Reply to a message you just read
U[nread] Unread a message (mark it unread) (*2)
UH Un-hold one or more "held" messages (*3)
VF View Forwarding queue (*3)
(*1) Wildcards are allowed.
(*2) Non-sysops can only action their own messages.
(*3) Sysop-only
**MESSAGE STATUS**
Messages have a "status" indicator as follows:
Status ' ' indicates unread "local" private mail.
Status '$' indicates unforwarded non-local mail.
Status 'F' indicates forwarded non-local mail.
Status 'R' indicates local private mail that has been read.
Status 'H' indicates that the message is "held".
**DISCONNECTING**
To exit the mailbox, the user may send BYE or QUIT, or simply
disconnect.
Users who accessed the mailbox via the "PMS" or "BBS" commands
are returned to XRouter's "node" command prompt upon receipt
of BYE or QUIT. Users who accessed via any other method are
disconnected by these commands.
**FILES**
Messages are stored as individual files in the PMS
sub-directory of the XRouter working directory.
If PMSTYPE=4 (full BBS) the PMS directory may also contain
other files which control BBS operations, such as PMS.CFG,
BADWORD.SYS, DISTRIB.SYS, EXPORT.SYS, FWD.SYS, HOLD.SYS, and
REJECT.SYS. Their purpose is as follows:
BADWORD.SYS List of "bad" words which cause message hold.
DISTRIB.SYS Controls distribution of mail to other BBS's
EXPORT.SYS Controls exporting of messages to files
FWD.SYS Controls "forwarding" & "polling" operations
HOLD.SYS Controls message "holding"
PMS.CFG Additional configuration info
REJECT.SYS Controls rejection of unwanted mail.
Most of these plain text files contain their own
documentation.
**HOUSEKEEPING**
Optionally takes place at regular intervals (e.g. every 24
hours - specified on PMS.CFG), when the PMS is idle.
During this operation, out of date messages and message ID's
are purged, and (if configured to do so) the message base is
re-numbered to remove gaps and keep the message numbers
within a sensible range
**MAIL IMPORT**
At intervals less than a minute, the PMS will check the PMS
directory for the existence of a file called "mail.in". If the
file exists, the mail it contains is imported and the file is
deleted. Don't write directly to "mail.in" otherwise it might
be imported before you finish writing it. Create the file with
a different name, then rename it to "mail.in" when completed.
**MAIL EXCHANGE**
This is a two-part process, the parts being DISTRIBUTION and
FORWARDING. The former is controlled by DISTRIB.SYS, and the
latter by FWD.SYS.
Distribution is the process of queuing mail for onward
transmission to neighbouring mail handlers, and is an
instantaneous process, executed upon receipt of incoming mail.
Forwarding is the process of connecting to neighbouring mail
handlers, and sending the queued mail to them. It is a
background process, which can optionally be initiated when
mail is queued, or deferred until later.
**NOTE**
If a command alias, or an application, with the name "PMS" is
defined, it takes priority over the internal PMS.
**AVAILABILITY**
The PMS is available to all users. It is also available via
the HTTP interface. Some functionality is available via REST
and MQTT interfaces.
**SEE ALSO**
PMS(1) -- Start PMS Session.
PMSALIAS(7) -- PMS Alias
PMSCALL(7) -- PMS Callsign.
PMSHADDR(7) -- PMS Hierarchical Address.
PMSQUAL(7) -- PMS Quality.
PMSTYPE(7) -- PMS Mode.
PMS-SVC(9) -- NetRomX PMS Service
MQTT-PMS(9) -- MQTT Interface to PMS.
REST-PMS(9) -- REST Interface to PMS.
----
==== PMS-SVC ====
PMS-SVC(9) XROUTER REFERENCE MANUAL 22/9/2023
**NAME**
PMS-SVC -- NetRomX PMS Service.
**DESCRIPTION**
NetRomX service 2 is a direct connection to the sysop's
Personal Message/Mailbox System (PMS).
It is used by the "PMS " command, but is also
intended for human use.
Broadcasting PMS's as NetRom nodes might have been acceptable
long ago, but it clutters the nodes tables. The PMS service
allows sysops to disable the PMS nodes broadcast, or to
restrict the spread to the local area, while still retaining
connectivity from afar. All the user has to do is connect to
service 2 on the NODECALL.
**SEE ALSO**
PMS(1) -- Access Personal Message System(s)
PMS(9) -- Personal Message System
SERVICES(9) -- NetRomX Standard Services.
----
==== POP3SRV ====
POP3SRV(9) XROUTER REFERENCE MANUAL 17/12/2023
**NAME**
POP3SRV -- POP3 Server.
**DESCRIPTION**
The POP3 server allows sysops to collect their PMS mail using
a standard email client.
Account passwords are stored in POPUSERS.SYS in the form:
The server is enabled by specifying POP3PORT in XROUTER.CFG,
for example:
POP3PORT=110 110
You must declare a HOSTNAME, for example:
HOSTNAME=mobile.g8pzt.ampr.org
**OPTIONS** **SEE ALSO**
POPUSERS.SYS(8) -- Account passwords for POP3 Server.
XROUTER.CFG(8) -- Main Configuration File.
----
==== PPP ====
PPP(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
PPP -- Point to Point Protocol.
**DESCRIPTION**
Point to Point Protocol (PPP) is a protocol suite intended for
use over simple links which transport packets between two
peers, such as an RS232 link (or pair of virtual COM ports).
Unlike SLIP, it includes facilities for link control (e.g.
management of a dial up link), user authentication,
negotiation of IP addresses, and the multiplexing of several
protocols across a common link.
PPP is designed to be self configuring. Most of the options
have standard default values, and peers negotiate anything
which differs from the default.
XRouter currently implements the most common PPP
sub-protocols:
- Link Control Protocol (LCP)
- Password Authentication Protocol (PAP)
- IP Control Protocol (IPCP)
Most sysops will have no need to remember these protocol names
and acronyms. However, for those who wish to experiment, each
protocol has its own set of commands.
PPP has largely replaced SLIP for dial-up Internet access, and
the interconnection of peers via RS232.
If you want to know more about the internal workings of PPP,
it is specified in RFC1661.
Configuring XRouter for PPP
~~~~~~~~~~~~~~~~~~~~~~~~~~~
There are three ways in which PPP may be used:
- RS232 (and virtual COM port) links.
- Dial-in.
- Dial-out.
The first case requires an INTERFACE to be configured to use
PPP, but the other two cases temporarily establish a PPP link
on a MODEM interface. Each case is described in more detail
below:
Using PPP on Wire / Virtual COM Links
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In XROUTER.CFG, define an interface with TYPE=ASYNC and
PROTOCOL=PPP. For example:
INTERFACE=1
TYPE=ASYNC
COM=1 ; 1-4 or specify INTNUM/IOADDR
SPEED=19200 ; Adjust as necessary
PROTOCOL=PPP
MTU=1600
ENDINTERFACE
Then "bind" a port to that interface thus:
PORT=1
ID=PPP link to Win98 ; Text to identify port
INTERFACENUM=1 ; Bind to PPP interface
IPADDRESS=192.168.0.4 ; Optional (see below)
ENDPORT
The use of IPADDRESS is optional. If the keyword is omitted,
XRouter's "global" IP address will be used on that port. If
the address is specified as 0.0.0.0, it signifies that a
"dynamic" IP address should be obtained from the peer,
otherwise the specified address will be used.
The port is now ready for PPP using the standard PPP defaults,
but if it requires any further configuration you may include
the relevant PPP configuration commands in the file
BOOTCMDS.SYS, which is read by XRouter at boot-up, after it
has finished reading XROUTER.CFG.
Using PPP on Dial-in links
~~~~~~~~~~~~~~~~~~~~~~~~~~
The INTERFACE and PORT should be configured for PROTOCOL=MODEM
as described in the manual section "PSTN Modem Support".
When a logged-in caller issues the command XLINK PPP, XRouter
automatically re-configures the port to support PPP. It then
looks for the file "PPPHOST.n", where n is the port number,
and if found, the PPP configuration commands within the file
are executed. The file may optionally contain NAT
configuration commands if required. The PPPHOST file is
optional. If not present, PPP will be initialised to the
standard defaults.
When the hardware link disconnects (e.g. user says goodbye or
hangs up, link times out, or sysop kills it), the port is
automatically re-configured back to its original MODEM
protocol.
Using PPP on Dial-out links
~~~~~~~~~~~~~~~~~~~~~~~~~~~
The INTERFACE and PORT should be configured for PROTOCOL=MODEM
as described in the manual section "PSTN Modem Support". The
local IP address follows the same rules as the wire-link case
above, but may be overridden temporarily by IPCP commands.
The dialler script (see DUN section) must contain the command
"MODE PPP" plus any required PPP configuration commands. Here
is an extract from a typical connection script:
; Link will use PPP
mode ppp
;
; Configure my authentication username and password
ppp pap user gb7pzt bsfjflavs
;
; Set inactivity timeout to 2 minutes
ppp idle 120
;
; Enable ppp state logging
ppp log 1
;
; Set my (static) IP address for the duration of this call
ppp ipcp local address 194.123.110.4
;
; Now dial the host
send ATDT07979654234
;
etc...
The PPP configuration will persist until the call terminates,
then the port will revert back to MODEM protocol to await the
next incoming or outgoing call.
PPP Configuration Commands
~~~~~~~~~~~~~~~~~~~~~~~~~~
All PPP configuration commands start with "PPP", and are
described in the sysop command reference section. When used
from the command line, or with a BOOTCMDS.SYS file, the first
argument must be a port number. However, PPP commands used
within PPPHOST and dialler scripts *do not* include a port
number, because XRouter knows which port is executing the
script.
e.g. at the command line: PPP 3 IDLE 300
in a dialler script: PPP IDLE 300
IP Routing with PPP
~~~~~~~~~~~~~~~~~~~
When a PPP link opens, a route to the peer is automatically
added to XRouter's IP routing table. If the peer indicates
that it knows the addresses of a primary and secondary DNS,
those are added to XRouter's DNS list.
PPP Logging
~~~~~~~~~~~
PPP system activity can be recorded in file PPPLOG.TXT for
diagnostic purposes. The amount of detail is controlled by
the number specified in the "PPP LOG n" command as
follows:
0 No logging
1 PPP start / stop / timeout events
2 As 1, plus layer up / down events
3 As 2, plus layer start / stop events
4 as 3, plus option accept / reject events
5 as 4, plus hexdump of configuration packets
You are advised against using the higher levels other than on
a temporary basis because they can create very large logfiles.
If logging is in use, you should regularly remove the logfiles
to prevent them growing too large.
**SEE ALSO**
BOOTCMDS.SYS(8) -- Bootup Configuration Commands File.
DIAL(1) -- Dial a PSTN connection.
DUN(1) -- Dial Up Networking Configuration Commands.
DUN(9) -- Dial-Up Networking.
PPP(1) -- PPP Configuration Commands.
PPPHOST.n(8) -- PPP Configuration File(s)
PSTN(9) -- PSTN Modem Support.
SCRIPT(9) -- Dialer Scripts.
XLINK(1) -- Establish a Temporary SLIP / PPP Interlink.
XROUTER.CFG(8) -- Main Configuration File.
----
==== PROXIES ====
PROXIES(9) XROUTER REFERENCE MANUAL 26/9/2023
**NAME**
PROXIES -- Proxy Connections.
**DESCRIPTION**
In this context, "proxies" are cross-protocol bridging
mechanisms which allow systems using one protocol to be
accessed using another protocol. They can also be used
to give "hidden" systems a network presence.
AX25 -> NETROM PROXY
====================
This facility allows AX25 level 2 callers to connect
"directly" to remote NetRom target callsigns, without
needing to connect first to XRouter then issue a downlink
connect request. In effect, it gives the NetRom target
system a local AX25 presence.
.------. .-------. .--------.
| user |-- Ax25 --| proxy |-- NetRom --| target |
'------' link '-------' link '--------'
(g5ur) (g8pzt) (gb7bbs)
.------. Ax25 link .-------.
| G5UR |-- G5UR -> <- GB7BBS --| G8PZT |
'------' '-------'
(Proxy at G8PZT masquerades as GB7BBS)
This facility is primarily for use in situations where
a BBS or PMS is wire-linked to a "front-end" router,
thus allowing the BBS callsign to be directly
connectible on any port for which the proxy call is
defined. You may find other uses....
A bi-directional selective frame pipe would provide a
similar effect, but only for systems directly connected
to XRouter, whereas PROXY allows the target system to be
located several hops away. Pipes can handle UI frames,
whereas PROXY is for connected-mode operations only.
Here's how it would be used on a typical set-up, which
has two machines (or a virtual COM port linking two
systems on the same machine). Only XRouter is connected to
the radios, the BBS being KISS-linked to XRouter's port 7.
----------- (1)
| Radio/TNC | ---.
----------- |
| .---------. .---------.
----------- (2)| | NODE | (7) KISS | GB7PZT |
| Radio/TNC |----|----| |------------| |
----------- | |(XRouter)| (rs232) | (BBS) |
| `---------' `---------'
----------- (3)|
| Radio/TNC |----|
----------- |
V
etc.
Without PROXY, level 2 users would have to connect to
XRouter, then issue the command "C GB7PZT",or "BBS" to
connect to the BBS.
With the line "PROXY=GB7PZT" in port 1's definition
(in XROUTER.CFG), users on port 1's frequency simply
connect to "GB7PZT" - XRouter intercepts the request and
answers on behalf of the BBS. It then connects via
NetRom to GB7PZT. In this case, the BBS is running on
top of BPQ, so it has a NetRom address.
If the target system (GB7PZT in this case) is not
reachable via NetRom level 4, the connect request is
refused.
If you wish to use this facility, you must add a
"PROXY=[,call2,...]" directive to each user PORT
concerned. Ports without the directive continue to
function as normal. You obviously wouldn't enable it
on your forwarding ports for example. You will notice
that you can have several callsigns on the line, each
separated by a comma, allowing you to act as a proxy
for more than one system.
Warning! DO NOT enable PROXY on any frequency which
is shared by the target system or you'll cause horrible
problems (both the target and the proxy will respond to
connects at the same time).
AX25 / NETROM -> TCP PROXY
==========================
This is an extension of the PROXY concept, allowing a
remote TCP/IP-only system to have NetRom and AX25
connectivity.
.------. .-------. .--------.
| user |-- Ax25 --| proxy |-- TCP/IP --| target |
'------' link '-.-----' link '--------'
|
.-------. |
| user2 |-- NetRom--'
| @node | link
'-------'
In the previous example, GB7PZT BBS used G8BPQ node
"underneath" the BBS to provide NetRom connectivity
across the KISS link. With the extended proxy, BPQ can
be removed altogether and the BBS can be run in pure
TCP/IP mode. This saves memory, whilst improving speed
and reliability. The BBS no longer has to support
multiple protocols or interface types, that job being
delegated to XRouter.
Instead of having to connect first to XRouter then issue
the awkward command "Telnet 44.131.91.2", users can
simply connect "directly" to the BBS callsign (GB7PZT)
on one of XRouter's radio ports. XRouter converts that
connection into a TCP/IP connection with the BBS, and
translates the data back and forth between AX25 and
TCP/IP.
Furthermore, the BBS callsign "GB7PZT" can be connected
to directly from XRouter's command line, and also included
in nodes broadcasts so it can be reached from a remote
node.
This type of proxy is created by putting an extended
PROXY statement in the GLOBAL section of XROUTER.CFG,
using the following format:
PROXY= [passwrd]
For example:
PROXY=GB7PZT KDRBBS 150 192.168.0.4 8888 bloggs
is the NetRom and AX25 callsign for the
proxied system.
is the NetRom / AX25 alias for the proxied
system.
is the NetRom "quality" (0 - 255) controlling
visibility on the NetRom network.
is the proxied system's IP address.
is the TCP service port number of the
proxied system.
is an optional password sent to proxied
system upon connection. This is used to
verify that the TCP connection originates
from an approved proxy.
AX25 and NetRom are pure binary channels, whereas standard
telnet is not. The proxied system must provide a pure
binary service port in order to make full use of this
facility for compressed forwarding etc. G8PZT's "XServ"
BBS software provides such a facility on TCP port 8888.
If you are a software author interested in adapting your
software to work with this proxy, the following information
will be useful:
Upon connection to the proxied system XRouter sends one line
of text ending in , containing one or more
space-delimited fields. The first field is the callsign of
the connectee in the form "G8PZT-7" (ax25) or
"G6YAK-2@GB7BM" (NetRom). The second field is a password
which verifies the proxying system (note this is not the
user's password). Thereafter, the link switches to pure
binary, and in accordance with AX25 practice both systems
must send line ends as alone.
There is no limit to the number of proxies you may
configure.
NETROM -> AX25 PROXY
====================
This is similar to the NetRom -> TCP proxy described
above, but is intended to allow an AX25-only system to
have a NetRom presence.
.------. .-------. .--------.
| user |-- NetRom --| proxy |-- AX25 --| target |
|@node | link '-------' link '--------'
'------' ^
^-(Target callsign appears in)
(nodes tables on these nodes)
This is enabled by putting an extended PROXY statement
in the GLOBAL section of XROUTER.CFG, using the
following format:
PROXY=
For example:
PROXY=MB7UYL UYLBBS 150 G6KDR-3 7
is the NetRom and AX25 callsign for the proxied
system.
is the NetRom / AX25 alias for the proxied
system.
is the NetRom "quality" (0 - 255) controlling
visibility on the NetRom network.
is the proxied system's AX25 L2 callsign.
is the radio port the proxied system is
connected to.
The above example creates a NetRom node whose callsign
is "MB7UYL", alias "UYLBBS", with NetRom quality 150.
Anyone who makes a connection to either of these
addresses will instead be connected to the AX25 system
"G6KDR-3", attached to XRouter's port 7.
**OPTIONS**
Summary of the syntax for the 3 types of proxy....
AX25 -> NetRom:
~~~~~~~~~~~~~~~
PROXY=[,call2[,...]]
AX25 / NetRom -> TCP:
~~~~~~~~~~~~~~~~~~~~
PROXY= [passwrd]
NetRom -> AX25:
~~~~~~~~~~~~~~
PROXY= **CAVEATS**
Be *very* careful when mixing proxies and pipes, or you
will end up generating lots of FRMR's, and possibly
crashing the system. These are powerful tools and must
be used carefully.
Proxies are intended for use with your own systems only.
Do not act as a proxy for someone else's system without
their permission.
You must *NEVER* set up a proxy to give a NetRom
presence to a node which already has one!!
For proxies which include , please ensure that
the port actually exists (sysops often rearrange ports
rendering the proxies inactive).
**SEE ALSO**
PROXY(7) -- Proxy Connectivity.
PIPES(9) -- Frame Pipes.
XROUTER.CFG(8) -- Main Configuration File
----
==== PSTN ====
PSTN(9) XROUTER REFERENCE MANUAL 18/10/2023
**NAME**
PSTN -- PSTN Modem Support.
**DESCRIPTION**
The following text describes a facility which was inherited
from DOS XRouter, but which probably has no relevance
nowadays?...
XRouter may be connected to one or more Public Switched
Telephone Network (PTSN) modems, for dial-in and dial-out
operations.
Dial-in would, for example, allow users and/or sysops to
connect to XRouter and operate it using a dumb terminal or a
standard terminal package such as Telix or Hyperterm.
Alternatively, after login, the link may be switched into
SLIP or PPP mode for TCP/IP operations, behaving in exactly
the same way as a dial-up Internet Service Provider.
Dial-out allows XRouters to be linked with each other or with
an Internet service provider, for the purposes of on-demand
wired routing, or Internet Connection Sharing.
A single modem may be used for both dial-in and dial-out
operations on the same port, although not at the same time
of course!
Suitable Modem Types
~~~~~~~~~~~~~~~~~~~~
Almost any modem is suitable, providing it can be initialised
by a single string of characters and can be configured to
disconnect when DTR is dropped.
Hardware Configuration
~~~~~~~~~~~~~~~~~~~~~~
External modems should be connected to a serial port using a
cable with at least 8 connections, namely TXD, RXD, RTS, CTS,
DTR, DSR, DCD and ground. The RI (ring indicator) connection
is not needed.
Internal modems should be configured to use a spare COM
number and IRQ.
Software Configuration
~~~~~~~~~~~~~~~~~~~~~~
Each modem requires an ASYNC interface definition in
XROUTER.CFG, with COM (or IOADDR & IRQ if non-standard)
configured for the appropriate serial port or modem card.
You should use PROTOCOL=MODEM, FLOW=1 and MTU=576.
To each "modem" interface should be attached a PORT with at
least INTERFACENUM and ID specified.
If the modem requires an initialisation string, add the
directive INITSTR=, e.g. to set the modem into
auto answer mode use "INITSTR=ATS0=1". If you don't include
the INITSTR directive, the modem configuration is unaltered.
If your modem does not, by default, hang up when the RS232
DTR signal is dropped, you should configure it to do so by
including "&D2" in the initialisation string, for example:
"INITSTR=ATM0S0=1&D2".
Example MODEM Interface and Port Configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In XROUTER.CFG:
INTERFACE=5
TYPE=ASYNC
COM=3 ; (or /dev/ttyxx for Linux)
SPEED=57600
PROTOCOL=MODEM
FLOW=1
MTU=576
ENDINTERFACE
PORT=2
ID=PSTN Modem port
INTERFACENUM=5
INITSTR=ATS0=1
ENDPORT
If you will be allowing incoming calls, you must set up a
callsign and password entry for each user in USERPASS.SYS.
Dial-in Operation
~~~~~~~~~~~~~~~~~
If you have configured the modem for auto-answer, PSTN
callers must successfully complete a callsign and password
challenge before they are allowed to use the XRouter command
interface.
The callsign must be a proper amateur radio callsign, not
a "username". If a valid callsign is not given, or if the
callsign is not found in USERPASS.SYS, or if an incorrect
password is supplied, the user is immediately disconnected.
If this sounds unforgiving, it is meant to be! It will cost
hackers the price and time delay of a separate phone call
for each attack.
If the callsign and password challenge is successfully
completed, the caller will be allowed full access to the
command shell, exactly the same as a radio caller.
XRouter will disconnect the caller after 15 minutes of
inactivity. You may initialise the modem to disconnect after
a shorter interval if necessary.
The XLINK command
~~~~~~~~~~~~~~~~~
If the caller (e.g. using NOS) wishes to establish a TCP/IP
link with XRouter, the XLINK command is used to switch the
ASCII link into SLIP ("XLINK SLIP") or PPP ("XLINK PPP")
mode.
XRouter responds with "Entering SLIP mode" or "Entering PPP
mode", and will thereafter no longer respond to ASCII
commands. SLIP or PPP mode may only be terminated by
disconnection.
In order to use SLIP or PPP modes, XRouter must have at least
a global IPADDRESS, and you must set up IP routing to the
caller's IP address on the modem port.
You could either allow each caller to use their own IP
address, and have one routing entry for each caller, or you
may choose to require all callers on a particular port to use
the same IP address (since only one may connect at any time)
and set up a single routing entry.
For example, you could tell each of your SLIP/PPP callers to
set their IP address to 192.168.73.88, which is one of the
"unregistered" addresses anyone can use. If your modem is
on port 2, you would add the following entry to IPROUTE.SYS:
route add 192.168.73.88/32 * 2 d
Which means "route datagrams for 192.168.73.88 directly on
port 2 using datagram mode".
No ARP entry is necessary for the caller, because SLIP and
PPP do not use "hardware addresses".
XLINK PPP mode
~~~~~~~~~~~~~~
XLINK SLIP mode requires no extra configuration, but PPP mode
optionally uses an extra file to configure the PPP system for
receive operations on the modem port. For example, you may
wish to use one IP address when making outgoing connects and
a different one when receiving incoming connects.
The optional file is named "PPPHOST.n" where n is the number
of the modem port, e.g. "PPPHOST.2". You may have a separate
file with a different configuration for each modem port if
required. The file should be located in the same directory
as XRouter itself and may contain any PPP configuration
command.
See the description of PPP commands for details of how to
configure PPP.
The PPP link inactivity timeout defaults to 5 mins, but can
be overridden by including the PPP IDLE command in the
PPPHOST.n file.
**SEE ALSO**
DIAL(1) -- Dial a PSTN Connection
DUN(1) -- Dial Up Networking Commands.
PPP(1) -- PPP Configuration Commands.
PPPHOST.n(8) -- PPP Configuration File(s)
XLINK(1) -- The XLINK Command.
XROUTER.CFG(8) -- Main Configuration File.
----
==== REST-BLOG ====
REST-BLOG(9) XROUTER REFERENCE MANUAL 26/9/2023
**NAME**
REST-BLOG -- REST Interface to Sysop's Blog.
**DESCRIPTION**
The sysop's blog may be operated via a REST interface.
For POST, the Content-Type: header MUST be "application/json".
This facility is incomplete. The curently available
functionality is documented in the next section.
**OPTIONS**
a) Retrieve List of Blog Posts:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Request-Type: GET
Request-URL: api/v1/blog/posts
If successful, the response is an un-named JSON array of
objects, each objct containing the following fields:
Name Type Description
-----------------------------------------------------------
"id" integer Article/post number.
"rcvd" string Date/time of message creation (*).
"size" integer Length of the blog text in bytes.
"from" string Callsign of the post's creator.
"subject" string Topic of the post (32 chars max)
(*) in format "Mon, 14 Sep 1997 23:47:00 GMT"
b) Retrieve a Blog Post:
~~~~~~~~~~~~~~~~~~~~~~~~
Request-Type: GET
Request-URL: /api/v1/blog/posts/{post-number}
Example: http://localhost:80/api/v1/blog/posts/21
The response payload is an un-named JSON object containing
the following fields:
Name Type Description
-----------------------------------------------------------
"id" integer Article/post number.
"rcvd" string Date/time of message creation (*).
"size" integer Length of the blog text in bytes.
"from" string Callsign of the post's creator.
"subject" string Topic of the post (32 chars max)
"text" string Body of the post (plain ASCII)
(*) in format "Mon, 14 Sep 1997 23:47:00 GMT"
c) Post a Blog Article / Reply:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Request-Type: POST
Request-URL: /api/v1/blog/posts
The payload must be a JSON object containing the following
fields:
Name Type Description
-----------------------------------------------------------
"sender" string Callsign of sender
"replyto" integer No. of msg being replied to (0=new)
"subject" string Subject of the post (32 chars max)
"text" string Body of the post (unlimited size)
Response: {"id": msg-number }
**EXAMPLE**
curl -X POST http://localhost:80/api/v1/blog/posts \
-H "Content-Type: application/json" -d '{\
"sender": "G8PZT", "replyto": 0, \
"subject": "test of post via REST", \
"text": "Test of blog posts via REST interface"}'
**LIMITATIONS**
The blog's REST interface is only a proof-of-concept at this
stage. It does not yet allow article deletion, "liking" of
articles, or retrieval of replies. Those functions will be
added in a future version
**SEE ALSO**
BLOG(1) -- Access Sysop's Blog.
BLOGFLAGS(7) -- Options For Sysop's Blog.
MQTT-BLOG(9) -- MQTT Interface to Blog.
MQTT-SRV(9) -- MQTT Server / Broker.
----
==== REST-NETROM ====
REST-NETROM(9) XROUTER REFERENCE MANUAL 26/9/2023
**NAME**
REST-NETROM -- REST API for NetRom Subsystem.
**DESCRIPTION**
Net/Rom status and information can be retrieved using the
REST API.
Requests are made using HTTP, and the data is returned in
JSON (JavaScript Object Notation) format.
The base URL for such interactions is "/api/v1/netrom".
Only HTTP "GET" requests are currently supported by the
netrom API.
**OPTIONS**
a) Retrieve List of Nodes:
GET /api/v1/netrom/nodes
b) Display Information for Specific Node:
GET /api/v1/netrom/nodes/{id} -
({id} is the node callsign)
c) Display List of Neighbour Routes:
GET /api/v1/netrom/routes
d) Display Information for Specific Route:
GET /api/v1/netrom/routes/{id}
e) Display List of Layer 4 Circuits:
GET /api/v1/netrom/circuits
**RETURNS**
If the request is successful, the HTTP response code is 200 OK
and the response payload is in JSON format, as detailed below:
a) Nodes List
The response payload is a JSON array, which may be empty.
Each array element is a JSON object which contains at least
the following fields:
Name Type Description
----------------------------------------------------
"id" string Callsign of node
"alias" string Alias of node
b) Specific Node:
The response payload is a JSON object which contains at
least the above 2 fields, plus some or all of the
following fields:
Name Type Description
----------------------------------------------------
"qual" integer NetRom "quality" metric
"rtt" number Round Trip Time in seconds (*)
"hops" integer Links between here & target (*)
"sent" integer Frames from us, addressed to that node
"rcvd" integer Frames to us, addressed from that node
"queue" integer L3 frames queued for that node
"position" string Node's position in APRS format
"locator" string Node's Maidenhead locator
"qth" string Town, county etc
"ipaddr" string 44-net IP address & bits
"tcp" integer 44-net Telnet port
"software" string Software type
"version" string Software version
(more fields to be added)
(*) Zero values of "hops" and "rtt" indicate that they
have not yet been measured.
c) Routes List:
The response payload is a JSON array, which may be empty.
Each array element is a JSON object which contains at least
the following fields:
Name Type Description
----------------------------------------------------
"id" integer Unique identifier for this route
"port" integer Port number used by this route
"call" string Callsign of neighbour node
"qual" integer Assigned NetRom "quality" of route
"sntt" number Smoothed Neighbour Trip Time in secs
"lock" bool Route is sysop-locked (true / false)
"state" string "closed", "opening", "open" or "failed"
"nodes" integer No. of nodes routed via this neighbour
The list may be modified using options in the query string.
The "port" option can be used to show only the routes
using a specified PORT, like this:
/api/v1/netrom/routes?port=2
Extra information may be displayed using the "detail"
option, either as a decimal number like this:
/api/v1/netrom/routes?detail=3
or as a comma-delimited list of mnemonics, like this:
/api/v1/netrom/routes?detail=inp,rty,arq
The extra details, their mnemonics and numbers are listed
below:
Mnemonic "l2" - L2 Parameters (+1)
Name Type Description
----------------------------------------------------
"maxframe" integer L2 "window" size
"frack" integer Frame Acknowledgement time
"paclen" integer Maximum packet length (bytes)
Mnemonic "inp" - INP3 Values (+2)
Name Type Description
----------------------------------------------------
"maxtt" integer
"thrmaxtt" integer
"maxhops" integer
"flags" integer
"thrsntt" number
"inpnodes" integer,
Mnemonic "rty" - Frame Counts and Retry Rates (+4)
Name Type Description
----------------------------------------------------
"sent" integer
"resent" integer
"rtyave" number
"rtynow" number
"rtymax" number
"rtymaxtm" integer Time when rty-max occurred
Mnemonic "rat" - Throughputs, channel load etc (+8)
Name Type Description
----------------------------------------------------
"uptime" number
"txmean" integer
"txbest" integer
"txpeak" integer
"loadave" integer
Mnemonic "arq" Automatic Route Quality Calculations (+16)
Name Type Description
----------------------------------------------------
"qualave" integer Moving average quality
"qualmin" integer Minimum quality
"qualmax" integer Maxinum quality
"qualdev" integer Standard deviation of quality
Mnemonic "tim" - Times (+32)
Name Type Description
-------------------------------------------------------
"bcrcvd" integer Time of last rcvd nodes broadcast
"lasthrd" integer Time of last received frame
d) Specific Route:
The response is a single JSON object as detailed in (c)
e) List of L4 Circuits:
The response payload is a JSON array, which may be empty.
Each array element has at least the following fields:
Name Type Description
----------------------------------------------------
"remote" string Remote address: user@node:circuit
"local" string Local L4 address + our_circuit no.
"direction" string "incoming" / "outgoing"
"service" number L4X "service number", e.g. 80=http
"state" string Connection state (see below)
"txq" number Bytes queued for transmission
"rxq" number Bytes queued for reception
"rtt" number Smoothed round trip time (ms)
"tries" number Retry count for current event
"timeout" number Layer 4 timeout interval in secs
"conTmr" number Secs left until next timeout
"chkTmr" number Secs left on chocke timer
"ackTmr" number Secs left on delayed ack timer
"remBusy" bool Remote end is busy
Connection states:
~~~~~~~~~~~~~~~~~~
0 - Disconnected
1 - Awaiting Connect ACKnowledgement
2 - Connected & ready to pass data
3 - We requested disconnect, awaiting DACK
4 - Waiting for session layer to dispose
5 - Our end wants to close after data is sent
**ERROR CODES**
If the request is not successful, one of the following HTTP
error codes is returned:
Code Meaning
--------------------------------------------------
400 Bad Request Invalid resource specifier
404 Not Found Specified API not found
415 Unsupported Media POST data was not JSON
500 No Resources No memory, try again later
**EXAMPLES**
GET /api/v1/netrom/nodes/g8pzt
GET /api/v1/netrom/routes?port=3
GET /api/v1/netrom/routes?port=4&options=255
Example Response for /api/v1/netrom/routes:
[
{
"id": 1,
"port": 4,
"call": "G8PZT",
"qual": 10,
"sntt": 0.03,
"lock": false,
"state": "open",
"nodes": 66
},
{
"id": 2,
"port": 6,
"call": "G8PZT-14",
"qual": 10,
"sntt": 0.60,
"lock": false,
"state": "open",
"nodes": 2
}
]
Example Response for /api/v1/netrom/nodes
[
{
"id": "SP2L-14",
"alias": "2LJNOS"
},
{
"id": "ZL2AQY-2",
"alias": "AQYNOD"
},
{
"id": "N2NOV-7",
"alias": "ARECS"
},
{
"id": "MB7NBA",
"alias": "BAMPTN"
}
]
Example Response for /api/v1/netrom/node/g8pzt:
{
"id": "G8PZT",
"alias": "KIDDER",
"qual": 10,
"rtt": "0.12",
"hops": "1",
"frames": 61,
"queue": 0,
"position": "5224.00N 00215.00W",
"locator": "IO82VJ",
"qth": "Kidderminster, Worcestershire, U",
"ipaddr": "44.136.16.50/32",
"tcp": 23,
"software": "XRPi",
"version": "503d"
}
Example Response for /api/v1/netrom/circuits:
[
{
"remote": "G8PZT-8@G8PZT-8:0eaa",
"local": "G8PZT-9:0001",
"direction": "incoming",
"state": 2,
"txq": 0,
"rxq": 0,
"rtt": 91,
"tries": 0,
"timeout": 120,
"conTmr": 121,
"chkTmr": 0,
"ackTmr": 0,
"remBusy": false
},
{
"remote": "VK2DOT-1@VK2DOT-1:0167",
"local": "G8PZT-4:0002",
"direction": "incoming",
"state": 2,
"txq": 0,
"rxq": 0,
"rtt": 0,
"tries": 0,
"timeout": 120,
"conTmr": 120,
"chkTmr": 0,
"ackTmr": 0,
"remBusy": false
}
]
**Routes with all options**
[
{
"id": 1,
"port": 6,
"call": "G8ASO-7",
"qual": 180,
"sntt": 0.00,
"lock": true,
"state": "failed",
"nodes": 0,
"maxframe": 3,
"frack": 7000,
"paclen": 256,
"maxtt": 5000,
"thrmaxtt": 10000,
"maxhops": 30,
"flags": 1,
"thrsntt": 0.00,
"inpnodes": 1,
"sent": 0,
"resent": 0,
"rtyave": 0,
"rtynow": 0.00,
"rtymax": 0.00,
"uptime": 4.4,
"txmean": 0,
"txbest": 0,
"txpeak": 0,
"loadave": 0,
"qualave": 0,
"qualmin": 0,
"qualmax": 0,
"qualdev": 0
},
{
"id": 2,
"port": 4,
"call": "G8PZT",
"qual": 10,
"sntt": 0.03,
"lock": false,
"state": "open",
"nodes": 73,
"maxframe": 3,
"frack": 7000,
"paclen": 256,
"maxtt": 5000,
"thrmaxtt": 5000,
"maxhops": 30,
"flags": 14,
"thrsntt": 0.18,
"inpnodes": 1,
"sent": 91,
"resent": 0,
"rtyave": 0,
"rtynow": 0.00,
"rtymax": 0.00,
"uptime": 98.1,
"txmean": 328,
"txbest": 2034,
"txpeak": 2034,
"loadave": 21,
"qualave": 252,
"qualmin": 252,
"qualmax": 252,
"qualdev": 0,
"bcast-rcvd": 1710514580,
"last-heard": 1710515203
}
]
**SEE ALSO** **REST-NETROM(9) END OF DOCUMENT**
----
==== REST-PMS ====
REST-PMS(9) XROUTER REFERENCE MANUAL 23/3/2024
**NAME**
REST-PMS -- REST Interface to Personal Message System.
**DESCRIPTION**
The PMS may be operated via a REST interface, e.g.
using a "curl" command.
The request type is either GET (to request data from the
PMS) or POST (to write data to the PMS). For POST, the
"Content-Type:" header must be "application/json", and
the payload must be in JSON format.
This facility is incomplete. The currently available
functionality is documented in the next section.
**OPTIONS**
a) Retrieve List of Messages:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Request-Type: GET
Request-URL: api/v1/mail/msgs
URL Options: offset - from "start" of list, default 0
maxitems - default 500
to - callsign or category
at - Distribution, e,g GBR
from - Sender's callsign
subject - string to match in subject
fwd/rvs? - to be added?
If successful, the response is an un-named JSON array of
objects, each object containing the following fields:
Name Type Description
-----------------------------------------------------------
"id" integer Message number.
"mid" string Message ID (MID or BID)
"rcvd" integer Date/time of message reception (*1).
"size" integer Length of the message body in bytes.
"type" string Type of message: (A, P, B, E, T etc)
"status" string Message status: (R, F, U etc) (*2)
"to" string Destination address (*3)
"from" string Callsign of the message's creator.
"subject" string Message subject (32 chars max)
"links" object Contains link to read the message (*4)
(*1) in Unix time, i.e seconds since 1st Jan 1970 UTC
(*2) type and status may in future be unambiguous words
(*3) e.g. "g8pzt", "all@gbr", "g8pzt@gb7pzt.#24.gbr.eu"
(*4) e.g. {"view": "/api/v1/mail/msgs/803"}
Note that messages are listed in REVERSE order, i.e. most
recent first.
b) Retrieve a Message:
~~~~~~~~~~~~~~~~~~~~~~
Request-Type: GET
Request-URL: api/v1/mail/msgs/{msg-number}
Example: http://localhost:80/api/v1/mail/msgs/21
The response payload is an un-named JSON object containing
the following fields:
Name Type Description
-----------------------------------------------------------
"id" integer Message number.
"mid" string Message ID (MID or BID)
"rcvd" integer Date/time of message reception (*1).
"size" integer Length of the message body in bytes.
"type" string Type of message: (A, P, B, E, T etc)
"status" string Message status: (R, F, U etc) (*2)
"to" string Destination address (*3)
"from" string Callsign of the message's creator.
"subject" string Message subject (32 chars max)
"text" string Body of the message (*4)
(*1) in Unix time, i.e seconds since 1st Jan 1970 UTC
(*2) type and status may in future be unambiguous words
(*3) e.g. "g8pzt", "all@gbr", "g8pzt@gb7pzt.#24.gbr.eu"
(*4) Message body includes all RFC822 and routing headers
c) Post a Message:
~~~~~~~~~~~~~~~~~~
Request-Type: POST
Request-URL: /api/v1/mail/msgs
The payload must be a JSON object containing the following
fields:
Name Type Description
-----------------------------------------------------------
"from" string Callsign of sender
"to" string Destination (see below)
"type" string Only "P" or "B" at present
"subject" string Subject of message (32 chars max)
"text" string Body of the message
For private messages the destination may be just a callsign,
or @. For bulletins it may
be simply or @. For email it is
@.
The response is a JSON object containing the number of the
newly created post, for example: {"id": 22}
**EXAMPLE**
curl -X POST http://localhost:80/api/v1/mail/msgs \
-H "Content-Type: application/json" -d '{\
"from": "G8PZT", "to": "all@gbr", \
"type": "B",
"subject": "XRouter 503 coming soon", \
"text": "New XRouter expected to be completed by Xmas"}'
**LIMITATIONS**
The PMS's REST interface is only a proof-of-concept at this
stage, and some details may change. More functionality will
be added in a future version
**SEE ALSO**
PMS(1) -- Access Personal Message System.
MQTT-PMS(9) -- MQTT Interface to PMS.
PMS(9) -- About the Personal Mesaage System
----
==== REST-WALL ====
REST-WALL(9) XROUTER REFERENCE MANUAL 26/9/2023
**NAME**
REST-WALL -- REST Interface to Message Wall.
**DESCRIPTION**
The message wall may be operated via a REST interface, e.g.
using a "curl" command.
The request type is either GET (to request data from the
wall) or POST (to write data to the wall). For POST, the
"Content-Type:" header MUST be "application/json", and
the payload MUST be in JSON format.
This facility is incomplete. The curently available
functionality is documented in the next section.
**OPTIONS**
a) Obtain List of Wall Posts:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Request-Type: GET
Request-URL: /api/v1/wall/posts
If successful, the response is an un-named JSON array of
objects, each objct containing the following fields:
Name Type Description
-----------------------------------------------------------
"id" integer Article/post number.
"rcvd" string Date/time of message creation (*).
"size" integer Length of the text portion in bytes.
"from" string Callsign of the post's creator.
"text" string Body of the post (plain ASCII)
(*) in format "1997-09-14T23:47:00Z"
b) Retrieve a Wall Post:
~~~~~~~~~~~~~~~~~~~~~~~~
Request-Type: GET
Request-URL: api/v1/wall/posts/{post-number}
Example: http://localhost:80/api/v1/wall/posts/17
The response payload is an un-named JSON object containing
the following fields:
Name Type Description
-----------------------------------------------------------
"id" integer Article/post number.
"rcvd" string Date/time of message creation (*).
"size" integer Length of the text in bytes.
"from" string Callsign of the post's creator.
"text" string Body of the post (plain ASCII)
(*) in format "Mon, 14 Sep 1997 23:47:00 GMT"
c) Post a Wall Message / Reply:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Request-Type: POST
Request-URL: /api/v1/wall/posts
The payload must be a JSON object containing the following
fields:
Name Type Description
-----------------------------------------------------------
"sender" string Callsign of sender
"text" string Body of the post (unlimited size)
The response is a JSON object containing the number of the
newly created post, for example: {"id": 22}
**LIMITATIONS**
The wall's REST interface is only a proof-of-concept at this
stage. It does not yet allow article deletion, "liking" of
articles, or retrieval of replies. Those functions will be
added in a future version
**SEE ALSO**
WALL(1) -- Access Message Wall / Guestbook.
WALLFLAGS(7) -- Options For Message Wall.
MQTT-WALL(9) -- MQTT Interface to Wall.
MQTT-SRV(9) -- MQTT Server / Broker.
----
==== REST-WX ====
REST-WX(9) XROUTER REFERENCE MANUAL 14/3/2024
**NAME**
REST-WX -- REST Interface to Weather System.
**DESCRIPTION**
Weather data stored on XRouter can be retrieved using the
REST API.
Requests are made using HTTP, and the data is returned in
JSON (JavaScript Object Notation) format.
The base URL for such interactions is "/api/v1/weather".
Only HTTP "GET" requests are currently supported by the
weather API.
**OPTIONS**
a) Retrieve List of Weather Stations:
Request-Type: GET
Request-URL: /api/v1/weather/stations
b) Retrieve Weather Data From a Specific Station
Request-Type: GET
Request-URL: /api/v1/weather/stations/{id}
{id} is a station identifier, usually callsign, or LOCAL
for observations entered into the node from a local sensor.
**RETURN VALUES**
If successful, the HTTP response code is 200 and the payload
contains the response in JSON format, as detailed below:
For Stations List:
The response is an anonymous JSON array of objects, each object
containing the following fields:
Name Type Description
-----------------------------------------------------------
"id" string Station id, e.g. "G8PZT" or "LOCAL"
"lat_deg" number Latitude of wx station in degrees
"lon_deg" number Longitude of wx station in degrees
"dist_km" number Distance from our node in kilometers
"dir_deg" number Direction from our node in degrees
"dt": integer Observation time, in secs since 1/1/70
For a Specific Station:
The response is an anonymous JSON object, containing the above
fields plus some of all of the following weaher data:
Name Type Description
-----------------------------------------------------------
"observed" string Date and time of observation (*1)
"pressure_mb" number Air pressure in millibars
"temperature_C" number Air temperature in degrees C
"humidity" number Relative Humidity in percent
"dewpoint_C" number Dew point in degrees Centigrade
"heat_index_C" number Heat index in deg Centigrade
"wind_chill_C" number Wind Chill in degrees Centigrade
"wind_mph" number Wind speed in miles per hour
"wind_dir_deg" number Wind direction in degrees
"gust_mph" number Wind gust speed in miles per hour
"raintoday_mm" number Total rain since midnight in mm
"rain1h_mm" number Current rainfall rate mm/hour
"rain24h_mm" number Total rain in past 24 hours in mm
"sunrise" string Sunrise time at the station hh:mm
"sunset" string Sunset time at the station hh:mm
"daylight_hours" number Hours between sunrise and set
(*1) As "dt" but human-readable e.g. 2024-03-14T15:19:59Z
For Local Sensor Only:
If there is a local weather sensor feeding XRouter, the
response containing the above fields plus some or all of the
following extra data, depending on the capabilities of the
sensor:
Name Type Description
-----------------------------------------------------------
"rain_max_mm_hr" number Maximum rain rate today mm/hour
"press_max_mb" number Maximum air pressure today
"press_min_mb" number Minimum air pressure today
"temp_max_C" number Maximum temperature today
"temp_min_C" number Minimum temperature today
"humid_max" number Maximum humidity today
"humid_min" number Minimum humidity today
"wind_ave_mph" number Moving average wind speed
"wind_max_mph" number Maximum wind speed totay
"gust_max_mph" number Maximum gust speed today
"wind_dir_ave_deg" number Moving average wind direction
"wind_run_miles" number Total wind run today, in miles
"light_w_sqm" number Current light level, watts/sq m
"light_max_w_sqm" number Maximum temperature today
"UV_index" number Current UV index
"UV_index_max" number Maximum UV index today
("today" means since midnight GMT)
**ERROR CODES**
400 Bad Request Invalid resource specifier
404 Not Found Specified API not found
415 Unsupported Media POST data was not JSON
500 No Resources No memory, try again later
**EXAMPLES**
a) Stations List:
[
{
"id": "LOCAL",
"lat_deg": 50.0935,
"lon_deg": -5.0850,
"dist_km": 0,
"dir_deg": 0,
"dt": 1710395654
},
{
"id": "G8PZT",
"lat_deg": 52.2400,
"lon_deg": -2.1500,
"dist_km": 0,
"dir_deg": 0,
"dt": 1710394799
}
]
b) Specific Station:
{
"id": "G8PZT",
"lat_deg": 52.2400,
"lon_deg": -2.1500,
"dist_km": 0,
"dir_deg": 0,
"dt": 1710425999,
"observed": "2024-03-14T15:19:59Z",
"temperature_C": 13.3,
"humidity": 51,
"dewpoint_C": 3.5
"wind_mph": 0.0,
"wind_dir_deg": 202,
"gust_mph": 1.0,
"sunrise": "07:25",
"sunset": "19:12",
"daylight_hours": 11.78
}
c) Local Weather
{
"id": "LOCAL",
"lat_deg": 50.0875,
"lon_deg": -5.075,
"dist_km": 0,
"dir_deg": 0,
"dt": 1710395899,
"observed": "2024-03-14T06:58:19Z",
"pressure_mb": 1006,
"temperature_C": 10.9,
"humidity": 94,
"wind_mph": 16.6,
"wind_dir_deg": 147,
"gust_mph": 20.6,
"rain_max_mm_hr": 0,
"press_max_mb": 1010.1,
"press_min_mb": 1005.9,
"temp_max_C": 11,
"temp_min_C": 10.6,
"humid_max": 95,
"humid_min": 94,
"dewpoint_C": 9.7,
"wind_ave_mph": 11.6,
"wind_max_mph": 23.3,
"gust_max_mph": 34.4,
"wind_dir_ave_deg": 139,
"wind_run_miles": 58.2,
"light_w_sqm": 0,
"light_max_w_sqm": 0,
"UV_index": 0,
"UV_index_max": 0,
"sunrise": "07:35",
"sunset": "19:25",
"daylight_hours": 11.83
}
**SEE ALSO**
WX(1) -- Display Weather Information.
WXFILE(7) -- Weather Import File.
WX(9) -- Weather Information System.
WX-SVC(9) -- NetRomX Weather Service
----
==== RIP ====
RIP(9) XROUTER REFERENCE MANUAL 18/10/2023
**NAME**
RIP -- Routing Information Protocol.
**DESCRIPTION**
Routing Information Protocol (RIP) allows IP routers to learn
about each other's routing, similar to the way that NetRom
exchanges nodes broadcasts.
There are various versions of RIP, and XRouter currently
implements RIP2 and RIP98. RIP2 is used for the IPEncap-based
"44-net" network, and RIP98 was developed by G8BPQ specically
for radio-based routers. If there is a need for other
flavours of RIP, they may be included in a later version.
RIP98 works by sending its routing table to nominated peers
at regular intervals, and accepting routing information from
peers. The routes learned by this means are added as
temporary entries to the IP routing table. These entries
have a finite lifetime, and if not updated regularly they
drop out of the routing table.
Configuring XRouter to use RIP98
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following configuration commands are available:
RIP ACCEPT Remove a peer from the refuse list.
RIP ADD Add a peer to the broadcast list. (*)
RIP DROP Remove a peer from the broadcast list.
RIP LEARN Allow / disallow route learning. (*)
RIP REFUSE Ignore broadcasts from a peer. (*)
RIP STATUS Show status of RIP.
RIP TIMEOUT Specify lifetime of learned routes. (*)
Commands marked (*) may be used in BOOTCMDS.SYS or
IPROUTE.SYS to configure the system automatically.
By default, RIP98 route learning is OFF, so you need to
include at least a "RIP LEARN ON" command, to enable your
system to learn routes from others. Your neighbours also
need to add your IP address to their RIP broadcast lists.
If you wish to inform your neighbours of your existence and
your routing capabilities, you need some RIP ADD commands,
one for each neighbour to whom you wish to send RIP updates.
If you have LEARN enabled, and there is a neighbour who is
sending unwanted RIP updates to you, you may ignore them
using RIP REFUSE.
The RIP commands are explained in more detail in section 1 of
this manual.
**SEE ALSO**
RIP(1) -- Routing Interface Protocol Commands.
----
==== RLOGIN ====
RLOGIN(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
RLOGIN -- Remote Login.
**DESCRIPTION**
RLOGIN is a "remote login" facility for sysops only.
The secure password challenge/response mechanism, using
the "@" command, is inconvenient for frequent use, and
unnecessary in cases where the remote sysop can access
the router via a "secure" link such as a wire link between
two systems. RLOGIN provides a connection with a plain
text password system for these situations.
RLOGIN uses a Telnet connection to TCP port 513. This
port may be moved or disabled using the RLOGINPORT
directive in XROUTER.CFG if required.
Upon connection, the sysop is prompted to enter his
callsign, and is then asked for his password. If the
two match with an entry in PASSWORD.SYS, the sysop is
granted access with full sysop status.
**FILES**
The following files affect the operation of RLOGIN. They
must be located in the same directory as the XRouter program:
PASSWORD.SYS is where the sysops' passwords are stored.
XROUTER.CFG is where RLOGINPORT is specified.
**CAVEATS**
Needless to say, this facility should *NEVER* be used
over a radio link, otherwise someone will see the
password.
Connections to the RLOGIN service are not considered secure
if they are via 44-net, because the packets may have
travelled across RF, or via another Amateur's system. In
that case, certain functions, such as the NFTP client are
not allowed.
**SEE ALSO**
PASSWORD.SYS(8) -- Sysop Password File.
RLOGINPORT(7) -- TCP Port for RLOGIN.
XROUTER.CFG(8) -- Main Configuration File.
----
==== SCRIPT ====
SCRIPT(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
SCRIPT -- Dialer Scripts
**DESCRIPTION**
Assuming you have a port configured for modem use, DUN
requires at least one dialler script, to control the dial and
login sequence.
Dialler scripts are ordinary text files containing script
commands as detailed below, one per line. Lines must not
exceed 256 characters in length. The script file can be named
as you wish, for example you might like to name your AOL dial
script "AOL.SCR". You will need to use this name later to
identify the script, so it makes sense to call it something
meaningful, rather than "SCRIPT1.TXT". Script files must
reside in the same directory as the XRouter executable.
DUN Script Commands Overview
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CONTROL Raise / lower RS232 DTR signal.
MODE Protocol to use upon successful login.
PPP PPP configuration commands.
SEND Send text.
SLEEP Temporary pause.
WAIT Wait for text in received data.
DUN Script Commands In Detail
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CONTROL - Raise / Lower RS232 DTR signal.
Syntax: C[ontrol]
The CONTROL command is used to raise or lower the
RS232 DTR (Data Terminal Ready) line. Most modems
require the DTR signal to be "up", and will disconnect
or reset when it goes down. Those modems which do not
do this by default can usually be configured to do so
by including "&D2" in the initialisation string.
MODE - Set protocol to use upon successful login.
Syntax: M[ode]
Example: MODE PPP
MODE specifies the protocol to use after your system
has logged into the remote host, i.e. when the script
ends without error. It must precede the dialling and
login sequence, and any protocol dependent commands,
such as the PPP commands.
PPP - PPP configuration commands.
Syntax: P[pp] [arg]
Example: PPP IDLE 300
PPP commands are used to configure the PPP subsystem
for the connection being established. Note that
within DUN scripts the argument is omitted
because XRouter knows which port the script is using.
SEND - Send a line of text.
Syntax: S[end]
Example: SEND ATDT01674302153
The SEND command sends one line of text to the modem
or the remote host, for example modem initialisation
and dial commands, or login commands. The
argument may contain spaces, and the system will
append a carriage return/line feed.
SLEEP - Temporary pause.
Syntax: SL[eep]
Example: SLEEP 5000
The SLEEP command causes the script to pause for the
specified interval. For example, you would need a
short delay after issuing a modem reset command
before any more commands would be accepted by the
modem. When the pause is complete, script execution
continues on the next line.
WAIT - Wait for received text.
Syntax: W[ait] [exiterr]
Example: WAIT 5000 Password: exiterr
WAIT causes XRouter to wait for specific responses
from the modem or remote host. specifies
the maximum wait interval. specifies the
string of characters (20 chars max, no spaces) to wait
for.
When the string is seen in the received data stream,
the next script command is executed.
If "exiterr" is present, the script will abort if the
string is not seen before the interval expires. If
not present, the next script command will be executed
upon timeout.
Dial up networking may be administered "on the fly" using the
DUN command , which is detailed in the sysop command reference
section. The DUN ADD and DUN LOG commands may also be used in
IPROUTE.SYS and / or BOOTCMDS.SYS to configure the system at
boot time.
Example DUN script
~~~~~~~~~~~~~~~~~~
; Xrouter DUN script for establishing PPP connection with ISP
;
; Upon connection, the ISP sends some greetings text, then
; "Login:", and waits for login name.
;
; Upon receiving the login name it sends "Password:" and
; waits for the caller to send the password.
;
; Upon receiving the password, the ISP sends
; "Entering PPP mode".
;
;
; Drop DTR to reset any modem error condition
control down
;
; Wait for 1 sec
sleep 1000
;
; Raise DTR to allow normal operation
control up
;
; Specify the mode to use after link is established
mode ppp
;
; ISP requires PAP authentication: username=gb7pzt,
; password=bsfjflavs
ppp pap user gb7pzt bsfjflavs
;
; Get the modem's attention
send AT
;
; Wait for up to 5 secs for an "OK" response. Abort if none
wait 5000 OK exiterr
;
; Modem is awake. Dial the ISP
send ATDT01905643000
;
; Wait for up to 1 minute for the "user:" login prompt
wait 60000 user exiterr
;
; Prompt obtained. Send username
send gb7pzt
;
; Don't bother waiting for "password:" prompt, just send
; it after 1 sec.
sleep 1000
send bsfjflavs
;
; Wait for confirmation of entry to PPP mode
wait 30000 PPP exiterr
;
; ISP is now in PPP mode. XRouter will enter PPP mode when
; script ends
;
**SEE ALSO**
DIAL(1) -- Dialer
DUN(1) -- Dial Up Networking commands
DUN(9) -- Dial Up Networking
----
==== SERVERS ====
SERVERS(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
SERVERS -- Servers Available in XRouter.
**DESCRIPTION**
In the XRouter context, servers are processes which accept
connections or data from users (i.e. clients) and provide
specific services (e.g. file transfer) to those clients.
They are often associated with a specific TCP or UDP "service
port" number, for example TCP port 21 for file transfer, UDP
port 53 for DNS server and so on.
XRouter contains a number of servers and makes them available
by default, although they may be disabled by the sysop if
desired.
The policy of making services available by default is an
attempt to provide useful services to the Amateur Radio
Packet Network (amprnet) with minimal effort on the part of
the sysop. If services were disabled by default, most sysops
wouldn't enable them, either because they didn't understand
them, or because they couldn't be bothered.
Access to the benign servers is unrestricted, but most are
protected by password and IP access control lists.
The following servers are available in XRouter
Name Port Proto Function
---------------------------------------------------
ECHO 7 TCP Echoes data back
DISCARD 9 TCP Discards data
FTP 21 TCP File Transfer
TELNET 23 TCP User session
DNS 53 UDP Domain Name System
FINGER 79 TCP User information
HTTP 80 TCP Web server
TTYLINK 87 TCP Keyboard to Keyboard chat
RLOGIN 513 TCP Remote Login (sysop)
SOCKS 1080 TCP SOCKS Proxy
APRS 1448 TCP Serves APRS data
MQTT 1883 TCP Message Queue Telemetry Transport
TELPROXY 2323 TCP Raw TCP to AX25 bridge
CHAT 3600 TCP Conferencing
AGWHOST 8000 TCP AGW Packet Engine emulator
RHP 9000 TCP Remote application support
HAMLIB - TCP HamLib Emulator
RIGSRV - TCP Radio control server
PMS - - Personal Mail Server
For details of how to move the above ports or disable the
servers, please see the TCP-PORTS page.
Brief Overview Of XRouter Servers
=================================
ECHO
~~~~
Anything the user sends is echoed back to him. This is a
useful tool for test purposes. This server is also available
from the command prompt, and as NetRomX service 7.
DISCARD
~~~~~~~
This simply dumps anything sent to it. It is another useful
tool for test purposes. This server is also available from the
command prompt, and as NetRomX service 9.
FTP
~~~
Allows sysops to upload, download, move and rename files,
create and remove directories etc. Not available to users.
TELNET
~~~~~~
Provides regular user access to the XRouter command prompt.
Also available as NetRomX service 23.
DNS
~~~
Answers Domain Name System (DNS) queries, to provide a
hostname to IP-address translation service.
FINGER
~~~~~~
Allows users to retrieve information about other users or any
other topics provided by the sysop. This server is also
available from the command prompt, and as NetRomX service 79.
HTTP
~~~~
Serves HTML (web) pages, and provides a browser interface to
XRouter. Can be made available on both XRouter and host
system TCP stacks, plus NetRomX service 80.
TTYLINK
~~~~~~~
For direct keyboard to keyboard chat. Als avaiable on NetRomX
service 79.
RLOGIN
~~~~~~
Secure remote login for sysops only, providing full syop-mode
access.
SOCKS Proxy
~~~~~~~~~~~
Circuit level proxy allowing applications to access external
services through a firewall as an alternative to NAT.
APRS
~~~~
Shares APRS data between clients such as UI-View, RF ports
and the Internet APRS-IS systems. Can be made avaiable on
both XRouter and host TCP stack, plus NetRomX service 14.
MQTT
~~~~
Machine to machine information broker using a publish /
subscribe paradigm. Allows sending and receiving of raw KISS,
AX25, NetRom, XRChat etc, plus status / event information.
Can be used to develop modern user interfaces. Available on
Linux TCP stack only. Also available, with restrictions, via
NetRomx service 1883.
TELPROXY
~~~~~~~~
The Telnet Proxy server allows TCP/IP applications to make
fully transparent raw binary connections (i.e. ones capable of
handling compressed forwarding) to AX25 or NetRom
destinations.
CHAT
~~~~
Allows groups of users to hold conferences, either locally or
globally via a network of interconnected servers. Also on
NetRomX service 8.
AGWHOST
~~~~~~~
Emulates the AGW TCP host interface, enabling XRouter to
support applications (e.g. UI-View) that were designed for
use with the AGW Packet Engine.
RHP
~~~
Allows XRouter to support a wide range of applications which
may be located on the same PC or remotely, using a
socket-like paradigm.
PMS
~~~
A no-frills mailbox which can handle both private mail and
bulletins. It is available from AX25 and the XRouter command
prompt, but currently has no TCP port of its own. Available
as NetRomX service 2.
HAMLIB
~~~~~~
Emulates the HamLib rig control interface, for use with
applications that are designed to use Hamlib. Available
only on Linux TCP/IP stack. Useful only when XRouter is
controlling rigs.
RIGSRV
~~~~~~
Another radio control interface (private project).
Available only on Linux TCP/IP stack. Useful only when
XRouter is controlling rigs.
**SEE ALSO**
CHAT-SRV(9) -- Chat Server
DISCARD(1) -- Start a Sink Session
ECHO(1) -- Start an Echo Session
FINGER(1) -- Display User Information
TCP-PORTS(6) -- TCP Server Ports
----
==== SERVICES ====
SERVICES(9) XROUTER REFERENCE MANUAL 22/10/2023
**NAME**
SERVICES -- NetRomX Standard Services.
**DESCRIPTION**
G8PZT extended NetRom at the turn of the century to create
"NetRomX". This uses an alternative L4 connect request, with
opcode 8, and the mnemonic "CREQX". This type of request
includes a 16-bit "service number", and can therefore request
connection to any of 65536 separate types of process on the
target system.
This is a major improvement over "standard" NetRom, which only
allowed a node to host a maximum of 16 L4 services, one per
SSID. This was not just a barrier to the development of novel
services... In order to be connectable via L4, every such SSID
had to be in everyone's nodes tables. And there was no
agreement on which SSID should represent which service.
With NetRomX there is no need to clutter the nodes tables with
SSID's, because every service has a STANDARD number, as shown
in the table below:
No. Service Description
------------------------------------------------------------
0 CMD Normal connection to Node's command line
1 INFO Standard Information server
2 PMS Personal Message System
3 BBS (reserved for Bulletin Board System)
4 DX (reserved for DX cluster/dx-spot feed)
5 TPP (reserved for "Tampa Ping-Pong" chat)
7 ECHO Echoes data back to sender
8 CHAT XRChat server
9 DISCARD Data sink
10 RMS (reserved for winlink RMS}
11 BPQCHAT (reserved for BPQ chat server)
13 DAYTIME Local date/time (similar to RFC867)
14 APRS APRS Server
15 CUSTINF (reserved for custom information file server)
16 WX Local weather information
17 TELEM (reserved for Telemetry server)
18 SMS Short Message System server
19 CHARGEN Generates a test pattern
20 NDATA (reserved for NFTP extension)
21 NFTP Netrom File Transfer Protocol
22 NSSH (reserved for secure login - if legal?)
23 TELNET Normal L4 login (same as 0)
25 SMTP (reserved for Simple Mail Transfer Protocol)
26 MHEARD MHEARD server (shows MH lists)
27 DXLIST DX List server (shjows DX lists)
79 FINGER Finger server
80 HTTP NetromWeb (HTTP over Netrom) server
87 NTTY Netrom TTY - Keyboard to keyboard chat
1883 MQTT MQTT server
If you know that the target system is XRouter (usually they
have "XR" in the alias), you can be sure that if their PMS is
enabled, it will be on service 2.
Standard services facilitate simple commands such as
"TIME ", to discover the local time, time zone and
daylight saving status at a distant node. Or "PMS "
to connect directly to someone's PMS.
It is envisaged that some of the services may be used by
network crawlers (human and machine) to harvest data without
needing to know the exact format of the commands on all the
different types of software.
**SEE ALSO**
APRS-SVC(9) -- APRS Service.
CHARGEN(9) -- Character Generator Service.
CHAT-SVC(9) -- Chat Service.
DAYT-SVC(9) -- DAYTIME Service.
DX-SVC(9) -- DX Service
DISC-SVC(9) -- Discard Service
ECHO-SVC(9) -- Echo Service.
HTTP-SVC(9) -- HTTP Service.
INFO-SVC(9) -- Information Service.
MH-SVC(9) -- MHeard Service
MQTT-SVC(9) -- MQTT Service
NFTP-SVC(9) -- Netrom File Transfer Service.
NTTY-SVC(9) -- NetromTTY Service.
PMS-SVC(9) -- Personal Message Service.
SMS-SVC(9) -- Short Message Service
TCP-PORTS(6) -- TCP Server Ports
WX-SVC(9) -- Weather Service.
----
==== SLIP ====
SLIP(9) XROUTER REFERENCE MANUAL 19/10/2023
**NAME**
SLIP -- Serial Line IP.
**DESCRIPTION**
SLIP is a very simple protocol which encapsulates Internet
Protocol (IP) datagrams for transmission over serial (e.g.
RS232) lines. It is defined in RFC 1055.
The SLIP protocol specifies the following special characters:
Name Hex Dec Purpose
---------------------------
FEND 0xC0 192 Frame End
FESC 0xDB 219 Frame Escape
The FEND characters mark the start and end of the frame
containing the encapsulated datagram as follows:
.------.-------------.------.
| FEND | IP Datagram | FEND |
'------'-------------'------'
In order to ensure that the FEND character only occurs at the
start and end of the frame, FENDs which occur within the
unencapsulated datagram are "escaped" to the two byte sequence
FESC 220. Likewise FESC is escaped to the sequence FESC 221.
It is permissible for two datagrams to share a FEND:
.------.-------------.------.-------------.------.
| FEND | IP Datagram | FEND | IP Datagram | FEND |
'------'-------------'------'-------------'------'
Serial Line Parameters
~~~~~~~~~~~~~~~~~~~~~~
Serial lines used for SLIP must run at 8 data bits. Flow
control must be hardware or none, as XON/XOFF flow control
would interfere with the protocol.
If flow control is used, the cable must contain at least 5
cores, namely TXD, RXD, RTS, CTS and GND. If flow control is
not used, only TXD, RXD and GND are required.
In all cases, a NULL MODEM is required. In the case of "real"
RS232 this could be an actual null modem device, or a cable
that is wired such that the TXDs at each end go to the RXDs
at the other end, and the RTSs at each end go to the CTSs at
the other. "Virtual" COM port pairs such as Com0Com
(Windows) or tty/pty pairs (Linux) include this functionality
as standard.
Configuring a SLIP Link
~~~~~~~~~~~~~~~~~~~~~~~
SLIP can be used to link XRouter with other IP systems (e.g.
NOS) via real or virtual COM ports. A typical configuration
in XROUTER.CFG would be as follows:
INTERFACE=13
TYPE=ASYNC <-- Serial RS232
COM=13 <-- COM number / device
PROTOCOL=SLIP <-- Use SLIP
SPEED=38400 <-- Baud rate
FLOW=0 <-- No flow control
MTU=1500 <-- Allows largest IP
ENDINTERFACE
PORT=3
ID=SLIP Link to BBS
INTERFACENUM=13
ENDPORT
Unless overridden with a port IPADDRESS statement, the SLIP
link will use XRouter's "core" IP address, i.e. the one
specified by the global IPADDRESS. This is usually a 44-net
address.
Remember to set up an IP ROUTE entry for the neighbour system
via this PORT number, e.g. if the neighbour's IP address is
44.131.91.2, the following entry routes traffic to it via
port 3 using datagram mode:
IP ROUTE ADD 44.131.91.2 * 3 d
Note that "virtual circuit" (v) and "netrom" (n) routing
modes can not be used here.
A SLIP link thus created does not involve the Windows or
Linux IP stack in any way, therefore there is no restriction
on the protocols that can be carried within the IP datagrams.
For example you may create an AX25 link using AXIP, or tunnel
traffic over the link using IPEncap.
SLIP was largely replaced by PPP long ago, but the beauty of
it is its simplicity. It is so easy to configure, and only
requires a pair of COM ports and a 3 core cable.
Temporary SLIP
~~~~~~~~~~~~~~
A dial-in MODEM connection may be switched into SLIP mode for
the remainder of the call using the "XLINK SLIP" command,
thus emulating an old-fashioned dial-up ISP.
This may possibly be of use for controlling remote sites that
have telephone lines but no Internet connection. Or even as
a backup in case an Internet connection breaks down (cheap
routers and switches fail!). See the manual entry for PSTN
for more details.
**SEE ALSO**
IP(1) -- IP Routing / Configuration Commands.
IPROUTE.SYS(8) -- IP Configuration File.
KISS(9) -- KISS Protocol.
XLINK(1) -- Establish a Temporary SLIP / PPP Interlink
XROUTER.CFG(8) -- Main Configuration File.
----
==== SMS-SVC ====
SMS-SVC(9) XROUTER REFERENCE MANUAL 7/9/2023
**NAME**
SMS-SVC -- Short Messaging Service
**DESCRIPTION**
This short messaging service is for XRouter sysops, and has
nothing to do with telephone SMS. It uses NetRomX service
number 18.
The purpose of this service is to receive short, single-line
messages (up to 160 characters), and to deliver them to the
sysop.
Although the protocol is plain text, it is intended for use
by automatons, not humans.
It is a one-way protocol. Nodes "push" messages to each
other, by connecting to each other's SMS service. They
cannot poll for mail.
The protocol is not yet finalised. It works, but may need to
be tweaked.
Line endings conform to the "packet radio" standard, i.e.
ASCII 13 (carriage return) only.
Upon connection to the server, the client receives a greeting
together with a "nonce" for authorisation purposes:
G8PZT-1 SMS ready [34564287]
The client must then respond with an authorisation string,
calculated from the nonce:
A 0xxxx
An invalid authorisation string, or any other response at
this point results in disconnection. 0 is the version.
Once authorised, there are only 3 possible commands, namely
S, R and Q.
The S command sends an SMS to the server:
S and are callsigns
is the msg timestamp in secs since 1/1/70
is up to 160 characters of plain text.
The R command sends a "read receipt" to the server,
indicating that the recipient has read the message:
R and are callsigns
is the msg timestamp in secs since 1/1/70
is the timestamp of when the message was read
The client may send multiple S and R messages in one session.
When the client is done, it sends Q (quit), and the server
closes the connection.
The sysop is alerted to the presence of an unread mesage by
a flashing "S" on the top status bar. He can then type "SMS"
to view the messages.
**SEE ALSO**
SMS(1) -- Short Messaging System for Sysops.
SERVICES(9) -- NetRomX Standard Services.
----
==== SOCKS ====
SOCKS(9) XROUTER REFERENCE MANUAL 27/9/2023
**NAME**
SOCKS -- SOCKS Proxy Server.
**DESCRIPTION**
The purpose of the SOCKS proxy server in XRouter is long
forgotten.
It was included in XRouter either to allow users on amprnet
to view Internet web pages, or to allow a LAN browser to
gain a 44.x.x.x source address, to view amprnet web sites.
What is SOCKS?
~~~~~~~~~~~~~~
SOCKet Secure (SOCKS) V4 is a protocol that acts as a circuit
level proxy for applications, routing traffic between a client
and server through a proxy server. It was intended for
accessing external services through a firewall, as an
alternative to using NAT (Network Address Translaton).
SOCKS5 is defined in RFC 1928, and is an extension of the
SOCKS4 protocol. It offers more choices of authentication,
adds support for IPv6 and UDP that can be used for DNS
lookups.
XRouter implements both SOCKS V4 and V5. The implementation is
functional but incomplete.
How it Works
~~~~~~~~~~~~
A SOCKS proxy acts as both client and server simultaneously.
A user client makes a TCP connection to the the socks server,
and communicates with it using the SOCKS protocol. The user
instructs the SOCKS proxy to connect to the target server,
from which point onwards the proxy becomes the client of the
target server.
.---------.
.--------. 62.31.1.3 | XRPi | 44.131.91.1 .--------.
| server |-----<------| SOCKS |-------<-----| client |
'--------' | proxy | '--------'
83.1.24.5 '---------' 44.131.91.2
The above diagram depicts an amprnet client (44.131.91.2)
connected to an Internet server (83.1.24.5) via a SOCKS proxy.
On the amprnet side XRouter is using the amprnet address
44.131.91.1, and on the Internet side it is using the Internet
address 62.31.1.3.
As far as the target server is concerned, it is talking with
62.31.1.3, whilst the user client is connected to 44.131.91.1.
Anything sent by the client is relayed to the server by the
proxy and vice versa.
Client Requirements
~~~~~~~~~~~~~~~~~~~
Client programs for use with this proxy must have SOCKS client
capability. Programs such as Internet Explorer, Firefox, and
many other have this capability.
Access Control
~~~~~~~~~~~~~~
The "rules" to control which destinations are allowed to be
accessed via the SOCKS proxy are contained in the SOCKS.ACL
file.
The rules allow you to specify which destination IP
addresses and TCP ports may be accessed by specified
source IP ranges.
If the file is not present, or contains no valid rules, all
destinations are blocked. Attempting to access a blocked
destination causes the proxy to return an "access denied"
code.
Configuration
~~~~~~~~~~~~~
The server is available by default, and requires no setting
up, other than the IP routing and egress control.
The server's TCP port may be changed, or the server disabled,
by using the SOCKSPORT=n directive in XROUTER.CFG. Setting
the port to zero disables the server.
**FILES**
SOCKS.ACL, XROUTER.CFG
**SEE ALSO**
ACCESS.SYS(8) -- TCP/IP Access Control List.
NAT(9) -- Network Address Translation.
SOCKS.ACL(8) -- SOCKS Egress Control List
SOCKSPORT(7) -- TCP Port for SOCKS Proxy.
XROUTER.CFG(8) -- Main Configuration File
----
==== STATS ====
STATS(9) XROUTER REFERENCE MANUAL 3/1/2024
**NAME**
STATS -- Explanation of Output of STATS Command.
**SYNOPSIS**
This document attempts to explain some of the responses
produced by the "stats" command.
**SUMMARY PAGE**
Entering S[tats] without arguments produces a single page
containing the following fields (values removed to make the
display fit the page):
Time active (mins):
Overruns:
Memory blocks: Min/Cur/Max
Nodes: Cur/Max/free/poss
Total bytes sent/rcvd:
Ccts/MaxCcts L2/L3/L4/TCP:
HTTP Rqst/Srvd/Bytes/Prxyd
IP Heard/Reasm/Rcvd/Routed:
IP Bad Hdr/Chksum/Version:
IP Sent/Frag/Unsent/Total:
L4 Connects Tried/Made/Rcvd:
L4 total frames Sent/Rcvd:
L4 Info Snt/Rcvd/Resent/Reseq:
L4 Choke Snt/Rxd RSET Snt/Rxd:
L4 Timeouts/Failures:
L3 Frames Hrd/Rcvd/Sent/Rlyd:
"Time active" is the elapsed time in minutes since XRouter
was last restarted. Also shown are day, hours,
minutes and seconds.
"Overruns" is nothing to worry about. It is a measure of how
fast the main code is being executed. Expect low
overruns on a fast machine and higher overruns when
there is a lot of console scrolling.
"Memory blocks" shows the minimum, maximum and current number
of allocated memory blocks.
"Known nodes" is the number of nodes in the table. "Cur" is
the current figure, "Max" is the maximum, "Free" is
the number of free table slots currently available,
and "Poss" is the number of nodes the table might
contain if it was not limited in size. If this last
figure is higher than "max", it indicates that the
table is not big enough, which may cause loss of low
quality and "stale" entries in favour of better ones.
"Total bytes sent/rcvd" are the total bytes sent and received
by all the ports. They include all ax25 overhead.
"Ccts/MaxCcts" shows the current and highest number of
simultaneous circuits that have been active at any
time. Separate figures are shown for Ax25 levels 2,
3 and 4, and TCP/IP.
"HTTP Rqst/Srvd/Bytes/Prxyd" shows the total number of HTTP
requests received and served, the number of bytes
served, and the number of requests that were proxied,
i.e. handled on behalf of another system.
"IP Heard/Reasm/Rcvd/Routed" shows the total number of IP
frames heard (i.e. addressed to us and to others),
reassembled from fragments, received (i.e. addressed
to us), and routed to others.
"IP Bad Hdr/Chksum/Version" shows the number of IP frames
ignored due to corrupt IP headers (e.g. too short to
be a legal IP frame), checksum mismatch, and
incompatible IP version.
"IP Sent" is the no. of IP datagrams originated by XRouter,
i.e. not routed from somewhere else. "Frag" is the
number of datagrams which had to be fragmented to fit
a link. "Unsent" is the number of datagrams which
couldn't be sent due to low memory or no route, and
"Total" is the total number of datagrams or fragments
thereof which were transmitted.
"L4 Connects Tried/Made/Rcvd" shows the total number of
outgoing and incoming AX25 level 4 connections.
"Tried" is the number of requests initiated, "Made"
is the number which were successful, and "Rcvd" is
the number of incoming connects.
"L4 total frames Sent/Rcvd" shows the total number of NetRom
level 4 frames of all types sent and received by
XRouter.
"L4 Info Snt/Rcvd/Resent/Reseq:" shows the totals for NetRom
level 4 information-bearing frames. "Snt" is the
number of frames originated by us. "Rcvd" is the
number of frames addressed to us. "Resent" shows how
many were re-transmitted because no ack was received.
"Reseq" is the number of frames that re-sequenced,
i.e. were received out of sequence but subsequently
used when the missing frames arrived.
"L4 Choke Snt/Rxd RSET Snt/Rxd:" counts the number of NetRom
level 4 choke and RESET frames sent and received by
XRouter. A sent choke indicates that we are
receiving L4 data faster than we can process it, and
instructs the other end to back off for a while. A
received choke indicates that we are sending data too
fast for the other end of the link to handle. Note
that these figures do not necessarily indicate that
there is something wrong with XRouter's links, as
they apply to the "virtual circuit" from one process
to another, which may span many intervening nodes.
L4 resets are sent when frames are received for
non-existent circuits.
"L4 Timeouts/Failures" shows the number of times the NetRom
level 4 T1 timer timed out while waiting for an ack,
causing re-transmission of a frame. "Failures" shows
the number of level 4 circuits which were aborted due
to excessive retries.
------------------------------
Entering "S[tats] *" produces the above followed a set of
PORT stats, then a set of INTERFACE stats.
------------------------------
Note that the L4, TCP and IP stats may be displayed in
isolation using "S L4", "S TCP", and "S IP".
**IP-ERRORS**
In addition to the normal IP stats shown above, "S[tats] IP"
shows a set of IP error counters as follows:
IP NoRoute NoGatewy RouteLoop:
IP Ignored Rejected Discarded:
IP Denied TTLExpired NoSocket:
IP TooBig HostEncap XrEncap:
IP HdrParam Recursion:
"NoRoute" means that a datagram was dropped because there was
no suitable route in the IP routing table, or the
route pointed to a non-existent PORT.
"NoGatewy" means that there is no suitable gateway for an
encapsulated datagram.
"RouteLoop" means that the route for an encapsulated datagram
is back to the gateway it came from.
"Ignored" means received datagrams ignored because they were
on the same subnet as XRouter, but not addressed to
it. Not an error, just info.
"Rejected" means frames rejected because they matched an IP
route entry of type "r" (reject). Unless IP QUIET is
set, these elicit an ICMP resonse of HOST UNREACHABLE.
"Discarded" means datagrams dropped because they matched an
IP route entry of type "s" (silent discard). No ICMP
response is sent.
"Denied" means datagrams carrying TCP that were droppped
because they failed XRouter's access control rules.
"TTLExpired" means datagrams that couldn't be routed because
their Time To Live counter had expired.
"NoSocket" counts datagrams dropped because they were the
wrong protocol for a route mode of "k" (kernel).
"TooBig" means datagrams rejected because they were too large
for the outgoing MTU and had the DF (don't fragment)
option set. Unless IP QUIET is set, these elicit an
ICMP response of "fragmentation needed".
"HostEncap" counts encapsulated datagrams (IPIP, IPENCAP,
IPUDP) that were suupposed to be routed via the
operating system's IP stack, but failed to do so.
"XrEncap" counts encapsulated datagrams (IPIP, IPENCAP,
IPUDP) that were suupposed to be routed via XRouter's
own IP stack, but failed to do so.
"HdrParam" means datagrams dropped due to a problem in their
IP header parameter lists.
"Recursion" counts datagrams that were dropped because they
traversed the IP stack too many times.
**AXIP STATS**
These are displayed using "S[tats] AXIP".
total frames heard
frames ignored (too short)
frames ignored (bad CRC)
frames ignored (unsolicited)
valid frames received
frames sent
frames unsent (resolution failure)
frames unsent (no route)
frames unsent (routing loop)
frames unsent (miscellaneous reasons)
"Total frames heard" includes valid AXIP plus all other frames
heard on the interface.
"Too short" are received frames too short to be legal AXIP.
"Bad CRC" are received frames long enough to be legitimate
AXIP, but failed the CRC test.
"Unsolicited" are valid AXIP from unrecognised senders.
"Valid frames received" are the ones accepted into AX25.
"Resolution Failure" occurs when IPLINK has been specified as
a hostname, but that hostname can't be resolved to an
IP address.
"No Route" occurs when there is no IP route which can handle
the encapsulated packet.
"Routing loop" occurs when the IP routing is set up
incorrectly, causing the encapsulated packet to be
encapsulated again ad infinitum.
"Miscellaneous Reasons" usually indicates a temporary IP
routing problem, such as a loose plug.
**AXUDP STATS**
These are displayed using "S[tats] AXUDP".
total frames heard
BPQ keepalives ignored
other non-AXUDP ignored
unsolicited AXUDP ignored
valid AXUDP received
frames sent
frames unsent (resolution failure)
frames unsent (no route)
frames unsent (routing loop)
frames unsent (miscellaneous reasons)
"Total frames heard" includes valid AXUDP plus all other
frames heard on the interface.
"BPQ keepalives" are packets from BPQ systems that are
intended to keep the AXUDP connection alive.
"Other non-AXUDP" is anything else (other than BPQ
keepalives, which is not valid AXUDP, e.g. port
scans, malicious activity etc.
"Unsolicited AXUDP" is valid AXUDP from sources with whom we
don't have a formal arrangement.
"Valid AXUDP received" are the ones accepted into AX25.
"Resolution Failure" occurs when IPLINK has been specified as
a hostname, but that hostname can't be resolved to an
IP address.
"No Route" occurs when there is no IP route which can handle
the encapsulated packet.
"Routing loop" occurs when the IP routing is set up
incorrectly, causing the encapsulated packet to be
encapsulated again ad infinitum.
"Miscellaneous Reasons" usually indicates a temporary IP
routing problem, such as a loose plug.
**AXTCP STATS**
These are displayed using "S[tats] AXTCP".
total frames heard
frames ignored (too short)
frames ignored (bad header)
frames ignored (bad CRC)
frames received OK
frames sent
frames unsent (not connected)
frames unsent (miscellaneous reasons)
failed / blocked logins
"Total frames heard" includes valid AXTCP plus all other
frames heard on the interface.
"Too short" are received frames too short to be legal AX25.
"Bad header" counts frames where the length specified by the
header didn't match the actual frame length. These
could be malicious, so the connection is dropped for
safety.
"Bad CRC" are received frames long enough to be legitimate
AXTCP, but failed the CRC test.
"Frames received OK" are the ones accepted into AX25.
"Frames sent" are the ones successfully sent.
"Not connected" indicate frames that couldn't be sent because
the TCP link was not connected.
"Miscellaneous reasons" indicates frames that couldn't be sent
due to a temproary problem such as insufficient memory
or a blocked TCP queue.
"Failed / blocked logins" are failed attempts to connect to
the AXTCP server. Usually this results from port
scanning or other malicious activity.
**PORT STATS**
Displayed by "S[tats] L2" "S[tats] L3" and "S[tats] *".
Note that on a system with more than 7 ports the display may
wrap. This is not ideal, and may be addressed in future
versions.
The PORT stats start with Layer 3 counters, which may also be
displayed in isolation using the "S[tats] L3" command:
Port: 2 4 6 8 9
L3 Frames Heard 0 309 0 0 7
L3 Frames Rcvd 0 137 0 0 7
L3 Frames Sent 0 59 0 0 0
L3 Frames Relayed 0 0 0 0 0
"L3 Frames Heard" is the total number of ax25 level 3 frames
heard, no matter who they are addressed to.
"L3 Frames Rcvd" is the number of ax25 level 3 frames which
were addressed to our XRouter.
"L3 Frames Sent" is the number of ax25 level 3 frames which
originated at our XRouter.
"L3 Frames Relayed" is the number of ax25 level 3 frames
which were routed through our system from elsewhere.
After the level 3 stats come the ax25 level 2 counters, one
per port. These can also be displayed in isolation using the
"S[tats] L2" command:
Port: 2 4 6 8 9
L2 Frames heard 0 628 0 0 78
L2 Frames rcvd 0 520 0 0 74
L2 Resequenced 0 0 0 0 0
L2 Reassembled 0 0 0 0 0
L2 Info Received 0 0 0 0 0
L2 T1 Timeouts 0 239 0 0 0
L2 Digipeated 0 0 0 0 0
L2 Info Sent 0 208 0 0 3
L2 Info re-sent 0 0 0 0 0
L2 Fragmented 0 0 0 0 0
L2 Frames Sent 12 491 18 13 87
L2 REJ Received 0 0 0 0 0
L2 Rx out of seq 0 0 0 0 0
L2 Frames Corrupt 0 1 0 0 0
L2 FRMRs Sent 0 0 0 0 0
L2 FRMRs Rcvd 0 0 0 0 0
Bytes Rcvd 37032 71809 0 0 1589
Bytes Sent 0 21607 869 1460 1597
Poll Timeouts 0 0 0 0 0
Tx/Rx Active% 0/0 0/0 0/0 1/0 0/0
Tx/Rx Peak% 0/0 0/0 0/0 1/0 0/0
Tx/Rx Mean% 0/0 0/0 0/0 0/0 0/0
.
"L2 Frames heard" is the total number of ax25 level 2 frames
heard, whether addressed to us or not.
"L2 Frames rcvd" is the number of ax25 level 2 frames
received which were addressed to XRouter.
"L2 Resequenced" is the number of ax25 level 2 frames
received out of sequence and subsequently used when
the missing frames arrived.
"L2 Reassembled" is the number of ax25 level 2 frames
successfully reassembled from fragments.
"L2 Info Received" is the number of ax25 level 2 information
bearing frames received, i.e. addressed to XRouter.
"L2 T1 Timeouts" counts the number of times that the ax25
level 2 T1 (frack) timer timed out, causing
transmission of a poll frame.
"L2 Digipeated" is the number of ax25 level 2 frames
digipeated by the port. Note that if digiport isn't
zero they may actually have been retransmitted by
another port, but are recorded on the "receiving"
port only.
"L2 Info Sent" is the total number of ax25 level 2
information frames sent by XRouter.
"L2 Info re-sent" records how many ax25 level 2 information
frames were re-sent due to frame loss. A high figure
here, in proportion to the "info sent" figure,
indicates a problem with the RF link, the L2
settings, or the other end's system (e.g. desense, or
running out of buffers).
"L2 Fragmented" is the number of ax25 level 2 information
frames fragmented to fit the outgoing link.
"L2 Frames Sent" is the total number of ax25 level 2 frames,
of any type, sent by XRouter, i.e. it includes all
info, supervisory, and digipeated frames.
"L2 REJ Received" is the number of ax25 level 2 "reject"
frames received, which indicate that the other end of
the link didn't receive some of our frames. There
are many possible reasons for this, some of which are
mentioned in the next paragraph.
"L2 Rx out of seq" shows how many ax25 level 2 frames were
received out of sequence, and indicates that some
incoming frames are getting lost or corupted. A few
of the possible causes might be: signal too weak,
fading, other signals on channel, natural or man made
interference, desense or key clicks from adjacent
transmitters, poor RX audio response, low received
audio, over-deviation, RF frequency mismatch, badly
aligned RX, TNC hardware problems, synthesised rig
taking too long to stabilise on RX after TX, other
end's synthesised rig taking too long to stabilise on
TX, hum, noise, distortion or disturbances on
modulated audio... the list is endless.
"L2 Frames Corrupt" is the number of frames which were dumped
because they were too short to be legal ax25 level 2
frames, or were in some way invalid. It is sometimes
possible for a KISS TNC, especially if running "open
squelch", to send garbage to the router, or the frame
may be trashed by bit errors on the serial link
between TNC and XRouter, and in either case these
frames are dumped if the error can be detected.
"L2 FRMRs Sent/rcvd" shows how many ax25 level 2 "Frame
Reject" frames were sent by the router, or received
by it, indicating serious protocol errors or
deliberate interference.
"Bytes Sent" and "Bytes Rcvd" simply provide a port by port
breakdown of the total bytes sent/rcvd figure.
"Poll Timeouts" counts the number of times a pollled KISS TNC
was polled with no response being received from it.
A large figure might indicate a crashed, disconnected
or unpowered TNC, or data loss on the serial link.
"Tx/Rx Active%" are running averages of the percentage of
time that the TX is tranmitting and RX is receiving.
High figures would indicate a saturated RF channel.
"Tx/Rx Peak%" are the peak values attained by the above.
"Tx/Rx Mean%" are the long term averages of the TX and RX
activity, i.e. since XRouter was booted.
**INTERFACE STATS**
Following the PORT stats are the INTERFACE stats, which can
also be displayed in isolation using S[tats] L1":
Interface: 2 4 9
RX Bytes: 2048K 71809 1589
RX Overruns: 0 0 0
RX CRC/Parity: 0 0 0
RX Framing err: 0 0 0
RX Break/Abort: 0 0 0
RX Overflow: 0 0 0
RX Misc. errors: 0 0 0
RX Read errors: 0 0 0
TX Bytes: 3463 0 2466
TX Overflows: 0 0 0
TX Underruns: 0 0 0
TX Write errors: 0 0 0
"RX Overruns" counts the number of times a byte was received
before the previous one was read by the CPU. A high
number indicates that the PC is too slow for the
serial port or HDLC card data rate. A 16550-based
serial card may help if the port doesn't already use
one. Failing that, you will have to reduce the baud
rate.
"TX Underruns" is used only by HDLC cards, and counts the
number of times the TX went empty while waiting for
another frame byte to be loaded. A significant
figure indicates the computer is too slow for the
baud rate. Each underrun causes an aborted frame.
"CRC/Framing Errors" counts either the number of bytes
received without proper stop bits (ASYNC interfaces),
or the number of received frames which are corrupt
(HDLC cards). For ASYNC interfaces, a significant
count here can indicate a hardware problem, such as a
faulty line driver, serious RS232 line noise or
distortion, or significant baud rate mismatch. For
HDLC cards it indicates a level 1 problem, such as
distortion in the TX/RX RF or audio paths, or simply
a lot of packet collisions.
"Break/Abort Errors" counts the number of times a line
"space" condition longer than 1 word interval was
received. For serial ports this can indicate a
faulty line driver, a faulty diode matrix on a
multi-drop kiss system, or even (as happened to me)
a malfunctioning TNC EPROM. On HDLC cards it can
result from insufficient audio drive from the RX, a
mismatched baud rate, squelch tails, or genuine ABORT
sequences transmitted by the other end of the link.
"CRC Errors" shows the number of frames abandoned due to CRC
(Cyclic Redundancy Check) or checksum error. For
KISS interfaces this is only maintained if the
CHECKSUM kissoption is enabled.
"Rx Overflow err" shows the number of times a frame was
abandoned because it was too large to fit into the
receive buffer.
"Tx Overflow err" counts the number of times that the TX
couldn't accept a character (serial devices) or a
frame (block devices) because the TX buffer was full.
If you persistently get a high value, it indicates
that the device is too slow for the data throughput.
"RX Misc. errors" counts all sorts of miscellaneous errors,
and the meaning is different for each type of
interface. For example, on KISS interfaces it counts
KISS framing errors.
**IDS STATS**
Finally "S[tats] IDS", which is sysop-only, elicits a summary
of XRouter's IDS (Intrusion Detection System) stats, which
may look something like this:
IDS Events: 25778 Cmd Overflow: 0
FTP DIR Hacks: 0 IP Addr Heard: 100
IP Addr Banned: 200 IP Banned Total: 183
IP Dgram Blocked: 2076 ICMP Frm Blocked: 32
Honeypot Hits: 0 UDP Segs Ignored: 3251968
UDP Segs Blocked: 22 TCP Segs Ignored: 9967
TCP Segs Blocked: 2022 TCP Conn Blocked: 763
Bogus SYNs: 15776 Smurf Attacks: 0
Fraggle Attacks: 0 IP Frag Attacks: 0
(Tiny=0 Huge=0 Overlapped=0)
TCP Scans: SYN=1 FIN=0 ACK=57 NUL=0 MAI=82 XMS=0 OTH=9600
Rejected Logins: 763 (Telnet=763, Rlogin=0, FTP=0,
TelProxy=0)
Malicious Logins: 182 (Telnet=182, Rlogin=0, FTP=0,
TelProxy=0)
HTTP No-Request: 0 HTTP Bad Request: 0
HTTP Blocked: 0
"IDS Events" is the total number of times the IDS has noticed
something suspicious.
"Cmd Overflow" is the number of times that someone has
attempted a buffer overflow attack.
"FTP DIR Hacks" is the number of attempts to escape from the
FTP root directory.
"IP Addr Heard" is the number of unique IP addresses heard.
"IP Addr Banned" is the number of IP addresses in the "banned
IP" table. As the table is saved across reboots, it
is normal for it to be full.
"IP Banned Total" is the number of new IP addresses banned
since bootup. This figure may exceed the table size
because new bans replace stale ones.
"IP Dgram Blocked" is the number of IP datagrams blocked
because the sender's IP address was in the banned IP
table.
"ICMP Frm Blocked" is the number of ICMP frames blocked
because the sender's IP address was in the banned IP
table.
"Honeypot Hits" is the number of times someone attempted to
access one of the "honeypot" ports. These are traps
which lure port scanners into an IP ban.
"UDP Segs Ignored" is the number of UDP segments ignored
because there was no matching socket to receive them.
"UDP Segs Blocked" is the number of UDP segments blocked
because the sender's IP address was on the banned IP
list.
"TCP Segs Ignored" is the number of TP segments ignored
because there was no matching listener socket.
"TCP Conn Blocked" is the number of TCP connection attempts
blocked because the sender was on the banned IP list.
"Bogus SYNs" is the number of TCP connection attempts blocked
because the SYN was malformed or maliciously crafted.
"Smurf Attacks" are distributed denial of service attacks
which use ICMP directed at broadcast addresses.
"Fraggle Attacks" are variations of Smurf attacks, where the
attacker sends lots of traffic to UDP ports 7 (Echo)
and 19 (CHARGEN)
"IP Frag Attacks" is the number of IP fragmentation attacks.
These attacks attempt to overwhelm or crash the IP
fragment reassembly mechanism.
Tiny - First fragment is too short to contain valid
TCP+IP headers, so it could bypass port-number
filtering.
Huge - Fragment exceeds maximum datagram size.
Overlapped - Fragments which overlap but don't align.
"TCP Scans" is the number of TCP port scans detected and
blocked. Totals for each scan type are shown
separately:
SYN - Scanner sends SYN but never completes the 3 way
TCP handshake.
FIN - TCP segments with only the FIN bit
ACK - Only the ACK flag is set
NUL - NULL scan (no flags are set)
MAI - Maimon scan (FIN and ACK flags set)
XMS - Xmas Tree scan (FIN, PSH and URG flags set)
OTH - Other types of scan
"Rejected Logins" are Telnet / FTP etc logins which were
rejected because the login credentials were incorect.
"Malicious Logins" are TCP logins attempted using suspicious
credentials.
"HTTP No-Request" is the number of connections to XRouter's
HTTP server which didn't contain an HTTP request.
These are usually the result of port scanning.
"HTTP Bad Request" is the number of malformed or maliciously
crafted HTTP requests. These are usually attempts to
exploit vulnerabilities in certain types of HTTP
server or operating system.
"HTTP Blocked" is the number of HTTP server connections
refused because the sender's IP was in the blocked
IP list.
**SEE ALSO**
STATS(1) -- Display XRouter Statistics.
----
==== STEALTH ====
STEALTH(9) XROUTER REFERENCE MANUAL 17/10/2023
**NAME**
STEALTH -- TCP/IP Stealth Mode
**DESCRIPTION**
The experimental command IP QUIET [n] controls whether or not
ICMP error messages are generated. The command may be used at
the command prompt, in BOOTCMDS.SYS, or (without the "IP") in
IROUTE.SYS.
Hackers use automated software to "probe" the network, looking
for unprotected TCP or UDP services and "back doors" such as
NetBios. When they find such a service, they will usually
exploit known bugs, such as buffer overflow problems, to crash
the machine or gain access to sensitive areas.
XRouter has only a handful of standard TCP / UDP services,
none of which pose much of a security risk if configured
correctly, so the probes are more of a bandwidth-wasting
nuisance than a real threat.
Issuing the command "IP QUIET n", where n is a number between
1 and 255 puts XRouter into "stealth mode", the level of which
depends on the number n, which is the sum of the following
values:
1 Suppress ICMP echo replies.
2 Suppress ICMP "Unknown Protocol" messages
4 Suppress TCP resets
8 Suppress all other ICMP error messages.
A value of 0 disables stealth mode and lets TCP/IP operate
normally.
Suppressing ICMP messages, may reduce the bandwidth wasted
and slow up the rate of probing. But it won't confer any
extra security, and will certainly have a detrimental effect
on normal TCP/IP operations.
ICMP error messages are an integral part of the TCP/IP
protocol, and are used to inform a sender of network problems
such as unroutable frames, unsupported protocols, processing
errors etc. They are also used for diagnostic purposes, by
applications such as "Ping" and "TraceRoute".
Using stealth mode therefore prevents the use of diagnostics
and the detection of network problems, and may under some
conditions make everything run more slowly, or fail completely.
If you suppress ICMP echo replies, your system will not
respond to "pings". This may be temporarily useful if you are
being attacked with echo requests, but you would also be
denying others the use of a valuable network diagnostic tool.
It is considered bad practice among the amateur community to
disable services. It will not *prevent* a pingstorm attack,
but it will halve the traffic by suppressing the replies.
If you suppress ICMP "unknown protocol" messages, it will
reduce the bandwidth wasted by protocol scans, i.e. those in
which the protocol number is incremented with each probe.
"Suppressing TCP resets" prevents the TCP layer from sending a
refusal for connect requests aimed at non-existent TCP
services. The request is simply ignored instead. This may be
useful in slowing up the action of so-called "port scanners".
The "Suppress all ICMP error messages" option is not
recommended. It is provided for experimentation only.
**SEE ALSO**
IP(1) -- IP configuration commands.
BOOTCMDS.SYS(8) -- Commands to Run at Bootup.
IPROUTE.SYS(8) -- IP Routing File.
----
==== SYNCACHE ====
SYNCACHE(9) XROUTER REFERENCE MANUAL 6/9/2023
**NAME**
SYNCACHE -- TCP SYN Cache.
**DESCRIPTION**
To combat the ever-growing problem of TCP port scanning,
which wastes TCP resources, XRouter includes a "SYN cache".
In "normal" RFC793 TCP, a received SYN elicits a SYN|ACK,
and the TCP state machine allocates resources then moves to
the SYN_RECEIVED state, awaiting an ACK from the caller.
The nastier port scans tend to send a SYN, wait for the ACK,
then move on without sending a reset. This leaves dozens of
half-open connections, which eventually prevent new
connections from being formed.
With a SYN cache, a received SYN elicits a SYN|ACK as before,
but no resources are allocated. The SYN is cached for a short
while. If an ACK is received for our reply, a normal
connection is created, otherwise the SYN is discarded. This
makes the TCP stack far more resistant to port scans.
The TCP CACHE command is used to display and adjust settings.
**SEE ALSO**
TCP(1) -- TCP Status / Configuration Commands
----
==== TDR ====
TDR(9) XROUTER REFERENCE MANUAL 21/10/2023
**NAME**
TDR -- Time Dependent Routing.
**DESCRIPTION**
Conventional NetRom makes routing decisions based on a fairly
arbitrary metric, i.e. the "route quality", which is assigned
by sysops, and disseminated in nodes broadcasts. There is no
standard for assigning quality, and not only will each sysop
have a different notion of the quality of his links relative
to others, but he will probably wrongly assign the qualities
of those links relative to each other. This leads to
inconsistency and distorted routing.
XRouter includes two systems which attempt to alleviate this
problem, namely Automatic Quality Measurement" (Autoqual)
and "Time Domain Routing" (TDR). Both systems rely on a
slightly different understanding of the "goodness" of a link.
In the better-managed parts of the NetRom network, route
qualities tend to be assigned according to the baud rate of
the link, with adjustments for retry rates, duplex / simplex
and shared channels (in the worst-managed parts, route
qualities are simply assigned to 192 regardless of how good
or bad the link is). The quality is fixed at a compromise
value.
But the actual "goodness" of a link may continually change
with atmospheric conditions, data throughput, other channel
activity, QRM etc. At certain times of day for example, it
may be better to use an alternative link.
A more accurate notion of "goodness" is simply the "Round
Trip Time" (RTT) for the link, i.e. the time taken to send a
packet and get a reply. After all, this is what *really*
matters to users. A link which responds quickly (i.e. with a
low RTT) is perceived by users to be better than a link which
responds slowly. The RTT will track changes in retry rate,
channel loading etc.
The RTT can be easily and consistently measured by software
on a continuous basis, thus the "quality" of the link is
accurately known at all times, and all routers of the same
type will give comparable values independently of the sysop's
notions of quality.
XRouter continually measures RTT and uses it to calculate
a notional "route quality". This quality is displayed by the
"R Q" command, and can either be used as a guide to allow the
sysop to fix the RQ at a sensible value, or XRouter can use
it dynamically, by setting the route to use Autoqual.
(Autoqual is engaged by setting an RQ between 256 and 511).
This RTT to quality conversion is tailored to the British
notion of quality, which gives somewhat lower but more
meaningful qualities.
Autoqual is merely a tool to help sysops set consistent and
meaningful route qualities. The qualities are still under
sysop control, thus open to distortion.
However, by simply broadcasting RTT values instead of
qualities, the influence of the sysop is removed, and a
network based on indisputable *times* rather than arbitrary
*quality* can be created. This is a network which has its
routing metric in the time domain, hence the name "Time
Domain Routing". It may to some extent overlap the
quality-domain network, but the boundaries may be different,
and the two schemes are not compatible. Consider them to be
different dimensions, at 90 degrees to each other.
XRouter implements both time-domain and quality-domain
routing schemes, and will consider information from both
domains when making routing decisions. The same node table
is used for both schemes, since only the metric is different.
In some cases a node may have both quality and time metrics.
As sysop, you have several tools at your disposal for
controlling the size and balance of the two domains. For the
quality domain you have QUALITY which defines the "goodness"
of the links to your neighbours and the "de-rating" of the
qualities which they send to you, MINQUAL, which determines
which nodes get into the nodes table and which are excluded,
MINTXQUAL, which determines how much information you send to
your neighbour nodes, and MAXNODES which determines the
maximum number of nodes visible to you.
For the time domain, you have MAXTT, which defines the
furthest node in "Trip Time" (i.e. RTT/2) terms, MAXHOPS
which defines the furthest node as a function of the number
of intervening nodes, and MAXNODES as above.
You may adjust these parameters to favour one domain over the
other, to exclude one domain altogether, or to strike a
balance between the number of nodes which exist solely in one
domain or the other.
For example, setting MAXTT or MAXHOPS to 0 will exclude all
time-domain information, and Xrouter will behave as a pure
old-fashioned NetRom router. Or you may set MINQUAL to 255,
excluding all quality-domain information (e.g. if there is a
nearby node distorting the netrom qualities), providing of
course you have neighbours which are cabable of time-domain
routing. Or you may wish to limit the visibility of a subnet
from one port (e.g. to a foreign network) by setting a low
MAXHOPS or MAXTT on that port only. This gives you control
which was not possible by quality alone.
XRouter currently (but see compatibility issues) uses the
INP3 protocol to disseminate time-domain routing information.
Unlike NetRom, which uses unconnected-mode "broadcasts" to
all neighbours simultaneously, INP3 sends data to each
neighbour individually, using connected-mode. Whilst it is
usual to make NetRom nodes broadcasts at 1 hour intervals,
INP3 updates are sent every 10 minutes, with additional
updates whenever changes occur.
The time-domain network thus responds much more rapidly to
changes than NetRom does, but if the network is unreliable
(i.e. frequent outages and variable RTT's), a lot of updates
are generated. Although INP3 updates are more compact than
NetRom nodes broadcasts, some sysops may feel that the amount
of routing information is too much for a poor quality RF link.
If so, you may disable INP3 completely by setting the route
MAXTT to 0, or you can agree a low MAXTT with your neighbour
node, which will reduce the volume of data.
You may notice that nodes which are learned solely via INP3
are all stored with a NetRom quality of 0. This is deliberate,
because these nodes have no presence in the quality domain.
Compatibility issues:
Although this is a router manual, not a treatise on advanced
networking, it must be stressed that time-domain and
quality-domain metrics are incompatible, and information
learned from one domain must *never* be "translated" and
broadcast to the other. XRouter measures, uses and
disseminates both time and quality metrics, but always keeps
them separate.
Unfortunately, *some* software (which shall henceforth be
known as "Brand-X") *does* translate information between the
domains, and you should be aware that this may cause you
problems if they are within the horizon of either domain.
For example, in the diagram below, imagine that an XRouter
node (Xr) measures the trip time (TT) to one of its neighbour
nodes (A) as 1.5 seconds, and the sysop has assigned a Netrom
quality of 180.
180
A ---- Xr ---- Bx
\ /
\ /
C ---- D
XRouter broadcasts both pieces of information to neighbour
node (Bx) which is using "Brand-X" software. That software
ignores the 180 and will instead manufacture a quality of 253
from the trip time, using a totally unsuitable algorithm.
By itself this isn't a problem, until the "Brand-X" node
broadcasts it to node (C) which is NetRom-only. Now the
NetRom node thinks it has a higher quality to (A) via (Bx)
than via (Xr). So packets from (C) to (A) will now take the
longer path. What's worse, (Bx) will tell (Xr) that it knows
a better route to (A), and the network will decend into chaos.
A fully interconnected mesh network is very robust, yet the
"Brand-X" sysops seem remarkably reluctant to implement links
which result in a mesh. Maybe the above explains why!
Another problem occurs when the "Brand-X" software translates
in the other direction, i.e. it takes a NetRom quality, which
is a potentially unreliable piece of information, and
magically turns it into a trip time and hop count. Yet
neither trip time nor hop count can ever be inferred from
quality alone!
The consequence is that a node which exists only in the
untrustworthy quality domain, and may have been beyond our
horizon in that domain, now appears in the more trusted time
domain where it can bypass the NetRom de-rating process. The
information could subsequently pass innocently back into the
Netrom network with a higher "quality" than it would have
if received via a more direct pure netrom route.
**HISTORY**
Early versions of XRouter used a proprietary protocol to
exchange RTT, hops, IP routing, position and other
information between themselves. It was later decided to
adapt XRouter for INP3 compatibility, believing that it would
be a good idea to interconnect XRouter's time domain scheme
with other types of node.
In hindsight this proved to be a mistake, and it is firmly
believed that, unless the "Brand-X" software authors correct
the errors, XRouter and the Netrom network should not be
connected to any other network which includes "Brand-X"
nodes. Fortunately, those nodes are now in decline, and BPQ
is becoming more prevalent. BPQ32 does (correctly) keep time
and quality domains separate.
**SEE ALSO**
AUTOQUAL(9) -- Automatic Route Quality.
INP3(9) -- Inter-Node Protocol 3
MINQUAL(1) -- Minimum Quality.
MINTXQUAL(1) -- Minimum Quality to Transmit.
ROUTES(1) -- Add, Drop and List Routes.
QUALITY(1) -- NetRom Route Quality.
----
==== TELPROXY ====
TELPROXY(9) XROUTER REFERENCE MANUAL 27/9/2023
**NAME**
TELPROXY -- Telnet Proxy Server.
**DESCRIPTION**
The need may arise for a TCP/IP host on the LAN to connect
first to XRouter, before making an ongoing connection from
Xrouter to a target host. Using normal telnet port 23 for
this purpose is not always successful, especially if the
link is required to carry binary data, due to the internal
end-of-line translations and Telnet command sequences which
are part of the Telnet protocol.
The Telnet proxy on TCP port 2323 provides a solution to
this problem, allowing 100% binary connections not only to
TCP/IP targets, but also to Netrom and AX25 targets. This
would typically be used by a TCP/IP-only BBS to perform
FBB compressed forwarding with netrom and ax25 targets.
Upon connection to port 2323, the caller may, or otherwise,
be required to answer a security challenge, according to the
security criteria specified in ACCESS.SYS. The options are:
no challenge, callsign only, or callsign plus password, and
all of these can be made dependent on the caller's IP source
address.
If a password is required, it should be located in file
USERPASS.SYS.
After gaining entry, the user is presented with a short text
explaining the syntax for the outgoing connection, followed
by a short prompt ">". This text is read from file
TELPROXY.MSG, so you may adjust it to your requirements.
The user may now issue a telnet, netrom or ax25 downlink
connect command. XRouter will respond with "Trying ...".
If the downlink is successfully made, connection is reported,
then the stream becomes pure binary for the remainder of the
session.
If the downlink fails to connect, an error message is sent
before the uplink is terminated.
**FILES**
ACCESS.SYS controls the access requirements for the server.
TELPROXY.MSG provides an optional alternative login message.
TELPROXY.ACL controls which targets can be connected to.
USERPASS.SYS contains the user passwords, if required.
If required, these files must reside in the same directory
as the XRouter executable.
**SEE ALSO**
ACCESS.SYS(8) -- Telnet Access Control File.
TELPROXY.ACL(8) -- Telnet Proxy Egress Control File.
TELPROXY.MSG(8) -- Telnet Proxy Logon Message File
TELPROXYPORT(7) -- TCP Port for Telnet Proxy.
USERPASS.SYS(8) -- User Passwords File.
----
==== TNC2 ====
TNC2(9) XROUTER REFERENCE MANUAL 28/9/2023
**NAME**
TNC2 -- TNC2 Emulator.
**DESCRIPTION**
The TNC2 Emulator is a feature which allows RS232 devices
such as weather stations, dumb terminals, GPS and telemetry
devices to send and receive packets as if they were connected
to a real TNC2.
\|/ .---------.
| .-----. | | .-----.
'---| Rig |---| XRouter |----<----| GPS |
'-----' | | RS232 '-----'
'---------'
For example, imagine you have a weather station which is
designed to be connected to a TNC via an RS232 cable. Now
imagine that you already have an APRS port on your XRouter.
How would you get your weather station on air?
You *could* use an additional TNC, radio and antenna, but that
would be a pointless duplication of equipment. Far better to
configure XRouter to emulate a TNC, so that it can interface
directly to the weather station. This allows the weather
station to send to, and receive from, the existing APRS port.
Or you may have a dumb terminal connected to XRouter via an
RS232 cable, and use it to monitor any port, make connections
with other stations etc. This is completely independent of
XRouter's command interface, and does not require a session
with the node.
There are several applications which have TNC2 as one of the
interface options. You may interface them to any of XRouter's
radio ports via that means.
Or perhaps you wish to monitor a radio channel with a data
logging program, or send the channel activity to a serial
printer? The possibilities are limited by your imagination.
Configuration
~~~~~~~~~~~~~
The emulator requires only an INTERFACE in XROUTER.CFG. It
does *not* require a PORT. It is usually configured by
defining an INTERFACE with TYPE=ASYNC and PROTOCOL=TNC2.
Choose SPEED to suit the peripherals, and MTU=256.
Example:
INTERFACE=5
TYPE=ASYNC
COM=1
SPEED=19200
PROTOCOL=TNC2
MTU=256
ENDINTERFACE
You can have as many TNC emulators as you wish, providing you
have an RS232 port for each one. You should preferably use a
different MYCALL or SSID for each one if there is any chance
of more than one TNC being used on the same radio port.
In addition to TYPE=ASYNC, You may also use the TNC2 protocol
over a TYPE=UDP or TYPE=TCP interface.
Operation
~~~~~~~~~
Standard TNC2 commands currently recognised are Ctrl-C,
AUTOLF, CONNECT, CONVERSE, DISCONNECT, DISPLAY, ECHO, FLOW,
HELP, HEADERLN, KONVERSE, MALL, MCOM, MCON, MONITOR, MRPT,
MSTAMP, MYCALL, PORT, PORTS and UNPROTO. Other commands may
be implemented upon request.
You may set the TNC's callsign (using MYCALL) completely
independently of XRouter's callsign, and may select any of
XRouter's radio ports using the PORT command. When you select
a port, the TNC2 emulator receives from, and transmits to,
the radio equipment connected to that port.
All settings are saved to the file TNCn.CFG where 'n' is the
interface number. This file is automatically created if it
doesn't already exist. It is read when XRouter starts up,
so the TNC always returns to its previous configuration. The
file contains binary data, so you must not attempt to edit it.
**NOTES**
The emulator does not currently accept incoming connections.
That facility may be added upon request.
**SEE ALSO**
TCP-IFACE(6) -- Interface type TCP.
UDP-IFACE(6) -- Interface type UDP.
WA8DED(9) -- WA8DED TNC Emulator
XROUTER.CFG(8) -- Main Configuraion File
----
==== TTYLINK ====
TTYLINK(9) XROUTER REFERENCE MANUAL 27/9/2023
**NAME**
TTYLINK -- Keyboard To Keyboard Chat.
**DESCRIPTION**
TTYLINK is private real-time keyboard-to-keyboard chat
between sysops, which doesn't involve the CHAT server.
The TTYLINK server listens for incoming connections on TCP
port 87 (see TTYLINKPORT) and NetRomX service 87.
Client sessions are initiated by:
(a) telnetting to TCP port 87 on the target system,
or (b) using "TT[ylink] ",
or (c) using "C 87"
or (d) using "TALK "
or (e) using "NTTY "
(Options (c) (d) and (e) require that the target is a
reachable NetRomX node)
Upon receiving a connection from a client, the server "pages"
the sysop, who has 90 seconds to respond. The paging consists
of a pop-up dialog on top of the sysop's current window, and
an audible sound (Note: unless AUDIODEVICE is defined, the
sound only works on older-style PC's which have an internal
loudsqueaker). The server also sends this to the client:
TTYLINK at MOBILE:G8PZT-1
Calling sysop for 90 seconds..
Type 'M' at any time to leave a short message,
or 'Q' to quit...
At any point during or after the 90 seconds, the client has
the option to leave a short one-line message (160 chars max)
or to abort the call.
Here's an example where the sysop responded:
*** G8PZT-1 has come online to talk ***
Hello, why are you calling me?
Because I want to, silly!
Fair enough, it's mad talking to oneself you know...
I know, but no-one else is around.
Ok, bye for now
*** The other end terminated the chat
If the sysop takes more than 90 seconds to respond, and the
client has not disconnected, the sysop can still use the
TALK command to initiate a chat with the caller.
Here's an where the sysop didn't respond. Although not
strictly TTYlink, it is a useful compromise, rather than
allow an important call to be missed:
TTYLINK at MOBILE:G8PZT-1
Calling sysop for 90 seconds..
Type 'M' at any time to leave a short message,
or 'Q' to quit...
No response, please type a short (1 line) message now...
(or enter a blank line to skip this step)
Can you call me back to discuss xrpi release asap?
Message saved for sysop
Goodbye
The message is stored in the sysop's PMS, and a flashing
asterisk on the top left corner of the status bar alerts the
sysop to its presence. The sysop can then access their PMS
to read the message like this:
CMD(B/H/K/L/R/S/?)>
l
Msg# Stat Rcvd Time To From Subject
6 PR 22/05 03:25 SYSOP G8PZT TTYLink msg from
G8PZT@VK2DOT-1
CMD(B/H/K/L/R/S/?)>
r 6
Msg#: 6
Rcvd: 22/05 03:25
From: G8PZT
To: SYSOP
Subj: TTYLink msg from G8PZT@VK2DOT-1
Can you call me back to discuss XRPi release asap?
CMD(B/H/K/L/R/S/?)>
It's all a bit untidy at present, but will hopefully be
tidied up in future revisons.
**SEE ALSO**
NTTY(1) -- Netrom TTYLink.
TALK(1) -- Talk to a user or another sysop.
TTYLINK(1) -- Keyboard chat with another TCP/IP system.
TTYLINKPORT(7) -- TCP Port for TTYLINK Server.
AUDIO(9) -- Audio Output.
SERVICES(9) -- NetRomX Standard Services.
----
==== WA8DED ====
WA8DED(9) XROUTER REFERENCE MANUAL 19/10/2023
**NAME**
WA8DED -- WA8DED TNC Emulator.
**DESCRIPTION**
XRouter can emulate a WA8DED TNC, in both normal mode and
"host" mode. Host mode operation is covered in the MAN page
for DEDHOST. Normal mode might be used by a human user, or
by an application designed to work with a WA8DED TNC in this
mode.
.---------. .-----------.
| XRouter |------RS232-------| HyperTerm |<--User
'---------' '-----------'
The user may be located on the same machine as XRouter,
connected to it either via a pair of "virtual" COM ports, or
via a pair of "real" COM ports interconnected with a null
modem cable.
Alternatively, the user may be located on a seperate machine,
using an RS232 null-modem cable to interconnect the machines.
Configuring WA8DED Emulation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The configuration for non-hostmode operation is essentially
the same as for hostmode, except that an APPL block is not
required in XROUTER.CFG. In fact, an interface set up for
hostmode will work OK in non-hostmode too.
1) Decide how to interconnect the user and XRouter.
You can use either a pair of real COM ports and a
null-modem cable, or a virtual com port driver such as
Com0Com.
If using the latter, install it on the PC (if it isn't
already installed) and note the numbers of the two COM
ports it provides. You may need to adjust one or both of
them to a convenient number for your application. Ensure
that "Baud Rate Emulation" and "Enable Buffer Overrun" are
checked on both sides.
2) Add an INTERFACE.
In XROUTER.CFG specify an interface similar to this, where
"x" represents the interface number...
INTERFACE=x
TYPE=ASYNC
COM=18
PROTOCOL=DEDHOST
CHANNELS=4
SPEED=9600
FLOW=0
MTU=256
ENDINTERFACE
COM is the number of one of the real or virtual COM ports
used to connect with the application. XRouter can use COM
numbers up to COM32. On Linux, COM is a TTY device name.
CHANNELS specifies the max no. of host channels the
interface will provide (between 1 and 32). The total
number of host channels available to be shared between all
applications is 64. If XRouter cannot allocate the
requested number of channels it will fail to start. (In
versions up to 200e the number of channels was specified
by INTNUM. This is now deprecated.)
MTU must be 256
SPEED is the serial baud rate.
FLOW must always be set to 0.
- Don't use CHANNEL, IOADDR, or INTNUM keywords.
- Don't try to attach any PORTs to this interface, as they
are not required.
Using WA8DED TNC Emulation in Terminal Mode
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
XRouter's WA8DED emulator starts up in "terminal" mode (i.e.
not host mode) and may be therefore tested or used in this
mode using Hyperterm or any other dumb terminal. Wherever
possible, the emulator behaves the same as a "real" WA8DED
TNC, as detailed below:
In normal mode, commands and information are sent from the
terminal to the emulator in the form of lines. Lines may be
up to 256 characters long, including the terminating CARRIAGE
RETURN. If the 256th character entered is not a CARRIAGE
RETURN, it will be discarded and a BELL character will be
output to the terminal. BACKSPACE and DELETE may be used to
remove single characters from the line. The entire line may
be permanently backspaced out by entering a CONTROL-U or
CONTROL-X.
Lines which begin with an ESCAPE character (echoed as '* ')
are interpreted as commands. Lines without a leading ESCAPE
character are sent as information.
Most commands consist of a single letter. Some commands have
an optional parameter. The number of spaces (if any) between
the command and any parameter is not important. If a command
is issued with no parameter, the current value of that
command's parameter is displayed. Unless a parameter is
returned, commands don't normally return any acknowledgement.
By default, XRouter's WA8DED emulator provides the operator
with five virtual TNC channels, numbered 0 to 4 (The actual
number may be altered between 1 and 32 using the CHANNELS=
keyword in the supporting INTERFACE). The terminal is
logically attached to only one of these channels at a time,
selected by the 'S' command.
Channel 0 is reserved for unproto transmissions and
monitoring. This channel does not support connections.
Information sent on channel 0 is always unproto. The unproto
path may be set by issuing a 'C' command when channel 0 is
selected.
Channels other than 0 support connections, but are unproto if
they are not currently connected. Outgoing connect requests
may be issued on any unconnected channel (other than channel
0), while incoming connect requests will use the first
available channel (provided the maximum number of connections
set by the 'Y' command will not be exceeded).
Information received on a connected channel that is not
currently selected will remain queued there until that
channel is selected. The 'L' command may be used to
determine the channel(s) where stored information is located.
Information for transmission is sent only to the currently
selected channel. When a connection is ended, received
information will remain queued until it has been displayed.
Frame monitoring is controlled by the 'M' command. The
command parameter determines the types of frames monitored,
and is a list of desired frames chosen from the letters in
the following table:
LTR FRAME
--- -----
N None
I I frames
U UI frames
S Supervisory frames
C Monitor while connected
+ Call signs to be included (maximum of 8)
- Call signs to be excluded (maximum of 8)
The '+' and '-' parameters may not be used together. If
either is used, it must be the last parameter (followed by
one to eight callsigns, if applicable). If no list of
callsigns is specified to be included or excluded, all
callsigns will be candidates for monitoring. Entering a '+'
or '-' with no callsigns clears the list.
An asterisk displayed after a callsign in the digipeater list
indicates the frame was transmitted by that station. The
control field displayed will be one of the following:
NAME DESCRIPTION
---- -----------
RRa - Receive Ready
RNRa - Receive Not Ready
REJa - Reject
UI - Unnumbered Information
DM - Disconnected Mode
SABM - Connect Request
DISC - Disconnect Request
UA - Unnumbered Acknowledge
FRMR - Frame Reject
Iab - Information
?ccH - Unknown
a = Next expected frame number (0 - 7)
b = Frame number of this frame (0 - 7)
cc = Hexadecimal value
In addition, one of the following characters will be
displayed, reflecting the protocol version, command/response
bits, and the poll/final bit:
(blank) = version 1 frame without poll/final bit
! = version 1 frame with poll/final bit
^ = version 2 command frame without poll bit
+ = version 2 command frame with poll bit
- = version 2 response frame with final bit
v = version 2 response frame without final bit
The protocol identifier field is displayed in hexadecimal
An unattended mode, controlled by the 'U' command, provides
for sending user supplied text to a connecting station, and
then allows that station to leave a brief message. This mode
can operate on all channels simultaneously, but in no way
limits the operator's ability to interact with one of the
connected channels or the ability to make outgoing connect
requests.
When unattended mode is enabled, link status messages are
queued to the associated channel and not output to the
terminal unless that channel is currently selected. Link
status messages will therefore be displayed in chronological
order with the information from that channel.
In addition, text supplied by the user with the 'U' command
will be sent to any station that connects. If channel 0 is
left selected, stations may then connect and leave messages
on channels 1 - 4 (limited by the 'Y' parameter, of course).
The 'L' command may be used to determine if messages have
been left on any channel. Selecting a channel containing
messages will cause all link status and information from that
channel to be displayed. If xon/xoff handshaking is enabled,
CONTROL-S and CONTROL-Q may be used to regulate the output to
the terminal to allow comfortable reading.
Command Summary
~~~~~~~~~~~~~~~
(In terminal mode all commands are preceded by ESC character)
COMMAND PARAMETER DESCRIPTION
------- --------- -----------
A (1) 0 Auto linefeed disabled
1 Auto linefeed enabled
* C Cs1 [Cs2 ... Cs9] Connect path (0=unproto path)
* D Disconnect
E (1) 0 Echo input disabled
1 Echo input enabled
* I Cs Tnc source callsign
JHOST (0) 0 Terminal mode enabled
1 Host mode enabled
K (0) 0 Timestamp disabled
1 Timestamp status messages
2 Timestamp monitoring & status
L [0-n] Display channel status
M (IU) NIUSC+- Monitor mode
S (0) 0-n Select channel (0=unproto)
U (0) 0 [text] Unattended mode disabled
1 [text] Unattended mode enabled
V (0) Displays the software version
Y (4) 0-n Maximum incoming connections
Z (3) 0 Flow disabled, xon/off disabled
1 Flow enabled, xon/off disabled
2 Flow disabled, xon/off enabled
3 Flow enabled, xon/off enabled
(0) Default values are shown in parentheses
n Number of channels, as specified by CHANNELS keyword
* These commands are applicable to each connection channel
Command Description
~~~~~~~~~~~~~~~~~~~
The 'A' (AutoLF) command is used to enable or disable the
automatic insertion of LINEFEED characters after CARRIAGE
RETURN characters to the terminal.
The 'C' (Connect) command is used on channels other than 0 to
initiate a link connection. A 'C' command issued when channel
0 is selected sets the unproto path. If digipeaters are
specified, 'v' or 'via' is not required (but is allowed)
between the destination callsign and the digipeater callsigns,
and callsigns must be seperated by spaces. Note that on
channels > 0 this command ignores the destination path and
only allows connect to the node. The default unproto address
for channel 0 is "CQ".
The 'D' (Disconnect) command is used to initiate a link
disconnection. If there is unsent or unacknowledged
information remaining, the disconnect request frame will not
be sent until all information has been transmitted and
acknowledged. No additional information will be received after
the 'D' command has been issued. A second 'D' command may be
entered to force the transmission of the disconnect request
frame before all information has been sent and acknowledged.
A 'D' command issued during the establishment of a link or
after a disconnect request frame has been transmitted will
cause an immediate return to the disconnected state.
The 'E' (Echo) command is used to enable or disable the
echoing of input (commands and information) to the terminal.
The 'I' (Ident) command is used to set and display the TNC
source callsign. The initial value is the APPLCALL. If no
APPLblock was defined, the initial value is all blanks.
Changing the TNC source callsign on a connected channel is not
permitted. If the TNC source callsign is left blank, the TNC
will not allow connect commands or unproto transmissions. The
callsign stored in channel 0 is used to initialize each
connection channel upon power up or disconnection.
The 'JHOST' command is used to switch between terminal and
host modes. See the DEDHOST MAN page for details of host
mode operation.
The 'K' command controls the time stamping of status messages
and monitored frames.
The 'L' (LinkStatus) command is used to display the link
status of one or all channels. Information displayed
includes the connection path and the number of received frames
not yet displayed, number of send frames not yet transmitted,
number of transmitted frames not yet acknowledged, and the
current retry count. A '+' character preceeding the channel
number indicates the currently selected channel. Operation of
this command when host mode is enabled is somewhat different,
and is described in the MAN page for DEDHOST.
The 'M' (Monitor) command is used to set the frame monitoring
mode. The command parameter determines the types of frames
monitored, and is a list of desired frames chosen from the
letters in the following table:
LTR FRAME
--- -----
N None
I I frames
U UI frames
S Supervisory frames
C Monitor while connected
+ Call signs to be included (maximum of 8)
- Call signs to be excluded (maximum of 8)
The '+' and '-' parameters may not be used together.
If either is used, it must be the last parameter
(followed by one to eight callsigns, if applicable).
If no list of callsigns is specified to be included or
excluded, all callsigns will be candidates for
monitoring. Entering a '+' or '-' with no callsigns
will clear the list.
The 'U' (Unattended) command is used to enable or disable
unattended modes.
The 'V' (Version) command just displays the software version.
In this respect it behaves like TheFirmware instead of WA8DED.
The 'Y' command is used to set the maximum number of
connections that may established by incoming requests. This
command has no effect on the operators ability to initiate
outgoing connection requests.
The 'Z' command is used to enable or disable flow control and
XON/XOFF handshaking to the terminal. If flow control is
enabled, output to the terminal will be inhibited while
entering commands or information. If flow control is
disabled, output to the terminal will not be restricted.
Flow control and xon/xoff handshaking should be disabled
during periods in which the TNC is operated without a
terminal, to avoid suspending output which will consume
buffers. If XON/XOFF handshaking is enabled, terminal
scrolling may be stopped and started using CONTROL-S and
CONTROL-Q characters. Flow control and XON/XOFF handshaking
are not performed when host mode is enabled.
The '@' command is a software maintenance command. A
parameter of 'B' displays the number of free buffers.
**SEE ALSO**
DEDHOST(9) -- WA8DED Hostmode Emulation.
XROUTER.CFG(8) -- Main Configuration File.
----
==== WPAGES ====
WPAGES(9) XROUTER REFERENCE MANUAL 29/3/2024
**COMMAND**
WPAGES -- White Pages Database.
**DESCRIPTION**
The WP (White Pages) database on this mailbox is part of a
world wide distributed database, which holds details of all
recently active Packet users. The database is primarily used
by mailboxes to make mail routing decisions. The data is
also available to users via a number of search commands.
The data is collected from two main sources:
a) from the details a user enters when they register on a
mailbox.
b) from the headers of mail in transit.
There are 3 classes of data as follows:
/U User-entered, via one or more of the "N" commands.
This is the most reliable date.
/I "Is-BBS", generated by each BBS for its own
callsign, and inferred from routing headers, when
the user call and BBS call are the same.
/G "Guessed" or "Gleaned" from routing headers, when
the user call and BBS call are different. Not to
be trusted, because users often send mail from
BBS's that are not their "Home" BBS.
WP data is stored in memory, mirrored in the file WP.DAT,
which is located in the PMS folder. This is a plain text
file, so it can be edited with any text editor if necessary.
The file is read only at boot-up, and is written whenever
there are any changes.
Most mailboxes with WP capability share their data by means
of regular "WP Update" messages. These were supposed to be
sent to "regional" servers, which would collate the data and
send it via regional and national servers to a world server.
That system has fallen apart over time. The current advice
is to send WP updates as private messages to your immediate
neighbours only. This can be set up using one or more
"WpUpdateTo" directives in PMS.CFG.
XRouter only shares "/U" (user-entered) data via WP updates.
If a user has not sent a message, and has not re-registered
on a BBS within a certain period, their details are purged
from the WP database. That period is commonly 90 days, but
can be as little as 30 days. XRouter currently does not
expire WP entries.
There are many packet users who NEVER log into a mailbox,
and who are therefore "invisible" to WP.
The local database can be searched using the I, I@, IC, IH,
IN, IQ and IZ commands, which each have their own MAN pages.
**SEE ALSO**
INFO(4) -- Display Mailbox or White Pages Information.
PMS.CFG(8) -- PMS Configuration File.
----
==== WX ====
WX(9) XROUTER REFERENCE MANUAL 28/2/2024
**NAME**
WX(9) -- Weather Information System.
**INTRODUCTION**
XRouter can gather and store weather information from a local
weather source and/or from the APRS weather broadcasts of up
to 5 neighbour nodes. It can display
the information in response to the WX and INFO commands.
It can also display the information via its HTTP interface,
the NetRomX weather server, the integral MQTT server, and
can broadcast it in APRS-style beacons.
- How it is accessed & presented
- How to set it up
- Wacky ideas
**DATA SOURCES**
- APRS Weather broadcasts from nearby nodes.
- Files deposited by external WX programs e.g. Cumulus
- MQTT messages addressed to the nodecall.
**DATA STORED**
For non-local sources, e.g. APRS broadcasts, the following
basic information is stored, if the source provides it:
- Observation date/time
- Callsign of the originating source
- Latitude and longitiude of the observation
- Distance of the observation from XRouter
- Barometric pressure
- Air temperature
- Humidity
- Wind direction
- Wind speed
- Wind gust speed
- Rainfall in last 24 hours
- Rainfall in the last hour
- Rainfall since midnight
For local sources, e.g. import files or MQTT messages, the
following additional data is stored, if the source provides
it:
- Sensor battery state
- Light level
- UV level
If the source provides the required data, the following
"derived" values may also be stored:
- Today's pressure max/min and the times thereof.
- Today's average pressure.
- Today's temperature max.min and the times thereof.
- Today's average temperature
- Tofay's humidity max/min and the times thereof
- Today's average humidity.
- Today's maximum wind and gust speeds and times thereof
- Running average wind direction (last 11 readings)
- Running average wind speed
- Current rainfall rate
- Today's maximum rainfall rate and time threof
- Temperature trend.
- Dew Point
- Wind Chill
- Heat Index
- Wind Run
**STORAGE UNITS / PRECISION**
Parameter Stored as Precision
--------------------------------------------
Lat/long Degrees 0.01 minutes
Date/time Seconds 1 sec
Pressure Millibars 0.1 mb
Temperature Degrees C 0.1 C
Humidity Percent 1 percent
Wind speed Miles Per Hour 0.1 mph
Wind direction Degrees 1 degree
Rainfall Millimetres 0.1 mm
Wind Run Miles 0.001 mile
Max/Min times Hour:minute 1 minute
Dew point Degrees C 0.1 C
Wind Chill Degrees C 0.1 C
Heat Index Degrees C 0.1 C
**STORAGE ACROSS REBOOTS**
The WXSAV.DAT file preserves most data across reboots, but
for the first few observations after a reboot there will be
no trend or running average information. That will appear
after a few observations.
**DATA ACCESS**
COMMAND LINE
The WX command is used to display a list of available WX
datasets, to display the data from a specified source,
or to obtain a WX summary from another XRouter. See the
WX(1) man page for details.
The page displayed by the INFO PAGE command contains a
brief local weather summary comprising date, time, air
pressure, temperature, humidity, wind speed, gust speed,
and wind direction, if such information is available.
WEB PAGE
If XRouter's HTTP server is enabled, and local weather is
available, it is displayed on the following page:
http://{ipaddress[:port]}/localwx
where ipaddress and port are those of XRouter
WX SERVER
XRouter's "weather summary server", accessed via NetromX
service number 16, returns local weather information, if
available. The information is returned in a machine and
human readable plain text form. See the WX-SVC(9) manual
page for more details.
MQTT BROKER
XRouter's integral MQTT broker makes weather information
available, both as "events" and upon request. The former
are published whenever new data arrives, and the latter
are published upon request. The broker may be accessed
either via MQTTPORT on the LAN and/or amprnet, or via a
NetromX connection to service 1883. The inbuilt MQTT
client can be used to make such a connection, as can any
other client of your choosing.
To receive WX "events", subscribe to the following topic:
xrouter/event/{nodecall}/wx/{callsign | #}
To request WX information, first subscribe to
xrouter/status/{nodecall}/wx[callsign]
then PUBlish xrouter/get/{nodecall}/wx[/callsign]
APRS BROADCASTS
XRouter can be configured to broadcast APRS-format WX
beacons at specified intervals on specified PORTs.
**MQTT/Json**
~~~~~~~~~
**Some weather stations supply rainfall in total bucket tips, e.g. "Rainfall":1186, others as total mm, e.g. "rain_mm" : 467.106.** **If "mm" is not prsent**
{"time" : "2024-03-04 18:58:15", "model" : "Fineoffset-WH65B", "id" : 80, "battery_ok" : 1, "temperature_C" : 6.200, "humidity" : 89, "wind_dir_deg" : 204, "wind_avg_m_s" : 0.000, "wind_max_m_s" : 0.000, "rain_mm" : 514.096, "uv" : 0, "uvi" : 0, "light_lux" : 0.000, "mic" : "CRC"}
**There doesn't seem to be any standard for the field names. For instance the observation timestamp could be sent as "timestamp" or "observed" instead of "time". Temperature could be sent as "temp", temperature_deg_c, "temperature_C" and so on.**
Xrouter can be customised to recognise the field names used in
the data source, using a set of optional directives in
XROUTER.CFG as follows:
Name Default Purpose
--------------------------------------------------------
WXBATTERY "battery_ok" Sensor battery indication
WXBEARING "wind_deg" Wind direction in degrees
WXGUST "wind_max_m_s" Gust speed in metres per sec
WXHUMID "humidity" Relative humidity in pecent
WXID "id" Sensor number
WXLIGHT "light_lux" Solar Irradiance in lux
WXMODEL "model" Sensor make/model
WXPRESS "pressure" Air pressure in millibars
WXRAIN "rain_mm" Total rainfall in mm
WXSPEED "wind_speed_m_s" Wind speed in metres per sec
WXTEMP "temperature_c" Air temperature in degress C
WXUV "uv" UV level
WXUVINDEX "uvi" UV Index
**RELATED DIRECTIVES**
WXSENSOR A string of characters (max 31) which identifies
the desired weather sensor in the source data
stream, e.g. "Fineoffset-WH65B".
For use where the data source might contain data
from more than one weather sensor, or from other
types of sensor that may share the same parameter
names, e.g. tyre pressure sensors. There is no
default. If specified, only data whose "model"
field contains the specified string is accepted.
WXSENSORID A string of characters (max 15) which uniquely
identifies a particular sensor among sensors of
the same make/model. e.g. "80".
Can be used in conjunction with WXSENSOR, or on
its own. There is no default. If specified, only
data whose "id" field contains the specified
string is accepted.
WXBUCKET Specifies the "bucket size" in mm for a bucket
tipping pluviometer. This is the amount of rain
required to increment the "rainfall" count by one
unit.
Bucket sizes typically range from 0.1 to 1mm,
with 0.3mm and 0.254mm being common sizes for
amateur weather stations. Defaults to 0.3
WXWINDGAIN A correction factor which can be applied to the
wind speed input to compensate for non-ideal
siting of the anemometer. Default is 1.0.
The "standard height" for wind speed measurements
is 10 metres above unobstructed ground. Due to
air resistance and obstructions, wind speed
reduces at lower heights. If the wind speed at 4m
above ground was half the level at 10 metres, a
WXWINDGAIN of 2 would cause the "correct" wind
speed to be displayed. However, the meaning of
"correct" wind speed is debateable - if a
greenhouse in a sheltered garden can withstand a
wind speed of 49mph before collapsing, it is the
ground level wind speed that's important, not
the 10m AGL speed.
WXWINDGAIN can also be used to adjust
**Directives:**
~~~~~~~~~~~
**WXMODEL - optional. For use where . The field name defaults to "model" is specified by** **WXBATTERY:** **Optional. Defaults to "battery_ok"** **WXBEARING:** **Optional. Defaults to "direction"** **WXFILE:** **Specifies the pathname of a file from which XRouter can read weather data. There is no default. If WXFILE is specified, and the file exists, XRouter reads its contents once per minute. The contents of the file may be in Cumulus WXNOW.TXT or REALTIME.TXT formats, which are well documented on the web.**
(list the name value pairs expected here)
"Temperature:" Degrees centrigrade
"Barometer:" Pressure (millibars)
"Wind:" speed in MPH;
"Direction:" Degrees;
"Gust:" speed in MPH
"Humidity:" 0-100 (percent)
**WXGUST:** **Specifies the field name used for reading the wind gust speed from a JSON message or weather file. Max 15 characters. Defaults to "gust"** **WXHUMID:** **Specifies the field name used for reading the humidity (in percent) from a JSON message or weather file. Max 15 characters. Defaults to "humidity".** **WXID:**
pztncpy (WxId, args, 15);
break;
case CMD_WXLIGHT:
pztncpy (WxLight, args, 15);
break;
case CMD_WXMODEL:
pztncpy (WxModel, args, 15);
break;
case CMD_WXPRESS:
pztncpy (WxPress, args, 15);
break;
case CMD_WXRAIN:
pztncpy (WxRain, args, 15);
break;
case CMD_WXRAINTYPE:
break;
case CMD_WXSENSOR:
pztncpy (WxSensor, args, 31);
break;
case CMD_WXSENSORID:
pztncpy (WxSensorId, args, 15);
break;
case CMD_WXSPEED:
pztncpy (WxSpeed, args, 15);
break;
case CMD_WXTEMP:
pztncpy (WxTemp, args, 15);
break;
case CMD_WXTIME:
pztncpy (WxTime, args, 15);
break;
case CMD_WXWINDGAIN:
WxWindFactor = atof (args);
**WXUVINDEX:** **Specifies the JSON field name used for reading the UV index. Defaults to "uvi".** **OPTIONS** **UPDATING VIA HTTP** **If you have a weather station that can be configured to upload to a custom server using Wunderground PWS protocol, it can upload directly to XRouter.** **Configure the weather station as follows:**
a) choose "Upload to custom server"
b) choose Wunderground protocol
c) Set the "Server IP/Hostname:" field to Xrouter's IP
d) Set "Path:" to /wx/report?
e) Set "station ID:" to a string of your choice, e.g. KidderWX
f) Set "Station Key:" to a suitable password of your choice
g) Set "Port:" to whatever your HTTPPORT is set to
h) Set "Upload Interval" to your choice
i) Save
**Configure XRouter as follows**
# Updates sent as GET requests to /wx/report
# Uses Wunderground PWS upload protocol
# PWS station ID
**WXSENSORID=Fal**
# Password
**WXCMD=12345** **WXWINDGAIN=2.0** **API (see REST-WX.9.MAN) and possibly MQTT**
a) Retrieve List of Weather Stations:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Request-Type: GET
Request-URL: /api/v1/weather/stations
If successful, the response is an un-named JSON array of
objects, each object containing the following fields:
**It is strongly recommended that you use WXSENSOR to avoid reading erroneos data from other type of device.** **SEE ALSO**
WX(1) -- Display Weather Information.
WXID.7
WXLIGHT.7
WXMODEL.7
WXPRESS.7
WXRAIN.7
WXRAINTYPE.7
WXSENSOR.7
WXSENSORID.7
WXSPEED.7
WXTEMP.7
WXTIME.7
WXWINDGAIN.7
WXUV.7
WX-SVC(9) -- NetRomX Weather Service
XROUTER.CFG(8) -- Main Configuration File.
----
==== WX-SVC ====
WX-SVC(9) XROUTER REFERENCE MANUAL 7/9/2023
**NAME**
WX-SVC -- NetRomX Weather Service
**DESCRIPTION**
The weather service returns local weather information, if
available. It is accessed via NetromX service number 16.
The information is returned in machine-readable plain text
form. A typical response would look like this:
Observed: Mon 17 May 2021 06:01:23 +0001
Pressure: 1007.2 mB
Temperature: 11.2 C
Humidity: 67 %
Wind: 23 mph
Direction: 178 deg
Gust: 31 mph
Rain-24h: 24.7 mm
Rain-Today: 19.7 mm
Rain-1h: 3.2 mm
When the client has recieved the information, the server
terminates the connection.
Some fields may be missing if there is no information in them.
The information is derived from received APRS broadcasts, or
from the WXNOW or CUMULUS format files generated by home
weather stations or weather applications. The filename is
specifed by the WXFILE directive in XROUTER.CFG.
Once per minute, XRouter checks the file specified by the
WXFILE directive. If the file is present, and the information
therein is more up to date than the previous data, the
contents of the file are imported.
A WXNOW.TXT file only has 2 lines, for example:
Feb 01 2009 12:34
272/010g006t069r010p030P020h61b1050
where: 272 = Wind direction in degrees.
010 = Average wind speed in MPH.
g006 = Gust speed in MPH
t069 = Temperature in degrees Farenheit
r010 = Rainfall in last hour in 0.01 inch.
p030 = Rainfall in last 24H in 0.01 inch.
P020 = Rainfall since midnight in 0.01 inch.
h61 = Humidity in percent.
b1050 = barometric pressure in millibars.
The Cumulus "realtime.txt" file is a text file with a single
line of space separated values. It contains a list of key
values of the sensors and is re-created frequently. After
creation, it can be set to automatically upload to a website
(or to XRouter) via FTP.
An example of the format is as follows (all one line):
18/10/08 16:03:45 8.4 84 5.8 24.2 33.0 261 0.0 1.0 999.7 W 6
mph C mb mm 146.6 +0.1 85.2 588.4 11.6 20.3 57 3.6 -0.7 10.9
12:00 7.8 14:41 37.4 14:38 44.0 14:28 999.8 16:01 998.4 12:06
1.8.2 448 36.0 10.3 10.5 13 0.2 14 260 2.3 3 1 1 NNW 2040 ft
12.3 11.1 420.1 1 13.6
XRouter currently parses the following fields from
realtime.txt:
1 Observation date
2 Observation time
3 Temperature
4 Humidity
6 Wind speed
8 Wind direction
9 Rain rate per hour
10 Rain today
11 Barometric pressure
14 Wind units - m/s, mph, km/h, kts
15 Temperature units - degree C, degree F
16 Pressure units - mb, hPa, in
17 Rainfall units - mm, in
41 Gust speed
48 Rainfall last hour
There is another (non-standard) format that XRouter can import
from a WX file. This consists of ": " pairs as
follows:
Temperature: 22.7
Barometer: 1015
Wind: 6
Direction: 178
Gust: 12
Humidity: 67
The fields can be in any order, and need not all be present.
They may be seperated by spaces or tabs.
At present, temperature must be in Centigrade, pressure in
millibars, and wind speeds in MPH. There are plans to make
this accept other units.
If you don't have a weather station that outputs one of the
above formats, by using suitable software or scripts you could
extract weather information from your WX station and write it
to a file in one of the above 3 formats.
For example, you could use a cheap RTL dongle and "rtl_433"
software on the Pi to receive and decode the 433.9 MHz OOK
transmissions from your weather station to its base unit.
You could even pull weather information for your area off the
web and write it to a file. But that is beyond the scope of
this document.
**SEE ALSO**
WX(1) -- Display Weather Information.
WXFILE(7) -- Specify Weather Import File.
SERVICES(9) -- NetRomX Standard Services.
----
==== YAM ====
YAM(9) XROUTER REFERENCE MANUAL 29/9/2023
**NAME**
YAM -- "Yet Another Modem" HDLC Modem.
**DESCRIPTION**
The "YAM" modem conects to a COM port, and implements the
functions of a TNC in a FPGA (Field Programmable Gate Array).
XRouter includes support for the YAM modem, and the interface
should be defined in XROUTER.CFG as follows:
INTERFACE=10 <- Adjust to suit
TYPE=YAM
COM=1 <- COM port to which YAM is connected
MTU=256
SPEED=1200 <- Radio speed (not serial comms speed!)
PROTOCOL=HDLC <- Only HDLC supported at present
ENDINTERFACE
SPEED is the *radio* baud rate and should match the modem's
configuration, otherwise TXDELAY and TXTAIL timings will be
wrong. You can omit SPEED and define RFBAUDS in the port
instead. Communication between between XRouter and YAM via
the RS232 cable always takes place at 19200 bauds.
PROTOCOL *must* be HDLC. No other protocols are supported at
present.
Each YAM interface supports only one PORT. You must use a
separate INTERFACE and PORT for each YAM board.
Port Settings
~~~~~~~~~~~~~
A typical PORT might be defined as follows:
PORT
ID=YAM 1200 Bauds 144.650MHz
INTERFACENUM=10
CHANNEL=A
SPEED=1200
FULLDUP=0
TXDELAY=150
ENDPORT
CHANNEL is ignored, but must be present. FULLDUP can be used,
as the YAM is capable of full duplex operation, but SOFTDCD is
ignored because it has no meaning for a YAM board.
YAM will INTERLOCK with other YAM interfaces and with all
types of SCC card, but not with KISS TNC's since XRouter has
no knowledge of, or control over when a KISS TNC is
transmitting.
Notes
~~~~~
The YAM modem uses TXD, RXD, RTS, CTS, DTR, DSR, RI and DCD so
a full 8 wire plus ground cable is required.
Some PC's either don't provide enough DC voltage/current to
supply the YAM board or the RS232 inputs sink too much
current. This is a hardware problem, not an XRouter problem.
It can be overcome by using an external supply to power the
YAM board.
XRouter does not program the FPGA therefore YAM modems must be
initialised by running YAMINIT (supplied with the modem)
before starting XRouter. It is probably best to do this in a
startup batch file. "YAMINIT yam12v11.mcs 1" will program the
YAM for COM1 with 1200 baud RF speed. The YAM is capable of
1200, 2400 or 9600 baud simply by choosing the appropriate
.MCS file.
For further information you must refer to the YAM
manufacturer's documentation.
**CAVEATS**
YAM has not been tested since the XRouter code was ported from
DOS to Windows. Reports would be welcome.
**SEE ALSO**
XROUTER.CFG(8) -- Main Configuration File.
----