* * Digipeater from Dutch soil! PE1DNN 12-Aug-2000 * * Version: DNxxxxxx.ZIP (DN.ZIP) * * DNEXExxx.ZIP - DOS exe file plus additional files * DNSRCxxx.ZIP - DOS source wrapper, contains source * .TGZ file, wrapped because brain-dead MSDOS * does not understand long filenames * digi_ned-x.x.x.tgz - Source file for LINUX (contained in * DNSRCxxx.ZIP) * PREAMBLE -------- This is DIGI_NED, a rule driven digipeater using an INI file and containing special functions for use with APRS. APRS is a registered trademark of Bob Bruninga, WB4APR. His homepage can be found at: "http://web.usna.navy.mil/~bruninga/aprs.html". Why a new digipeater? The functions of this digipeater are comparable to other rule based digipeaters. Still there were good reasons to build a new one. 1) Existing digipeaters do not exactly do what we wanted it to do 2) Some digipeaters stop running on illegal frames, most notably frames with more than 8 digipeaters in it 3) We want to have source code to be able to add hardware options later, like connecting a Radio Direction Finder 4) The digipeater should run on a 286 with something simpler than BPQ 5) Suitable for rock-table 24/7 use 6) Ability to add function as we want to The source of this digipeater has been made available under the terms of the General Public License. DIGI_NED, as the digipeater is called (Digipeater from the Netherlands) has the following properties: * Intelligent digipeater, based on configuration rules from an .ini file (resembles other rule-based digipeaters but has the possibility to implement WIDEn-N correctly without ending up with extreme long paths. The rule "swap" enables correct handling of WIDEn-N). * Intelligent digipeating also works for destination-SSID based digipeating using the "digito:" rule. * Digipeater-call is only specified at one spot (in the sample near the end) in the .ini file, this makes it easier to replicate the .ini file. * Digipeats frames with PID AX.25, IP, ARP and NETROM. AX.25 and TCP/IP radio connections can be established via the digipeater. * Call substitution (with an option not to substitute) and counteractions against looping of packets (checks for its own digipeater-call in the digipeater "via" list and remembers CRCs of earlier heard packets) * Responds with beacons to ?APRS? queries * Supports automatic responses to messages, such as ?ping? * Can act as a "tiny-web-server" with configurable messages and pinpointing of interesting locations in the area * Support for covering "black-spots" * Preemtive digipeating, digipeat out-of-order/skip unused digis * Usable also for LINUX DIGI_NED can be used with all modems that can also be used by TFPCX (oh wonder, how is that possible...) so including the BPQ protocol over Ethernet, KISS, BayCom, YAM, SCC (PA0HZP, PE1PET, USCC) etc. In LINUX DIGI_NED users the kernel interface; anything connected to this should work. A general philosophy for DIGI_NED is the ability for a user to make his own configuration. An attempt is made to make the default configuration as useful and correct as possible, but the end- user determines in the end how the digipeater will behave and look like. This is the first attempt to generate documentation. I just collected stuff and parts I wrote. From that I assembled documentation in Dutch. Due to more international interest I will continue this documentation in English. I dropped the Dutch documentation. Volunteers are welcomed to generate docs in other languages. This will be the only document I will put in my distributions to avoid to much rework for each revision. This document will grow over-time as I add new bits and pieces. I would like reports and suggestions for enhancements. This DIGI is under our own control and can be adapted to our wishes. I want however to stick closely to the APRS specification! If you encounter any violation of this in the program and default .ini file please report it! Note that this reporting is important, if my default .ini file is wrong it will spread all-over the world! Kind regards, Henk. AX25_MAC Setup -------------- DIGI_NED makes use of a TSR program which drives the modems etc. This program is AX25_MAC. MAC is an abbreviation for Medium Access Control which is a common name in protocol software for the part driving the hardware. You always need to run this TSR when using the DOS version of DIGI_NED, without this TSR present DIGI_NED will refuse to start. This AX25_MAC is a MAC layer for AX.25. What it does is take raw frames of data, add a CRC and transmit as a HDLC packet to the hardware. Read frames are, when the CRC is correct, passed on in raw form to the program that uses the MAC layer. There is no intelligence in the MAC layer, it will transmit everything that is fed to it. AX25_MAC must be loaded into memory using parameters as also used for the TFPCX program. In 'run.bat' an example is given for the BayCom style 1k2 modem I use for testing. In short the parameters: Usage: AX25_MAC [ -N ] [ | -U ] -N no messages [] optional -U unload | alternative x hex digit n dec digit -P[:xxx:nn:nnnn] packet port [addr:IRQ:] -Bnnnn[:nnnn ...] baud rate (1 number/port) -F[file] read init file -D debug mode -C[xx] show DCD [color] -Ixx AX25_MAC interrupt -L interLock - one TX at a time (only for half-duplex ports) -BU[nnnn] number of buffers COMn | LPTn | PARn | YAMn | BPQnn | KISSn | DSCC | OSCC | USCC (n = 1-4, for BPQ n= 60-80) 0 = disable 2 = hardclock 4 = PA0HZP port (1 digit/ 1 = softclock 3 = DF9IC modem 5 = PA0HZP timer channel) This overview is also presented when invoking AX25_MAC the following way: AX25_MAC -? Parameters for configuring and adjustment to the used hardware are the same as for TFPCX. Get the documentation (English) from TFPCX273 to find out more about it. The distribution is available at "http://www.microlet.com/tfpcx" and at the NORD> DIGI_NED MYDIGI.INI The line above loads MYDIGI.INI instead of DIGI_NED.INI. When no alternative 'DIGI_NED.INI' file is supplied the DIGI_NED will read the DIGI_NED.INI which is present in the same directory as the .EXE file. You can supply the '-v' option for verbose output, or '-h' for help. Before starting DIGI_NED you have to exchange my call in the DIGI_NED.INI with the call you want to use for the digipeater. The call is only present in one place; at the end of the DIGI_NED.INI you will find: digi_call: PE1DNN-2 All DIGI_CALL fields which are present in DIGI_NED.INI will be replaced at runtime by the call supplied with the digi_call setting, in my case this is PE1DNN-2. As owner of the digipeater you have to supply your own call, this way the ?id query will return who is responsible for the digipeater. On top of that the owner will be able to execute the ?exit command when he or she wants to. You can assign more owners. The first one you assign will be used for the ?id query, but the others will be able the execute the ?exit command too. These other calls can be your own with a different SSID or a call of a co-maintainer. The text in digibcon.ini will be transmitted as beacon. Currently it contains an APRS message with the position of the DIGI. The syntax of this message and how to set it up can be found in the APRS specification. Do not forget to change the location, I have seen some strange stations at my QTH lately :-). Be aware that some characters are not allowed according to the specification! The text in digi_id.ini will be transmitted as station identification. It is just a plain text message for people watching with their AX.25 monitor and wonder which station is transmitting all the data they see. Don't forget to change the file so it contains your callsign. In DIGI_NED.INI you will find a "send:" command which specifies the interval for these beacon transmissions, from which file the beacon texts shall be read and on which ports it should be transmitted. Also the destination and digipeater calls are specified there. When the file for the beacon is specified without any path then DIGI_NED looks for it in the same directory as where the program is located. Now what does the digipeater exactly do and how? In APRS the digipeater-path is constantly manipulated. An APRS station uses generic calls in the "via"" list, such as 'RELAY', 'TRACE', 'WIDE' etc., which will be picked up by the digipeater, replaced by the digipeater's own call-sign and retransmitted. The clue is that an APRS station doesn't need to know which name a nearby digipeater has. The station just sends its frame with 'WIDE' in the via path and any digipeater in the area which responds to 'WIDE' will pick it up; there can be more digipeaters who do this at the same time. The WIDEn-N format needs some special handling which is done by so called "intelligent" digipeaters such as DIGI_NED. When a station starts with a digipeater like WIDE5-5 in the via path, the first "intelligent" digipeater that takes this frame will be change the call to WIDE5-4 as soon as it passes it. On the second "intelligent" digipeater it will become WIDE5-3 and so on until after the 5th digipeater the call has become WIDE5-0 (in other words WIDE5). Then the "digipeated" bit will be set (visible in most monitors by a '*' indication) and the next digipeater call in the via list will become due. TRACEn-N works similar. There is a lot to talk about this but that's out of context here. The default DIGI_NED.INI file executed the intelligent digipeating rules as we think they are meant to be. The behavior has been verified with the APRS SIG (Special Interest Group) on http://www.tapr.org. Lets just look how this works using one rule from the DIGI_NED.INI file: digipeat: 1 relay 2 This means: digipeat packets that arrive via port one and where the name of the digipeater that should be handled is 'RELAY' and send those back out via port two. For example an incoming frame via port 1: from 1: PE1DNN > APRS via PE1MEW-2*, RELAY, WIDE This frame was already digipeated by PE1MEW-2, the next digipeater in the via list is RELAY and that matches with the call in the digipeat: rule; this one should go to port two. In the digipeat rule nothing is specified after the '2', this is 'normal' digipeating. In that case the call is substituted by the digipeater call, e.g. PE1DNN-2. The transmitted frame to port 2 becomes: to 2: PE1DNN > APRS via PE1MEW-2*, PE1DNN-2*, WIDE That will be transmitted. Port specification 'all' means 'from all ports' and 'to all ports' So: digipeat: all relay all When receiving a frame from port 1: from 1: PE1DNN > APRS via PE1MEW-2*, RELAY, WIDE this will be transmitted using this rule: to 1: PE1DNN > APRS via PE1MEW-2*, PE1DNN-2*, WIDE to 2: PE1DNN > APRS via PE1MEW-2*, PE1DNN-2*, WIDE So transmission will be to both output ports when there are two (the number of ports depends on how may hardware ports are setup in AX25_MAC). You can do all kind of manipulation on the digipeater path, such as replacement with a completely new path, addition of digipeater calls to the via list etc. You can even handle digipeaters out of order or create a simple 'cluster'. What you can do is explained in the comment in the DIGI_NED.INI file. Be warned, it is a lot! Your imagination has to do the rest. The verbose output and logging are helpfull to analyse if your experimiments. If you want to know more, read also the FAQ chapter near the end of this document. Of course I would not mind if someone would write a nice textbook about how to set this up. But as a last resort there is the source, which I try to commented and clean, for the ultimate detail on every bit of DIGI_NED... SYNTAX ------ Here is an overview of the syntax of all the commands: Send: ----- send: