-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathdigi_behavior.txt
241 lines (192 loc) · 8.43 KB
/
digi_behavior.txt
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
*** Digipeater Behavior Test Suite ***
This document is a list of example paths which may flow into a deployed
digipeater and the expected behavior of the digipeater in processing the
packets on the way out.
All digipeaters must implement 30 second duplicate suppression. No digipeater
may transmit the same (source address, destination address, information field)
twice in any 30 second window. No digipeater may modify any of those fields
while processing packets to be digipeated.
It is to be expected that essentially none of the existing digipeaters exactly
follow all of this behavior as documented. Kludging in legacy support is not
an objective for this document. Hopefully this document would help
align all future digipeater deployments/designs to all behave more similarly.
The document will cover the following instances of digipeaters:
* LOWDIG-1: A low level digipeater, typically at <50' HAAT for supporting
local low-power trackers for getting into the high-level digipeater network
* DIGIA-1: A high level digipeater on a significant tower or mountain
Each example will be in the following format:
# Comment on the scenario.
[packet path coming into the digi] ->
[packet path coming out of the digi / DROPPED]
Other station callsigns which will be used are:
* TRACKR-5: A tracker using the digipeater network
* DIGIX-2, DIGIY-2, DIGIZ-2: Other near-by digipeaters
The term "quench" is used when via hops are pre-empted or trapped for various
reasons. When a hop is trapped and artifically marked as used without actually
being used, the lower RR bit should be set to 0 on that hop. Unfortunately, the
two aprs.org docs on hop RR bits disagree:
http://www.aprs.org/aprs12/preemptive-digipeating.txt
http://www.aprs.org/aprs12/RR-bits.txt
This document assumes the RR-bits.txt document is correct since it makes more
sense.
Standing issues:
* Should excessive long paths be punished by clamping their length or quench
the whole path?
* How should we punish malformed (WIDE1-2, WIDE2-3) hops?
* Should high level digis preempt WIDE1-1,WIDE2-1?
* Is there any value in allowing users to disable preemptive digipeating?
L OOO W W DDDD IIIIIII GGGGG 1
L O O W W D DDD I GG 11
L O O W W D DD I GG 1 1
L O O W W D D I G 1
L O O W W D D I G ----- 1
L O O W W W D D I G GGGG 1
L O O W W W D DD I GG G 1
L O O W W W D DDD I GG GG 1
LLLLLLL OOO W W DDDD IIIIIII GGGG 1111111
LOWDIG-1 is a low level digipeater, which means that it should only respond
to WIDE1-1 in the first position of a path or its exact callsign for
non-aliased routing.
It supports preemptive digipeating.
Assume the local APRS RF-LAN working group for these examples has agreed on
a maximum of three hops per packet.
Parameters:
* lowlevel = true
* maxhop = 3
* aliases = WIDE
# The WIDE1-1 alias gets replaced with LOWDIG-1 and is marked as used
TRACKR-5>APZTST,WIDE1-1 ->
TRACKR-5>APZTST,LOWDIG-1*
# Further hops are retained
TRACKR-5>APZTST,WIDE1-1,WIDE2-1 ->
TRACKR-5>APZTST,LOWDIG-1*,WIDE2-1
# Low level digipeaters don't respond to WIDEn-N where n>1
TRACKR-5>APZTST,WIDE2-1 ->
[DROP PACKET]
# The RELAY alias is depricated
TRACKR-5>APZTST,RELAY ->
[DROP PACKET]
# WIDE1-1 isn't allowed after the first hop
TRACKR-5>APZTST,WIDE2-2,WIDE1-1 ->
[DROP PACKET]
TRACKR-5>APZTST,WIDE2-2*,WIDE1-1 ->
[DROP PACKET]
# Quench the path when this rule (WIDE1-1 only first) is broken
# Set the preempt RR bit to 0 on the quenched hops.
TRACKR-5>APZTST,WIDE1-1,WIDE1-1 ->
TRACKR-5>APZTST,LOWDIG-1*,WIDE1-1*
TRACKR-5>APZTST,WIDE1-1,WIDE2-1,WIDE1-1 ->
TRACKR-5>APZTST,LOWDIG-1*,WIDE2-1*,WIDE1-1*
# Malformed aliases would be generally dropped since they aren't WIDE1-1
TRACKR-5>APZTST,WIDE1-2 ->
[DROP PACKET]
# Quench excessive paths which exceed the maxhop parameter
# The WIDE3-3* hop should have its lower RR bit set to 0.
TRACKR-5>APZTST,WIDE1-1,WIDE3-3 ->
TRACKR-5>APZTST,LOWDIG-1*,WIDE3-3*
# The packet has already traveled the maximum number of hops
TRACKR-5>APZTST,DIGIX-2*,DIGIY-2*,DIGIZ-2*,LOWDIG-1 ->
[DROP PACKET]
# A packet addressed specifically via LOWDIG-1
TRACKR-5>APZTST,LOWDIG-1 ->
TRACKR-5>APZTST,LOWDIG-1*
# Which is also allowed with lowdig not as the first hop
TRACKR-5>APZTST,DIGIX-2*,LOWDIG-1 ->
TRACKR-5>APZTST,DIGIX-2*,LOWDIG-1*
# And LOWDIG-1 can preemptively digipeat the packet without waiting for DIGIX-2
# The preempt RR bit for DIGIX-2* should be set to 0
TRACKR-5>APZTST,DIGIX-2,LOWDIG-1 ->
TRACKR-5>APZTST,DIGIX-2*,LOWDIG-1*
# No need to trap the more specific address; dupe filter will handle it
TRACKR-5>APZTST,WIDE1-1,LOWDIG-1 ->
TRACKR-5>APZTST,LOWDIG-1*,LOWDIG-1
DDDD IIIIIII GGGGG IIIIIII A 1
D DDD I GG I A A 11
D DD I GG I A A 1 1
D D I G I A A 1
D D I G I AAAAAAA ----- 1
D D I G GGGG I A A 1
D DD I GG G I A A 1
D DDD I GG GG I A A 1
DDDD IIIIIII GGGG IIIIIII A A 1111111
DIGIA-1 is a high level digipeater, which means that it stands well above
the local terrain with a high power (10-50W) transmitter. It may respond to
any n-N value or its exact callsign.
Assume the local APRS RF-LAN working group for these examples has agreed on
a maximum of three hops per packet.
Parameters:
* lowlevel = false
* maxhop = 3
* aliases = WIDE
# High level digis may respond to WIDE1-1
TRACKR-5>APZTST,WIDE1-1 ->
TRACKR-5>APZTST,DIGIA-1*
# as well as to WIDEn-N with n>1
TRACKR-5>APZTST,WIDE2-1 ->
TRACKR-5>APZTST,DIGIA-1*
# Multi-hop aliases are split into the consumed hop and the remaining hops
TRACKR-5>APZTST,WIDE2-2 ->
TRACKR-5>APZTST,DIGIA-1*,WIDE2-1
# The bare WIDE alias is depricated
TRACKR-5>APZTST,WIDE ->
[DROP PACKET]
# n-N aliases not configured for this digipeater should be ignored
TRACKR-5>APZTST,TEMP2-2 ->
[DROP PACKET]
# Should high digis preempt low level aliases?
TRACKR-5>APZTST,WIDE1-1,WIDE2-1 ->
TRACKR-5>APZTST,DIGIA-1*,WIDE2-1
OR
TRACKR-5>APZTST,WIDE1-1*,DIGIA-1*
# Search for the first unused hop
TRACKR-5>APZTST,DIGIX-2*,WIDE2-1 ->
TRACKR-5>APZTST,DIGIX-2*,DIGIA-1*
# Respond to its exact callsign
TRACKR-5>APZTST,DIGIA-1 ->
TRACKR-5>APZTST,DIGIA-1*
TRACKR-5>APZTST,DIGIX-2*,DIGIA-1 ->
TRACKR-5>APZTST,DIGIX-2*,DIGIA-1*
# Don't respond to other SSIDs
TRACKR-5>APZTST,DIGIA-4 ->
[DROP PACKET]
# Quench paths longer than maxhop
# Set the preempt RR bit to 0 on WIDE4-3*
TRACKR-5>APZTST,WIDE4-4 ->
TRACKR-5>APZTST,DIGIA-1*,WIDE4-3*
# Preemptively digipeat past other hops
# Set preempt RR bit to 0 on LOWDIG-1*
TRACKR-5>APZTST,LOWDIG-1,WIDE2-1 ->
TRACKR-5>APZTST,LOWDIG-1*,DIGIA-1*
TRACKR-5>APZTST,LOWDIG-1,WIDE2-2 ->
TRACKR-5>APZTST,LOWDIG-1*,DIGIA-1*,WIDE2-1
# Quench malformed aliases
TRACKR-5>APZTST,WIDE1-2 ->
TRACKR-5>APZTST,DIGIA-1*,WIDE1-1*
TRACKR-5>APZTST,WIDE2-3 ->
TRACKR-5>APZTST,DIGIA-1*,WIDE2-2*
# Deduplicate identical packets
TRACKR-5>APZTST,WIDE2-1:,INFO ->
TRACKR-5>APZTST,DIGIA-1*:,INFO
# Less than 30 seconds later
TRACKR-5>APZTST,WIDE2-1:,INFO ->
[DROP PACKET]
# Deduplicate identical packets with explicit routing
TRACKR-5>APZTST,DIGIA-1:,INFO ->
TRACKR-5>APZTST,DIGIA-1*:,INFO
# Less than 30 seconds later
TRACKR-5>APZTST,DIGIA-1:,INFO ->
[DROP PACKET]
# Deduplicate identical packets regardless of path
TRACKR-5>APZTST,WIDE2-2:,INFO ->
TRACKR-5>APZTST,DIGIA-1*,WIDE2-1:,INFO
# Less than 30 seconds later
TRACKR-5>APZTST,DIGIX-2*,WIDE2-1:,INFO ->
[DROP PACKET]
# Already full VIA paths...
# This one is very interesting since it should cause a nine hop output,
# which isn't allowed in AX.25, so which alias do you trim on the output?
TRACKR-5>APZTST,DIGIX-2*,DIGIY-2*,DIGIZ-2*,DIGIW-2*,DIGIV-2*,DIGIU-2*,DIGIT-2*,WIDE2-2 ->
TRACKR-5>APZTST,DIGIX-2*,DIGIY-2*,DIGIZ-2*,DIGIW-2*,DIGIV-2*,DIGIU-2*,DIGIT-2*,DIGIA-1*
TRACKR-5>APZTST,DIGIY-2*,DIGIZ-2*,DIGIW-2*,DIGIV-2*,DIGIU-2*,DIGIT-2*,DIGIA-1*,WIDE2-1
TRACKR-5>APZTST,DIGIX-2*,DIGIY-2*,DIGIZ-2*,DIGIW-2*,DIGIV-2*,DIGIU-2*,DIGIA-1*,WIDE2-1
[DROP PACKET]