|
1 |
|
2 NACK-Oriented Reliable Multicast (NORM) Convergence Layer |
|
3 --------------------------------------------------------- |
|
4 |
|
5 **This code is experimental and under active development. |
|
6 |
|
7 Please direct general questions and comments to the DTN Users list |
|
8 http://mailman.dtnrg.org/mailman/listinfo/dtn-users/ |
|
9 |
|
10 |
|
11 Requirements |
|
12 ------------ |
|
13 |
|
14 NORM libraries from the Naval Research Lab |
|
15 |
|
16 - Download norm-nightlybuild.tgz from |
|
17 http://downloads.pf.itd.nrl.navy.mil/norm/ |
|
18 (tested with version 1.4b4) |
|
19 |
|
20 - Download protolib-nightlybuild.tgz from |
|
21 http://downloads.pf.itd.nrl.navy.mil/protolib/ |
|
22 |
|
23 - Unpack the norm code. cd into the norm top-level directory |
|
24 and unpack the protolib code there. |
|
25 |
|
26 - For linux, cd into the unix directory and type |
|
27 make -f Makefile.linux |
|
28 make -f Makefile.linux libnorm.a |
|
29 |
|
30 - Copy libnorm.a and ../protolib/unix/libProtokit.a to |
|
31 /usr/lib or /usr/local/lib |
|
32 |
|
33 - Copy ../common/normApi.h to /usr/include or /usr/local/include |
|
34 |
|
35 Installation |
|
36 ------------ |
|
37 |
|
38 Configure DTN2 using '--with-norm' and (re)compile. |
|
39 |
|
40 Add NORM links to dtn.conf, for example: |
|
41 link add norm_link remote_host:4557 ALWAYSON norm |
|
42 |
|
43 Additional link parameters are documented below. |
|
44 |
|
45 Common Configurations |
|
46 --------------------- |
|
47 |
|
48 Here are some basic examples to get you started. The full list of link |
|
49 parameters are summarized in the next section. |
|
50 |
|
51 Assume DTN nodes A, B, and C can communicate over an IP network. |
|
52 |
|
53 EID IPv4 Address |
|
54 dtn://node_a 10.1.101.1 |
|
55 dtn://node_b 10.1.102.1 |
|
56 dtn://node_c 10.1.103.1 |
|
57 dtn://node_d 10.1.104.1 |
|
58 |
|
59 Point-to-point link A <-> B |
|
60 |
|
61 Below are the "link add" directives for an always-on unicast link between |
|
62 nodes A and B. Congestion control is enabled (cc) with a maximum tx rate |
|
63 of 230Kbps. "ack" places the remote node in the acking_list; positive |
|
64 acknowledgment is expected after zero of more nack-based repair cycles. |
|
65 "ack" may reduce the number of flush messages. |
|
66 |
|
67 Node A configuration |
|
68 link add link_to_b 10.1.102.1:4557 ALWAYSON norm remote_eid=dtn://node_b cc ack rate=230000 |
|
69 Node B configuration |
|
70 link add link_to_a 10.1.101.1:4557 ALWAYSON norm remote_eid=dtn://node_a cc ack rate=230000 |
|
71 |
|
72 One-to-many multicast A -> B,C,D |
|
73 |
|
74 For a one-to-many multicast link, use "link add" on the node sourcing data and |
|
75 use "interface add" on the sink nodes. The Node A "acking_list" requests postive |
|
76 acknowledgments from Nodes B and C (after zero or more nack-based repair |
|
77 cycles). Delivery to Node D may not succeeed because it's not in the acking_list. |
|
78 "nodeid" might be needed for senders and/or receivers when nodes are multi-homed. |
|
79 |
|
80 Node A configuration |
|
81 link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group \ |
|
82 cc rate=230000 acking_list=10.1.102.1,10.1.103.1 |
|
83 Node B configuration |
|
84 interface add norm0 norm multicast_interface=eth0 group_addr=239.255.0.1 nodeid=10.1.102.1 |
|
85 Node C configuration |
|
86 interface add norm0 norm multicast_interface=eth0 group_addr=239.255.0.1 nodeid=10.1.103.1 |
|
87 Node D configuration |
|
88 interface add norm0 norm multicast_interface=eth0 group_addr=239.255.0.1 nodeid=10.1.104.1 |
|
89 |
|
90 Many-to-many |
|
91 |
|
92 For a many-to-many multicast link, use "link add" on all the nodes sourcing data. |
|
93 Below, all nodes can send to and receive from the multicast group. Note the |
|
94 acking_list is adjusted accordingly in each directive. |
|
95 |
|
96 Node A configuration |
|
97 link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group \ |
|
98 cc rate=230000 acking_list=10.1.102.1,10.1.103.1,10.1.104.1 |
|
99 Node B configuration |
|
100 link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group \ |
|
101 cc rate=230000 acking_list=10.1.101.1,10.1.103.1,10.1.104.1 |
|
102 Node C configuration |
|
103 link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group \ |
|
104 cc rate=230000 acking_list=10.1.101.1,10.1.102.1,10.1.104.1 |
|
105 Node D configuration |
|
106 link add link_to_bc 239.255.0.1:4558 ALWAYSON norm multicast_interface=eth0 remote_eid=dtn://group \ |
|
107 cc rate=230000 acking_list=10.1.101.1,10.1.102.1,10.1.103.1 |
|
108 |
|
109 Link Parameters |
|
110 --------------- |
|
111 |
|
112 **default settings in < > |
|
113 |
|
114 cc=<false> |
|
115 |
|
116 Whether NORM congestion control is enabled. |
|
117 |
|
118 rate=<64000> |
|
119 |
|
120 Rate of NORM link in bits per second (bps). If congestion control is |
|
121 enabled (see cc) this is the maximum achievable rate. |
|
122 |
|
123 nodeid=<hostname IPv4 address> |
|
124 Uniquely identify this node on the NORM link with an IPv4 address. |
|
125 (Normally only needed for multi-homed nodes). |
|
126 |
|
127 segment_size=<1400> |
|
128 |
|
129 Maximum payload size of NORM sender messages in bytes (not incl. |
|
130 NORM message header fields). |
|
131 |
|
132 local_port=<4558> |
|
133 |
|
134 (NORM interfaces only) |
|
135 Local UDP port to listen on for incoming multicast traffic. |
|
136 |
|
137 remote_addr |
|
138 |
|
139 Remote NORM link IP address (not used -- normally acquired from the |
|
140 "link add" directive) |
|
141 |
|
142 remote_port=<4557> |
|
143 |
|
144 Remote NORM link port. (not used -- normally acquired from the "link |
|
145 add" directive) |
|
146 |
|
147 multicast_interface |
|
148 |
|
149 The host interface to use when working with multicast groups. |
|
150 |
|
151 group_addr |
|
152 |
|
153 (NORM interfaces only) |
|
154 Multicast IPv4 address to join. For multicast links, the group address |
|
155 is acquired from the "link add" directive. |
|
156 |
|
157 tx_robust_factor=<20> |
|
158 |
|
159 The number of flush messages sent at the end of each transmission. |
|
160 Flush messages are used to prompt receivers to request needed repairs. |
|
161 With "acking_list" or "ack", periodic flush messages cease once positive |
|
162 ack(s) are received. |
|
163 |
|
164 rx_robust_factor=<20> |
|
165 |
|
166 The number of times a receiver will nack for repairs before giving up. |
|
167 |
|
168 tos=<0> |
|
169 |
|
170 DSCP marking (0-64) for all bundles on a specific link |
|
171 |
|
172 acking_list |
|
173 |
|
174 (multicast links) |
|
175 A comma separated list of IPv4 addresses (NORM node ids) that must |
|
176 positively ack sender-initiated flush messages (once any nack-based |
|
177 repair process has completed). |
|
178 |
|
179 ack |
|
180 A shorthand way of requesting positive acks from the remote end of unicast |
|
181 links. |
|
182 |
|
183 silent=<false> |
|
184 "silent" receivers do not originate any NORM traffic and must rely on |
|
185 proactive FEC for repairs. |
|
186 |
|
187 ecn=<false> |
|
188 |
|
189 Whether NORM explicit congestion notification support is enabled. |
|
190 |
|
191 object_size=<0> |
|
192 |
|
193 Partition large DTN bundles into multiple NORM data objects for |
|
194 transmission. With the default of zero bytes, no object partitioning |
|
195 is performed. Setting object size to a relatively small value, e.g. |
|
196 50000 bytes, may be useful in some contention based networks (see |
|
197 tx_spacer). This feature is similar in concept to proactive bundle |
|
198 fragmentation or "bundle MTU" (neither yet implemented in DTN2). |
|
199 (see tx_spacer) |
|
200 |
|
201 tx_spacer=<0> |
|
202 |
|
203 When combined with object_size, tx_spacer may be used to add a |
|
204 constant pause time (ms) between successive NORM data object |
|
205 transmissions. On contention based networks, this pause time may |
|
206 give other nodes a chance to transmit. |
|
207 |
|
208 keepalive_intvl=<5000> |
|
209 |
|
210 For DTN opportunistic links, keepalive_intvl is the number of |
|
211 miliseconds between successive keepalive packets. Opportunistic |
|
212 links are made unavailable when three remote keepalive packets are |
|
213 missed. In addition, reliable mode links send watermarks at |
|
214 keepalive intervals. |
|
215 |
|
216 fec_buf_size=<1048576> |
|
217 |
|
218 The number of bytes allocated for sender calculated FEC segments and |
|
219 repair state. |
|
220 |
|
221 block_size=<64> |
|
222 |
|
223 The number of source symbol segments per coding block for the |
|
224 systematic Reed-Solomon FEC code used in the NRL NORM implementation. |
|
225 |
|
226 num_parity=<16> |
|
227 |
|
228 The maximum number of parity blocks the sender is willing to |
|
229 calculate per coding block. |
|
230 |
|
231 auto_parity=<0> |
|
232 |
|
233 The number of "auto-parity" messages sent at the end of each coding |
|
234 block. |
|
235 |
|
236 backoff_factor=<0.0 for unicast; 4.0 for multicast links> |
|
237 |
|
238 Used to scale various timeouts during the NACK repair process. |
|
239 |
|
240 group_size=<1000> |
|
241 |
|
242 Group size is advertised to the receiver group where it is used in |
|
243 calculating backoff timers. Due to encoding techniques in the NORM |
|
244 header, 1000 receivers is the smallest value allowed by the NORM |
|
245 protocol. |
|
246 |
|
247 tx_cache_size_max=<20971520> |
|
248 |
|
249 Size of the NORM object cache (in bytes) per link. |
|
250 |
|
251 tx_cache_count_min=<8> |
|
252 |
|
253 At at minimum, this many objects are allowed to be enqueued in the |
|
254 NORM engine regardless of the object sizes. After the |
|
255 tx_cache_count_min value is surpassed, cache size contraints are in |
|
256 effect (see tx_cache_size_max). |
|
257 |
|
258 tx_cache_count_max<1024> |
|
259 |
|
260 The maximum number of objects that may be enqueued for transmission |
|
261 with the NORM engine assuming the total size is less that |
|
262 tx_cache_size_max. |
|
263 |
|
264 rx_buf_size=<300000> |
|
265 |
|
266 Size of the receive buffer (bytes) for each NORM link. |