🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.os.linux.answers
Article #53

Linux AX25 HOWTO (part 3/3)

#53
From: Terry Dawson
Date: Wed, 07 Jan 1998 00:00
573 lines
23937 bytes
Archive-name: linux/howto/AX25-HOWTO/part3
Last-modified: 3 Nov 97

-----BEGIN PGP SIGNED MESSAGE-----

*** The `Linux AX25 HOWTO' is posted automatically by the
*** Linux HOWTO coordinator, Greg Hankins <gregh@sunsite.unc.edu>.  Please
*** direct any comments or questions about this HOWTO to the author,
*** Terry Dawson <terry@perf.no.itg.telecom.com.au>.

- --- BEGIN Linux AX25 HOWTO part 3/3 ---

  21.2.  IPIP encapsulated gateway configuration.

  Linux is now very commonly used for TCP/IP encapsulated gateways
  around the world. The new tunnel driver supports multiple encapsulated
  routes and makes the older ipip daemon obsolete.

  A typical configuration would look similar to the following.

                                                 .      .   .    .    . .
         ---                                .
          | Network       /---------\     .    Network
          | 154.27.3/24   |         |    .     44.136.16/24       \ | /
          |               | Linux   |   .                          \|/
          |               |         |  .                            |
          |          eth0 | IPIP    |  .  /-----\    /----------\   |
       ---|---------------|         |-----| TNC |----| Radio    |---/
          |   154.27.3.20 | Gateway |  .  \-----/    \----------/
          |               |         | sl0
          |               |         | 44.136.16.1
          |               |         |    .
          |               |         |     .
          |               \_________/       .
         ---                                     .      .   .    .    . .

  The configuration files of interest are:

  # /etc/rc.net
  # This file is a simple configuration that provides one KISS AX.25
  # radio port, one Ethernet device, and utilises the kernel tunnel driver
  # to perform the IPIP encapsulation/decapsulation
  #
  echo "/etc/rc.net"
  echo "  Configuring:"
  #
  echo -n "    loopback:"
  /sbin/ifconfig lo 127.0.0.1
  /sbin/route add 127.0.0.1
  echo " done."
  #
  echo -n "    ethernet:"
  /sbin/ifconfig eth0 154.27.3.20 netmask 255.255.255.0 \
                  broadcast 154.27.3.255 up
  /sbin/route add 154.27.3.20 eth0
  /sbin/route add -net 154.27.3.0 netmask 255.255.255.0 eth0
  echo " done."
  #
  echo -n "    AX.25: "
  kissattach -i 44.136.16.1 -m 512 /dev/ttyS1 4800
  /sbin/ifconfig sl0 netmask 255.255.255.0 broadcast 44.136.16.255
  /sbin/route add -host 44.136.16.1 sl0
  /sbin/route add -net 44.136.16.0 netmask 255.255.255.0 window 1024 sl0
  #
  echo -n "    tunnel:"
  /sbin/ifconfig tunl0 44.136.16.1 mtu 512 up
  #
  echo done.
  #
  echo -n "Routing ... "
  source /etc/ipip.routes
  echo done.
  #
  # end.

  and:

       # /etc/ipip.routes
       # This file is generated using the munge script
       #
       /sbin/route add -net 44.134.8.0 netmask 255.255.255.0 tunl0 gw 134.43.26.1
       /sbin/route add -net 44.34.9.0 netmask 255.255.255.0 tunl0 gw 174.84.6.17
       /sbin/route add -net 44.13.28.0 netmask 255.255.255.0 tunl0 gw 212.37.126.3
          ...
          ...
          ...

  /etc/ax25/axports

       # name  callsign        speed   paclen  window  description
       4800    VK2KTJ-0        4800    256     2       144.800 MHz

  Some points to note here are:

  �  The new tunnel driver uses the gw field in the routing table in
     place of the pointopoint parameter to specify the address of the
     remote IPIP gateway. This is why it now supports multiple routes
     per interface.

  �  You can configure two network devices with the same address.  In
     this example both the sl0 and the tunl0 devices have been
     configured with the IP address of the radio port. This is done so
     that the remote gateway sees the correct address from your gateway
     in encapsulated datagrams sent to it.

  �  The route commands used to specify the encapsulated routes can be
     automatically generated by a modified version of the munge script.
     This is included below. The route commands would then be written to
     a separate file and read in using the bash source /etc/ipip.routes
     command (assuming you called the file with the routing commands
     /etc/ipip.routes) as illustrated. The source file must be in the
     NOS route command format.

  �  Note the use of the window argument on the route command. Setting
     this parameter to an appropriate value improves the performance of
     your radio link.

  The new tunnel-munge script:

  #!/bin/sh
  #
  # From: Ron Atkinson <n8fow@hamgate.cc.wayne.edu>
  #
  #  This script is basically the 'munge' script written by Bdale N3EUA
  #  for the IPIP daemon and is modified by Ron Atkinson N8FOW. It's
  #  purpose is to convert a KA9Q NOS format gateways route file
  #  (usually called 'encap.txt') into a Linux routing table format
  #  for the IP tunnel driver.
  #
  #        Usage: Gateway file on stdin, Linux route format file on stdout.
  #               eg.  tunnel-munge < encap.txt > ampr-routes
  #
  # NOTE: Before you use this script be sure to check or change the
  #       following items:
  #
  #     1) Change the 'Local routes' and 'Misc user routes' sections
  #        to routes that apply to your own area (remove mine please!)
  #     2) On the fgrep line be sure to change the IP address to YOUR
  #        gateway Internet address. Failure to do so will cause serious
  #        routing loops.
  #     3) The default interface name is 'tunl0'. Make sure this is
  #        correct for your system.

  echo "#"
  echo "# IP tunnel route table built by $LOGNAME on `date`"
  echo "# by tunnel-munge script v960307."
  echo "#"
  echo "# Local routes"
  echo "route add -net 44.xxx.xxx.xxx netmask 255.mmm.mmm.mmm dev sl0"
  echo "#"
  echo "# Misc user routes"
  echo "#"
  echo "# remote routes"

  fgrep encap | grep "^route" | grep -v " XXX.XXX.XXX.XXX" | \
  awk '{
          split($3, s, "/")
          split(s[1], n,".")
          if      (n[1] == "")    n[1]="0"
          if      (n[2] == "")    n[2]="0"
          if      (n[3] == "")    n[3]="0"
          if      (n[4] == "")    n[4]="0"
          if      (s[2] == "1")   mask="128.0.0.0"
          else if (s[2] == "2")   mask="192.0.0.0"
          else if (s[2] == "3")   mask="224.0.0.0"
          else if (s[2] == "4")   mask="240.0.0.0"
          else if (s[2] == "5")   mask="248.0.0.0"
          else if (s[2] == "6")   mask="252.0.0.0"
          else if (s[2] == "7")   mask="254.0.0.0"
          else if (s[2] == "8")   mask="255.0.0.0"
          else if (s[2] == "9")   mask="255.128.0.0"
          else if (s[2] == "10")  mask="255.192.0.0"
          else if (s[2] == "11")  mask="255.224.0.0"
          else if (s[2] == "12")  mask="255.240.0.0"
          else if (s[2] == "13")  mask="255.248.0.0"
          else if (s[2] == "14")  mask="255.252.0.0"
          else if (s[2] == "15")  mask="255.254.0.0"
          else if (s[2] == "16")  mask="255.255.0.0"
          else if (s[2] == "17")  mask="255.255.128.0"
          else if (s[2] == "18")  mask="255.255.192.0"
          else if (s[2] == "19")  mask="255.255.224.0"
          else if (s[2] == "20")  mask="255.255.240.0"
          else if (s[2] == "21")  mask="255.255.248.0"
          else if (s[2] == "22")  mask="255.255.252.0"
          else if (s[2] == "23")  mask="255.255.254.0"
          else if (s[2] == "24")  mask="255.255.255.0"
          else if (s[2] == "25")  mask="255.255.255.128"
          else if (s[2] == "26")  mask="255.255.255.192"
          else if (s[2] == "27")  mask="255.255.255.224"
          else if (s[2] == "28")  mask="255.255.255.240"
          else if (s[2] == "29")  mask="255.255.255.248"
          else if (s[2] == "30")  mask="255.255.255.252"
          else if (s[2] == "31")  mask="255.255.255.254"
          else                    mask="255.255.255.255"

  if (mask == "255.255.255.255")
          printf "route add -host %s.%s.%s.%s gw %s dev tunl0\n"\
                  ,n[1],n[2],n[3],n[4],$5
  else
          printf "route add -net %s.%s.%s.%s gw %s netmask %s dev tunl0\n"\
                  ,n[1],n[2],n[3],n[4],$5,mask
   }'

  echo "#"
  echo "# default the rest of amprnet via mirrorshades.ucsd.edu"
  echo "route add -net 44.0.0.0 gw 128.54.16.18 netmask 255.0.0.0 dev tunl0"
  echo "#"
  echo "# the end"

  21.3.  AXIP encapsulated gateway configuration

  Many Amateur Radio Internet gateways encapsulate AX.25, NetRom and
  Rose in addition to tcp/ip. Encapsulation of AX.25 frames within IP
  datagrams is described in RFC-1226 by Brian Kantor. Mike Westerhof
  wrote an implementation of an AX.25 encapsulation daemon for unix in
  1991. The ax25-utils package includes a marginally enhanced version of
  it for Linux.

  An AXIP encapsulation program accepts AX.25 frames at one end, looks
  at the destination AX.25 address to determine what IP address to send
  them to, encapsulates them in a tcp/ip datagram and then transmits
  them to the appropriate remote destination. It also accepts tcp/ip
  datagrams that contain AX.25 frames, unwraps them and processes them
  as if it had received them directly from an AX.25 port. To distinguish
  IP datagrams containing AX.25 frames from other IP datagrams which
  don't, AXIP datagrams are coded with a protocol id of 4 (or 94 which
  is now deprecated). This process is described in RFC-1226.

  The ax25ipd program included in the ax25-utils package presents itself
  as a program supporting a KISS interface across which you pass AX.25
  frames, and an interface into the tcp/ip protocols. It is configured
  with a single configuration file called /etc/ax25/ax25ipd.conf.

  21.3.1.  AXIP configuration options.

  The ax25ipd program has two major modes of operation. "digipeater"
  mode and "tnc" mode. In "tnc" mode the daemon is treated as though it
  were a kiss TNC, you pass KISS encapsulated frames to it and it will
  transmit them, this is the usual configuration. In "digipeater" mode,
  you treat the daemon as though it were an AX.25 digipeater. There are
  subtle differences between these modes.

  In the configuration file you configure "routes" or mappings between
  destination AX.25 callsigns and the IP addresses of the hosts that you
  want to send the AX.25 packets too. Each route has options which will
  be explained later.
  Other options that are configured here are

  the tty that the ax25ipd daemon will open and its speed (usually one
  end of a pipe)

  what callsign you want to use in "digipeater" mode

  beacon interval and text

  whether you want to encapsulate the AX.25 frames in IP datagrams or in
  UDP/IP datagrams. Nearly all AXIP gateways use IP encapsulation, but
  some gateways are behind firewalls that will not allow IP with the
  AXIP protocol id to pass and are forced to use UDP/IP. Whatever you
  choose must match what the tcp/ip host at the other end of the link is
  using.

  21.3.2.  A typical /etc/ax25/ax25ipd.conf file.

  #
  # ax25ipd configuration file for station floyd.vk5xxx.ampr.org
  #
  # Select axip transport. 'ip' is what you want for compatibility
  # with most other gateways.
  #
  socket ip
  #
  # Set ax25ipd mode of operation. (digi or tnc)
  #
  mode tnc
  #
  # If you selected digi, you must define a callsign.  If you selected
  # tnc mode, the callsign is currently optional, but this may change
  # in the future! (2 calls if using dual port kiss)
  #
  #mycall vk5xxx-4
  #mycall2 vk5xxx-5
  #
  # In digi mode, you may use an alias. (2 for dual port)
  #
  #myalias svwdns
  #myalias2 svwdn2
  #
  # Send an ident every 540 seconds ...
  #
  #beacon after 540
  #btext ax25ip -- tncmode rob/vk5xxx -- Experimental AXIP gateway
  #
  # Serial port, or pipe connected to a kissattach in my case
  #
  device /dev/ttyq0
  #
  # Set the device speed
  #
  speed 9600
  #
  # loglevel 0 - no output
  # loglevel 1 - config info only
  # loglevel 2 - major events and errors
  # loglevel 3 - major events, errors, and AX25 frame trace
  # loglevel 4 - all events
  # log 0 for the moment, syslog not working yet ...
  #
  loglevel 2
  #
  # If we are in digi mode, we might have a real tnc here, so use param to
  # set the tnc parameters ...
  #
  #param 1 20
  #
  # Broadcast Address definition. Any of the addresses listed will be forwarded
  # to any of the routes flagged as broadcast capable routes.
  #
  broadcast QST-0 NODES-0
  #
  # ax.25 route definition, define as many as you need.
  # format is route (call/wildcard) (ip host at destination)
  # ssid of 0 routes all ssid's
  #
  # route <destcall> <destaddr> [flags]
  #
  # Valid flags are:
  #         b  - allow broadcasts to be transmitted via this route
  #         d  - this route is the default route
  #
  route vk2sut-0 44.136.8.68 b
  route vk5xxx 44.136.188.221 b
  route vk2abc 44.1.1.1
  #
  #

  21.3.3.  Running ax25ipd

     Create your /etc/ax25/axports entry:

          # /etc/ax25/axports
          #
          axip    VK2KTJ-13       9600    256     AXIP port
          #

     Run the kissattach command to create that port:

          /usr/sbin/kissattach /dev/ptyq0 axip

     Run the ax25ipd program:

          /usr/sbin/ax25ipd &

     Test the AXIP link:

          call axip vk5xxx

  21.3.4.  Some notes about the routes and route flags

  The "route" command is where you specify where you want your AX.25
  packets encapsulated and sent to. When the ax25ipd daemon receives a
  packet from its interface, it compares the destination callsign with
  each of the callsigns in its routing table. If if finds a match then
  the ax.25 packet is encapsulated in an IP datagram and then
  transmitted to the host at the specified IP address.

  There are two flags you can add to any of the route commands in the
  ax25ipd.conf file. The two flags are:

     b  traffic with a destination address matching any of those on the
        list defined by the "broadcast" keyword should be transmitted
        via this route.

     d  any packets not matching any route should be transmitted via
        this route.

  The broadcast flag is very useful, as it enables informations that is
  normally destined for all stations to a number of AXIP destinations.
  Normally axip routes are point-to-point and unable to handle
  'broadcast' packets.

  21.4.  Linking NOS and Linux using a pipe device

  Many people like to run some version of NOS under Linux because it has
  all of the features and facilities they are used to. Most of those
  people would also like to have the NOS running on their machine
  capable of talking to the Linux kernel so that they can offer some of
  the linux capabilities to radio users via NOS.

  Brandon S. Allbery, KF8NH, contributed the following information to
  explain how to interconnect the NOS running on a Linux machine with
  the kernel code using the Linux pipe device.

  Since both Linux and NOS support the slip protocol it is possible to
  link the two together by creating a slip link. You could do this by
  using two serial ports with a loopback cable between them, but this
  would be slow and costly. Linux provides a feature that many other
  Unix-like operating systems provide called `pipes'. These are special
  pseudo devices that look like a standard tty device to software but in
  fact loopback to another pipe device. To use these pipes the first
  program must open the master end of the pipe, and the open then the
  second program can open the slave end of the pipe. When both ends are
  open the programs can communicate with each other simply by writing
  characters to the pipes in the way they would if they were terminal
  devices.

  To use this feature to connect the Linux Kernel and a copy of NOS, or
  some other program you first must choose a pipe device to use. You can
  find one by looking in your /dev directory. The master end of the
  pipes are named: ptyq[1-f] and the slave end of the pipes are known
  as: ttyq[1-f]. Remember they come in pairs, so if you select
  /dev/ptyqf as your master end then you must use /dev/ttyqf as the
  slave end.

  Once you have chosen a pipe device pair to use you should allocate the
  master end to you linux kernel and the slave end to the NOS program,
  as the Linux kernel starts first and the master end of the pipe must
  be opened first.  You must also remember that your Linux kernel must
  have a different IP address to your NOS, so you will need to allocate
  a unique address for it if you haven't already.

  You configure the pipe just as if it were a serial device, so to
  create the slip link from your linux kernel you can use commands
  similar to the following:

       # /sbin/slattach -s 38400 -p slip /dev/ptyqf &
       # /sbin/ifconfig sl0 broadcast 44.255.255.255 pointopoint 44.70.248.67 /
               mtu 1536 44.70.4.88
       # /sbin/route add 44.70.248.67 sl0
       # /sbin/route add -net 44.0.0.0 netmask 255.0.0.0 gw 44.70.248.67

  In this example the Linux kernel has been given IP address 44.70.4.88
  and the NOS program is using IP address 44.70.248.67. The route
  command in the last line simply tells your linux kernel to route all
  datagrams for the amprnet via the slip link created by the slattach
  command. Normally you would put these commands into your
  /etc/rc.d/rc.inet2 file after all your other network configuration is
  complete so that the slip link is created automatically when you
  reboot.  Note: there is no advantage in using cslip instead of slip as
  it actually reduces performance because the link is only a virtual one
  and occurs fast enough that having to compress the headers first takes
  longer than transmitting the uncompressed datagram.

  To configure the NOS end of the link you could try the following:

       # you can call the interface anything you want; I use "linux" for convenience.
       attach asy ttyqf - slip linux 1024 1024 38400
       route addprivate 44.70.4.88 linux

  These commands will create a slip port named `linux' via the slave end
  of the pipe device pair to your linux kernel, and a route to it to
  make it work. When you have started NOS you should be able to ping and
  telnet to your NOS from your Linux machine and vice versa. If not,
  double check that you have made no mistakes especially that you have
  the addresses configured properly and have the pipe devices around the
  right way.

  22.  Where do I find more information about .... ?

  Since this document assumes you already have some experience with
  packet radio and that this might not be the case I've collected a set
  of references to other information that you might find useful.

  22.1.  Packet Radio

  You can get general information about Packet Radio from these sites:

  American Radio Relay League <http://www.arrl.org/>,

  Radio Amateur Teleprinter Society <http://www.rats.org/>

  Tucson Amateur Packet Radio Group <http://www.tapr.org/>

  22.2.  Protocol Documentation

  AX.25, NetRom - Jonathon Naylor has collated a variety of documents
  that relate to the packet radio protocols themselves. This
  documentation has been packaged up into ax25-doc-1.0.tar.gz
  <ftp://ftp.pspt.fi/pub/ham/linux/ax25/ax25-doc-1.0.tar.gz>

  22.3.  Hardware Documentation

  Information on the PI2 Card is provided by the Ottawa Packet Radio
  Group <http://hydra.carleton.ca/>.

  Information on Baycom hardware is available at the Baycom Web Page
  <http://www.baycom.de/>.

  23.  Discussion relating to Amateur Radio and Linux.

  There are various places that discussion relating to Amateur Radio and
  Linux take place. They take place in the comp.os.linux.* newsgroups,
  they also take place on the HAMS list on vger.rutgers.edu. Other
  places where they are held include the tcp-group mailing list at
  ucsd.edu (the home of amateur radio TCP/IP discussions), and you might
  also try the #linpeople channel on the linuxnet irc network.

  To join the Linux linux-hams channel on the mail list server, send
  mail to:

       Majordomo@vger.rutgers.edu

  with the line:

       subscribe linux-hams

  in the message body. The subject line is ignored.

  The linux-hams mailing list is archived at:

  zone.pspt.fi <http://zone.pspt.fi/archive/linux-hams/> and
  zone.oh7rba.ampr.org <http://zone.oh7rba.ampr.org/archive/linux-
  hams/>.  Please use the archives when you are first starting, because
  many common questions are answered there.

  To join the tcp-group send mail to:

       listserver@ucsd.edu

  with the line:

       subscribe tcp-group

  in the body of the text.

  Note: Please remember that the tcp-group is primarily for discussion
  of the use of advanced protocols, of which TCP/IP is one, in Amateur
  Radio. Linux specific questions should not ordinarily go there.

  24.  Acknowledgements.

  The following people have contributed to this document in one way or
  another, knowingly or unknowingly. In no particular order (as I find
  them): Jonathon Naylor, Thomas Sailer, Joerg Reuter, Ron Atkinson,
  Alan Cox, Craig Small, John Tanner, Brandon Allbery, Hans Alblas,
  Klaus Kudielka, Carl Makin.

  25.  Copyright.

  The AX25-HOWTO, information on how to install and configure some of
  the more important packages providing AX25 support for Linux.
  Copyright (c) 1996 Terry Dawson.

  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.


- --- END Linux AX25 HOWTO part 3/3 ---

-----BEGIN PGP SIGNATURE-----
Version: 2.6.2
Comment: finger gregh@cc.gatech.edu for public key

iQCVAwUBNLMX6HtNTo2suu5NAQHG0gQAj6/Fn9kOLOaoL8Mvt75AY1dtKdGDato+
MZXXw+KtQ5m0uac5tErW1ZIe2XRueI15F4DeLFjOETHSYxp1uslVKe/TwdUFW3wu
mIIDDmTiz96Eu8TAXc2ys00OoRcmkA6gumNINqwCn6rPP5dYCPgPQRobuSIsxfi4
jejBva2vRQ8=
=m/oa
-----END PGP SIGNATURE-----
Technical Details
Message-ID: <AX25-HOWTO.3-23617.884152284@cc.gatech.edu>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <AX25-HOWTO.2-23617.884152284@cc.gatech.edu>

Show Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII
X-Google-Thread: 107ada,85a39c3029d61aca,start
X-Google-Attributes: gid107ada,public
X-Google-Thread: 1038bf,85a39c3029d61aca,start
X-Google-Attributes: gid1038bf,public
X-Google-Thread: f68a8,85a39c3029d61aca,start
X-Google-Attributes: gidf68a8,public
From: Terry Dawson <terry@perf.no.itg.telecom.com.au>
Subject: Linux AX25 HOWTO (part 3/3)
Date: 1998/01/07
Message-ID: <AX25-HOWTO.3-23617.884152284@cc.gatech.edu>
X-Deja-AN: 313536122
Sender: gregh@cc.gatech.edu
References: <AX25-HOWTO.2-23617.884152284@cc.gatech.edu>
Followup-To: poster
Summary: How to configure AX25 networking for Linux
Keywords: Linux, Networking, Ham, amateur radio, AX25
Organization: Linux HOWTO Project
X-Auth: PGPMoose V1.1 PGP comp.os.linux.answers iQBVAwUBNLMX9jpXzySNgdcNAQHSPQH/b5YgeXgqKaz0BGjyuYBUOiP2fdlyiMzQ 7m3lZAfVGPmk7xL+8wJTt0fxtz9muEM1K/VJPXItB8GH3srA9zOB4w== =V33/
NNTP-Posting-User: gregh
Newsgroups: comp.os.linux.answers,rec.radio.amateur.misc,aus.radio.amateur.digital