DigiPlex
Version 0.62 (Beta)
A cross-port AX.25 L2 Digipeater program for SV2AGW’s AGW Packet Engine
by Ing. Pedro E. Colla
(LU7DID)
Adrogue – Buenos Aires - Argentina
Table of Contents
What is this program for? Audience.
Configuration File (DIGIPLEX.INI)
Can not establish communication
with AGWPE
Does not operates correctly as a
digipeater
A Defined Listener doesn’t seems to
work
Throughput of the digipeating
process is slow
Disclaimer and License Statement
DIGIPLEX[1] is a Windows 95/98/NT
executable implementing a cross port AX.25 Layer 2 Repeater (Digipeater) for
the AGW Packet Engineâ.
a 32 bits AX.25 packet 32 bits platform developed by George Rossopoulos
(SV2AGW).
It’s purpose is to enable a given station to act as
a digipeater either on traffic over a single AGWPE defined port
or across different radio ports (frecuencies).
AX.25 frames heard in one defined port indicating
the callsign of the digipeater as a path will be transferred to the other
defined port as a digipeated frame and viceversa in a way that enables a full
two-way packet contact across (eventually) different ports.
It is intended to enable the communication of
stations operating on different AX.25 radio channels (at even different speeds)
in a transparent way just by routing the a given connection over the digipeater
program, in other words, the program could be seen as a simple AX.25 Layer 2
router or switch.
Since the operation is fully transparent any kind of
contact is supported, including network protocols such as NET/ROM or FlexNet as
well as TCP/IP.
Also, an experimental support to digipeat AX.25
frames across TCP/IP connections is introduced, it uses the L2 Worm Protocol
and it is described in detail later in this document (see Layer 2 Worm Digipeater).
DIGIPLEX uses the newly available TCP/IP
API of AGWPE and should run on any machine AGWPE could run, you
could download the latest version of the program as well as the TCP/IP API
related documentation directly from George’s home page at http://www.raag.org/sv2agw or http://www.elcom.gr/sv2agw .
Many packet operators are familiar with the concept of an AX.25 digipeater since this is a feature built into the AX.25 protocol itself and since forever.
A digipeater is a simplex, digital, repeater which
relay AX.25 frames between stations; several digipeaters could be chained (into
what is known usually as the “VIA” path), it has many uses being the most
obvious ones to extend the coverage of a given station or to take opportunity
of the privileged position of a particular station to extend the useful range
of a given station.
The digipeater concept is very simple and it’s also
simple to setup and operate one, actually many regular stations has their
software or hardware configured in a way that could operate as a repeater (the
setup is far more simpler than the one required for the distant cousin, a
voice/digital duplex repeater).
As simple as it is a digipeater has it’s drawbacks
also, the most obvious is the efficiency in terms of bandwidth (or effective
throughput speed) if you wish.
Since the frames are relayed entirely every
digipeater “hop” reduces the bandwidth efficiency (and thus the throughput) by
half, making impractical links over more than 2 or three hops (albeit the
protocol itself allows several more hops); this single factor has reduced the
actual usability of digipeaters very much and when greater distances or
coverage is required more advanced routing techniques (operating at Layer 3 or
4 such as NETROM or TCP/IP) are favoured.
In practice is very rare to see usages of more than
one hop except on very special situations and geographic configurations.
Still, with the proliferation of stations with more than
one radio port the desire (or need) for an station operating on one port (radio
channel) to hop over and link with an station in another channel do appear.
In order to achieve that trick, beyond the scope of
a simple Layer 2 digipeater which operates on the same channel, more complex
setups are usually required, such as an AX.25 switch (like G8BPQ)
or other Layer3 and 4 implementations such as NET/ROM or FlexNet.
This program takes advantage of the multiport nature
of the AGW Packet Engine to implement a Layer 2 digipeater with
some additional (optional) features, in particular the capability to relay
frames from one radio port to other in a bidirectional way.
Then, stations operating at one radio channel could
“transparently” link with stations operating in another.
Nothing prevent this program to be chained across
“several” channel “hops” as long as (of course) there are stations running it
that could create such a route.
To operate using a digipeater over more than one
channel is not as inefficient as to do the same on the same channel, the
bandwidth is used once on each channel; still the throughput will reflect the
fact the frame is transmitted twice (or more).
It’s ideally suited to link channels where the speed
is different (i.e. 1K2 and 9K6) when the throughput effect for the slower side
is much less important, few issues has to be addressed and understood in order
to optimize such setup (some of the issues are covered in detail later in this
document).
Actually, nothing prevents to implement special
configurations such as two channels on different geographical regions linked by
a dedicated (high speed) link; still the routing has to be made manually
(stating the digipeaters of both ends of the high speed link).
The audience of this program should be composed by
anybody willing to experiment a little; more stable setups should be performed
by stations that having a multiport configuration and relatively good equipment
(or geo location) are willing to provide a connectivity service to their neighboors.
Some
provisions has been made to make this program compatible with APRS (A Packet
Radio System), additional information could be found on the appropriate section
of this document (see APRS Compatibility
Mode ).
Warning - Notice
There are operating considerations when you use the
digipeater across ports that works at different speeds. Please refer to the
operation instructions before to implement that configuration.
To install the program the following actions has to
be performed:
IP_ADDRESS=nnn.nnn.nnn.nnn
where nnn.nnn.nnn.nnn is the IP
Address of the machine where AGWPE is running (you could
check which is the machine’s IP address with the Windows’s WINIPCFG
utility).
If you don’t know the IP Address and AGWPE
is running on the same machine you could try with IP_ADDRESS=127.0.0.1
(see the Troubleshooting section for further
details).
CALLSIGN=XXXXXX-nn
where XXXXXX is the callsign of the digipeater and nn it’s SSID (i.e. LU7DID-1), be sure the callsign-ssid you assign to the digipeater is not currently registered by any other application program running under AGWPE (check it with About/WinSockets on the AGWPE menu).
[LISTENER] Section
One entry in the form
{CallSign}={PortIn},{ALIAS}
Per repeater listener required (i.e. LU7DID-1=1,ABROWN[2])
The program doesn’t alter any system resource nor configuration, it could be removed just deleting the directory where it had been installed.
The AGWPE version required is 2000.10 or later, it won’t work with versions prior to that, so if you have a prior version or you are not sure what version you have just play safe and download a fresh version from SV2AGW’s Home Page
The AGWPE has to have at least one loopback port
defined for this program to work.
The program itself could run on either Windows 95, Windows 98, Windows NT, Windows 2000 and (probably) on Windows ME, still, the main requisite is to have AGWPE up and running on the target platform you’re planning to use.
*** Important Notice ****
DIGIPLEX interacts with AGWPE using it’s TCP/IP API, that requires the Windows 95/98/NT TCP/IP stack to be configured and functional. However, this is not related to the AGWPE TCP/IP drivers (for Windows 95/98) which are essentially a way to allow the Windows TCP/IP stack to operate over AX.25 radio links, the AGWPE TCP/IP drivers do not need to be installed for DIGIPLEX to work properly. Beware that the AGWPE TCP/IP drivers requires registration to work after a trial period, for details about the registration please see George’s (SV2AGW) Home Page.
There is one operational mode of this program that MIGHT require the AGWPE TCP/IP drivers to be installed, and it is when you enable the “worm” mode on a given listener and wish to carry the connection over radio. The drivers are not required if you want to use the worm mode over other TCP/IP connections such as over the Internet.
The DIGIPLEX is an application that could not be
accessed directly by the user other than to shutdown it, it has to be
loaded initially and furthermore it will operate over the frames heard on the
designated ports without the operator intervention.
.
·
Load
and configure AGWPE, follow the intallation instructions for
that. Be sure the AGWPE.INI file has the following entry
[TCPIPINTERCONNECT]
ENABLE=1
·
Ensure
at least one Loopback port is defined, this program will not work without it.
·
Test
AGWPE to be functional with any of the provided programs such as AGWTerminal
or AGWMonitor, if they refuses to work it’s highly likely that DIGIPLEX
won’t work either.
·
Load
DIGIPLEX, it should work transparently. In case of problems see the Troubleshooting section of this document.
The DIGIPLEX program is an AGWPE
compliant application program which implements an AX.25 Layer 2 Repeater
(Digipeater).
The program inspect the traffic over the defined
ports of each listener defined ([LISTENER] Section) and whenever it detects
frames that has been informed the callsign-ssid of the associated listener as a part of the path it performs the
following activities:
·
It
sets the “Repeated Bit” to 1 on the AX.25 Frame.
·
It
resends the frame thru the opposite port from where the frame was originally
heard (heard on Port IN resend thru Port OUT, heard on Port OUT resend thru
Port IN, if Port IN = Port OUT the
frame is resent the the same port it was heard originally).
An AX.25 Layer 2 Repeater (Digipeater) is a
relatively dumb device, it doesn’t handle the concept of a connection nor
manage any detail about the handshake between both final ends of the connection
(that might include, albeit not necessarily, other digipeaters in the path); as
many frames are heard that fits the relatively narrow criteria already stated
are re-broadcasted.
Since the digipeater knows nothing about the nature
of the connection it could handle any sort of traffic, both connected and
unconnected frames; also, it could handle special frames such as the ones
typically used for NETROM or TCP/IP traffic.
Whether or not the digipeater rebroadcast a given
frame is strictly defined for the detection of it’s own callsign-ssid (as
defined on the entry of the listener section on the DIGIPLEX.INI
configuration file) with the “Repeated Bit” of the AX.25 set to 0 (not repeated
yet) and with no other digipeater stated on the frame with that bit also set to
0 (meaning that the digipeater is “hearing” a frame that has not been
“digipeated” yet on the proper sequence).
Other operating modes are also available (see “Smart” Mode ).
Most of the configuration needed by DIGIPLEX has been set with the short instructions given for the initial installation of the program, however some additional operation modes and configuration parameters could be stated as well.
This
file is not used for any other program nor affects in any way the overall
behaviour nor the operation of the Windows environment, it could be removed as
a part of the uninstallation of DIGIPLEX program withour any further consideration.
However,
if not properly configured it is unlikely that DIGIPLEX could
work at all (and in some cases it would drive it to fail, see Troubleshooting for details), so attention has to
be pay to the settings defined on it; also some undesired “on the air”
behaviour could be obtained if some parameters are improperly configured.
The overall format is that of any standard Windows .INI file, several section logically groups the configuration parameters of different aspects of the program as follows:
|
Parameter |
Description |
|
[DIGIPLEX] Section |
Mandatory |
|
IP_ADDRESS |
Defines the IP address of the
machine where AGWPE will be found (default 127.0.0.1) |
|
TCP_PORT |
Defines the TCP port used to
communicate with AGWPE (default 8000). |
|
DEBUG |
This is an interim configuration
parameter that when stated as DEBUG=YES direct DIGIPLEX to
generate traces of its internal activity on the DIGIPLEX.LOG.In order to disable
the logging the line has to be set as DEBUG=NO or removed from the DIGIPLEX.INI
file. |
|
TRACE |
This is a parameter {1 to 5}
that defines how detailed the events logged will be, 1 being the least and 5
the highest, there should be no reason to set this parameter on values
different than 1 unless a need to trace and debug exists. Warning: once the traces
are activated the logfile generated could become quite large (dozens of
megabytes!!). |
|
CALLSIGN |
This is the CallSign+SSID the program
will use to communicate with AGWPE. Not necessarily be a digipeater
CallSign-SSID (Unless also stated in the LISTENER sections). |
|
[BEACON] |
Only required if Beacon
Desired |
|
ID |
ID where the frames of the
beacon will be sent, the beacon is optional and not related with the
operation of the program as a digipeater. It only helps to make it presence
visible to others on the channels. If more than one CallSign-SSID
is indicated (separated by blanks) the first is considered the “destination”
while the remaining the VIA path. The beacon is sent thru ALL the
defined AGWPE ports. |
|
TEXT |
Text to sent thru the beacon |
|
EVERY |
Elapsed in mSecs between
successive broadcasts of the beacon (0 will disable the beacon). |
|
VERBOSE |
If YES a list of all L2 Digi
callsigns and serviced ports is added to each broadcasted beacon message. |
|
[LISTENER] Section |
Mandatory |
|
One entry per listener in the
general format CallSign-SSID={Port},Alias,{APRS},{TCP},SMART |
A verification is made to avoid
conflicting definitions, the APRS token is optional and
enables the operation of the digipeater in APRS compatibility mode. The TCP token is optional and
enables the listener to act as an end of a L2 Worm Digipeater. The SMART token activates an
special hop-to-hop ack protocol across the digi. |
|
[WORM.ROUTES] |
Optional (only if TCP
Listeners had been defined) |
|
CALLSIGN-SSID=Port,IP_Address{:Port},Password,MinHour,MaxHour |
Specify a route to the remote
digipeater CallSign-SSID to be established over a TCP/IP connection with
IP_Address:Port |
|
[APRS] Section |
Optional (only if APRS
compatibility is desired) |
|
ALIAS |
Comma separated list of all APRS
destinations accepted by the digipeater in APRS compatibility mode (ej.
WIDE,NARROW). |
|
SUBALIAS |
Indicates whether Alias
replacement takes place (YES) or don’t (NOT or not informed). |
|
UI_ONLY |
Indicates whether UI frames only
are allowed on APRS compatibility mode. |
|
WIDEN-N |
Activates (YES) or deactivates
(NOT or not informed) the WIDEN-N multihop APRS mode. |
|
TRACEN-N |
Activates (YES) or deactivates
(NOT or not informed) the TRACEN-N multihop APRS mode. |
|
UIFLOOD |
Indicates the destination id to
be used for the WIDEN-N mode (default WIDE) |
|
UITRACE |
Indicates the destination id to
be used for the TRACEN-N mode (default TRACE) |
|
[APRS_ALIAS] Section |
Optional (only if APRS
compatibility is desired) |
|
ALIAS=SUBSTITUTION |
If SUBALIAS=YES this section
list all substitution to take place when in APRS compatibility mode. |
If
the DIGIPLEX.INI file can not be found the default values are used by
the program, however those defaults might or might be not appropriate to your
particular configuration. Since the file is a normal ASCII file it could be
edited with any text editor such as Windows’s Notepad or Edit.
Follows a sample of the DIGIPLEX.INI
which I use (included in the distribution file).
[DIGIPLEX]
IP_ADDRESS=127.0.0.1
TCP_PORT=8000
DEBUG=NOT
TRACE=1
CALLSIGN=LU7DID-3
[CLI]
ACTIVE=YES
TIMEOUT=120000
PROMPT=DIGIPLEX:
BYE=GoodBye!
[BEACON]
ID=ID WIDE
TEXT==3448.00S/05823.90W *** Digipeater
Beacon Text ***
EVERY=240000
VERBOSE=YES
[APRS]
ALIAS=WIDE,NARROW,VIA
SUBALIAS=YES
UI_ONLY=NOT
WIDEN-N=YES
TRACEN-N=YES
UIFLOOD=WIDE
UITRACE=TRACE
[APRS_ALIAS]
WIDE=GBA
NARROW=ABROWN
[LISTENER]
LU7DID-3=1,TESTDG,APRS,SMART,ROUTER,TCP
[WORM.ROUTES]
LU7DID-1=1,44.153.48.33:8000,'',00,24
The program uses the concept of a listener
or port, each port behaves as a different digipeater for all practical
purposes, so cross-activity is allowed between all ports for whom a listener is
defined.
All listeners verifies the traffic on all AGWPE
ports but only digipeats on the one it owns.
So a request to digipeat a frame on any port thru
any of the defined listeners will make that listener to perform the actual
digipeat of the frame over the port it owns, the frame is manipulated in order
to reflect it’s source as been the listener on the port it was heard enabling
the backward path to be used.
i.e.
The
[LISTENER] section states
DIGI1=1,LU7DID-1
DIGI2=2,LU7DID-2
In this
configuration the port 1 is owned by LU7DID-1 while the port 2 is owned by
LU7DID-2
The frame
2:
Fm: LU9DGN To: LU3DY via LU7DID-1 <SABM>
is
heard, it’s on the port owned by LU7DID-2 (port 2) but addressed to the
listener on port 1 (LU7DID-1) so it will be digipeated thru port 1 as follows:
1:
Fm: LU9DGN To: LU3DY via LU7DID-2* <SABM>
Please
note that the frame has been altered in order to reflect the path any answer to
it has to follow, actually, when the other end answers:
1:
Fm: LU3DY To: LU9DGN via LU7DID-2 <UA>
The
inverse process takes place and the frame is digipeated as:
2:
Fm: LU3DY To: LU9DGN via LU7DID-1* <UA>
Please
note that if the callsign-ssid of the listener matches the port it owns the
digipeater repeats the frame over the same channel, as in the following example
sequence:
2:
Fm: LU9DGN To: LU3DY via LU7DID-2
<SABM>
2:
Fm: LU9DGN To: LU3DY via LU7DID-2* <SABM>
2:
Fm: LU3DY To: LU9DGN via LU7DID-2 <UA>
2:
Fm: LU3DY To: LU9DGN via LU7DID-2* <UA>
Please note that each listener has to have a different CallSign-SSID assigned in order to define uniquely which is the exit port of the frames.
Nothing
prevents to define more than one listener per physical AGWPE port, each
listener will react only to frames which includes them on the VIA Path.
The DIGIPLEX program is intended to work over the traffic passing thru the
AGWPE and thus it has almost no provision to be used by the end user, upon
execution it will create a small icon on the Windows Tray Area.
The program will operate until it’s terminated by
means of right clicking on the tray area icon with the mouse and selecting shutdown.
The program requires the AGWPE program
to be up and running in order to operate because it relies on it to receive and
transmit AX.25 frames, if the communication with the AGWPE
program is interrupted during the course of the operation a retry mode will be
entered in order to regain that communication.
Historically, amateur radio applications has been run on a single computer, from simple terminal programs to DOS based relatively complex packages such as the G8BPQ Node software or the F6FBB BBS package; some limited implementation of phone, serial or ethernet connections to access the applications were developed over time, but in most cases that was just a different way to access the application as alternatives to the regular AX.25 packet network (i.e. for maintenance purposes, or for faster speed). This is adequate for most occasional uses, such as checking the mail on the home BBS or doing a file transfer, but has been a growing headache to operators trying to cope with high volume or network critical nodes where high availability is required such as NETROM nodes or BBS.
The
combination of the application program (i.e. DIGIPLEX) with the
AX.25 Manager (AGWPE) still could run on the same machine, but for
the first time it not necessarily has to.
Users
could run all the programs under a single Windows 95/98/NT operating system on
the simplest configuration, however as long as there is a permanent TCP/IP
connection of adequate speed nothing prevents the application program and the
L2 Manager (AGWPE) to be on different
machines, when implementing a distributed configuration.
I
do estimate that over the time and thru experimentation hams will implement
very sophisticated and complex network topologies based on that facility, some
of them that could be truly not imaginable now. However some of the likely
scenarios would be:
The application program DIGIPLEX and AGWPE operates in the same
machine who also manages the physical AX.25 assets such as TNCs, soundcards or
Baycom modems.
One machine in a LAN hosts AGWPE and
the physical AX.25 assets such as TNCs, soundcards or Baycom modems while on
another machine the application software DIGIPLEX is run. Both machines has to have TCP/IP
connectivity and be properly configured for that, usually a network cabling of
some sort has to be implemented (such as a coax or UTP cabling). This could be
a good solution for both ocassional users that wish to keep the “hardware”
stuff confined to a machine (possibly at some remote location of the home)
while still be able to use the packet applications from the most often used
machines as well as operators of full fledged nodes that wish to spread the
load among different machines. Several DIGIPLEX programs could be
run at the same time connected with a single AGWPE instance
provided that all of them register different callsigns, this might be a possible
solution when different combination of cross-port operations are desired.
A great deal of practical experimentation and real world needs will dictated which is the most likely scenario for the use of this program, but after all that is what amateur radio is all about, experimentation.
The program uses the distributed nature of the AGWPE API to implement the L2 Worm mode.
·
After
a while with AGWPE not available the program traps.
·
Erratic
Failure on AGWPE when using the “Smart” mode at the end of connections or
failures to establish a link.
This mode is the most classic behaviour of a digipeater, frames heard in one port are retransmitted thru the same or different port, no state is remembered by the digipeater nor any optimization is attempted.
It will work better when both ports being digipeated
operates at the same speed over relatively uncrowded frequencies.
Could be used, of course, as a “classic” L2
digipeater relaying frames on the same port in order to leverage on the
coverage of a given station.
This behaviour is set at the
listener level, the “NORMAL” mode will be the default one when no options are
indicated.
Several features were added to partially support the operation on APRS.
In
order to activate the extra features related to APRS the listener requires an
additional parameter (“,APRS”); a listener entry not supporting APRS will be
like:
[LISTENER]
LOCALD=1,1,LU7DID-9
While a listener
entry supporting APRS
[LISTENER]
ABROWN=1,2,LU7DID-1,APRS
The
behaviour of a listener to which the “APRS” configuration token had been added
will be controlled by the parameters on the [APRS] and [APRS_ALIAS] sections at
the DIGIPLEX.INI file.
The
entries at the [APRS] Section that could be used are:
This is a list of comma separated destinations that
will be managed as APRS destinations (i.e. WIDE or NARROW).
The behaviour will be that when a frame is detected
requiring to be digipeated by any of the callsign+SSID the following action is
performed:
This entry will control whether or not alias
substitution is allowed (YES) or not (NOT, default).
When activated the entries at the [APRS_ALIAS]
section is used to identify whether actual substitutions are required.
This entry controls whether destinations in the form
“WIDEn-m” are supported (YES) or not (NOT,default).
When supported if a frame pointed to be digied by
“WIDEn-m” is detected, “m” is decreased till it reach 0 and the frame is
resent; when it reach zero the frame is no longer resend.
Similar to WIDEn-m
This entry controls whether APRS frames are enforced
to be UNPROTO (UI frames) or any frame type will be supported. It’s worth to
note this setting only affects frames where APRS like digipeater names are used
(i.e. WIDE, in general those defined at the ALIAS entry) and NOT any regular
frame using the digipeater.
The entries at the [APRS_ALIAS] are a list of substitutions in the form:
{ALIAS}={ALIAS To be substituted by}
The program incorporates the possibility, on experimental grounds, to digipeat frames across a TCP/IP connection using the L2 Worm Digipeater Protocol devised for this program.
When a digipeater listener is enabled also as a TCP L2 Worm Digipeater (adding the “TCP” token on the listener definition) for each frame the listener sees on the radio port directed to it coming from the first radio port indicated on the listener definition it passes the frame to the L2 Worm Digipeater Router.
The router algorithm inspect if there is another
digipeater indicated in the path which still has not been used (Has been
digipeated bit in 0) and if so try to find a TCP/IP route to it.
If a route is found a TCP/IP connection is attempted
with the remote digipeater as indicated in the [WORM.ROUTES] section and the
frame sent to it.
All frames that the router is unable to process are
digipeated normally over the radio port as if the TCP L2 Worm Digipeater were
inactive.
The TCP L2 Worm Digipeater will actually attempt to
connect the AGWPE running at the other end of the TCP route and deliver the
frame thru the indicated port.
If an answer is generated by the frame digipeated at
the other end it will follow a reverse path over the other end listener which in
turn will create a TCP/IP connection to our AGWPE which in turn will digipeat
the frame creating a fully transparent connection across both ends.
Please, note that for this mode to operate the other
end has to be enabled to digipeat using this mode and has to have us defined
with a consistent route.
All types of data exchanges possible over AX.25 are
supported, that includes NET/ROM, Unproto connections (i.e. APRS) and TCP/IP
over AX.25.
For further information on how the frames are sent
across the TCP IP connection see the “Raw Frame” AGWPE WinSock API format.
The port used at the other end of the connection is
the one stated on the relevant entry at the WORM.ROUTE entry for the remote
node.
Example If a station LU1BUV wants to start a connection
with LU7DID-2 over the path supported by the digipeaters LU9DGN-1 and
LU7DID-1 (both ends of a L2 Digipeater Wormhole) the connection will be
started as if two normal digipeaters were involved. C
LU7DID-2 via LU9DGN-1 LU7DID-1 The digiplex program servicing the LU9DGN-1
listener should have a WORM.ROUTE definition such as LU7DID-1=1,nnn.nnn.nnn.nnn:8000,,00,24 (or
similar) The TCP L2 Worm Digipeater at LU9DGN-1 having a
route to LU7DID-1 will open a TCP/IP connection with it and pass the frame (using
a Raw frame mode) to the AGWPE at the other end (with all the “digipeat”
bits consistently set). The frame will appear over the radio port as: fm: LU1BUV to: LU7DID-2 via
LU9DGN-1 LU7DID-1* <SABM> upon acknowledgement LU7DID-2 will generate a
<UA> frame such as fm: LU7DID-2 LU1BUV via LU7DID-1 LU9DGN-1
<UA> The listener at LU7DID-1 will recognize this is
a frame to be directed over the “worm hole” (because it has a route to
LU9DGN-1 with it) such as LU9DGN-1=1,mmm.mmm.mmm.mmm:8000,,00,24 and will connect with the AGWPE at the other end
and send the frame. The rebroadcasted frame will be received at LU1BUV as fm: LU7DID-2 LU1BUV via LU7DID-1 LU9DGN-1*
<UA> Please note that neither LU1BUV nor LU7DID-2 are
aware at all of the L2 Worm digipeating mechanism, they operate just like
over a regular pair of L2 AX.25 digipeaters.
Any defined AX.25 digipeater listener, as defined on the [LISTENER] section could be enabled to also operate as a L2 Worm Digipeater at the same time adding the clause “TCP” to the listener definition ([LISTENER] section).
Be aware that a unique TCP port must be used for each listener and all frames received thru that port will be digipeated indicated radio port on the listener only.
Routes to other L2 Worm digipeaters are indicated at the [WORM.ROUTES] section, each potential remote digipeater with an entry following the format:
CALLSIGN-SSID=PORT,IP_ADDRESS{:PORT},PASSWORD,HOURMIN,HOURMAX
Port is optional and if not indicated it’s assumed as 8000 by default. The Password is a field for future implementation and HourMin/HourMax controls the windows where this mode of operation is allowed.
The “Smart” mode is an special hop-to-hop acknowledge mechanism, still at a very early stage, intended to increase the efficiency of the digi operation thru the leverage of the existing AGW Packet Engine AX.25 processing.
It
name cames after all the trickery involved on the management of the frames as
opposed to just flip a bit on the frame VIA area and blindly retransmit it.
It’s
activated when the token “SMART” is added to a listener at the [LISTENER]
section.
When a frame is detected pointing to one of the valid listeners of the digipeater the following process occurs:
Warning – In
order for this mode to operate a LoopBack port has to be defined on AGWPE
In
case the program doesn’t work as expected several reasons might happen for
that, the most common situations are:
In general,
in case of difficulty it might be helpful to activate the logging of the
program (DEBUG=YES) and slowly increase (on sucessive tries) the level
of tracing (TRACE={1ŕ5).
In
case communication with AGWPE could not be established the following
configuration should be checked:
·
Ensure
AGWPE is up and running.
Under proper operation conditions the program operation should be easily seen thru the monitoring of the AX.25 channels over which it operates; a frame addressed in one port via the callsign-ssid of the digipeater should be seen shortly thereafter as being repeated on the output port and viceversa. This could be monitored with either AGWTerm or AGWMonitor or any other suitable packet terminal program.
If this behaviour could not be obtained check the following topics:
· Ensure the CALLSIGN entry in the DIGIPLEX.INI file is informed and correct.
· Ensure the callsign+ssid used on the CALLSIGN is not being used by any other program concurrently on the same AGWPE (see About/WinSocks).
· Ensure both Port IN and Port OUT entries of the listeners are informed, whenever not informed they default to zero (0) thus making the digipeater useless.
A defined listener might be in conflict with another listener (same callsign-ssid over either the same input or output port) or an invalid entry (improper format or an invalid port number).
Review the DIGIPLEX.INI entries at the LISTENER section looking for obvious problems and typos, the format should be
CallSign-SSID={Port},Alias
i.e.
LU7DID-1=1,ABROWN
If
still having problems turn the DEBUG mode ON (DEBUG=YES with TRACE=1) and look
at the generated DIGIPLEX.LOG file during initialization to see if any error
message do appear.
As stated during the functional discussion (see Usage) an AX.25 Layer 2 repeater is a relatively dumb device which blindly relays information as it comes thru the channel.
To digipeat frames over the same channel is usually regarded as a very inefficient process because, essentially, the bandwidth is used twice or more (the original frame and each “digipeated” version); it’s usage is then recommended when direct visibility between stations is impossible to achieve.
At the same time, since the sender station is not aware of the status of the “digipeated” frames (even if it hears the digipeater station) depending on the AX.25 settings being used additional supervisory frames will start to be sent.
In general, since the digipeating process doesn’t provides a transport mechanism per se (collided frames are lost), the performance of the digipeater will be mediocre on busy channels (in cases, will make the busy channels busier).
Using the digipeater across ports isn’t as inefficient as stated before since the bandwidth on each channel is used only once, still additional overhead due to supervisory frames will occur depending on the AX.25 settings on both ends; in order to improve the throughput the following actions might be attempted.
· Try to use the digipeater across channels of the same or similar speed, digipeating across ports with different speed will work but the faster end will have a trend to generate supervisory frames while the slower end is still trying to transport the frame.
· The AX.25 TNC settings should be “hotter” on the slowest port (specially PERSIST).
· Keep the MAXFRAME smaller on the slower port.
A word about IP Addresses
If your machine is not connected to a LAN and have assigned a permanent
address it is likely that even if your TCP/IP stack is configured you don’t
have a concrete IP ADDRESS to set this program. In that case you should use
what is known as the “loopback” IP Address, which is a special IP
Address that the TCP/IP stack in your machine uses to communicate with itself.
This loopback IP ADDRESS is usually either 127.0.0.1 or 128.0.0.1
and you should not need to configure anything to use it, it is just there
already defined for you. Be aware that if you configure the loopback
IP address all the programs must run on the same machine, you can not go
distributed (aka split the programs in several machines) without properly
configure them as a LAN each one with their own addressable IP number.
You could tell if your TCP/IP stack knows about the loopback
address by doing on a MS-DOS session the following command
PING 127.0.0.1
If you get an answer such as:
Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<10ms TTL=128
Reply from 127.0.0.1: bytes=32 time<10ms TTL=128
Reply from 127.0.0.1: bytes=32 time<10ms TTL=128
Reply from 127.0.0.1: bytes=32 time<10ms TTL=128
Ping statistics for 127.0.0.1:
Packets: Sent = 4,
Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms,
Maximum = 0ms, Average = 0ms
Your setup will probably work without problems, beware if you
get an answer like the
following:
Pinging 127.0.0.0 with 32 bytes of data:
Destination specified is invalid.
Destination specified is invalid.
Destination specified is invalid.
Destination specified is invalid.
Ping statistics for 127.0.0.0:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Approximate round trip times in
milli-seconds:
Minimum = 0ms, Maximum = 0ms,
Average = 0ms
In the unlikely
event that you try to run this program on an environment that allocates
dynamically the IP Addresses (i.e. using BOOTP or DHCP)
be aware that your IP Address might change over time and you should reflect
that on the configuration if trying to use the programs distributed on several
machines, however, even on such scenario using the loopback IP Address and
everything on the same machine should not create any problem. If you are not
working as a part of a big LAN, say a business environment, you should not be
worried about this scenario.
Please refer to the
documentation of your operating system on how to properly configure the TCP/IP
stack on your machine for further information.
Many people contributed with this program on its
different development stages, I could not account for all of those that thru
conversations (real, air or E-Mail) contributed to create in my mind the
original idea.
The development itself wouldn’t be possible at all
without George Rossopoulos (SV2AGW) providing the AGW Packet Engine (AGWPE)
in the first place, extending the capability to interact with it thru TCP/IP as
opposed to the somewhat arcane DDEML original interface the program had and lately
reacting very promptly to make modifications and enhancements to AGWPE
during the development and test stages.
During the test of the program (an ongoing process)
I disturbed the patience of almost every sysop of my local LAN routing thru the
local nodes the most exotic digipeater connection paths anyone could think and
quite a few of corrupted or otherwise misbehaved AX.25 frames till I got things
reasonably right; in particular Juan E. Sanchez (LU9DGN) suffered the digi in
very unstable and buggy conditions on his own node to allow me to have a peer
to work out many of the internals of the program.
Please note that a L2 Digipeater program
(AGWDigi.EXE) written by George Rossopoulos (SV2AGW) is available and supported
by the author; whenever a L2 digipeater that operates over a single port is
needed the usage of that program is recommended.
I look forward for other people to actually use the
program and provide positive or critic feedback of it just drop me a note with
any special requirement or problem you might have.
I’m particularly interested on receiving benchmark
information about throughput of the program under different scenarios.
Initial release. Basic functionality.
Distributed for initial evaluation.
SMART mode introduced, performance optimizations on the digipeater. Additional parameters introduced. Beacon reformulated.
Modification in the
DIGIPLEX.INI format, multiple digipeater listeners allowed.
Added extended Beacon information (VERBOSE).
Added controls to avoid conflicting Listeners at the
DIGIPLEX.INI configuration.
Added possibility to route
beacon frames thru a digipeater path (please note that the digipeater will not
digipeat it’s own beacon frames).
Added support for APR.
Added support for the L2 Worm Digipeater Protocol (Digipeat over TCP/IP).
Changed the Smart algorithm.
Added support for the “Drunk” hop to hop ack mode.
Several performance improvements.
Countless bugs removed.
Renamed into Digiplex Version 0.5 Beta
Clean up of the program.
Performance optimizations.
Bug solutions on the SMART mode
(garbage I frames if connection drop In one end).
Pseudo L3 Layer (Router implemented).
Pseudo L3 Layer improved.
L2 Worm mode rewritten to
avoid a dedicated TCP/IP client and server to be used. The AGWPE at the other
end is directly connected.
DIGIPLEX is free for radioamateur
and experimental uses, commercial use requires written permission from the
author. The author bears no liability for damages related to the usage of this
program nor guarantees the proper functional behaviour. I could certainly be
more sophisticated in legal terms, but in a nutshell use it at your own risk.
Publicly available information has been used to
understand the requirements, specially the AGWPE TCPIP Interface (AGWSockInterface.DOC
by G.Rossopoulos SV2AGW) and the “AX.25 Amateur Packet Radio Link Layer
Protocol” (AX25.DOC), all code used to implement this program comes from my own
development.
I’ve used the UIView32 Version 1.3 by Roger Baker G4IDE
documentation as a reference to the main features to be implemented in order to
support APRS (or UIView if you prefer), don’t really think I’m violating the
program license in any way I could see doing that. Please note that UIView32
has a very good digipeater implementation on their own and it does support
AGWPE too.
If you need support, have suggestions, encountered
some bug or just are willing to provide feedback drop me a note at:
AX.25: LU7DID@LU7DID.#ADR.BA.ARG.SOAM
Inet: colla@pec.pccp.com.ar