[Xastir] Smart RELAY digipeating

Tapio Sokura oh2kku at iki.fi
Wed Dec 1 05:41:01 EST 2004


I've been watching the traffic on the local 2m APRS network for a while 
with Xastir RELAY digipeating enabled using a serial kiss tnc (without 
kernel ax.25). I haven't looked at the source code (yet), but it looks 
like Xastir digipeats all RELAY packets it hears, as the basic rule 
goes. This results in my station repeating packets that a WIDE 
digipeater 10 km away already digipeated. And then the WIDE digipeater 
digipeats the frame again after Xastir has done the RELAY digipeating.

What I'd like to see is a RELAY option, where I could define a few 
(WIDE) digipeater callsigns that prohibit, when seen in a digipeated 
packet, Xastir from RELAYing the same packet again. This would probably 
require a random (say 2-8 seconds) delay for waiting for the digipeated 
packet before making decisions whether to RELAY or not a given packet.

An example:

The players:
   R: fixed station running Xastir with RELAY digipeating enabled
   M: a mobile station, uses RELAY,WIDE,WIDE path
   W: a WIDE digipeater
R and W have a reliable radio path between them

Situation: Both W and R can hear the mobile station. R is using the 
current simple Xastir RELAY digipeating code. The following chain of 
packets is seen:
frame   packet path
1       M -> APRS via RELAY,WIDE,WIDE
2	M -> APRS via W*,WIDE,WIDE
3       M -> APRS via R*,WIDE,WIDE
4	M -> APRS via R,W*,WIDE

We can see that the last two retransmissions are redundant, because the 
W digipeater already got the packet and there's no need for R to 
digipeat the packet.

Now if Xastir postponed the decision to RELAY or not for a few seconds 
after receiving frame 1, it could watch the band for possible digipeats 
of the packet. After seeing in frame 2 that a local digipeater W has 
digipeated the packet, Xastir could decide that the packet has reached 
the WIDE network and there is no need to generate extra QRM on the 
frequency. The time to wait before deciding whether to RELAY or not 
should probably be randomized a bit so that if there are multiple smart 
relays listening the frequency they wouldn't all try to send the relay 
packet at the same time.

After thinking what I wrote above for a moment, maybe this could be done 
without user specified digipeater configuration so that whenever a 
packet that is a candidate for RELAYing is heard again on the band, i.e. 
digipeated by anyone, it would not be sent again. Dropping the 
digipeater checking/configuration option might decrease the reliability 
of the network a bit, but on the other hand if a station has RELAY 
digipeating enabled, it should be able to reach a WIDE with a good 
probability.

So what do you think, would this be worth the coding trouble? If this 
was implemented, turning RELAY digipeating on would never hurt (much) 
even in a crowded area. But say if 10 stations configured for dumb RELAY 
digipeating heard a packet, there would be at least 9 extra packets 
heard on the band. If duplicate checking was done before RELAYing, 
ideally the other nine would not key their transmitters after seeing the 
packet is digipeated.

Uh, what a mess I wrote. Maybe someone understood something of the above :)

   Tapio



More information about the Xastir mailing list