[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