Table of Contents
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=<number> 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 <callsign> pass <password>" where <password> 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 <hostname>" 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=<servalias> <hostname | ipaddr> <tcp_port> 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 <hostname>" 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=<netrom_call>,<netrom_call>,... e.g. CHATLINKS=GB7GH-7,GB7BM-8,N0LBA-8 or at the chat command prompt: /LI ADD <netrom_call> 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=<ip_address>:<tcp_port> <peer_alias> e.g. CHATLINKS=67.69.96.23:3600 KDRCHT or at the chat command prompt: /LI ADD <ipaddress>:<tcp_port> <peer_alias> /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 <peername> is prefixed with a '*' to distinguish it from an XRchat TCP entry: CHATLINKS=<ip_address>:<tcp_port> *<peername> e.g. CHATLINKS=80.195.22.67:3601 *brmcht Alternatively, use the /LINK ADD command /LI ADD <ipaddress>:<tcp_port> *<peername> 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 <nodecall>" 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 <esc> 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] <up | down> 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] <kiss | ppp | slip> 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] <idle | ipcp | lcp | log | pap> [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 <port> argument is omitted because XRouter knows which port the script is using. SEND - Send a line of text. Syntax: S[end] <text> 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 <text> argument may contain spaces, and the system will append a carriage return/line feed. SLEEP - Temporary pause. Syntax: SL[eep] <millisecs> 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] <millisecs> <string> [exiterr] Example: WAIT 5000 Password: exiterr WAIT makes XRouter wait for specific responses from the modem or remote host. <millisecs> specifies the maximum wait interval. <string> 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 <nodecall>" 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 <username>, where <username> 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 <user>@<host>, e.g. "g8pzt@gb7pzt" the server activates a finger client, which attempts to establish communication with the Finger server on the specified <host> 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 <topic>" 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 <ALT+H> followed by <H>. 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 <ipaddr> <port> <subnet_mask> e.g. "proxy 44.131.91.245 80 255.0.0.0" <ipaddr> is the IP address of the downstream proxy. <port> is the TCP port number of the downstream proxy. <subnet_mask> 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 <TEXT> 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 <INPUT> 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: <FORM ACTION="exec"> <INPUT TYPE=radio NAME=cmd VALUE="n v">Via:<BR> <INPUT TYPE=radio NAME=cmd VALUE="n >">>Qual:<BR> <INPUT TYPE=radio NAME=cmd VALUE="n <"><Qual:<BR> <INPUT TYPE=radio NAME=cmd VALUE=n>Routes to:<BR> <INPUT TYPE=text SIZE=9 NAME=arg1> <INPUT TYPE=submit VALUE=Go> </FORM> 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: <!--#directive parameter=value parameter=value --> 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 "<!--#" otherwise it won't be recognised. The SSI directives currently accepted are as follows: Directive Parameter Parameter value ~~~~~~~~~ ~~~~~~~~~ ~~~~~~~~~~~~~~~ ECHO VAR DATE_LOCAL ECHO VAR LAST_MODIFIED EXEC CMD {any XRouter cmd string} FLASTMOD FILE {relative filename} FSIZE FILE {relative filename INCLUDE FILE {any file under current dir} INCLUDE VIRTUAL {any file within http tree} ECHO displays the contents of a specified HTTP environment variable. Variables include DATE_LOCAL which displays the local date and time, and LAST_MODIFIED which displays the modification date and time of the HTML file that is being served. Example: <!--#ECHO VAR=DATE_LOCAL --> 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 <PRE></PRE> tags to preserve the formatting. Example: <PRE><!--#EXEC CMD="r r" --></PRE> 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: <!--#FSIZE FILE=myfile.txt --> 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: <!--#INCLUDE VIRTUAL=/bbs/msglist.txt --> 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 <PARAM> tags in the HTML file. For example: <PARAM NAME="font" VALUE="Courier">. 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 <F1> 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: <time> <source_IP> -> <dest_IP>[:port] <description> For example: 15:11:12 192.168.0.135 -> 192.168.0.101:137 Unsolicited UDP 20:16:02 192.168.0.135 -> 192.168.0.101:443 TCP SYN - refused 21:04:57 44.197.188.109 -> 44.135.49.90:443 TCP SYN - refused The last entry reveals a threat from the section of 44-net that was sold off to commercial interests, and the need to update the IP access Control List entries to block this section of the 44/8 address space. IP Banning ~~~~~~~~~~ One part of XRouter's defences is "IP banning". If XRouter detects malicious activity on its own TCP/IP stack, it will "ban" the originator's IP address. This means that any further packets from that IP address are ignored, for as long as the ban lasts. If malicious activity is detected on any Linux TCP or UDP port that is currently used by XRouter, that also causes a ban. In this case, TCP connections are terminated, and any further connections or UDP frames are ignored. There is no time limit on IP bans, and they are preserved across reboots. Up to 200 IP addresses can be banned at once. A larger table would become unwieldy, so when a new address is added, the oldest one is dropped. In practice this isn't usually a problem because the oldest aggressor has usually given up long ago, and is unlikely to come back. IP bans can be added manually using the IP BAN ADD command, the format of which is: IP B[an] A[dd] <ipaddr> [netmask] For example: ip ban add 44.197.188.109 ip ban add 44.128.0.0 255.192.0.0 They can also be removed using "IP U[nban] <ipaddr>". The ban list can be displayed using "IP B[an] L[ist]" Port Scanners ~~~~~~~~~~~~~ Scans are not necessarily dangerous, although in some cases they may consume substantial resources. The main issue with scans is that are usually a prelude to an attack. Once your presence has been detected by a scan, the hackbots tend to inform each other and launch an attack. It may not happen immediately, but it will usually happen. If you have any TCP/IP services open to the Internet, for example Telnet or even AXUDP, scans are inevitable. The IDS warns you, so you can take evasive action, such as IP and TCP / UDP ingress filtering, and allows you to test its efficacy. It also disrupts the scanning process, causing the hackbots to time out and move on. A word of warning: If you scan your own system, you might suddenly find that you can no longer access XRouter from the machine that performed the scan because its IP has been banned. If you can access XRouter from its own console, or via a machine that hasn't been IP-banned, you can use the IP UNBAN command to remove the banned address. Honeypots ~~~~~~~~~ In this context, a honeypot a sticky trap, set up on popular TCP or UDP ports, for catching internet low-life. Hackbots generally start their attacks by probing for open TCP ports, and to save time they often start with the most popular ones - telnet, SSH, HTTP, VNC and so on. If they find an open port, they tend to inform each other, then they all concentrate their attacks on that port. Unless you have a particular service port open, the chances are that anyone who tries to connect to it is up to no good. So the honeypot is a mitigation measure. It LOOKS like an attractive open port, but it's not! Anyone who connects to it gets their IP address logged and banned. After that they can't do any more attacking unless they change their IP address. It's not foolproof. Nation states have access to large numbers of IP addresses. But IP banning slows them down, and the IDS alerts you that there is a problem. Setting Up a Honeypot ~~~~~~~~~~~~~~~~~~~~~ IP sub-commands BAN PORT ADD, BAN PORT DROP, BAN PORT LIST, and BAN PORT SAVE allow management of the "honeypot" ports. A honeypot is created using the following command: IP B[an] P[ort] A[dd] <TCP|UDP|ALL> <start> [end] <TCP|UDP|ALL> - protocol(s) to catch. <start> - single port, or the start of a range. [end] - last port in a range. For example: "ip ban port add tcp 443" sets up a honeypot which IP bans anyone who tries to cpnnect to TCP port 443. Similarly "ip ban port add tcp 5900 5999" creates a honeypot covering the TCP port range commonly probed for VNC. Honeypots and their stats can be displayed using: IP B[an] P[ort] L[ist] They can be saved (to IPBAN.SYS) using: IP B[an] P[ort] S[ave] And they can be removed using: IP B[an] P[ort] D[rop] <TCP|UDP|ALL> <start> <end> Note that both the start and end ports are mandatory in the DROP command. For single ports, both numbers are the same. IDS Statistics ~~~~~~~~~~~~~~ If you have access to XRouter's display, the top section of the "Security Monitor" window gives you some statistics. If you have "sysop" access to XRouter you can also view more comprehensive stats using either the "S[tats] IDS" or the "IDS S[tats]" commands, both of which display the same data, 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 source IP was banned or the login credentials were incorrect. "Malicious Logins" are TCP logins attempted using suspicious or common attack 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. IDS-Related Commands ~~~~~~~~~~~~~~~~~~~~ IDS L[og] [on | off] IDS S[tats] IDS V[erbosity] [0-4] IP B[an] A[dd] <ipaddr> [netmask] IP B[an] D[rop] <ipaddr> IP B[an] L[ist] IP B[an] P[ort] A[dd] <TCP|UDP|ALL> <start> [end] IP B[an] P[ort] D[rop] <TCP|UDP|ALL> <start> <end> IP B[an] P[ort] L[ist] IP B[an] P[ort] S[ave] IP B[an] S[ave] IP Q[uiet] [level] IP U[nban] <ipaddr> S[tats] IDS
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 <ipaddress | hostname>:<port> 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 <secs> -- 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 <secs> -- 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 <n> -- 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 <secs> -- "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 <from_call> <to_call> <text> 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 <km>" 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 <topic>" 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 "<keyword>: <value>" 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 | <axcall> | <hops> | <trip time> | <options> | 0x00 | '------'----------'--------'-------------'-----------'------' <------ Routing Information Packet ---------> <-------------- Routing Information Frame ----------------> <axcall> Callsign in AX25 format <hops> No. of hops to target (1-30) <trip time> Trip time to target in 10ms units (1-60000) <options> Variable length options field as below: Bytes: 1 1 n = <length> .----------.--------.--------------. | <length> | <type> | <data> | '----------'--------'--------------' <length> Length of data field in bytes (0-255) <type> Type of data field (0=alias, 1=IP addr) <data> 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 <host>[/len] <gateway> <port> [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 <I> 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 <ADD | PUBLISH> <host> <hwtype> <hwaddr> <host> is the neighbour's IP address in dotted quad form. <hwtype> is the hardware address type, i.e. "ax25" "netrom" or "ether". <hwaddr> 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 <DISC> 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 | <text> | CR | '-------'-------'-------'---'---'---'---'---'--------'----' <----- L3 Header ------><- Dummy L4header -><- Payload --> <l3src> is the sender's NODECALL <l3dst> is L3RTT-0 <L3ttl> is 2 (decremeted to 1 by recipient) The dummy header simulates L4 <INFO S0 R0>, and the <text> field is as follows (one space between each field): 6 10 10 10 10 6 11 n n n <fid> <ts> <srtt> <rtt> <pid> <alias> <id> <vers> <maxt> <flg> <fid> Frame ID "L3RTT:" <ts> Time stamp (10ms units) <srtt> Smoothed Round Trip Time <rtt> Last round trip time. <pid> Unique ID for this packet. <alias> Nodealias of sender. <id> INP3 version identifier: "LEVEL3_V2.1" <vers> Software name and version e.g. "XRouter201c" <maxt> Max trip time (10ms units) e.g. "$M60000" <flg> 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 <port-number>" 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 <nodecall>" 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 "<I R25 S32>" 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 <UA> 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 <SABME> instead of <SABM>. 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 <SABME> is <UA>, otherwise the correct response according to the AX25 protocol is either <DM> or <FRMR>, 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 <SABME> 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 <callsign>@<hierarchical-address>. For bulletins it may be simply <topic> or <topic>@<distribution>. For email it is <user>@<host>. 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 <localIP>[:port] <globalIP>[:port] [tcp | udp] NAT ADD OVERLOAD <localIP> <globalIP> <subnet_mask> 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 <localaddr> represents the "private" or "unregistered" IP address of a host on the stub network, and <globaladdr> 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 <local>[: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 <localaddr>" e.g. "NAT DROP 192.168.0.2". If the translation table entry includes port numbers, the form: "NAT DROP <local_address>[: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=<ipaddr>" statement in XROUTER.CFG, or by using a "DNS ADD <ipaddr>" 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 <target>" 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 <cmd> for syntax etc. help stor 211-STOR Upload file to server 211 Syntax: STOR <size> <filename> 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 <DIR> . 06-20-2020 04:07AM <DIR> .. 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 <bytes> <filename>", for example, "STOR 96507 xrpi-manual.txt". If this is acceptable to the server, it responds "150 OK <bytes>". Upon receiving this line, the client must send exactly <bytes> 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 "? **") <n> [n1 n2..] Read message(s) ? [*] Syntax and brief help A[bort] Aborts paused message reading/listing B[ye] Disconnect from the PMS. CB <cat> [dist] Copy any type of message to a bulletin CP <to> [at] Copt any type of message to a private msg EH <msgnum> Edit header fields for <msgnum> (*3) EX[port] <n> <file> Export msg <n> to <file> (*3) H[elp] Display list of commands. HO[ld] <msg> 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] <call> Display all WP info for <call> I@ <bbs> List users with <bbs> as their 'home' BBS IC <call> List users with pallsign <call> (*1) IH <haddr> List users at hierarchical address <haddr> IM[port] <file> Import message(s) from MBL-format file (*3) IN <name> List users called <name> (*1) IQ <qth> List users at <qth> (*1) IZ <zip> List users at <zip> / locator (*1) J [max] Show most recent [max] callers (default 10) K[ill] <n ...> Kill one or more messsages K> <call> Kill messages TO <call> (*1)(*2) K< <call> Kill messages FROM <call> (*1)(*2) K@ <dist> Kill messages AT <distribution> (*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] <n> List messages starting at number <n> L[ist] <f> <l> List messages from numbers <f> to <l> L> <to> List messages TO callsign or category L< <from> List messages FROM callsign L@ <at> List messages AT a distribution L$ [to] List messages waiting to be forwarded LA <n> List oldest <n> 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 <n> List the Last (most recent) <n> messages LM List Mine (all messages addressed to you) LN List New (unread) mail addressed to you LO <n> List oldest <n> messages (same as LA) LP [n] List [max of n] Private messages LR [to] List private mail that has been read LS <text> List messages whose subject contains <text> LT <text> List messages containing <text> in body LU [to] List Unread messages M[ine] List messages sent by you MB <file> <cat> Make Bull from file to category <cat> (*3) MF <n> <file> Make File from message <n> (*3) MFH <n> <file> Make File from message, incl headers (*3) MP <file> <to> 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> <to> Read messages TO callsign or category R< <from> Read messages FROM callsign R@ <at> Read messages AT a distribution R[ead] <n ...> Read msg(s), hiding routing headers. RH <n ...> 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 <topic> Send bulletin to <topic> SF Stop Forwarding run (*3) SP <call> Send personal message to <call> SR Send Reply to a message you just read U[nread] <msg> Unread a message (mark it unread) (*2) UH <n n | all> 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 <nodecall>" 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: <account name> <password> 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 <port> 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=<call1>[,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=<call> <alias> <qual> <ipaddr> <tcpport> [passwrd] For example: PROXY=GB7PZT KDRBBS 150 192.168.0.4 8888 bloggs <call> is the NetRom and AX25 callsign for the proxied system. <alias> is the NetRom / AX25 alias for the proxied system. <qual> is the NetRom "quality" (0 - 255) controlling visibility on the NetRom network. <ipaddr> is the proxied system's IP address. <tcpport> is the TCP service port number of the proxied system. <passwrd> 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 <CR><LF>, 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 <CR> 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=<call> <alias> <qual> <ax_call> <portnum> For example: PROXY=MB7UYL UYLBBS 150 G6KDR-3 7 <call> is the NetRom and AX25 callsign for the proxied system. <alias> is the NetRom / AX25 alias for the proxied system. <qual> is the NetRom "quality" (0 - 255) controlling visibility on the NetRom network. <ax_call> is the proxied system's AX25 L2 callsign. <portnum> 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=<call1>[,call2[,...]] AX25 / NetRom -> TCP: ~~~~~~~~~~~~~~~~~~~~ PROXY=<call> <alias> <qual> <ipaddr> <tcp_port> [passwrd] NetRom -> AX25: ~~~~~~~~~~~~~~ PROXY=<call> <alias> <qual> <ax_call> <portnum>
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 <portnum>, 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=<initstring>, 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 <callsign>@<hierarchical-address>. For bulletins it may be simply <topic> or <topic>@<distribution>. For email it is <user>@<host>. 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] <up | down> 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] <kiss | ppp | slip> 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] <idle | ipcp | lcp | log | pap> [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 <port> argument is omitted because XRouter knows which port the script is using. SEND - Send a line of text. Syntax: S[end] <text> 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 <text> argument may contain spaces, and the system will append a carriage return/line feed. SLEEP - Temporary pause. Syntax: SL[eep] <millisecs> 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] <millisecs> <string> [exiterr] Example: WAIT 5000 Password: exiterr WAIT causes XRouter to wait for specific responses from the modem or remote host. <millisecs> specifies the maximum wait interval. <string> 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 <nodecall>", to discover the local time, time zone and daylight saving status at a distant node. Or "PMS <nodecall>" 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<authstring> 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 <to> <from> <stamp> <text> <to> and <from> are callsigns <stamp> is the msg timestamp in secs since 1/1/70 <text> 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 <to> <from> <stamp> <rstamp> <to> and <from> are callsigns <stamp> is the msg timestamp in secs since 1/1/70 <rstamp> 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] <target_ip>", or (c) using "C <nodecall | nodealias> 87" or (d) using "TALK <nodecall | nodealias>" or (e) using "NTTY <nodecall | nodealias>" (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 "<name>: <value>" 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.