If upgrading, please replace your original aprsd.init file with the new one suppled in this release.
There are also some new features in the aprsd.conf file.
Also please add 2 new log files to your /etc/logrotate.conf file. They are loop.log and reject.log .
Please read README.STLportfor information about a thread-safe stl library and how to build aprsd to use it. It is probabaly not needed if your compile using the newer gcc 3.xx compilers found on RedHat 8 and late versions of Mandrake and Suse .
Most noteworthy changes are:
00) Added new daemon install/remove scripts for Suse Linux. If you have Suse please use INSTALLDAEMON.suse and REMOVE.suse .
0) Now will compile with GNU gcc 2.9 , 3.1 and 3.2 compilers. The 3.1 and 3.2 compilers will emit lots of "deprecated" warnings but they can be ignored.
1) Added wild card "*" support to "gate2rf" command in aprsd.conf. See gating to RF section for details.
2) Added filter code in aprsString to reject "EH?" and "cmd:" packets. Packets that don't look like ax25 format or are longer than 250 bytes are rejected.
3) Removed directed query responses. Fixed general query "?IGATE?" response to comply with
APRS spec 1.0.
Example query response:
testaprsd>APD215,TCPIP*:<IGATE,MSG_CNT=0,LOC_CNT=0,CALL=WA4DSY,LOCATION=Atlanta_GA,
HOST=lab1.wa4dsy.net,IP=216.27.174.141,EMAIL=sysop@myisp.net,VERS=aprsd 2.1.5
Also blocked ?IGATE? queries from RF to Internet. A query from RF will only trigger a single response from the igate(s) that hear the station on RF.
4) Stopped sending System Status messages on Link port (1313) and Message Port (1314).
You will no longer get
"aprsdATL>JAVA::javaMSG :Atlanta_GA Linux APRS Server: 127.0.0.1 connected 2 users online."
and other such messages on these ports as other users connect and disconnect. However, to provide
compatibility with some applicaitons that verify their own logon with these messages, the apps
own connect and logon status messages still be sent back. In other words, you see your own
logon activity by no one elses.
5) Removed code which cleared the 8th bit of users data. This allows 8 bit wide characrter sets to be passed.
6) Added support for NOGATE or RFONLY in path. If a packet from any source has NOGATE or RFONLY in the path it will discarded and not be put on the Internet.
7) The server now adds information to the end of the ax25 PATH indicating the source of each packet . eg: qAR,WA4DSY. This is known as the "q Construct". As of beta 8 the format complies with modifications and improvements made by Pete Loveall AE5PL.
8) Added OmniPort. This new port lets the users define their own custom streams. It defaults to 14600.
9 ) Added new keyword "Server" to aprsd.conf file. It replaces the old "Igate" command (although Igate is still honored). A command such as "server first.aprs.net 23 hub-sr" defines the connection to first.aprs.net as a send/receive hub connection. The user passcode is supplied with another keyword "pass". See aprsd.conf docs for details.
10) Added a new page of data to the html status page. Clicking on the users port number opens port filter status in a new window. There you can observe which streams each user is being sent. This became importaint because of the new OmniPort and its user definable streams.
11) Added bandwidth controls. Sysop may now specify the maximum allowed server load in bytes/sec. New users are rejected when the limit would be exceeded and the latest high bandwith users are disconnected if the load increases beyond the specfied limit. Keyword is "MaxLoad" in aprsd.conf .
12) TNC sysop mode can only be accessed from the new TncSysopPort 14500. Aprsd will now automatically put your telnet client into character-at-a-time mode for better operation with the TNC command line. 13) INIT.TNC now has FILTER OFF as the default. This stops the mangling of some Mic-E packets.
To conform to standard practice I suggest changing your BEACON strings to show a GATEWAY diamond with an "I" overlay. Below is an example from the aprsd.conf file. Your existing file may have the symbol set to "TCPIP" if you are upgrading from previous aprsd versions.
EXAMPLE:
NetBeacon 10 !0000.00NI00000.00W& aprsd Linux APRS Server
The symbols are defined in the APRS Spec document in appendix 2
and on page 89.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA
HAMS may apply the APRS formats in the TRANSMISSION of position, weather, and status packets. However, the author reserves the ownership of these protocols for exclusive commercial application and for all reception and plotting applications. Other persons desiring to include APRS RECEPTION in their software for sale within or outside of the amateur community will require a license from the author. Also TRANSMISSION of APRS protocols in any NON-AMATEUR commercial application or software will require a license from the author.
Bob Bruninga, WB4APR
115 Old Farm CT
Glen Burnie, MD 21060
It has only been tested on RedHat Linux 5.1 , 5.2, 6.0 and Mandrake 5.3 - 8.1 . It requires libstdc++ 2.8.0 or later to run. It will NOT run on RedHat 4.2.
The program gets data from a TNC connected to a serial port
and sends it to all clients who have connected to any of several user
defined tcp ports. Some defaults are 1313, 10151, 10152 and 14579.
It was designed to duplicate most if not all of the functionality of
APRServe, a Macintosh APRS server designed and coded by Steve Dimse, K4HG.
See http://www.aprs.net/aprserve.dcc.html
It can also gate data coming from the Internet to the TNC for
transmission on the local VHF RF network.
Clients can use telnet to watch TNC data.
eg: telnet www.wa4dsy.net 14579
If raw TNC data is desired port 14580 can be used.
Scripts written in languages such as perl can connect to the server and interact with the data. A UDP port is provided to simplify injection of data into the aprs stream by scripts.
The system operator can use telnet to monitor the server status
by connecting to any port and enter entering his callsign and passcode
and entering "monitor" for the version field. eg: user WA4ZZZ pass 12345 vers monitor
Also he can enter remote sysop mode and gain direct control of the TNC on sysop port 14500.
There is also a quota system to further reduce the quanity of data in the history list. Each AX25 source call sign is allowed three packets in the history list. One position report, one weather report and one "other". Only the most receint of each type is retained.
Documenation Files: aprsddoc.html This file. ports.html Detailed info about aprsd ports revisions.txt Detailed list of revisions by version number q.htm, qalgorithm.htm Q construct docs by Pete Loveall. Executable files: aprsd The APRS server executable aprspass Computes aprs passcodes from callsigns aprsd.init Script that starts and stops aprsd Configuration files: aprsd.conf Main configuration file for aprsd user.deny List of users with restrictions placed on them welcome.txt This file is sent to users when they connect INIT.TNC This file is read into the TNC when the server starts RESTORE.TNC This file is read into the TNC when the server closes Log Files: aprsd.log Created by server to log all user connections thirdparty.log Third party packets gated to RF udp.log Data from the UDP port logged here rf.log Data from our TNC after being digipeated history.txt Created by the server when it closes to save the history buffer. Data is read when it restarts. Install files: INSTALLDAEMON Installation script for running as a daemon INSTALLPGM Installation script for running as a program REMOVE UnInstall script - deletes /home/aprsd2/*
/home/aprsd2 aprsd aprspass user.deny welcome.txt INIT.TNC RESTORE.TNC aprsd.log thirdparty.log rf.log udp.log aprsd.conf history.txt /etc/rc.d/init.d aprsd.init /etc/rc.d/rc3.d link to aprsd.init /etc/rc.d/rc5.d link to aprsd.init /etc/rc.d/rc6.d link to aprsd.init
Note that this also compiles the program if the executable "aprsd" does NOT exist in the source directory. To re-compile updates in this directory you must do: "make clean" then "make".
You can also start it as a daemon by using the -d option. eg: ./aprsd -d
The serial device for TNC data and tcp port numbers are set in the /home/aprsd2/aprsd.conf file. You can edit this file in the directory you used to uncompress the distribution files then run INSTALL to make the changes effective. INSTALL also will copy the distribution welcome.txt, INIT.TNC and RESTORE.TNC to /home/aprsd so be sure you make changes to these in the distribution directory before running INSTALL.
To stop the server go to the /etc/rc.d/init.d directory and enter "./aprsd.init stop". To restart enter "./aprsd.init start" . Also, you can use the "service" command. eg: service aprsd.init start .
First, stop the aprsd daemon by entering: /etc/rc.d/init.d/aprsd.init stop or "service aprsd.init stop" .
It can be re-started as a user program changing to the /home/aprsd2 directory and typing its name " ./aprsd " Note: you will need to be logged on as root unless your user name has write priviliges on the directory /home/aprsd2 and all the files in it.
If you want to be able to log on as remote sysop and take control of the TNC you will need to add a "tnc" group to the /etc/group file. See "REMOTE TNC SYSOP ACCESS" below for more details.
Note that this also compiles the program if the executable "aprsd" does NOT exist in the source directory. To re-compile updates in this directory you must do: "make clean" then "make".
While running, once each minute this server will emit a status message to the console. Also, it tells you each time it sends out a packet and to how many users. It also shows you what it's sending to the TNC. One field in the status message is aprsString Objs. This is a debugging tool to help find memory leaks. It should be no more than 1 or 2 higher than the History items field. Sometimes it will read much higher but should return to a difference of 1 or 2 within a minute or so.
Ctrl-C or "q" will shut down the server in an orderly manner and save the current history list (last 30 mins of select received data) to disk.
#aprsd 2.1.5 server configuration file # #This file is read ONCE on server startup. #You must restart aprsd for changes to take effect. #eg: /etc/rc.d/init.d/aprsd.init stop (then start) # OR: service aprsd.init stop # #Lines starting with "#" are comments and are ignored #Key words such as "mycall" and "maxusers" are NOT case sensitive. #MyCall is the same as mycall. # #*** There is no error checking so be careful ****** # # #Servercall is the ax25 source call used in packets #sent from the server to Internet users. (9 chars max) #Note: Does not go out on the air. # servercall aprsdATL # #MyCall This is over-written by the MYCALL string in INIT.TNC MyCall N0CALL MyLocation Atlanta_GA # #This email address will be sent in replies to ?IGATE? queries. #It also appears on the HTML status page. # MyEmail sysop@myisp.net # #Set MaxUsers to a value that your Internet connection can support. MaxUsers 25 # #Set maximum server load in Bytes/sec. MaxLoad 3000 # #This determines if Mic-E packets are converted to classic APRS packets. #Put 'no' unless you have a very good reason to do conversions. #This option must also be enabled in the SOURCE CODE. To turn it on #you must edit "constant.h" and change CONVERT_MIC_E from FALSE to TRUE. #then recompile aprsd. ConvertMicE no # #Define beacon text. The server will supply the ax25 path header. #The first number after "NetBeacon" is the time interval in minutes. #Comment out the line or set time interval to 0 to disable beacon. #The rest of the line can be any aprs protocol conforming packet. # NetBeacon 10 !0000.00N/00000.00W& aprsd Linux APRS Server # #Define the TNC beacon. The TNC will supply the ax25 path header. #It's optional and you may use the TNC BTEXT in the INIT.TNC file instead. # #TncBeacon 15 !0000.00N/00000.00W& aprsd Linux APRS Server # # #Send 2 extra message acks is addition to each received ack to TNC #Range 0 to 9 ackrepeats 2 # #Send extra acks at 5 second intervals #Range 1 to 30 seconds ackrepeattime 5 # #Set history list items to expire in 35 minutes expire 35 # #Define the TNC serial port (9600 baud) #Note: This device must have write permissions #If undefined all TNC related functions are disabled. tncport /dev/ttyS0 # #Set TNC baudrate. Values are: 1200,2400,4800,9600,19200 . tncbaud 9600 # # Allow Internet to RF message passing. rf-allow yes # #TRACE causes the server to append its own callsign to the end #of the AX25 path of every packet processed. #To conserver bandwidth this should only be #done for short periods to track sources of problems. # Trace no # #Set filterNoGate YES to block RFONLY and NOGATE packets filterNoGate yes # #Set history-allow to NO if you do not want users to get history dumps. history-allow yes # #Set the minimum time between TNC transmit packets in milliseconds TncPktSpacing 1500 # # Disallow packets transmitted from our own TNC from # being igated back to the Internet after being digipeated. igateMyCall no # #Set this to 'yes' if you want to log ALL PACKETS heard on RF to /home/aprsd2/rf.log #If 'no' then only packets with your callsign will be logged. (New in 2.1.4) logAllRF no # #------------------------------- #Server connection definitions #usage: Server <host name> <host port> <TYPE-DIR> <optional OmniPort filter command> #The TYPE-DIR field sets the connection type and data flow. #TYPE is either "SERVER" or "HUB" #SERVER connections attempt to maintain a connection to the designated host. #HUB connections maintain a connection to only ONE hub and rotate to the next #if the connection fails. #DIR is either "RO" or "SR" RO is Receive Only. SR is Send and Receive. #Eamples: HUB-RO HUB-SR SERVER-RO SERVER-SR #If you select -SR to send data you must also supply a passcode #using the "PASS" command. #These commands are NOT case sensitive. # #The PASS command. The callsign supplied in MyCall and this # passcode allow you to send data to distant servers. # PASS can be computed from MYCALL with the aprspass program. # Note: this example is invalid. # pass 93456 # #Example send-receive HUB connections #Hub is like Server except only ONE hub connection is active at a time. #If the hub connection fails the next hub is tried in rotation until one accepts a connection. # Server second.aprs.net 23 hub-sr Server first.aprs.net 23 hub-sr Server third.aprs.net 23 hub-sr # # #Example Receive-Only HUB connecton #Server first.aprs.net 23 hub-ro # #Example Send-Receive SERVER connection. The SERVER type maintains a connection to #the specified server. No rotation. #Server first.aprs.net 23 server-sr # #Example of OmniPort connection to receive the local stream (tnc). #Note: OmniPort is currently available only on aprsd 2.1.5 # #Server wa4dsy.net 14600 server-ro portfilter(local) # #Define server listen ports (see ports.html) rawtncport 14580 localport 14579 mainport 10151 mainport-nh 10152 linkport 1313 msgport 1314 udpport 1315 httpport 14501 ipwatchport 14502 errorport 14503 omniport 14600 sysopport 14500 # #define trusted users of the UDP port. #usage: trust <ip address> <subnet mask> #trust 208.148.145.151 #trust 208.148.145.144 255.255.255.240 # #Selected call signs which are always gated to RF #if they are not seen locally. All packets from #these are gated in real time. Do not use unless #you really need real time data. Consider posit2rf below. #They are case sensitive! Use upper case. Up to 64 may be defined. #As of version 2.1.5 the * wild card character is supported. #All characters beyond the * are ignored. #ie: WA4* would match ALL call signs beginning with "WA4" #gate2rf K4HG-8 N4NEQ* #gate2rf W7LUS-14 # #Call signs of stations whose posits are gated #to RF every 15 minutes. Only posit packets are #gated. Posits are taken from the history list. #They are case sensitive! Use upper case. #posit2rf N4NEQ-9 #posit2rf W7LUS-14 # #Define a list of message destination call signs or aliases #to gate to RF full time. Note: the CQGA example #below is CQ GA (Georgia). Edit to suite your locale. #Up to 64 of these may be defined. They are case sensitive. # msgdest2rf SCOUTS KIDS CQGA # #end
Use the HUB mode (hub-sr) only with APRS servers which carry the full global feed such as first.aprs.net, second.aprs.net and third.aprs.net. Using HUB with all 3 of these establishes a single connection to one of them. When that connection fails the next one will be tried until a new connection is established.
Server mode (server-ro or server-sr) connections should be used for regional servers that do not carry the full aprs data stream.
This server has a port (1314) which only supplies station to station messages and corresponding posits. Other servers which will be used ONLY to relay 3rd party station to station messages to their local VHF network may want to connect to this port to greatly reduce the amount of data on their tcpip connection.
Click here for a list of APRS servers and active port numbers.
Be sure the device ( dev/ttyS* ) has the proper read/write permissions or the server will not be able to access it.
Root can set the serial port so it can be written to by anyone with the following command:
chmod ugo+w /dev/ttyS0
NOTE: If you don't define a device for the com port in the aprsd.conf file all TNC related functions in the server are disabled.
Ctrl-\ shuts down without saving anything.
When running as a daemon you can shut it down when logged on as root by issuing this command: "service aprsd.init stop".
tnc::102:root,wa4dsy,bozo
In this example users root,wa4dsy and bozo are assigned to the tnc group.
After you have logged on, everything you type goes to the TNC and all TNC output data goes only to you. The TNC is effectivly disconnected from all other internet users. Hit control-C to get the TNC into command mode.
To exit remote TNC access hit the
REMEMBER TO ENTER THE TNC "K" COMMAND BEFORE YOU EXIT.
To disconnect hit ctrl-D .
/home/aprsd2/aprsd.log User logons and logoffs and some system activity msgs. /home/aprsd2/thirdparty.log 3rd party messages sent on RF. /home/aprsd2/udp.log Record of data entering from the UDP port. /home/aprsd2/rf.log Record our own packets heard on RF by the TNC. (After being digipeated) /home/aprsd2/loop.log Packets that were NOT flaged as duplicates and rejected by the LOOP detector. /home/aprsd2/reject.log Packets rejected by aprsd excluding dups.These can be viewed in real time with: tail -f /home/aprsd2/aprsd.log or the name of the log you want to monitor.
You can also use the "less" program to view it. After entering "less /home/aprsd2/aprsd.log" you type "F" to follow it in real time. Type ctrl-C to exit "F" mode.
All 3rd party station to station messages relayed from the Internet to RF are logged in /home/aprsd2/thirdparty.log
3rd party formatted packets received by the TNC with "TCPIP" in the 3rd party path will never be sent anywhere.
Data from the UDP port are logged in /home/aprsd2/udp.log .
All data heard on RF with the "MYCALL" callsign with be logged in rf.log . This feature lets you see what you have sent out on RF if you are being digipeated by someone else.
To keep the log files from getting too large they need to be rotated on a regular basis. Add the following to your /etc/logrotate.conf file. Log files will be rotated daily or weekly and the oldest deleted after 4 rotations. Feel free to modify the schedule to suit your needs.
/home/aprsd2/aprsd.log { weekly rotate 4 } /home/aprsd2/thirdparty.log { daily rotate 4 } /home/aprsd2/udp.log { daily rotate 4 } /home/aprsd2/rf.log { daily rotate 4 } /home/aprsd2/loop.log { daily rotate 4 } /home/aprsd2/reject.log { daily rotate 2 }
It came from a logged on verified registered user.
and
The originator was not seen on the TNC RF data stream in the past 30 minutes.
and
The destination HAS been seen on the TNC RF data stream in the past 30 minutes and doesn't have "GATE*" in his path and has been repeated less than 3 times.
and
The line "rf-allow yes" is in the /home/aprsd2/aprsd.conf file.
Version 2.0.8 and later allows you to define up to 64 message destination call signs or aliases which will always be gated to RF if "rf-allow yes" has been defined. See the example aprsd.conf file for an example of how to use the "msgdest2rf" command to enable this feature. For each 3rd party messge delivered to RF the latest position report packet of the originating station will also be sent after reformating the path in 3rd party format. The program pulls the posit from the history list if it's in there.
eg:
KE6DJZ>AP0917,KB6TLJ-5,RELAY,WIDE:=3415.99N/11844.34WyAPRS+SA
becomes:
}KE6DJZ>AP0917,TCPIP,WA4DSY*:=3415.99N/11844.34WyAPRS+SA
(assuming "MyCall" is WA4DSY )
During a series of messages the position packet will only be sent with a message every 10 minutes unless the station emits and new one.
This server will NOT igate a 3rd party _reformatted_ message from RF to the Internet which has been previously on the Internet. ie: has TCPIP in the 3rd party path. 3rd party packets without TCPIP in the 3rd party path will be converted to normal packets and processed in the usual way.
Users of unregisterd client programs can send their own station-to-station messages to other Internet users. These messages will not go out on the TNC RF channel and the path will be modified (TCPIP is changed to TCPXX*) so other hubs will know not to send these messages out on their RF channels. Unregistered users cannot Igate packets other than their own. In other words, the ax25 source call in their packets must match their logon call and "TCPIP" must be in the path. (TCPIP* or TCPXX* will not work either)
eg: assume N0CALL is unregistered and attempts to send the following into the server.
N0CALL>APRS,TCPIP:>TESTING
This will be converted to N0CALL>APRS,TCPXX*:>TESTING
and gated to other users (but not to RF!)
However...
W4ZZZ>APRS,TCPIP:>TESTING
or
N0CALL>APRS,TCPIP*:>TESTING
will be deleted and not sent anywhere.
Telnet users must provide a user name or call sign
before any of their data can be relayed to the internet.
They need to enter "user callsign pass -1" so the server will
accept the data. The ax25 FROM call in packets they send
must match the call sign they loggon with. If they provide
a valid password full priviliges are granted since they
used the keyboard to emulate a client program logon string.
(Not that anyone would want to do this except for testing)
This server will also accept valid user/password combinations for the Linux system it is running on. These users must be in the aprs group. This group can be added by editing the /etc/group file.
Note:
This program trusts other versions of itself and APRServe to flag the paths of data from unregistered Internet users with "TCPXX*". Station to station messages flagged this way will not be sent out on RF. The IGATE commands in the aprsd.conf file should specify a remote host port which is secure. For IGATES it must be a port which doesn't echo any Internet user data, only TNC data. Full function servers such as APRServe and this version (2.x.x) of aprsd will change TCPIP* to TCPXX* in the paths of unregistered users on all ports.
Users of the current java APRS applet don't log in at all and are granted read-only access
If the users APRS name and pass code aren't valid the validate module tries the Linux pass word validator for the "aprs" group. If that also fails it waits 10 seconds then returns the bad news to aprsd which notifies the user.
NOTE: aprsd must be run as root for the Linux password validator to work.
However, the APRS user and passwords (from Mac/WinAPRS users)
will be properly tested regardless of what user is running aprsd if
"aprsPass yes" is in the aprsd.conf file.
The logon format:
user
eg: user N0CALL pass 00001 vers MacAPRS 3.0
You can telent to a port and enter the following,
assuming your Linux user name is bozo and you password is
xyzzy and you are part of the aprs group as defined in
the /etc/group file.
user bozo pass xyzzy
To monitor some server status data you can enter:
user bozo pass xyzzy vers monitor
The aprs data stream is turned off and "Monitor Mode" is entered.
Once a minute the server will send a status message to you.
Once you have logged on, ctrl-D will not cause a disconnect.
You have to use your Telnet escape key then do a quit.
I had to do this to prevent inadvertant disconnects due to
possible spurious control codes in some users data.
might be sent by a MacAPRS user.
As pass code of -1 means you are an unregistered user,
not a hacker trying out an bogus password.
user.deny example: W4EVIL L <--- Prevents sending of packets into the server or RF W4SOB R <--- Prevents any of his packets from getting on RF even if they came from another igate. NOTE: This file is read every time aprsd needs to check users so you will NOT need to restart the server when you change it.If the abuse becomes serious enough you might consider putting "aprsPass no" in the aprsd.conf file. This turns off the checking of aprs passcodes and only allows Linux user/passwords. You will need to have all your users in the Linux passwd file.
There are three "modes" of doing this. The most permissive allows all packets from a selected station to be sent to RF in real time. The second mode only allows position report packets to be sent on RF every 14.9 minutes. This puts much less strain on the RF network and is the recommended mode.
The third mode which was new in version 2.0.8 gates 3rd party station to station messages to RF full time if the DESTINATION call sign or alias is defined in the aprsd.conf file after the msgdest2rf keyword.
You select the stations by entering them in the /home/aprsd2/aprsd.conf file. Up to 64 stations can be defined. Several can be put on each line. The server must be restarted before any changes to aprsd.conf take effect.
In version 2.1.5 the "*" wild card character is supported. Characters
past the "*" will be ignored in the compare operation. For example
W7LUS* would allow all W7LUS ssids to match.
Examples:
These stations posits are sent to RF every 15 minutes: posit2rf K4HG-8 N4NEQ-9 posit2rf W7LUS-14 All packets from this station are gated to RF full time. gate2rf N0CLU-9 Any call with the first 5 characters matching W7LUS will be gated to RF full time. eg: W7LUS-1 and W7LUS-13. gate2rf W7LUS* This allows any message addressed to SCOUTS, KIDS or CQGA to go to RF even though these "call signs" were not heard locally. msgdest2rf SCOUTS KIDS CQGANote: The posits of stations in the "posit2rf" list are sent at 14 second intervals. It takes 14.9 minutes to scan the list of 64 before it repeats. The posits are taken from the 30 minute history list. If no posit is available for the station then no data is transmitted.
Version 2.1.5 adds support for NOGATE and RFONLY in the path. Any packet from any source with "NOGATE" or "RFONLY" in its path will be discarded.
The unconverted raw Mic_E packets from the local TNC can be observed by telneting to port 14580.
The first added path elemement is a three letter code indicating data protocol and info about the source of the packet. This code can be expanded in the future as needed.
The first character is always "q". The second character is a protocol identifier for the data payload. Currently only A=APRS is defined. The third character is a code that identifies the source of the packet. The possible codes are C, X, R, , r, S, U, I, Z. They are defined as follows:
Code Source C Validated Client (User). Packet had no q construct. X Unvalidated Client R RF packet from local TNC or converted from CALLSIGN,I construct r Same as above but received indirectly via another server. S Server or Hub U UDP port on aprsd server I Internal status message from aprsd server and Trace Packet Z Zero hops and Internal, do not repeat this packet
Following the qAc path element is the identifier callsign:
Source Identifier C or X User Users Login Call sign. S APRS Hub IP address of distant server in HEX. This is the "Hex IP Alias". I Internal Server callsign. (ServerCall in aprsd.conf) R TNC IGATE callsign or Callsign preceeding the "I" if converted from CALLSIGN,I . r Callsign preceeding the "I" U UDP Server callsign. Z Server callsign.
Here are some examples.
Assuming MyCall is WA4DSY, ServerCall is aprsdATL, Logged on user is WA4ABC, we are connected to
and receiving data from first.aprs.net and the path does NOT already have
an qAc, we add:
qAC,WA4ABC from validated internet Client WA4ABC qAX,WA4ABC from unvalidated client qAR,WA4DSY from local TNC (RF) qAR,W4ABC from logged on client "W4ABC" and converted from W4ABC,I. qAr,N4ZZ from a server and converted from N4ZZ,I format. qAS,C6581502 from Server/Hub third.aprs.net (IP address = 198.88.21.2) (no q and no I ) qAU,aprsdATL from UDP port qAI,aprsdATL from Internal source (server beacon, etc). Packet will be traced. qAZ,aprsdATL from Internal source that should not be repeated (server status messages)
If a packet comes in from directly connected client "MYCALL" and already has a MYCALL,I on the end of the path aprsd 2.1.5 swaps the position of the "I" and preceeding callsign and changes the I to qAR. WA4DSY>APRS,WA4ABC,I:data becomes WA4DSY>APRS,qAR,WA4ABC:data .
If a packet is received from another server and has MYCALL,I in the path, the packet is converted to the qAr,MYCALL format.
The path will be either zero or 2 elements longer than the original.
If trace is enabled by setting "TRACE YES" in aprsd.conf, all packets passing through aprsd will have the servers call appended to the end of the AX25 path.
Click here for more about the qAc,Callsign construct written by Pete Loveall.
Example:
Example:
This goes to the TNC: WA4DSY>TNC:Data for TNC here
The complete string including the path goes out on the Internet.
See the file "udp_example" for a sample perl script.
Most of the data comes from the aprsd.conf file.
Note that directed queries are no longer supported because
of problems with RF flooding.
UDP PORT
The UDP input port (default 1315) is provided for interface with
scripts. Only IP addresses listed in the "trust" line(s) in the
aprsd.conf file are can send data to this port. You can enter
up to 20 trust commands.
trust 198.162.50.5
You may also provide a subnet mask after the ip address
to open up an entire sub net. The example below allows
16 address from 198.162.50.0 to 198.162.50.15 .
trust 198.162.50.0 255.255.255.240
The script can format packets to be sent to the TNC for RF transmission
or TCPIP. The routing is determined by the "TO-CALL" field. If it's
"TNC" the packet goes on on RF via the TNC after the path is striped off.
This goes to TCPIP: WA4DSY>APRS:Data for the Internet
RESPONDING TO QUERIES
The aprsd 2.1.5 server will respond the general ?IGATE? query as follows:
Query:
WA4DSY>APRS:?IGATE?
Response:
aprsdATL>APD215,TCPIP*:<IGATE,MSG_CNT=11,LOC_CNT=59,CALL=WA4DSY,
LOCATION=Atlanta_GA,HOST=wa4dsy.net,IP=216.27.174.144,
EMAIL=sysop@myisp.com,VERS=aprsd 2.1.5
A query from the RF side will not be passed to the Internet
but will be responded to on RF only. Internet queries will
be passed to other connected servers and will result in replies
from every query enabled IGATE connected to the Internet.
Java Applet
The JavAPRS applet by Steve Dimse is a completely separate product and
is not supported by me. Surf over to
www.ae5pl.net/html/javAPRS.htm
for more information.
./aprspass N0CALL APRS passcode for N0CALL = 12345The program will print the passcode "12345". You may use this 5 digit number as a password to connect and login to other igates and APRServe. The callsign and passcode are used as follows in aprsd.conf.
igate second.aprs.net 23 N0CALL 12345This causes aprsd to connect the second.aprs.net, port 23. Data from that server becomes available at your server. Your TNC data and logged on Internet user data is sent to second.aprs.net over the two way connection.
To disable this feature add to your aprsd.conf file: httpport 0
To disable this feature add to your aprsd.conf file: ipwatchport 0
To get the fix for 5.1surf over to
ftp://ftp.redhat.com/pub/redhat/upgrades/5.1/i386/
Then get this file:
The memory leak seems to be fixed in this version.
To install do: rpm -U glibc-2.0.7-19.i386.rpm
then reboot. You don't need to recompile aprsd!
Determining the source IP address of aprs packets (new in 2.1.2)
This TCPIP port (default 14502) supplies all data streams without dup filtering with
a special header prepended. The header contains the source IP address of the
packet and the user login name, "IGATE" or "UDP". An example: !44.36.16.48:WA4DSY!
Packets from other igates this server connected to will show the domain name
instead of the IP address and the user will be "IGATE". Packets from the UDP port
will have the IP address and the user field will be "UDP". Packets from the TNC
will have "TNC" in the IP address field and "*" in the user field .
Use telnet or nc optionally with grep to determine the source of packets.
eg: telnet first.aprs.net 23 | grep '199.45.66.88'
Will display only packets from IP address 199.45.66.88.
KNOWN BUGS
Memory Leak
Under RedHat 5.1 this program leaks 8K of memory for each user
connect/disconnect event. This appears to be a problem with one or more
C libraries in the thread creation/destruction code.
It has been fixed in 5.2.
glibc-2.0.7-19.i386.rpm