doc/norm_conv_layer.txt
changeset 0 2b3e5ec03512
equal deleted inserted replaced
-1:000000000000 0:2b3e5ec03512
       
     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.