aprx(8)


NAME

   Aprx-2 - An APRS iGate application with integrated Digipeater.

SYNOPSIS

   aprx  [-d[d[d]]]  [-e]  [-i]  [-v]  [-V]  [-l  syslogfacilityname]  [-f
   /etc/aprx.conf]

DESCRIPTION

   The aprx program is a special purpose Ham-radio  application  supplying
   infrastructure services for APRS protocol use.

   A more detailed manual is available at:
   http://ham.zmailer.org/oh2mqk/aprx/aprx-manual.pdf

FEATURES

   The  Aprx  begun  as a receive-only APRS iGate application with minimum
   system support technology requirements.  This version has  also  multi-
   port digipeater support, transmit iGate, and experimental D-PRS-to-APRS
   RF/Rx-iGate.

   *  The Aprx does not require machine to have any other software in  it,
      than  things  in  UNIX standard libc. In particular no special AX.25
      libraries at all, nor widgets or even C++ runtime.

   *  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.

   *  Any UNIX (and UNIX like) platform should work for the  Aprx,  or  be
      trivially ported.

   *  The  Aprx  can listen "TNC2 monitor" and "KISS" speaking TNCs on any
      serial ports.

   *  For Aprx the serial port can be ordinary host computer port,  a  USB
      serial  port, or remote port on a remote server behind the internet,
      like cisco router AUX ports (port 4001, TCP  STREAM  without  TELNET
      escapes.)

   *  The  Aprx  does  not  require machine to have AX.25 protocol support
      internally!  (Thus this works also on e.g. Solaris and BSD  machines
      without PF_AX25 sockets.)

   *  On  Linux  machine  with kernel internal AX.25 protocol support, the
      Aprx can listen on it with promiscuous mode  and  in  order  to  use
      that,  the  Aprx  must be started as root user, and be configured to
      list interface callsigns that APRS packets are coming in.  The AX.25
      socket  listening is not in itself configurable, it is always exists
      in Linux systems, and related configuration parameters  are  ignored
      in  other  platforms.  This socket listening does not need auxiliary
      "libax25" to function.

   *  The Aprx program can be run without root privileges at least against
      remote  serial  port  servers.   One  must  change local serial port
      ownership or access-groups (if any are used) to userid that runs the
      program   and   possibly   do  several  changes  of  file  paths  in
      configuration file beginning with its location (startup  parameter).
      How  that  is  done  is  up to the user or system integrator of this
      program.

   *  The Aprx connects with one callsign-ssid pair to  APRS-IS  core  for
      all received radio ports.

   *  The Aprx Rx-iGate knows that messages with following tokens in AX.25
      VIA fields are not to be relayed into APRS-IS network:
            RFONLY, NOGATE, TCPIP, TCPXX

   *  The Aprx Rx-iGate knows that following source address  prefixes  are
      bogus and thus messages with them are to be junked:
            WIDE, RELAY, TRACE, TCPIP, TCPXX, NOCALL, N0CALL

   *  The Aprx Rx-iGate Drops all query messages ("?").

   *  The  Aprx Rx-iGate opens up all 3rd party messages ("}"), and checks
      the internal data if it is OK to be gated out to APRS-IS.

   *  The Aprx has built-in "Erlang  monitor"  mechanism  that  telemeters
      each  receiving  interface  to  APRS-IS.  It  can  also  syslog  the
      interface specific channel occupancy, and optionally can  output  to
      STDOUT.

   *  The Aprx (since version 1.91) can do digipeater functions.

   *  The Aprx (since version 1.99) does have experimental D-STAR D-PRS to
      APRS gateway functionality.  See the aprx-manual.pdf for details.

   *  The Aprx can be run on systems without writable storage,  even  with
      very  little  memory,  like  on  NSLU2,  and OpenWrt platforms.  The
      experiments have shown that a single radio Tx-iGate+digipeater works
      with  less  than  300  kB  of  writable  RAM  for  the  Aprx itself.
      Additional memory is necessary  for  operating  system  services  of
      TCP/IP networking, and serial port drivers.

OPTIONS

   The aprx has following runtime options:

   -i     Keep the program foreground without debugging outputs.

   -d     Turn on verbose debugging, outputs data to STDOUT.

   -dd    the  "more debug" mode shows also details of network interaction
          with the APRS-IS network service.

   -ddd   the "even more debug" mode shows also detail  classification  of
          every kind of frame received in KISS variants.

   -e     Erlang   output   prints   10   minute  and  60  minute  traffic
          accumulation byte counts, and guestimates on channel  occupancy,
          alias  "Erlang".  These outputs are sent to STDOUT, which system
          operator may choose to log elsewere.  This is independent if the
          "-l" option below.

   -f /etc/aprx.conf
          Configuration  file,  given path is built-in default, and can be
          overridden by the program runner.

   -l syslogfacilityname
          Defines syslog(3) facility code used by the erlang  reporter  by
          defining  its name.  Default value is: NONE, and accepted values
          are: 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.   That  list  is
          subject  to  actual  facility code set in the system, and in any
          case if you specify a code that is not known, then  the  program
          will  complain  during  the  startup,  and  report  it.  This is
          independent of the "-e" option above.

   -v     Verbose logging of received traffic to STDOUT.  Lines begin with
          reception  timestamp (UNIX time_t seconds), then TAB, and either
          data as is, or with prefix byte: "*" for "discarded due to  data
          content",  or  possibly  "#" for "discarded due to APRS-IS being
          unreachable".

   -V     Print source version compiled to this binary, and exit.

   DEBUGGING SYSTEM
   Use parameter set -ddv (or -dddv) to test new configuration by  running
   it synchronously to console.

   NORMAL OPERATION
   Running  the  aprx  program  without any of option flags: -d, -v, or -e
   reads possibly given configuration, then automatically backgrounds  the
   process,  and writes pidfile.  When the process whose number written in
   pidfile is then sent a SIGTERM  signal,  it  automatically  shuts  down
   itself, and removes the pidfile.  The pidfile can be runtime configured
   with  the  -f  /etc/aprx.conf  file,  and  it  has  default  name   of:
   /var/run/aprx.pid.

CONFIGURATION FILE

   The configuration file is used to setup the program to do its job.

   You can construct following configurations:

   *  A receive-only iGate server.

   *  A digipeater with bi-directional iGate server.

   *  A single radio digipeater.  (The most common type of digipeater.)

   *  A  multi-interfaced  digipeater relaying traffic in between multiple
      radios.  (On same or on separate frequencies.)

   *  A viscuous digipeater, which relays a packet it heard from  viscuous
      source after the viscuous delay, unless it was heard more times than
      only once, or it was  heard  from  non-viscuous  source  before  the
      viscuous   one  was  digipeated.   This  allows  of  making  fill-in
      digipeaters that will not digipeat the packet, if that  same  packet
      was heard twice or more before the viscuos delay expired.

   In  the  configuration  file  a  line  ending  backslash  (\) character
   concatenates next input line into itself. Combined result can be up  to
   8000 bytes long.  This combination can be a bit surprising:
      #beacon .... long text  \
             continuation
   results  in single long input line that begins with '#' (it is comment)
   and all continuations following it have been folded in.  Presented line
   number  of  combined  continuation  is the line number of the last line
   segment in this type of multi-line input.

   In the  configuration  file  there  is  special  treatment  for  quoted
   strings.   They  are stripped of the outer quotes, and "\" character is
   processed within the source string to produce an  output  string.   The
   escapes are:

   \n     Produces newline character (Control-J) on the output string.

   \r     Produces  carriage  return  character  (Control-M) on the output
          string.

   \\     Places a back-slash on the output string.

   \"     Places a double-quote on the output string.

   \'     Places a single-quote on the output string.

   \xHH   Lower-case "x" precedes two hex digits which  ensemble  is  then
          converted to a single byte in the output string.

   The  complex  encodings  are  for  possible initstrings of the external
   devices, and in particular for initstrings even a nul byte ( \x00 )  is
   supported.

   A  configuration  token  without surrounding quotes does not understand
   the backslash escapes.

   #
   #  Sample configuration file for the APRX -- an Rx-only APRS iGate with
   #  Digipeater functionality.
   #
   #
   # Simple sample configuration file for the APRX-2
   #
   # This configuration is structured with Apache HTTPD style tags
   # which then contain subsystem parameters.
   #

   #
   # For simple case, you need to adjust 4 things:
   #   - Mycall parameter
   #   - Select correct type of interface (ax25-device or serial-device)
   #   - Optionally set a beacon telling where this system is
   #   - Optionally enable digipeater with or without tx-igate
   #

   #
   #
   # Define the parameters in following order:
   #   1)  <aprsis>     ** zero to many
   #   2)  <logging>    ** zero or one
   #   3)  <interface>  ** one to many
   #   4)  <beacon>     ** zero to many
   #   5)  <telemetry   ** zero to many
   #   6)  <digipeater> ** zero to many (at most one for each Tx)
   #

   #
   # Global macro for simplified callsign definition:
   # Usable for 99+% of cases.
   #

   mycall  N0CALL-1

   #
   # Global macro for simplified "my location" definition in
   # place of explicit "lat nn lon mm" at beacons. Will also
   # give "my location" reference for "filter m/100".
   #
   #myloc lat ddmm.mmN lon dddmm.mmE

   <aprsis>
   # The  login  parameter:
   # Station call-id used for relaying APRS frames into APRS-IS.
   # Use this only to define other callsign for APRS-IS login.
   #
   #login      OTHERCALL-7  # login defaults to $mycall

   #
   # The passcode parameter:
   # Unique code for your callsign to allow transmitting packets
   # into the APRS-IS.
   #
   passcode -1

   # APRS-IS server name and portnumber.
   # Every reconnect does re-resolve the name to IP address.
   # Some alternates are shown below, choose something local to you.
   #
   server    rotate.aprs2.net    14580
   #server    noam.aprs2.net     14580
   #server    soam.aprs2.net     14580
   #server    euro.aprs2.net     14580
   #server    asia.aprs2.net     14580
   #server    aunz.aprs2.net     14580

   # Some APRS-IS servers tell every about 20 seconds to all contact
   # ports that they are there and alive. Others are just silent.
   # Recommended value 3*"heartbeat" + some  -> 120 (seconds)
   #
   #heartbeat-timeout  0  # Disabler of heartbeat timeout

   # APRS-IS server may support some filter commands.
   # See:  http://www.aprs-is.net/javAPRSFilter.aspx
   #
   # You can define the filter as single long quoted string, or as
   # many short segments with explaining comments following them.
   #
   # Usability of these filters for a Tx-iGate is dubious, but
   # they exist in case you for example want to Tx-iGate packets
   # from some source callsigns in all cases even when they are
   # not in your local area.
   #
   #filter "possibly multiple filter specs in quotes"
   #
   #filter "m/100"          # My-Range filter
   #filter "f/OH2XYZ-3/50"  # Friend-Range filter
   </aprsis>

   <logging>
   # 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/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.7 MB per each interface talking APRS.
   # If this file is not defined and can not be created,
   # internal non-persistent in-memory storage will be used.
   #
   # Built-in default value is: /var/run/aprx.state
   #
   #erlangfile /var/run/aprx.state

   # erlang-loglevel is config file edition 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
   </logging>

   # ***********  Multiple <interface> definitions can follow   *********

   # ax25-device  Lists AX.25 ports by their callsigns that in Linux
   #              systems receive APRS packets.  If none are defined,
   #              or the system is not Linux, the AX.25 network receiver
   #              is not enabled.  Used technologies need at least
   #              Linux kernel 2.4.x
   #
   # tx-ok        Boolean telling if this device is able to transmit.
   #
   #<interface>
   #   ax25-device $mycall  # Either $mycall macro, or actual callsign
   #   #tx-ok      false  # transmitter enable defaults to false
   #   #telem-to-is true # set to false to disable
   #</interface>

   # The  TNC serial  options.  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"                  - plain basic KISS mode
   #   - "XORSUM" alias "BPQCRC" - KISS with BPQ "CRC" byte
   #   - "SMACK"  alias "CRC16"  - KISS with real CRC
   #   - "FLEXNET"               - KISS with real CRC
   #   - "TNC2"                  - TNC2 monitor format
   #   - "DPRS"                  - DPRS (rx) Gateway
   #
   #<interface>
   #   serial-device /dev/ttyUSB0  19200 8n1    KISS
   #   #callsign     $mycall  # Either $mycall macro, or actual callsign
   #   #tx-ok        false    # transmitter enable defaults to false
   #   #telem-to-is true # set to false to disable
   #</interface>
   #
   #<interface>
   #   serial-device /dev/ttyUSB1  19200 8n1    TNC2
   #   #callsign     $mycall  # Either $mycall macro, or actual callsign
   #   #tx-ok        false    # TNC2 monitor can not have transmitter
   #   #telem-to-is true # set to false to disable
   #</interface>
   #
   #<interface>
   #   serial-device /dev/ttyUSB1  19200 8n1    DPRS
   #   callsign     dprsgwcallsign  # must define actual callsign
   #   #tx-ok        false    # DPRS monitor can not do transmit
   #   #telem-to-is true # set to false to disable
   #</interface>
   #

   # ***********  Multiple <beacon>  definitions can follow   *********
   <beacon>
   #
   #  Beacons are sent out to radio transmitters AND/OR APRSIS.
   #  Default is "both", other modes are settable.
   #
   #beaconmode { aprsis | both | radio }
   #
   #  Beacons are sent from a circullar transmission queue, total cycle time
   #  of that queue is 20 minutes by default, and beacons are "evenly"
   #  distributed along it.  Actual intervals are randomized to be anything
   #  in between 80% and 100% of the  cycle-size / number-of-beacons.
   #  First beacon is sent out 30 seconds after system start.
   #  Tune the cycle-size to be suitable to your number of defined beacons.
   #
   #cycle-size  20m
   #
   #
   # Basic beaconed thing is positional message of type "!":
   #
   #beacon symbol "R&" lat "0000.00N" lon "00000.00E" comment "Rx-only iGate"
   #beacon symbol "R&" $myloc comment "Rx-only iGate"
   #
   # Following are basic options:
   #  'symbol'    no default, must be defined!
   #  'lat'       coordinate latitude:   ddmm.mmN  (no default!)
   #  'lon'       coordinate longitude: dddmm.mmE  (no default!)
   #  '$myloc'    coordinate values taken from global 'myloc' entry,
   #              and usable in place of explicit 'lat'+'lon'.
   #  'comment'   optional tail part of the item, default is nothing
   #
   # Sample symbols:
   #   R&   is for "Rx-only iGate"
   #   I&   is for "Tx-iGate"
   #   /#   is for "Digipeater"
   #   I#   is for "Tx-iGate + Digipeater"
   #
   # Additional options are:
   # 'srccall'   parameter sets claimed origination address.
   # 'dstcall'   sets destination address, default "APRXnn"
   # 'interface' parameter picks an interface (must be "tx-ok true" type)
   # 'via'       sets radio distribution pattern, default: none.
   # 'timefix'  On APRS messages with HMS timestamp (hour:min:sec), the
   #            system fixes appropriate field with transmit time timestamp.
   #
   # Message type is by default '!', which is positional no timestamp format.
   # Other possible formats are definable with options:
   # 'type'   Single character setting type:  ! = / @
   # 'item'   Defines a name of Item (')') type beacons.
   # 'object' Defines a name of Object (';') type beacons.
   #
   # 'file' option tells a file at which a _raw_ APRS message content is
   #        expected to be found as first line of text. Line ending newline
   #        is removed, and no escapes are supported.  The timefix is
   #        available, though probably should not be used.
   #
   # 'exec' option defines program path for a program whose stdout is
   #        read up to first newline (which must be present), and then
   #        transmit as beacon content. No format helpers are supplied,
   #        although 'timefix' can be used.
   # 'timeout' option is associated with 'exec', and defines when the
   #        exec must by latest produce the output, or the subprogram
   #        execution is killed. Default value is 10 seconds.
   #
   # The parameter sets can vary:
   #  a) 'srccall nnn-n dstcall "string" symbol "R&" lat "ddmm.mmN" lon "dddmm.mmE" [comment "any text"]
   #  b) 'srccall nnn-n dstcall "string" raw "string"'
   #
   # The a) form flags on some of possible syntax errors in parameters.
   # It will also create only "!" type messages.  The dest parameter
   # defaults to "APRS", but can be used to give other destinations.
   # The via parameter can be used to add other keywords, like "NOGATE".
   #
   # Writing correct RAW format beacon message is very hard,
   # which is evidenced by the frequency of bad syntax texts
   # people so often put there...   If you can not be persuaded
   # not to do it, then at least VERIFY the beacon result on
   # web service like  findu.com,  or  aprs.fi
   #
   #beacon                 file /tmp/wxbeacon.txt
   #beacon srccall N0CALL-3 raw "!0000.00NR00000.00E&aprx - an Rx-only iGate"
   #beacon srccall N0CALL-3 raw "!0000.00NI00000.00E&aprx - an iGate"
   #beacon srccall $mycall symbol "R&" lat "0000.00N" lon "00000.00E"  \
                           comment "aprx - an Rx-only iGate"
   #beacon srccall $mycall symbol "I&" lat "0000.00N" lon "00000.00E"  \
                           comment "aprx iGate"
   </beacon>

   # ***********  <telemetry>  definition(s) follow   *********
   #
   # The system will always send telemetry for all of its interfaces
   # to APRSIS, but there is an option to define telemetry to be sent
   # to radio channel by using following sections for each transmitter
   # that is wanted to send out the telemetry.
   #
   #   transmitter   -  callsign referring to <interface>
   #   via           -  optional via-path, only 1 callsign!
   #   source        -  one or more of <interface> callsigns for which
   #                    the telemetry transmission is wanted for
   #
   #<telemetry>
   #    transmitter    $mycall
   #    via       TRACE1-1
   #    source         $mycall
   #</telemetry>

   # ***********  <digipeater>  definition(s) follow   *********
   #
   #  The digipeater definitions tell transmitters that receive
   #  AX.25 packets from possibly multiple sources, and then what
   #  to do on the AX.25 headers of those messages.
   #
   #  There is one transmitter per digipeater -- and inversely, there
   #  can be at most one digipeater for each transmitter.
   #
   #  In each digipeater there is at least one <source>, usually same
   #  as the transmitter.
   #
   #<digipeater>
   #    transmitter     $mycall
   #    #ratelimit      60 120      # default: average 60 packets/minute,
   #                                #          burst max 120 packets/minute
   #    #srcratelimit   10 20       # Example: by sourcecall:
   #                                #          average 10 packets/minute,
   #                                #          burst max 20 packets/minute
   #
   #    <source>
   #        source         $mycall
   #    #   ratelimit      60 120      # default: average 60 packets/minute,
   #    #                              #          burst max 120 packets/minute
   #    #   viscous-delay  0     # no viscous delay for RF->RF digipeat
   #    #   ratelimit      120   # default: max 120 packets/minute
   #    </source>
   #
   #    #<source>          # Adding APRSIS source makes this tx-igate
   #    #   source        APRSIS
   #    #   ratelimit      60 120      # default: average 60 packets/minute,
   #    #                              #          burst max 120 packets/minute
   #    #   relay-type    third-party  # Must define this for APRSIS source!
   #    #   viscous-delay  5 # Recommendation: 5 seconds delay to give
   #    #                    # RF delivery time make itself known.
   #    #   filter         t/m  # Tx-iGate only messages sent to me by APRSIS
   #    #</source>
   #
   #</digipeater>

GLOBAL MYCALL PARAMETER

   In majority of usage models, system needs single  configured  callsign.
   This  is  set  by  using  the  mycall  configuration option, and latter
   referred  to  in  configurations  as  $mycall  parameter  in  place  of
   callsigns.

GLOBAL MYLOC PARAMETER

   Usually  multiple  beacons,  and  simple  filter rules are wanted to be
   using same reference coordinate for this system.  This is set by  using
   the   myloc   configuration   option,   and   latter   referred  to  in
   configurations as  $myloc  parameter  in  place  of  "lat  nn  lon  mm"
   coordinate pair of beacons.

APRSIS SECTION FOR APRSIS CONNECTIVITY

   Settings  in  the <aprsis> section define connectivity with the APRS-IS
   network service.

   Necessary option is server, and others are optional.

   Available options are:

   login $mycall
           The APRSIS network login.  Defaults to the mycall configuration
           entry.

   passcode -1
           Defining  a small integer in range of 0 to 32767 authenticating
           your login to APRS-IS server.  Ask  for  assistance  from  your
           APRS-IS  managers,  or  calculate  it  yourself  with  aprspass
           program. (Web search engines do find several of them.)

   server server-name 14850
           Define  which  APRS-IS  is  being   connected   to.    Multiple
           definitions  are  used  in round-robin style, if the connection
           with the previous one fails for some reason.

   filter 'filter specs in quotes' # comments
           Set filter adjunct definitions  on  APRS-IS  server.   Multiple
           entries  are catenated together in entry order, when connecting
           to the server.

LOGGING SECTION

   The <logging> section defines miscellaneous file names and options  for
   state tracking and logging use.

   pidfile /var/run/aprx.pid
           The  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

   rflog /var/log/aprx/aprx-rf.log
           The  rflog  defines a rotatable file into which all RF-received
           packets are logged.  There is no default.

   aprxlog /var/log/aprx/aprx.log
           The aprxlog defines a rotatable file into which most  important
           events  on  APRS-IS  connection are logged, namely connects and
           disconnects.  There is no default.

   erlangfile /var/run/aprx.state
           The 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.
           This file is around 0.7 MB per each interface talking APRS.  If
           this file is not defined and can not be created, internal  non-
           persistent  in-memory  storage  will be used.  Built-in default
           value is: /var/run/aprx.state

   erlang-loglevel NONE
           The erlang-loglevel is config file edition 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.

   erlanglog /var/log/aprx/erlang.log
           The erlanglog defines a rotatable file into which  erlang  data
           is written in text form.  There is no default.

   erlang-log1min
           The  erlang-log1min  option  logs  to syslog/file also 1 minute
           interval data from the program.  (In addition to 10m and  60m.)
           Default is off.

INTERFACE SECTIONS FOR RADIO PORTS

   The  <interface>  sections define connections to radio modems.  Several
   different styles are available:

   * Local serial ports in the  machine  (device-serial  /dev/ttyS0  speed
     encapsulation)

   * Local  USB  serial  ports  in the machine (device-serial /dev/ttyUSB0
     speed encapsulation)

   * Remote served serial ports over a TCP stream.   Implemented  to  talk
     with  Cisco AUX ports on "range 4000" (TCP STREAM, no TELNET escapes)
     (tcp-device 12.34.56.78 4001 encapsulation)

   * Linux  internal   AX.25   network   attached   devices   (ax25-device
     CALLSIGN-1)  are only available when running on a Linux system.  On a
     non-Linux system it connects  to  a  null  interface,  never  getting
     anything and can always sink everything.

   The  serial port name tells what kind of port is in question, and while
   port baud-rate (9600) and character settings (8n1) must always be  set,
   they are ignored for the remote connection.

   Following speed modes are available:
        1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600,
        115200, 230400, 460800, 500000, 576000
   Likely  available speeds are in bold, other supported values are listed
   in italics.

   Following encapsulation modes are available:

   TNC2      is capable only to monitor the packets reported by TNC2  type
             debug  output,  and  Rx-iGate, but they are not acceptable as
             source for a <digipeater>.

   DPRS      is special mode for gateway from D-STAR D-PRS to APRS.   This
             must always have a callsign definition for the gateway.

   KISS      Basic  KISS  encapsulation.   No  checksums.  Will autodetect
             (sometimes) packets with SMACK or FLEXNET characteristics.

   SMACK     Stuttgart Modified Amateurradio-CRC-KISS, which  runs  CRC-16
             checksum  on KISS datastream much in the same way as HDLC has
             CCITT-CRC checksum on it.

   FLEXNET   FLEXNET which runs a CRC checksum of its  own  polynomial  on
             KISS  datastream  much  in the same way as HDLC has CCITT-CRC
             checksum on it.

   BPQCRC    XOR "checksum" on dataframes.  Also  known  as  "XKISS",  and
             "XORSUM".   This  detects  single bit failure, but weakly any
             multibit failures.   Extra  0x00  bytes  have  no  effect  on
             checksum, etc.

   On <kiss-subif tncid> sub-options the parameter is tncid, which sets up
   KISS multiplexer parameter so that subsequent options applies  only  on
   designated KISS sub-port.

   The  callsign option sets port specific callsign when relaying to APRS-
   IS.

   The telem-to-is true option can  be  used  to  disable  (by  explicitly
   setting  it to 'false') radio interface telemetry transmission to APRS-
   IS.  By default it is on.  This is separate from <telemetry>  sections,
   which send telemetry to RF interfaces.

   <interface>
      serial-device /dev/ttyUSB1 19200 8n1 KISS
      tx-ok         false          # receive only (default)
      callsign      OH2XYZ-R2      # KISS subif 0
      initstring    "...."         # initstring option
      timeout       900            # 900 seconds of no Rx
   </interface>

   <interface>
      serial-device /dev/ttyUSB1 19200 8n1 SMACK
      tx-ok         false          # receive only (default)
      callsign      OH2XYZ-R2      # KISS subif 0
      initstring    "...."         # initstring option
      timeout       900            # 900 seconds of no Rx
   </interface>

   <interface>
      serial-device /dev/ttyUSB2 19200 8n1 KISS
      initstring    "...."
      timeout       900            # 900 seconds of no Rx
      <kiss-subif 0>
         callsign OH2XYZ-2
         tx-ok    true             # This is our transmitter
      </kiss-subif>
      <kiss-subif 1>
         callsign OH2XYZ-R3        # This is receiver
         tx-ok    false            # receive only (default)
      </kiss-subif>
   </interface>

   <interface>
      tcp-device   172.168.1.1 4001 KISS
      tx-ok         false          # receive only (default)
      callsign      OH2XYZ-R4      # KISS subif 0
      initstring    "...."         # initstring option
      timeout       900            # 900 seconds of no Rx
   </interface>

   <interface>
      ax25-device OH2XYZ-6         # Works only on Linux systems
      tx-ok       true             # This is also transmitter
   </interface>

   <interface> # RX-IGATE ONLY, NOT USABLE AS DIGIPEATER SOURCE
      serial-device /dev/ttyUSB1 19200 8n1 TNC2
      callsign      OH2XYZ-R6      # TNC2 has no sub-ports
      initstring    "...."         # initstring option
      timeout       900            # 900 seconds of no Rx
   </interface>

BEACON DEFINITIONS

   The beacons are defined using <beacon> configuration sections.

   Because  classical  beacon  definitions  are  highly  error-prone, this
   program has a new way to define them:

   * The new way to define beacons:
     beacon symbol "R&" lat "0000.00N" lon "00000.00E"  \
            comment "aprx - iGate"

   * Semi-clasical definition of raw APRS packet:
     beacon raw "!0000.00NR00000.00E&aprx - iGate"

   * Load beacon text from a file, path data is configurable:
     beacon file /path/to/file

   * Run a program to produce beacon data in raw format:
     beacon exec /path/to/file timeout 10

   The fields and parameters:

   interface   An optional "interface" parameter tells  that  this  beacon
               shall  be  sent  only to interface whose callsign is named.
               Default is to send to all interfaces that have "tx-ok true"
               setting.

   type        An  optional  one  character  string parameter, with one of
               following contents:  "!", "=", "/", "@", ";" and ")".

   srccall     An optional "srccall" parameter  tells  callsign  which  is
               claimed as this particular beacon source.  It must be valid
               AX.25  callsign  in  text  format.   When  this   "srccall"
               parameter  is  not  given,  value of "mycall" configuration
               entry is used.

   dstcall     An  optional  "dstcall"  parameter  has  built-in  software
               version  dependent  value,  but  it  can  be used to define
               another value.

   via         An optional "via" parameter defaults to nothing, but can be
               used  to  define additional "VIA" path tokens, for example:
               "WIDE1-1".

   item        An optional "item" parameter is for defining a name for  an
               item type APRS packet.

   object      An  optional  "object" parameter is for defining a name for
               an object type APRS packet.

   symbol      A mandatory "symbol" parameter is two character code, which
               for Rx-only iGate is pair: "R&"

   lat         This  mandatory parameter defines latitude coordinate (that
               is:  north/south.)   It  is  expected  to  be  of   format:
               "ddmm.mmN"  where  "dd"  defines  two  digits of degrees of
               latitude, and "mm.mm" defines two digits +  decimal  dot  +
               two  digits of minutes of latitude.  Then comes literal "N"
               or "S" indicating hemisphere.

   lon         This mandatory parameter defines longitude coordinate (that
               is:   east/west.)    It   is  expected  to  be  of  format:
               "dddmm.mmE" where "ddd" defines three digits of degrees  of
               longitude,  and  "mm.mm" defines two digits + decimal dot +
               two digits of minutes of longitude.  Then comes literal "E"
               or "W" indicating hemisphere.

   comment     This optional parameter defines commentary text tail on the
               beacon packet.  If you  need  characters  outside  US-ASCII
               character  set,  use of UTF-8 encoded UNICODE character set
               is recommended.

   raw         This alternate format defines whole APRS packet content  in
               raw  text  format.   Currently this type of packets are not
               validated for syntax at all!

   file        This alternative way defines path to  a  file  with  single
               text line defining content of raw message data.

   exec        This  alternative  mode  runs designated program, and waits
               for at most a timeout number of seconds  (default  10)  for
               the program to produce the result.

   timeout     This  is  optional  parameter  for  exec  allowing  altered
               timeout (number of seconds)  for  waiting  the  program  to
               respond.  Default is 10 seconds.

   The  type/symbol/lat/lon/comment-format  supports  only  a few types of
   APRS packets.  It splits input into small slices that are  possible  to
   validate in detail.  (See "DEBUGGING SYSTEM" above.)

RF-TELEMETRY

   The aprx system will always send telemetry for all of its interfaces to
   APRSIS, but there is an option to define telemetry to be sent to  radio
   channel by using following sections for each transmitter that is wanted
   to send out the telemetry.

   The parameters of <telemetry> configuration section are:

   transmitter A mandatory callsign referring to an interface.

   via         An optional via-path parameter.  Only 1 callsign!

   source      One or more of interface callsigns for which the  telemetry
               transmission is made.

DIGIPEATER

   The  aprx  is  possible  to  configure  as a AX.25 digipeater with APRS
   twists.  This is done with <digipeater> configuration section  and  its
   subsections.

   There  can  be  at  most  one <digipeater> definition per each transmit
   capable  interface  in  the  system.   On  a   system   with   multiple
   transmitters,  this  means there can be multiple digipeaters, each with
   different behaviour rules.

   Minimalistic setup for a digipeater will be as follows:

   <digipeater>
       transmitter     $mycall
       <source>
           source      $mycall
       </source>
   </digipeater>

   In minimalistic approach the system does digipeating of  packets  heard
   on the $mycall interface back to same interface.  Single requirement is
   that the <interface> block has tx-ok true setting on it.

   In more complicated  approaches  it  is  possible  to  define  multiple
   sources for packets:

   *  Multiple device ports.

   *  APRSIS pseudoport, which creates the Tx-iGate functionality.

   <digipeater> options
   Main-level <digipeater> options are:

   *  transmitter defines which interface the digipeater will output to.

   *  <trace> and <wide> sub-options are explained below.

   *  <source> sub-option is explained below.

   <trace> and <wide> sub-options
   The  <trace>  sub-option  has  priority  over  the  <wide>  sub-option,
   otherwise they are configured the same way.

   The <trace> sub-option defines which AX.25 address  contained  keywords
   are  treated  with  APRS  "New-N  paradigm"  rules  in a way where each
   processing  node  always  marks  its  transmitter   callsign   on   the
   transmitted AX.25 packet address header.

   The  <wide>  sub-option  defines which AX.25 address contained keywords
   are treated with APRS "New-N paradigm" rules in a way where  processing
   node  does  not  mark its transmitter callsign on the transmitted AX.25
   packet address header.

   Available parameters are:

   keys     A string of comma-separated set of string tokens:
               keys "TRACE,WIDE"
            Alternative form for this entry is:
               keys "TRACE"
               keys "WIDE"

   maxdone  Defines maximum  number  of  redistribution  hops  that  these
            keywords can have completed when reaching here.  If accounting
            finds more done, the system will just drop the packet  instead
            of digipeating it onwards.

   maxreq   Defines  maximum  number  of  redistribution  hops  that these
            keywords can define.  If accounting finds more requested,  the
            system  will  just  drop  the packet instead of digipeating it
            onwards.

   <source> sub-options
   Primary definer option is source which gives callsign of an <interface>
   from which the AX.25 packets are received for this <source> block.

   Available relay-type modes on <source> definitions are:

   digipeater    Normal   AX.25   digipeater  behaviour  with  APRS  New-N
                 paradigm support.  This is default mode.

   directonly    Digipeat only directly heard packets.  Useful for systems
                 that    are    designated   as   "fill-in".    See   also
                 "viscous-delay".

   third-party   Special mode for Tx-iGate.

   The ratelimit defines two  parameters:  average  and  limit  number  of
   packets   sent   in  60  seconds.   Its  definitions  can  be  both  in
   <digipeater> and in digipeater's <source> sections, and  therefore  you
   can  limit  each  individual  source  to a max accepted rate as well as
   define separate rate limits for the transmitter.

   The viscous-delay defines a number of seconds from 0 (default)  maximum
   of  9  that the source will put the message on duplicate detector delay
   processing.  All occurrances of  same  packet  per  duplicate  detector
   during  that  time  will be accounted on duplicate detection, and if at
   the end of the delay period there are more than one hit, the packet  is
   discarded.  Use delay of 0 seconds for normal digipeater, 5 seconds for
   a fill-in, or a Tx-iGate.

   A javAPRSSrvr filter-adjunct style rules are possible with  the  filter
   options.   When  you  want  multiple filters, use multiple options with
   associated parameters:
       filter t/m            # APRS messaging type packets
       filter a/la/lo/la/lo  # APRS positional packets within this area

   Also negative filters are possible  (prefixed  with  minus  character),
   which  upon match cause rejection of the packet.  Filters are evaluated
   in  definition  order,  and  first  matching  one  will  terminate  the
   evaluation.   When  no  filters are defined, everything is passed thru.
   When any filter is defined, only those  matching  non-negative  filters
   are  passed  thru,  and  no  default  "pass  everything else" behaviour
   exists.

   Supported "adjunct filters" are following:

   A/latN/lonW/latS/lonE
           Area filter, defined as area  enclosing  within  latS/latN  and
           lonW/lonE.   Latitude  and longitude are entered as degrees and
           decimals.

   B/call1/call2...
           Budlist filter.  Supports *-wildcards.

   D/digi1/digi2...
           Not supported at APRX internal filters

   E/call1/call2/...
           Not supported at APRX internal filters

   F/call/dist_km
           Great-circle distance in kilometers from friend's  coordinates.
           No wildcarding.
           (TODO: check that it really works!)

   M/dist  The  range  around  my  location  filter requires that you have
           defined also  the  "myloc"  configuration  entry.   It  defines
           acceptance  of  positions and messages with senders within dist
           kilometers of the "myloc" position.

   O/object1/obj2...
           Object name filter.  Supports *-wildcards.

   P/aa/bb/cc...
           Prefix filter.

   Q/con/ana
           The Q-construct filter is not supported.

   R/lat/lon/dist
           Range filter.   Latitude  and  longitude  are  in  degrees  and
           decimals.  Distance is in kilometers.  No wildcards.

   S/pri/alt/over
           Symbol filter

   T/..../call/km
           Type filter.  Couple possible usages:

             -t/c                Everything except CWOP

              t/*/OH2RDY/50      Everything  within 50 km of OH2RDY's last
                                 known position

           Type code characters are:

           *  An "all" wild-card.

           C  A CWOP.

           I  An ITEM.

           M  A MESSAGE.

           N  A NWS message.

           O  An OBJECT.

           Q  A QUERY.

           S  A STATUS response.

           T  A TELEMETRY packet or parameter message.

           U  A USERDEF message.

           W  A WX data packet

   U/unproto1/unproto2...
           Filters  by  value  in  destination  address  field,   supports
           wildcard.

   The  <trace>  and  <wide>  sub-options exist also within each <source>.
   Where such occur, the <source> specific <trace> sub-option  trumps  the
   definition  on  <digipeater>  level,  and same with <wide> sub-options.
   This allows things like overriding flooding control keywords on  source
   basis, should such be necessary.

   A  set of regex-filter rules can be used to reject packets that are not
   of approved kind.  Available syntax is:

   regex-filter source RE
          source address field

   regex-filter destination RE
          destination address field

   regex-filter via RE
          any via path field

   regex-filter data RE
          payload content

   The regex-filter exists as ad-hoc method when all else fails.

NOTES: ERLANG

   The Erlang is telecom measurement of channel  occupancy,  and  in  this
   application  sense  it does tell how much traffic there is on the radio
   channel.

   Most radio transmitters are not aware of all transmitters  on  channel,
   and  thus  there  can happen a collision causing loss of both messages.
   The higher the channel activity, the more  likely  that  collision  is.
   For further details, refer to statistical mathematics books, or perhaps
   on Wikipedia.

   In order to measure channel activity, the aprx program suite has  these
   built-in statistics counter and summary estimators.

   The  Erlag  value  that  the  estimators  present  are  likely somewhat
   underestimating the true channel occupancy simply because it calculates
   estimate  of channel bit transmit rate, and thus a per-minute character
   capacity.  It does not know true frequency of  bit-stuffing  events  of
   the  HDLC  framing, nor each transmitter pre- and port frame PTT times.
   The transmitters need to stabilize their transmit oscillators  in  many
   cases,  which may take up to around 500 ms!  The counters are not aware
   of this preamble-, nor postamble-times.

   The HDLC bit stuffing ratio is guessed to be 1:1.025 (1 extra bit every
   5 bytes)

NOTES: PROGRAM NAME

   Initially  this  program  had  name  aprsg-ng,  which  was too close to
   another (a less low-tech C++ approach) program had.

BUGS/WARTS

   The Erlang-monitor mechanisms  are  of  rudimentary  quality,  and  can
   seriously  underestimate  the  channel  occupancy  by ignoring pre- and
   postample transmissions, which can be as high as  50  centiseconds  for
   preample,  and 20 centiseconds for postample!  When entire packet takes
   50 centiseconds, such preample  alone  doubles  channel  occupancy.   A
   6pack  protocol  on serial link (instead of KISS) could inform receiver
   better on carrier presense times, however even that  underestimates  RF
   power presense (RSSI) signal.  (6pack is not supported.)

   On  serial  lines  supports really only 8n1 mode, not at all like: 7e1.
   On the other hand, there really is no sensible usage for  anything  but
   8n1...

SEE ALSO

   Couple web sites:
   http://www.aprs2.net/,
   http://www.aprs-is.net/,
   http://wiki.ham.fi/Aprx.en,
   http://ham.zmailer.org/oh2mqk/aprx/aprx-manual.pdf

   aprx-stat(8)

AUTHOR

   This little piece was written by Matti Aarnio, OH2MQK during a dark and
   rainy fall and winter  of  2007-2008  after  a  number  of  discussions
   grumbling  about current breed of available software for APRS iGate use
   in Linux (or of any UNIX) platforms.  Fall  and  winter  2009-2010  saw
   appearance of digipeater functionality.

   Principal  contributors and test users include: Pentti Gronlund, OH3BK,
   Reijo Hakala, OH1GWK.  Debian packaging  by  Kimmo  Jukarinen,  OH3GNU.
   Testing  of  SMACK variant of KISS by Patrick Hertenstein, DL1GHN.  The
   beacon exec functionality prototype by Kamil Palkowiski SQ8KFH.

                   aprx-2.08.svn593 - 2015 August 18               aprx(8)





Opportunity


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.





Free Software


Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.


Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.





Free Books


The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.


Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.





Education


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.


Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.