File: ViscousDigipeater.README

package info (click to toggle)
aprx 2.9.0+dfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid
  • size: 2,352 kB
  • sloc: ansic: 15,809; sh: 598; makefile: 160
file content (60 lines) | stat: -rw-r--r-- 2,395 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

		    Viscous Digipeater in APRX

The Viscous Digipeater is variation of AX.25 Digipeater, which puts
arriving packets into a time delay probation pipe (up to 9 seconds),
before digipeating them.

One can use a Viscous Digipeater as a fill-in system, which does not
repeat on band a packet that it hears having already been repeated.
It does have also benefits on Tx-IGate, which will not re-transmit
to band something that already was heard there within the small window
of a few seconds that the probation pipe takes.





The trick is that duplicate accounting is done right up front at
arrival packet arrival time, and depending on what kind of source
a similar packet arrives from (or none at all), that delayed packet
may get bumped off the delay pipe, or even be sent out.


The rules are a bit more complicated than for plain simple digipeater,
but not impossibly so:

  Packets arriving from non-viscous sources trump those waiting in
  viscous queues.  First one arriving will be transmitted, unless
  the viscous queue has no longer this packet (but it was there.)
  ( delayed_seen > 0,  seen == 1, pbuf == NULL  -> drop this )
  ( delayed_seen > 0,  seen == 1, pbuf != NULL  -> clean pbuf, transmit this )
  ( delayed_seen == 0, seen == 1                -> transmit this )

  Subsequent packets arriving from non-viscous sources are dropped
  as duplicates ( seen > 1  ->  drop this )

  Packets arriving from any viscous source are dropped, if there
  already was some direct delivery packet
  ( delayed_seen > 0, seen > 0   -> drop )

  First packet arriving from any viscous source is put on viscous queue,
  unless there was non-viscous packet previously.
  ( delayed_seen == 1, seen == 0  ->  put this on viscous queue )

  Then among viscous sources:
   - "Transmitter" kind source: an <interface> which is same as
     that of <digipeater>'s  transmitter  <interface>.
   - "Elsewhere" kind source: an <interface> which is some other
     than that of transmitter's, but has  viscous-delay > 0

  Account the number of viscous sourced packets sourced from "transmitter"
     if (source_is_transmitter)
         seen_on_transmitter += 1;

  For second and subsequent viscous sourced packets, if any of observed
  packets came from transmitter (seen_on_transmitter > 0), then drop
  current packet, and clear possible viscous queued pbuf.


Matti Aarnio,  OH2MQK,   2009-10-21