Ero sivun ”Aprx.en” versioiden välillä

Radioamatööriwikistä
Siirry navigaatioon Siirry hakuun
>Oh2mqk
p (luokiteltu)
 
(31 välissä olevaa versiota toisen käyttäjän tekemänä ei näytetä)
Rivi 1: Rivi 1:
<div class="floatright">__TOC__</div>
<div class="floatright">__TOC__</div>
''Tästä sivusta on suomenkielinen versio [[Aprx]] &mdash; this page is English translation of Finnish page...''
''Tästä sivusta on suomenkielinen versio [[Aprx]] &mdash; this page is English version of Finnish page [[Aprx]].''


'''APRX''' is a receive-only APRS IGate (see [[APRS iGate properties]]) software.
'''Aprx''' was originally a receive-only APRS iGate (see [[APRS iGate properties]]) software, now extended to do digipeating, and Tx-iGate. It works on any UNIX-like systems with minimal requirements of system services, or system libraries beyond basic POSIX libc.
It works on any UNIX-like systems with minimal requirements of system services, nor system libraries beyond basic POSIX libc.


There are readily usable binary packages for some Fedora and Debian environments.  Other platforms should be easily compilable for.
There are readily usable binary packages for some Fedora and Debian environments.  Other platforms should be easily compilable for, and it is tested for compilation and use at times also on BSD family of systems.


The software is to be installed on suitable UNIX-like system, and its configuration file is to be adjusted.
The software is to be installed on a suitable UNIX-like system, and its configuration file is then to be adjusted.
Then it can relay APRS packets from radio receivers to APRS-IS (http://www.aprs-is.net) network.
Then it can:
* Handle arbitrary number of radio modems connected to itself
* Optionally relay APRS packets from radio receivers to APRS-IS (http://www.aprs-is.net) network
* Optionally digipeat AX.25 packets with and without APRS NEWn-N paradigm rules
* Optionally relay APRS packets from APRS-IS network to radio channel (Tx-iGate)


This software is intended for very limited resources environment, like small embedded-like machines barely able to run the operating system with TCP/IP networking.
This software is intended for very limited resources environment, like small embedded-like machines barely able to run the operating system with TCP/IP networking.


'''''A receive-only Rx-iGate does not need any sort of licenses in most parts of the world where radio amateur hobby is permitted to begin with.'''''
'''''A receive-only Rx-iGate does not need any sort of licenses in most parts of the world where radio amateur hobby is permitted to begin with.'''''
On version 2, the '''Aprx''' has gotten ability to do [[APRS Digipeater]] function, '''Aprx Tx-iGate''', as well as a variation of that called [[Viscous APRS Digipeater]], which is excellent choice for a Fill-In digipeater like on a mobile station.  Viscousness means that it will listen for other copies of same packet for a small configurable number of seconds, and if it hears same packet only once, it will do normal digipeating for it.


== Distribution ==
== Distribution ==
The software is downloadable at:
The software is downloadable at:
::http://ham.zmailer.org/oh2mqk/aprx/
::http://ham.zmailer.org/oh2mqk/aprx/
Manual is downloadable at:
::http://ham.zmailer.org/oh2mqk/aprx/aprx-manual.pdf


== Features ==
== Features ==
This software is no competitor either for bi-directional APRS IGATEs, nor for APRS digis, instead this is written for the need of primarily a dense receiver network feeding things to APRS-IS network, and then to have APRS-digi and bi-directional gating running off that system.
Originally this software was written for the need of densifying receiver network feeding things to APRS-IS network, and the software did only things necessary for a receive-only APRS iGate.  New version can also do stand-alone Digipeat of APRS packets as well as digipeat and Rx-/Tx-iGate.
(Minimize number of transmitters, and repeated transmissions on channel.)


The basic design criterias have also included something called ''minimum technology'', whereby the software does not need any external software or libraries in order to function.
The basic design criteria have also included something called ''minimum technology'', whereby the software does not need any external software or libraries in order to function. However when additional technology is available, some are being used (like Linux kernel AX.25 network, POSIX Threads, etc.)
This also minimized system resource requirements, which in case of IGate do include networking, but can be done with very small machines, like Linux with 8 MB RAM.
This also minimized system resource requirements, which in case of APRS iGates do include networking, but can be done with very small machines, like Linux with 8 MB RAM.
Also the software should be able to function on any minimally compliant POSIX system.
Also the software should be able to function on any minimally compliant POSIX system.


Minimum configuration has three tunable parameters:
Important goal has been to keep R/W memory footprint as small as possible, and on general purpose i386 Linux a single radio port iGate+digipeater is now around 250 kB of R/W memory allocations.
::'''MYCALL ...'''
Of those around 100 kB are directly for the Aprx's own usage. Rest is probably glibc's use.
::'''APRSIS-SERVER ...'''
 
::'''RADIO SERIAL ...'''
If the host system runs Linux, and has radio modems attached with ''kissattach'' or are other special radio amateur hardware drivers, then possibly just "MYCALL" and "APRSIS-SERVER" definitions are what is needed.
(One should note that ''kissattach'' configuration is much more complicated than ''Aprx'' configuration...)


As this software must operate in extremely memory limited systems, its writers have seen no need to make any memory hungry configuration tools, and instead the installer must be able to edit the text format configuration file by means of some simple editor existing in the system.
For Rx-iGate use the minimum configuration with tunable parts highlighted:
  mycall  '''OH2XYZ'''
  <aprsis>
    server  rotate.aprs.net  14580
  <aprsis>
  <interface>
    serial-device '''/dev/ttyS0  19200'''  8n1    KISS
  </interface>
 
For a stand-alone APRS Digipeater the configuration would be:
  mycall  '''OH2XYZ'''
  <interface>
    serial-device '''/dev/ttyS0  19200'''  8n1    KISS
  </interface>
  <digipeater>
    transmitter  $mycall
    <source>
        source    $mycall
    </source>
  </digipeater>
 
A stand-alone Digipeater can be made into ''Digi + Rx-iGate'' by adding the <nowiki><aprsis></nowiki> block on its configuration.
 
As this software must operate in extremely memory limited systems, its writers have seen no need to make any memory hungry configuration tools, and instead the installer must be able to edit the text format configuration file by means of some simple editor (like ''nano'') existing in the system, or perhaps downloading the file from external editor.


::[http://ham.zmailer.org/oh2mqk/aprx/aprx.8.html aprx(8) manual page]
::[http://ham.zmailer.org/oh2mqk/aprx/aprx.8.html aprx(8) manual page]
Rivi 39: Rivi 66:
=== Operating systems ===
=== Operating systems ===
Observed to work:
Observed to work:
* Linuxes (Fedora, RedHat, SuSE, Debian)
* Linuxes (Fedora, RedHat, SuSE, Debian) (--with-pthreads)
* Embedded Linux (NSLU2, with compilation time configure option:  --with-embedded,  OpenWrt --with-embedded)
* Apple OSX
"Should work":
"Should work":
* FreeBSD/NetBSD/OpenBSD/Apple OSX
* uCLinux (--with-pthreads --with-embedded)
* FreeBSD/NetBSD/OpenBSD
* Solaris / OpenSolaris
* Solaris / OpenSolaris
* HP-UX
* HP-UX
Rivi 51: Rivi 81:
=== Radio modem connections ===
=== Radio modem connections ===
It listens on radio modems speaking so called KISS protocol on any system attached serial ports.  The modems can also speak of so called TNC2 monitor format:
It listens on radio modems speaking so called KISS protocol on any system attached serial ports.  The modems can also speak of so called TNC2 monitor format:
* Has support for principally unlimited number of serialports on single machine
* Has support for principally unlimited number of serial ports on single machine
* Works also with USB serial ports
* Works also with USB serial ports
* Works also with serial ports on remote servers, as long as they are connectable with "TCP STREAM" service initiated from server running the ''Aprx'' program (like Cisco router AUX ports.)
* Works also with serial ports on remote servers, as long as they are connectible with "TCP STREAM" service initiated from server running the ''Aprx'' program (like Cisco router AUX ports.)
Supports also AX.25 protocol in a machine, where such exist (mainly Linuxes) and radio modems attached on it.
Supports also AX.25 protocol in a machine, where such exist (mainly Linuxes) and radio modems attached on it.


== APRS Rx-iGate properties ==
== APRS Rx-iGate properties ==
* Connects with single callsignSSID to APRS-IS core network for all radio receiver ports attached on it, optionally can also identify all receiver ports with separate callsigns
* Connects with single callsignSSID to APRS-IS core network for all radio receiver ports attached on it, optionally can also identify all receiver ports with separate call-signs
* Knows that following tokens in AX.25 address VIA fields are a reason for not relaying message to APRS-IS network:
* Knows that following tokens in AX.25 address VIA fields are a reason for not relaying message to APRS-IS network:
** RFONLY, NOGATE, TCPIP, TCPXX
** RFONLY, NOGATE, TCPIP, TCPXX
Rivi 64: Rivi 94:
* Does not relay any query messages ("?")
* Does not relay any query messages ("?")
* Opens all "3rd-party" messages to determine if any intermediate or the innermost addresses (and possibly data) are a reason for not relaying to APRS-IS.
* Opens all "3rd-party" messages to determine if any intermediate or the innermost addresses (and possibly data) are a reason for not relaying to APRS-IS.
* Relays receives APRS messages to APRS-IS network in network standard form
* Relays received APRS messages to APRS-IS network in network standard form
 
Simplest way to configure Rx-iGate is to define following on configuration:
mycall  OH2XYZ
<aprsis>
    server  rotate.aprs.net  14580
<aprsis>
<interface>
    serial-device /dev/ttyS0  19200  8n1    KISS
</interface>
 
== APRS Tx-iGate properties ==
The Tx-iGate is implemented as a possible data source for a digipeater transmitter.
The APRS Tx-iGate:
* Follows basic APRS Tx-iGate rules as defined at http://www.aprs-is.net/IGateDetails.aspx
* Can use a comprehensive set of filter rules that look into message context to determine if the packet in question should or should not be gated from APRS-IS to RF
 
Adding APRS Tx-iGate on Aprx configuration is a matter of adding suitable <nowiki><source></nowiki> block on digipeater configuration:
 
  <aprsis>
    server  rotate.aprs.net  14580
    '''#filter      b/a0good'''  # Tx-iGate everything always from this call
  </aprsis>
  <digipeater>
    transmitter  $mycall      # radio port
    <source>
        source    $mycall      # radio port
    </source>
    '''<source>'''
        '''source        APRSIS'''
        '''relay-mode    3rd-party'''
        '''viscous-delay 5'''
        '''#filter      b/a0good'''  # Tx-iGate everything always from this call
        '''#filter      -b/aa0bad'''  # Tx-iGate never anything from this call
    '''</source>'''
  </digipeater>
 
== Digipeater properties ==
The digipeater functionality handles standard AX.25 1.x/2.0 digipeating with additional specialities for APRS. This permits the digipeater to pass along other traffic in addition to APRS, like TCPIP, AX.25 CONS, etc.
 
=== For APRS messages ===
* Does standard duplicate detection on APRS messages (with timing window of 30 seconds)
* Does standard "New-N-paradigm" processing of "WIDEn-N" and "TRACEn-N" tokens.
* Accounts the number of all digipeat requests over all fields, when doing analysis of "are there too many hops requested or done?"
* Does not accept requests like:  "WIDE3-6", where SSID field stored value is larger than the one immediately following the keyword.
 
By default the system treats WIDE as TRACE, and inserts digipeater's transmitter identity on each packet it sends out.  It can be configured to "classical WIDE", as well as adding other keywords that are treated as WIDE or TRACE.


== Complex properties ==
== Complex properties ==
Rivi 70: Rivi 146:


=== Serial ports ===
=== Serial ports ===
* The serial ports can be physical D9/D25 ports on machine, or perhaps USB ports, as long as they offer standard POSIX semantics
* The serial ports can be physical D9/D25 ports on machine, or perhaps USB ports, as long as they offer standard POSIX serial port semantics along with a "device" to be opened:  /dev/ttyUSB02
* The serial ports can be elsewere on the internet, as long as they are reacable with TCP STREAM without any sort of encapsulation protocols (like TELNET escapes)
* The serial ports can be elsewhere on the internet, as long as they are reachable with TCP STREAM without any sort of encapsulation protocols (like without TELNET escapes)
* There can in principle be unlimited number of serial ports
* There can in principle be unlimited number of serial ports, each need around 30 kB of memory.
* The serial ports can speak a few variations of the KISS protocol
* The serial ports can speak a few variations of the KISS protocol, including SMACK (recommended to be used, where available)
* The serial ports can also receive TNC2 monitor format
* The serial ports can also receive TNC2 monitor format, but that is only for Rx-iGate use, not for digipeater, nor for transmit.
On Linux systems the system does also understand machine internal AX.25 network, and radios attached on it.
On Linux systems the system does also understand machine internal AX.25 network, and radios attached on it.


=== Optionally multiple callsignSSIDs ===
=== Optionally multiple callsignSSIDs ===
APRS traffic received from all ports can be offered to APRS-IS network with single callsign (MYCALL), or if so wanted, any of the serial ports can be offered with their own callsigns.
System defaults all call-signs to be what "MYCALL" configuration entry sets, however to refer on multiple interfaces in like <nowiki><digipeater></nowiki> definitions, they each will need unique call-signs.  Those call-signs need not to be strictly AX.25 conformant if they have no transmitters, in particular the SSID part can be any one or two character upper-case alphanumeric string. (The call-signs are converted to upper-case if they are entered lower-case or mixed-case.)
 
The ''individual callsigns for each port'' system is a feature for intermediate APRS-IS -like server that really collects all packets received from radios, and correlates them in order to determine where everywhere each packet was heard.
Normal APRS-IS does duplicate removal making such "radio coverage analysis" somewhat difficult...


=== Measuring radio channel occupancy ===
=== Measuring radio channel occupancy ===
There are lots of rumors about APRS radio channel occupancy, but very little measured hard facts.
There are lots of rumours about APRS radio channel occupancy, but very little measured hard facts.
To help on this issue, the ''Aprx''-program has a ''radio channel occupancy measurement estimator'' calculating the number of received bytes from radio and making some fuzzy guesses on how much more time transmitters did spend on channel before and after each packet.
To help on this issue, the ''Aprx''-program has a ''radio channel occupancy measurement estimator'' calculating the number of received bytes from radio and making some fuzzy guesses on how much more time transmitters did spend on channel before and after each packet.


The data is collectable live via "SNMPish" counters, and also via "RRDish" datasets.
The ''Aprx''-program will also send telemetry packets about each receiver which can then be graphed at APRS-IS, like happens with  http://aprs.fi/telemetry/OH2RDK-5?range=week
Auxiliary tool ''aprx-stat'' is for this purpose.
 
With digipeater enabled, this telemetry shows also number of transmitted packets.
 
=== Radio port telemetry ===
By default the system is telemetering all radio ports to APRS-IS, through which each port behaviour can be viewed via telemetry browsing service as http://aprs.fi/
 
Optionally for installations used as pure digipeater without internet connection to APRS-IS, the telemetry data can also be sent over radio port:
  <telemetry>
        transmitter  $mycall
        via         TRACE1-1
        source      $mycall
  </telemetry>
See details in ''aprx-manual.pdf''
 
=== Multiple Digipeaters ===
When an Aprx server node has multiple transmitters associated on it, each that is wanted to digipeat out something will need a digipeater definition, and they act individually!
 
One can use this to build:
* Cross-band / cross-channel digipeater
* Digipeater with diversity receivers
* Digipeater with distributed receiver network (interconnected preferably using other means than by the radio)
 
=== Viscous Digipeater ===
Special function mode is called "viscous digipeater", which puts received APRS packets on a short term delay storage (configurable from 1 to 9 seconds, 5 is usually a good value to use), and it counts all instances of that same packet heard from from radio.  If the count at the end of this viscous delay is just 1, then that packet is digipeated.
 
See [[Viscous APRS Digipeater]] for an illustrative transmission monitoring graphs of normal digipeater vs. viscous digipeater.
 
== Installation ==
Usually the freshest pre-compiled binary packages have been made for a Debian Etch (4.0) series i386 systems, and they work on most of newer Debian derivative systems, like Ubuntus.
 
  # dpkg -i aprx_1.99.382-1_i386.deb


The ''Aprx''-program will also send telemetry packets about each receiver which can then be graphed at APRS-IS, like happens with  http://aprs.fi/telemetry/OH1GSM-1/week
The default installation package will place <code>/etc/aprx.conf</code> and all other necessary startup files and scripts into the system, however the defaults are such that the system ''will not'' start with them automatically.
You will need to do:
* Use the <code>aprx-manual.pdf</code> to guide you to edit the <code>/etc/aprx.conf</code> file
* Edit also file <code>/etc/default/aprx</code>


== The configuration ==
Then the program will start and stop with commands:
#
  # /etc/init.d/aprx start
#  Sample configuration file for the APRX  -- an Rx-only APRS iGate
  # /etc/init.d/aprx stop
#
 
#
At Debian, doing the installation does often mean that system asks you essentially: "May I overwrite configuration files?"
There you will always reply "N", unless you want to do all configuration work all over again.
# The  mycall  parameter:  
 
# Station call-id used for relaying APRS frames into APRS-IS.
== Configuring ==
#
See examples at <code>aprx-manual.pdf</code> file.
#mycall          N0CALL-1
 
When you have edited the configuration to be more suitable to your environment, try it with the program like this:
# APRS-IS server name and portnumber.
  # aprx -d -f /etc/aprx.conf
# Every reconnect does re\-resolve the name to IP address.
(this program terminates with Control-C)
# There can be as many definitions as you want, and they will be
 
# used in round\-robin fashion.  Heartbeat and filter definitions
If it doesn't spew any "ERROR:" texts, then at least it passes the configuration reading machinery.
# must follow each server definition.
 
Shut down possible earlier running copy of the program:
#aprsis-server    finland.aprs2.net  14580
   # /etc/init.d/aprx stop
#aprsis-server    rotate.aprs.net    14580
Start it fresh:
   # /etc/init.d/aprx start
# Some APRS-IS servers tell every about 20 seconds to all contact
# ports that they are there and alive. Others are just silent.
# Enable only if the server you use does present heartbeat.
# Recommended value 3*"heartbeat" + some  -> 120 (seconds)
#
#aprsis-heartbeat-timeout  120
# APRS-IS server may support some filter commands.  Although this
# program does not transmit out to RF, filter rules can be used to
# ensure that there is sufficient dataflow from APRS-IS server to
# this program that it very likely will not timeout within network
# monitoring timeout..
#
#aprsis-filter "some filter specs in quotes"
# Additional APRS-IS servers can be entered, by repeating following
# three configuration entries as many times as are needed.
#
#aprsis-server            rotate.aprs.net 14580
#aprsis-heartbeat-timeout 120
#aprsis-filter            "some filter specs in quotes"
# AX.25 filters block selected messages matching on selected regular
# expressions.  The expressions are case sensitive, and AX.25 address
# elements are in all uppercase text.  There can be unlimited number
# of patterns, type fields are four: "source", "destination", "via",
# and "data".  These patterns can be used in addition to built-in
# hard-coded reject rules listed in documentation.
#
#ax25-reject-filter source      "^NOCALL"
#ax25-reject-filter destination "^NOCALL"
#ax25-reject-filter via        "^NOGATE"
#ax25-reject-filter data        "^\\?"
# ax25-rxport limits reception on listed AX.25 ports (their callsigns),
# if system happens to use AX.25 ports also for other purposes than APRS.
# If this option is not used, all reception ports are accepted.
# Number of port definitions here is unlimited.
#
#ax25-rxport NoCALL-1
#ax25-rxport N0CALL
# pidfile is UNIX way to tell that others that this program is
# running with given process-id number.  This has compiled-in
# default value of:  pidfile /var/run/aprx.pid
#
pidfile /var/run/aprx.pid
# rflog defines a rotatable file into which all RF-received packets
# are logged.
#
#rflog /var/log/aprx/rf.log
# aprxlog defines a rotatable file into which most important
# events on APRS-IS connection are logged, namely connects and
# disconnects.
#
#aprxlog /var/log/aprx/aprx.log
# erlangfile defines a mmap():able binary file, which stores
# running sums of interfaces upon which the channel erlang
# estimator runs, and collects data.
# Depending on the system, it may be running on a filesystem
# that actually retains data over reboots, or it may not.
# With this backing store, the system does not loose cumulating
# erlang data over the current period, if the restart is quick,
# and does not stradle any exact minute.
# (Do restarts at 15 seconds over an even minute..)
# This file is around 0.5 MB per each interface talking APRS.
# Things go BADLY WRONG if this file can not be created or
# it is corrupted!
#
# Built-in default value is: /var/run/aprx.state
#
#erlangfile /var/run/aprx.state
# erlang-loglevel is config file version of the "-l" option
# pushing erlang data to syslog(3).
# Valid values are (possibly) following: NONE, LOG_DAEMON,
# LOG_FTP, LOG_LPR, LOG_MAIL, LOG_NEWS, LOG_USER, LOG_UUCP,
# LOG_LOCAL0, LOG_LOCAL1, LOG_LOCAL2, LOG_LOCAL3, LOG_LOCAL4,
# LOG_LOCAL5, LOG_LOCAL6, LOG_LOCAL7.  If the parameter value is
# not acceptable, list of accepted values are printed at startup.
#
#erlang-loglevel NONE
# erlanglog defines a rotatable file into which erlang data
# is written in text form.
#
#erlanglog /var/log/aprx/erlang.log
# erlang-log1min option logs to syslog/file also 1 minute
# interval data from the program. (In addition to 10m and 60m.)
#
#erlang-log1min
# The  radio serial  option.  Parameters are:
#  - /dev/ttyUSB1    -- tty device
#  - 19200          -- baud rate, supported ones are:
#                        1200, 2400, 4800, 9600, 19200, 38400
#   - 8n1            -- 8-bits, no parity, one stop-bit,
#                       no other supported modes
#  - KISS/XORSUM/BPQCRC/SMACK/CRC16  -- KISS mode variants
#    TNC2            -- non-KISS text format variant
#
#
#radio serial   /dev/ttyUSB0  19200 8n1    KISS  callsign OH1XYZ-11
#radio serial  /dev/ttyUSB1  19200 8n1    TNC2  callsign OH1XYZ-12
# Additional/alternate options for the "radio" line.
#
# "initstring" is of two parts, the keyword, and then a string.
#    initstring "\xC0\xC0\xFF\xC0\r\nMO 0\rKISS $01\r"
#
# "callsign NAME" sets callsign used in statistics displays,
#    and when the message is sent to APRS-IS.
#    If none are given, then it will use physical port name.
#
# "timeout 900" sets a timeout monitor (in seconds) to make
#    reopen/reconnect if the (tcp) connection to radio has
#    failed somehow and nothing is heard. Local serial ports
#    do not (in general) need this.  At APRS silent sites
#    this may cause repeated reconnects, but it should not
#    harm either.  At busy sites this will handle reconnect
#    gracefully in case of network failures, and timeout
#    value can be shortened.
#
#  "KISS"                  - plain basic KISS mode
#  "XORSUM" alias "BPQCRC" - KISS with BPQ "CRC" byte
#  "SMACK" alias "CRC16"  - KISS with better CRC
#  "TNC2"                  - TNC2 monitor format
# The  radio tcp  option defines a connection to remote socket
# beyond which is a binary transparent connection to a serial
# port.  The parameter fields:  literal IP address (IPv4 or IPv6),
# then literal port number, and finally protocol mode.
# KISS-protocol parameters are same as with normal serial port.
#
#radio tcp  12.34.56.78  4001  KISS  alias Rx5 timeout 900  callsign OH1XYZ-13
#radio tcp  12.34.56.78  4002  TNC2  alias Rx6 timeout 300  callsign OH1XYZ-14
#
# The  netbeacon  option.
# Parameter string (in quotes) is sent to network (without quotes)
# at varying intervals --  1200-1800 seconds in between restransmits.
# This interval is intentionally randomized.
# Multiple netbeacons are evenly distributed for each time period,
# or at least 3 seconds apart.  First netbeacon is sent to network
# 30 seconds after connection to APRS-IS.
#
# There can be multiple netbeacon options.
# Symbol  R&  is for "rx-only iGate"
#
#netbeacon for OH1XYZ-15 symbol "R&" lat "6020.22N" lon "02504.44E" comment "aprx - an Rx-only iGate"


[[Category:APRS]][[Category:English Page]]
[[Luokka:APRS]]
[[Luokka:English]]

Nykyinen versio 11. kesäkuuta 2021 kello 14.39

Tästä sivusta on suomenkielinen versio Aprx — this page is English version of Finnish page Aprx.

Aprx was originally a receive-only APRS iGate (see APRS iGate properties) software, now extended to do digipeating, and Tx-iGate. It works on any UNIX-like systems with minimal requirements of system services, or system libraries beyond basic POSIX libc.

There are readily usable binary packages for some Fedora and Debian environments. Other platforms should be easily compilable for, and it is tested for compilation and use at times also on BSD family of systems.

The software is to be installed on a suitable UNIX-like system, and its configuration file is then to be adjusted. Then it can:

  • Handle arbitrary number of radio modems connected to itself
  • Optionally relay APRS packets from radio receivers to APRS-IS (http://www.aprs-is.net) network
  • Optionally digipeat AX.25 packets with and without APRS NEWn-N paradigm rules
  • Optionally relay APRS packets from APRS-IS network to radio channel (Tx-iGate)

This software is intended for very limited resources environment, like small embedded-like machines barely able to run the operating system with TCP/IP networking.

A receive-only Rx-iGate does not need any sort of licenses in most parts of the world where radio amateur hobby is permitted to begin with.

On version 2, the Aprx has gotten ability to do APRS Digipeater function, Aprx Tx-iGate, as well as a variation of that called Viscous APRS Digipeater, which is excellent choice for a Fill-In digipeater like on a mobile station. Viscousness means that it will listen for other copies of same packet for a small configurable number of seconds, and if it hears same packet only once, it will do normal digipeating for it.

Distribution

The software is downloadable at:

http://ham.zmailer.org/oh2mqk/aprx/

Manual is downloadable at:

http://ham.zmailer.org/oh2mqk/aprx/aprx-manual.pdf

Features

Originally this software was written for the need of densifying receiver network feeding things to APRS-IS network, and the software did only things necessary for a receive-only APRS iGate. New version can also do stand-alone Digipeat of APRS packets as well as digipeat and Rx-/Tx-iGate.

The basic design criteria have also included something called minimum technology, whereby the software does not need any external software or libraries in order to function. However when additional technology is available, some are being used (like Linux kernel AX.25 network, POSIX Threads, etc.) This also minimized system resource requirements, which in case of APRS iGates do include networking, but can be done with very small machines, like Linux with 8 MB RAM. Also the software should be able to function on any minimally compliant POSIX system.

Important goal has been to keep R/W memory footprint as small as possible, and on general purpose i386 Linux a single radio port iGate+digipeater is now around 250 kB of R/W memory allocations. Of those around 100 kB are directly for the Aprx's own usage. Rest is probably glibc's use.


For Rx-iGate use the minimum configuration with tunable parts highlighted:

 mycall  OH2XYZ
 <aprsis>
    server   rotate.aprs.net  14580
 <aprsis>
 <interface>
    serial-device /dev/ttyS0  19200  8n1    KISS
 </interface>

For a stand-alone APRS Digipeater the configuration would be:

 mycall  OH2XYZ
 <interface>
    serial-device /dev/ttyS0  19200  8n1    KISS
 </interface>
 <digipeater>
    transmitter  $mycall
    <source>
       source     $mycall
    </source>
 </digipeater>

A stand-alone Digipeater can be made into Digi + Rx-iGate by adding the <aprsis> block on its configuration.

As this software must operate in extremely memory limited systems, its writers have seen no need to make any memory hungry configuration tools, and instead the installer must be able to edit the text format configuration file by means of some simple editor (like nano) existing in the system, or perhaps downloading the file from external editor.

aprx(8) manual page

Operating systems

Observed to work:

  • Linuxes (Fedora, RedHat, SuSE, Debian) (--with-pthreads)
  • Embedded Linux (NSLU2, with compilation time configure option: --with-embedded, OpenWrt --with-embedded)
  • Apple OSX

"Should work":

  • uCLinux (--with-pthreads --with-embedded)
  • FreeBSD/NetBSD/OpenBSD
  • Solaris / OpenSolaris
  • HP-UX
  • Windows+CygWin

(in other words: any POSIX compliant system should work)

There is no integrated installation package for all the systems in the world, but things should not be too difficult to cook up your own.

Radio modem connections

It listens on radio modems speaking so called KISS protocol on any system attached serial ports. The modems can also speak of so called TNC2 monitor format:

  • Has support for principally unlimited number of serial ports on single machine
  • Works also with USB serial ports
  • Works also with serial ports on remote servers, as long as they are connectible with "TCP STREAM" service initiated from server running the Aprx program (like Cisco router AUX ports.)

Supports also AX.25 protocol in a machine, where such exist (mainly Linuxes) and radio modems attached on it.

APRS Rx-iGate properties

  • Connects with single callsignSSID to APRS-IS core network for all radio receiver ports attached on it, optionally can also identify all receiver ports with separate call-signs
  • Knows that following tokens in AX.25 address VIA fields are a reason for not relaying message to APRS-IS network:
    • RFONLY, NOGATE, TCPIP, TCPXX
  • Knows that following AX.25 source addresses are bogus, and packets with them are not to be relayed to APRS-IS network:
    • WIDE*, RELAY*, TRACE*, TCPIP, TCPXX, NOCALL, N0CALL
  • Does not relay any query messages ("?")
  • Opens all "3rd-party" messages to determine if any intermediate or the innermost addresses (and possibly data) are a reason for not relaying to APRS-IS.
  • Relays received APRS messages to APRS-IS network in network standard form

Simplest way to configure Rx-iGate is to define following on configuration:

mycall  OH2XYZ
<aprsis>
   server   rotate.aprs.net  14580
<aprsis>
<interface>
   serial-device /dev/ttyS0  19200  8n1    KISS
</interface>

APRS Tx-iGate properties

The Tx-iGate is implemented as a possible data source for a digipeater transmitter. The APRS Tx-iGate:

  • Follows basic APRS Tx-iGate rules as defined at http://www.aprs-is.net/IGateDetails.aspx
  • Can use a comprehensive set of filter rules that look into message context to determine if the packet in question should or should not be gated from APRS-IS to RF

Adding APRS Tx-iGate on Aprx configuration is a matter of adding suitable <source> block on digipeater configuration:

 <aprsis>
    server  rotate.aprs.net   14580
    #filter       b/a0good   # Tx-iGate everything always from this call
 </aprsis>
 <digipeater>
    transmitter  $mycall       # radio port
    <source>
       source    $mycall       # radio port
    </source>
    <source>
       source        APRSIS
       relay-mode    3rd-party
       viscous-delay 5
       #filter       b/a0good   # Tx-iGate everything always from this call
       #filter       -b/aa0bad  # Tx-iGate never anything from this call
    </source>
 </digipeater>

Digipeater properties

The digipeater functionality handles standard AX.25 1.x/2.0 digipeating with additional specialities for APRS. This permits the digipeater to pass along other traffic in addition to APRS, like TCPIP, AX.25 CONS, etc.

For APRS messages

  • Does standard duplicate detection on APRS messages (with timing window of 30 seconds)
  • Does standard "New-N-paradigm" processing of "WIDEn-N" and "TRACEn-N" tokens.
  • Accounts the number of all digipeat requests over all fields, when doing analysis of "are there too many hops requested or done?"
  • Does not accept requests like: "WIDE3-6", where SSID field stored value is larger than the one immediately following the keyword.

By default the system treats WIDE as TRACE, and inserts digipeater's transmitter identity on each packet it sends out. It can be configured to "classical WIDE", as well as adding other keywords that are treated as WIDE or TRACE.

Complex properties

This software has some unique complex capabilities:

Serial ports

  • The serial ports can be physical D9/D25 ports on machine, or perhaps USB ports, as long as they offer standard POSIX serial port semantics along with a "device" to be opened: /dev/ttyUSB02
  • The serial ports can be elsewhere on the internet, as long as they are reachable with TCP STREAM without any sort of encapsulation protocols (like without TELNET escapes)
  • There can in principle be unlimited number of serial ports, each need around 30 kB of memory.
  • The serial ports can speak a few variations of the KISS protocol, including SMACK (recommended to be used, where available)
  • The serial ports can also receive TNC2 monitor format, but that is only for Rx-iGate use, not for digipeater, nor for transmit.

On Linux systems the system does also understand machine internal AX.25 network, and radios attached on it.

Optionally multiple callsignSSIDs

System defaults all call-signs to be what "MYCALL" configuration entry sets, however to refer on multiple interfaces in like <digipeater> definitions, they each will need unique call-signs. Those call-signs need not to be strictly AX.25 conformant if they have no transmitters, in particular the SSID part can be any one or two character upper-case alphanumeric string. (The call-signs are converted to upper-case if they are entered lower-case or mixed-case.)

Measuring radio channel occupancy

There are lots of rumours about APRS radio channel occupancy, but very little measured hard facts. To help on this issue, the Aprx-program has a radio channel occupancy measurement estimator calculating the number of received bytes from radio and making some fuzzy guesses on how much more time transmitters did spend on channel before and after each packet.

The Aprx-program will also send telemetry packets about each receiver which can then be graphed at APRS-IS, like happens with http://aprs.fi/telemetry/OH2RDK-5?range=week

With digipeater enabled, this telemetry shows also number of transmitted packets.

Radio port telemetry

By default the system is telemetering all radio ports to APRS-IS, through which each port behaviour can be viewed via telemetry browsing service as http://aprs.fi/

Optionally for installations used as pure digipeater without internet connection to APRS-IS, the telemetry data can also be sent over radio port:

 <telemetry>
       transmitter  $mycall
       via          TRACE1-1
       source       $mycall
 </telemetry>

See details in aprx-manual.pdf

Multiple Digipeaters

When an Aprx server node has multiple transmitters associated on it, each that is wanted to digipeat out something will need a digipeater definition, and they act individually!

One can use this to build:

  • Cross-band / cross-channel digipeater
  • Digipeater with diversity receivers
  • Digipeater with distributed receiver network (interconnected preferably using other means than by the radio)

Viscous Digipeater

Special function mode is called "viscous digipeater", which puts received APRS packets on a short term delay storage (configurable from 1 to 9 seconds, 5 is usually a good value to use), and it counts all instances of that same packet heard from from radio. If the count at the end of this viscous delay is just 1, then that packet is digipeated.

See Viscous APRS Digipeater for an illustrative transmission monitoring graphs of normal digipeater vs. viscous digipeater.

Installation

Usually the freshest pre-compiled binary packages have been made for a Debian Etch (4.0) series i386 systems, and they work on most of newer Debian derivative systems, like Ubuntus.

 # dpkg -i aprx_1.99.382-1_i386.deb

The default installation package will place /etc/aprx.conf and all other necessary startup files and scripts into the system, however the defaults are such that the system will not start with them automatically. You will need to do:

  • Use the aprx-manual.pdf to guide you to edit the /etc/aprx.conf file
  • Edit also file /etc/default/aprx

Then the program will start and stop with commands:

 # /etc/init.d/aprx start
 # /etc/init.d/aprx stop

At Debian, doing the installation does often mean that system asks you essentially: "May I overwrite configuration files?" There you will always reply "N", unless you want to do all configuration work all over again.

Configuring

See examples at aprx-manual.pdf file.

When you have edited the configuration to be more suitable to your environment, try it with the program like this:

 # aprx -d -f /etc/aprx.conf

(this program terminates with Control-C)

If it doesn't spew any "ERROR:" texts, then at least it passes the configuration reading machinery.

Shut down possible earlier running copy of the program:

 # /etc/init.d/aprx stop

Start it fresh:

 # /etc/init.d/aprx start