APRSDIGI(8) | System Manager's Manual | APRSDIGI(8) |
aprsdigi - APRS((Tm)) digipeater
aprsdigi options
Aprsdigi is a specialized Amateur Packet Radio (AX.25) UI-frame digipeater for the Automatic Position Reporting Systems, APRS(tm). It uses the Linux kernel AX.25 network stack as well as the SOCK_PACKET facility to listen for packets on one or more radio interfaces (ports) and repeat those packets -- with several possible modifications -- on the same or other interfaces. Aprsdigi can also use the Internet to tunnel connections among other APRS digipeaters and nodes using IPv4 or IPv6 UDP unicast or multicast.
Aprsdigi implements conventional packet radio AX.25 digipeating, in which a packet is digipeated if the next hop (non-repeated) digipeater ("via") callsign matches the AX.25 port's callsign and sub-station ID (SSID) or an alias callsign and SSID.
There are a number of extensions to conventional digipeating that have been proposed for use in the APRS community. Some of these features have been adopted by Terminal Node Controller (TNC) manufacturers, notably Paccomm and Kantronics. Aprsdigi implements most if not all of the commercialy adopted and proposed features. See the APRS 1.0 Protocol Specification at www.tapr.org for protocol documentation. Aprsdigi attempts to minimally comply with the protocol specification as well as support experimental APRS features. Specific features implemented include:
Put these options before each -p --interface to set new values as needed. The values you set are remembered for subsequent -p's so options you want to set for all interfaces need only be specified once, before the first -p. But you have to remember to unset an option if you don't want it to apply to subsequent interfaces.
--bud ax25:callsign-ssid matches only a given digipeater callsign and SSID. For example, -B ax25:n0clu-14.
--bud ax25:callsign matches all SSIDs for the given callsign. For example -B ax25:n0clu.
--bud ip:hostname matches one Internet host name (IPv6 or IPv4). For example -B ip:n0clu.ampr.net
--bud ip:address/maskbits matches all IP addresses that have the given prefix. For example --bud ip:44.0.0.0/8 matches the entire class-A network. --bud ip:192.168.0.0/16 matches the entire class-B network. --bud ip:fe80::201:3ff:fe9a:38c6 matches a single IPv6 host. --bud ip:2002:905::/32 matches the 32-bit IPv6 prefix.
aprsdigi responds to the following signals:
All other normal termination signals cause final statistics to print before aprsdigi exits.
SSID-based routing uses a non-zero sub-station ID in the destination callsign, an empty digipeater path to indicate that the APRS digipeater should repeat the packet after filling in an appropriate digipeater path. For example, a packet sent to “T1QS4W-3” would be repeated with a modifed destination of “APRS VIA WIDE3-3” (in a network that supports WIDEn-n flooding). A packet sent to “APRS-11” would be repeated to the West unproto path, as defined with the --west option. A table of SSID values and their paths follows:
SSID unproto path ---- ------------ 0 none 1 WIDE1-1 2 WIDE2-2 3 WIDE3-3 4 WIDE4-4 5 WIDE5-5 6 WIDE6-6 7 WIDE7-7 8 NORTH UNPROTO path 9 SOUTH UNPROTO path 10 EAST UNPROTO path 11 WEST UNPROTO path 12 NORTH UNPROTO path + WIDE 13 SOUTH UNPROTO path + WIDE 14 EAST UNPROTO path + WIDE 15 WEST UNPROTO path + WIDE
SSID digipeating was first introduced with the Mic-Encoder but works with any destination callsign with a non-zero SSID. The theory behind destination SSID digipeating is described in more detail in the APRSdos README, MIC-E.TXT. Basically, the idea is to minimize packet lengths and to have the manager of the WIDE APRS digipeater determine the most appropriate directional digipeat paths, removing the burden from the mobile user.
Aprsdigi also fits into a non WIDEn-n network by using the same algorithm for selection of subset of digipeaters from a list supplied with the --digipath option as the MIC-E. That is, SSIDs of 1, 2 or 3 select that number of digipeaters from the first three digipeaters in the --digipath list. SSIDs of 4, 5, 6, or 7, start at the fourth digipeater in the list.
APRS flooding (WIDEn-n) digipeating works by repeating any received packet whose next hop digipeater has a flooding alias (specified with the --flood option), and the SSID is 1 or greater. The SSID is decremented by one, and the packet is repeated. Furthermore, to prevent broadcast storms, recently transmitted packets are remembered for a period of time specified by the --keep option and are not repeated if they are heard within that time period.
Unlike conventional digipeating, in which the digipeater callsign/alias is flagged as “repeated”, the flooding mode does not do this. Once the SSID decrements to zero, then a flooding alias is treated just like any other alias, and does get marked as repeated upon transmission.
“Flooding” Trace aliases (TRACEn-n; --trace option) are treated like flooding aliases with the addition that, besides decrementing the SSID, the current interface's callsign is inserted in front of the trace alias, providing a record-route function. “Plain” trace aliases (TRACE; also --trace option) are simply substituted in the conventional ( --subst_mycall ) manner.
In single port operation, there is only one interface specified with --interface. All packets are received and some are retransmitted on the same interface, depending on whether they match the criteria for retransmission after translation of the digpeater path from one of the APRS-specific formats:
or a conventional next-hop (non-repeated) digipeater matching the callsign or one of the aliases for the interface.
The decision to transmit is made by matching the next hop callsign/alias with the table of callsigns and aliases you supply to --interface.
In multi-port operation, this same technique simply extends to several interfaces. Besides each interface's unique callsign, you can give the same alias to several interfaces. This results in a one-to-many fanout which might be useful for dual frequency operation such as a general use APRS net frequency and an event-specific frequency.
By using different flags for Mic-E expansions, etc. you can tailor these fanouts differently on each of these interfaces, perhaps keeping Mic-E packets compressed on one frequency while decompressing them on another.
The --dupe intf option will duplicate a packet received on one interface to the interface name given. If you want to duplicate to several other interface, repeat --dupe intf for each interface. The packet is duplicated verbatim as received. No callsign substitution, flooding or other processing or checking such as whether the packet still has any non-repeated digipeaters in the list is checked. This feature is meant to provide a means to simply repeat received packets verbatim, on an RF interface, for example, out an interface that might be an Ethernet, that has APRS client applications running on it (or aprsd listening on a UDP interface). Digipeating without the normal processing can be dangerous since the digipeater list is never used up. Because of this, packets received on a given interface will never be blindly duplicated back to the same interface, regardless of the option setting.
Note that TRACEn-n vs. plain TRACE do different things: TRACEn-n *inserts* calls into the digipath while decrementing ssid, e.g.:
RELAY*,TRACE3-3 RELAY,N2YGK-7*,TRACE3-2 RELAY,N2YGK-7,WB2ZII*,TRACE3-1 RELAY,N2YGK-7,WB2ZII,N2MH-15*,TRACE3 RELAY,N2YGK-7,WB2ZII,N2MH-15,WA2YSM-14*
Kill looping packets (--kill_loops option):
RELAY*,WIDE,WIDE,WIDE RELAY,N2YGK-7*,WIDE,WIDE RELAY,N2YGK-7,WIDE*,WIDE
Normally n2ygk-7 would respond to this, but, by finding one of mycall earlier in the path, I know to ignore it.
Following is a sample invocation of aprsdigi running on two ports. This is a contrived example that tries to show all the features. Comments to the right describe each feature.
aprsdigi \
--verbose \ # verbose
--north "N2YGK-2 WB2ZII WA2YSM-14" \ # North digi path
--south "N2YGK-3 WB2ZII WA2JNF-4" \ # South ...
--east "N2YGK-3 WB2ZII KD1LY" \ # East ...
--west "N2YGK-2 WB2ZII N2MH-15" \ # West ...
--flood "WIDE" \ # WIDEn-n flooding
--trace "TRACE" \ # TRACEn-n tracing
--kill_dupes \ # kill dupes
--kill_loops \ # kill loops
--mice_xlate \ # do Mic-E translation
--subst_mycall \ # do callsign substituton
--tag " via 147.06 (WB2ZII/R)" \ # add this tag to rec'd pkts
--nobud "ax25:NOCALL" \ # ignore pkts from NOCALL
--dupe udp:233.0.14.100 \ # dupe everything heard
--int ax25:sm0:RELAY,WIDE,TRACE \ # ax25 soundmodem intf
--nomice_xlate \ # turn off Mic-E translation
--x1j4_xlate \ # do X1J4 translation
--nosubst_mycall \ # turn off callsign subst.
--tag - \ # clear the tag
--int ax25:ax0:RELAY,WIDE,FOO,TRACE \ # ax25 ax0 intf.
--bud - \ # clear the budlist
--bud ip:128.59.39.150/32 \ # allow only from this IP host
--int udp:233.0.14.99/12345/16:N2YGK-4,RELAY,WIDE,TRACE \ # multicast
--int udp:233.0.14.100/12345/16:N2YGK-5 # to this mcast group opening UDP socket on 233.0.14.99/12345/16 UDP address info: family 2 type 2 proto 17 next 0x0 Linux APRS(tm) digipeater Copyright (c) 1996,1997,1999,2001,2002,2003 Alan Crosswell, n2ygk@weca.org Version: aprsdigi aprsdigi-2.4.3 This is free software covered under the GNU General Public License. There is no warranty. See the file COPYING for details. # configuration:
budlist 1 deny NOCALL/48
budlist 2 permit 128.59.39.150/32 interface ax25:sm0
callsign N2YGK-2
alias RELAY
alias WIDE
alias TRACE
option SUBST_MYCALL on
option MICE_XLATE on
option X1J4_XLATE off
option I_TX on
option I_RX on
option I_TXSAME on
option idinterval 570 #(09:30)
option tag via 147.06 (WB2ZII/R)
budlist 1 interface ax25:ax0
callsign N2YGK-3
alias RELAY
alias WIDE
alias FOO
option SUBST_MYCALL off
option MICE_XLATE off
option X1J4_XLATE on
option I_TX on
option I_RX on
option I_TXSAME on
option idinterval 570 #(09:30)
option tag #(none)
budlist 2 interface udp:233.0.14.99
callsign N2YGK-4
alias RELAY
alias WIDE
alias FOO
option SUBST_MYCALL off
option MICE_XLATE off
option X1J4_XLATE on
option I_TX on
option I_RX on
option I_TXSAME off
option idinterval 570 #(09:30)
option tag #(none)
budlist 2 # end of configuration My callsigns and aliases (routing table): Callsign Interfaces... N2YGK-2 sm0 RELAY sm0 ax0 233.0.14.99 WIDEn-n sm0 ax0 233.0.14.99 TRACEn-n sm0 N2YGK-3 ax0 FOO ax0 233.0.14.99 N2YGK-4 233.0.14.99 SSID-based directional routing: N: N2YGK-2 WB2ZII WA2YSM-14 S: N2YGK-3 WB2ZII WA2JNF-4 E: N2YGK-3 WB2ZII KD1LY W: N2YGK-2 WB2ZII N2MH-15 keep dupes for: 28 seconds log file: (none) kill dupes: ON loops: ON testing: OFF
Aprsdigi should not be confused with a Wes Johnson's DOS program of the same name. This code has most recently been tested with the Linux 2.4.20 kernel under Red Hat Fedora Core 1. The command line syntax is ugly and will eventually be replaced by a configuration file. Short options are deprecated and will dissappear in a future release. Please use long options.
/etc/ax25/axports
call(1), listen(1), beacon(1), ax25(4), kissattach(8), ifconfig(8), aprsmon(1), http://www.tapr.org
Alan Crosswell, n2ygk@weca.org
APRS and the Mic-Encoder are Trademarks of APRS Engineering LLC.
25 February 2004 |