The httpport (14501) port suppiles server status information in HTML format.
This port is accessed with any web browser by entering the
URL: http://wa4dsy.net:14501/
(replace "wa4dsy.net" with the domain name of the
aprsd server you want ) To refresh the data click the RELOAD button on your browser.
The ipwatchport (14502) provides 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.
The new "hub" command is used like the "igate" command. The syntax is the same.
Unlike "igate" only one hub will be active at any time. If the hub connection
fails aprsd will try to connect to the next hub listed and if that fails, the next and so on.
Everyone: You will need to compile the code get a working
executable for your system. This is done automatically by the install script.
Be advised you need the c++ compiler installed on your system.
You can also type "make" to compile the program.
It is designed to work on RedHat 5.1 and later
Linux distributions. This includes Mandrake. Others may or may not work.
Early versions before 5.1 will not work.
Go the the Installing for more details.
LEGAL STUFF
Copyright 1997-2000 by Dale A. Heatherington, WA4DSY
email: dale@wa4dsy.net
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
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
APRS is a registered trademark, and APRS protocols are copyrighted
by Bob Bruninga, WB4APR. The owner reserves all rights and
privileges to their use.
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 and later. 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 Linux user name, password
and entering "monitor" for the version field. Also he can enter remote
sysop mode and gain direct control of the TNC.
eg: user WA4ZZZ pass 12345 vers monitor
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.
Starting and Stopping the Server
After you run INSTALL the server will start when the machine is booted up.
To start without rebooting cd to /etc/rc.d/init.d and run the aprsd.init
script with "start" as the parameter. eg: ./aprsd.init start
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" .
RUNNING AS A PROGRAM
The server can be run as a regular program for testing purposes or if you
don't want it to auto start when Linux boots.
First, stop the aprsd daemon by entering: /etc/rc.d/init.d/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.
Which ports on the distant igates do you connect to? There are two ways to go.
You can connect to the ports which emit only local data (APRServe 1313 or
aprsmon 14580) or you can choose one reliable server and connect
to the port which supplies the complete data stream (APRServe 23 or aprsd 10152).
In either case it should be a port which doesn't do the history file dump when
you first connect. Connecting to local ports on ALL other servers will be more
reliable since a single failure won't cut off all your external data.
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.
REMOTE TNC SYSOP ACCESS - (ESC)
You may telnet to the APRS server and connect to the TNC for the purpose
of changing parameters or even sending data out over the radio channel.
Use the (ESC) key from a telnet session to enter remote access mode.
Some Telnet programs send data a line at a time so the (ESC) character
will not be sent until you hit the (Enter) key.
You'll be prompted for your user name and password.
These must match an entry in the Linux password file. In other
words, a valid Linux login user/password. If the password is incorrect
remote sysop mode will be exited. The user must also
belong to the "tnc" group. This group must be created
in the /etc/group file. Here is an example line:
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 key. You may also need to
hit {##: if your Telnet program sends data a line at a time. Some
Telnet programs can be configured for character at a time mode. Check
your documentation for details.
REMEMBER TO ENTER THE TNC "K" COMMAND BEFORE YOU EXIT.
To disconnect hit ctrl-D .
LOG FILES
/home/aprsd2/aprsd.log User logons and logoffs and some system activity msgs.
/home/aprsd2/stsm.log Station to station 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)
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/stsm.log
3rd party formatted packets received by the TNC 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/stsm.log {
daily
rotate 4
}
/home/aprsd2/udp.log {
daily
rotate 4
}
/home/aprsd2/rf.log {
daily
rotate 4
}
I use the "joe" editor to edit my configuration files. It isn't
installed by default so you may need to install it from the
cdrom. To install mount the CD
and do rpm -iv /mnt/cdrom/RedHat/RPMS/joe-2.8-13.i386.rpm .
STATION TO STATION MESSAGES
This program will reformat and relay aprs
station to station messages from the Internet
to the TNC for RF transmission under the following
conditions.
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. This is strictly one 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 at all and are granted read-only access
USER VALIDATION
I obtained the user validation code from Steve Dimse K4HG. He
has recently allowed the source code to be released. The source is in validate.cpp.
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 pass vers
eg: user N0CALL pass 00001 vers MacAPRS 3.0
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.
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.
Full time gating of selected stations from Internet to RF
For special events or personal reasons it may be desirable
to allow the transfer of packets of selected stations from
the Internet to RF. Allowing all stations to do this would
overload the 1200 baud VHF packet frequency and isn't allowed.
These packets are only sent on RF if they came from the Internet
and were NOT heard on the local VHF frequency.
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.
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
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 CQGA
Note: 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.