idnits 2.17.1 draft-clausen-lln-loadng-12.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- -- The document has an IETF Trust Provisions (28 Dec 2009) Section 6.c(i) Publication Limitation clause. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** The document seems to lack an IANA Considerations section. (See Section 2.2 of https://www.ietf.org/id-info/checklist for how to handle the case when there are no actions for IANA.) Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 656 has weird spacing: '...-length is an...' == Line 661 has weird spacing: '...seq-num is an...' == Line 665 has weird spacing: '...ic-type is an...' == Line 668 has weird spacing: '...-metric is a ...' == Line 673 has weird spacing: '...p-count is an...' == (30 more instances...) == Using lowercase 'not' together with uppercase 'MUST', 'SHALL', 'SHOULD', or 'RECOMMENDED' is not an accepted usage according to RFC 2119. Please use uppercase 'NOT' together with RFC 2119 keywords (if that is what you mean). Found 'MUST not' in this paragraph: +-------------------+-------------------+---------------------------+ | RREQ Element | RFC5444-Element | Considerations | +-------------------+-------------------+---------------------------+ | RREQ.addr-length | | Supports addresses from | | | | 1-16 octets | | RREQ.seq-num | | 16 bits, hence MAXVALUE | | | | (Section 8) is 65535. | | | | MUST be included | | RREQ.metric-type | METRIC Message | Encoded by way of the | | | TLV | Type-Extension of a | | | | Message-Type-specific | | | | Message TLV of type | | | | METRIC, defined in | | | | Table 8. A LOADng Router | | | | generating an RREQ (as | | | | specified in | | | | Section 12.1) when using | | | | the HOP_COUNT metric, | | | | MUST NOT add the METRIC | | | | Message TLV to the RREQ | | | | (in order to reduce | | | | overhead, as the hop | | | | count value is already | | | | encoded in | | | | RREQ.hop-count). LOADng | | | | Routers receiving an RREQ | | | | without METRIC Message | | | | TLV assume that | | | | RREQ.metric-type is | | | | HOP_COUNT, and MUST not | | | | add the METRIC Message | | | | TLV when forwarding the | | | | message. Otherwise, | | | | exactly one METRIC TLV | | | | MUST be included in each | | | | RREQ message. | | RREQ.route-metric | METRIC Message | Encoded as the value | | | TLV value | field of the METRIC TLV. | | | | (LOADng Routers | | | | generating RREQs when | | | | using the HOP_COUNT | | | | metric do not need need | | | | to add the METRIC Message | | | | TLV, as specified above | | | | for the RREQ.metric-type | | | | field.) | | RREQ.hop-limit | | 8 bits. MUST be included | | | | in an RREQ message | | RREQ.hop-count | | 8 bits, hence | | | | MAX_HOP_COUNT is 255. | | | | MUST be included in an | | | | RREQ message. | | RREQ.originator | | MUST be included in an | | | | RREQ message. | | RREQ.destination | Address in | Encoded by way of an | | | Address-Block | address in an address | | | w/TLV | block, with which a | | | | Message-Type-specific | | | | Address Block TLV of type | | | | ADDR-TYPE and with | | | | Type-Extension | | | | DESTINATION is | | | | associated, defined in | | | | Table 9. An RREQ MUST | | | | contain exactly one | | | | address with a TLV of | | | | type ADDR-TYPE and with | | | | Type-Extension | | | | DESTINATION associated. | +-------------------+-------------------+---------------------------+ == Using lowercase 'not' together with uppercase 'MUST', 'SHALL', 'SHOULD', or 'RECOMMENDED' is not an accepted usage according to RFC 2119. Please use uppercase 'NOT' together with RFC 2119 keywords (if that is what you mean). Found 'MUST not' in this paragraph: +-------------------+-------------------+---------------------------+ | RREP Element | RFC5444-Element | Considerations | +-------------------+-------------------+---------------------------+ | RREP.addr-length | | Supports addresses from | | | | 1-16 octets | | RREP.seq-num | | 16 bits, hence MAXVALUE | | | | (Section 8) is 65535. | | | | MUST be included | | RREP.metric-type | METRIC Message | Encoded by way of the | | | TLV | Type-Extension of a | | | | Message-Type-specific | | | | Message TLV of type | | | | METRIC, defined in | | | | Table 12. A LOADng | | | | Router generating an RREP | | | | (as specified in | | | | Section 13.1) when using | | | | the HOP_COUNT metric, | | | | MUST NOT add the METRIC | | | | Message TLV to the RREP | | | | (in order to reduce | | | | overhead, as the hop | | | | count value is already | | | | encoded in | | | | RREP.hop-count). LOADng | | | | Routers receiving an RREP | | | | without METRIC Message | | | | TLV assume that | | | | RREP.metric-type is | | | | HOP_COUNT, and MUST not | | | | add the METRIC Message | | | | TLV when forwarding the | | | | message. Otherwise, | | | | exactly one METRIC TLV | | | | MUST be included in each | | | | RREP message. | | RREP.route-metric | METRIC Message | Encoded as the value | | | TLV value | field of the METRIC TLV. | | | | (LOADng Routers | | | | generating RREPs when | | | | using the HOP_COUNT | | | | metric do not need need | | | | to add the METRIC Message | | | | TLV, as specified above | | | | for the RREP.metric-type | | | | field.) | | RREP.ackrequired | FLAGS Message TLV | Encoded by way of a | | | | Message-Type-specific | | | | Message TLV of type | | | | FLAGS, defined in | | | | Table 13. A TLV of type | | | | FLAGS MUST always be | | | | included in an RREP | | | | message. | | RREP.hop-limit | | 8 bits. MUST be included | | | | in an RREQ message | | RREP.hop-count | | 8 bits, hence | | | | MAX_HOP_COUNT is 255. | | | | MUST be included in an | | | | RREP message. | | RREP.originator | | MUST be included in an | | | | RREP message. | | RREP.destination | Address in | Encoded by way of an | | | Address-Block | address in an address | | | w/TLV | block, with which a | | | | Message-Type-specific | | | | Address Block TLV of type | | | | ADDR-TYPE and with | | | | Type-Extension | | | | DESTINATION is | | | | associated, defined in | | | | Table 14. An RREP MUST | | | | contain exactly one | | | | address with a TLV of | | | | type ADDR-TYPE and with | | | | Type-Extension | | | | DESTINATION associated. | +-------------------+-------------------+---------------------------+ -- The document date (October 27, 2014) is 3468 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) -- Obsolete informational reference (is this intentional?): RFC 6982 (Obsoleted by RFC 7942) Summary: 1 error (**), 0 flaws (~~), 9 warnings (==), 3 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group T. Clausen 3 Internet-Draft A. Colin de Verdiere 4 Intended status: Standards Track J. Yi 5 Expires: April 30, 2015 LIX, Ecole Polytechnique 6 A. Niktash 7 Maxim Integrated Products 8 Y. Igarashi 9 H. Satoh 10 Hitachi, Ltd., Yokohama Research 11 Laboratory 12 U. Herberg 13 Fujitsu Laboratories of America 14 C. Lavenu 15 EDF R&D 16 T. Lys 17 ERDF 18 J. Dean 19 Naval Research Laboratory 20 October 27, 2014 22 The Lightweight On-demand Ad hoc Distance-vector Routing Protocol - Next 23 Generation (LOADng) 24 draft-clausen-lln-loadng-12 26 Abstract 28 This document describes the Lightweight Ad hoc On-Demand - Next 29 Generation (LOADng) distance vector routing protocol, a reactive 30 routing protocol intended for use in Mobile Ad hoc NETworks (MANETs). 32 Status of This Memo 34 This Internet-Draft is submitted in full conformance with the 35 provisions of BCP 78 and BCP 79. This document may not be modified, 36 and derivative works of it may not be created, except to format it 37 for publication as an RFC or to translate it into languages other 38 than English. 40 Internet-Drafts are working documents of the Internet Engineering 41 Task Force (IETF). Note that other groups may also distribute 42 working documents as Internet-Drafts. The list of current Internet- 43 Drafts is at http://datatracker.ietf.org/drafts/current/. 45 Internet-Drafts are draft documents valid for a maximum of six months 46 and may be updated, replaced, or obsoleted by other documents at any 47 time. It is inappropriate to use Internet-Drafts as reference 48 material or to cite them other than as "work in progress." 49 This Internet-Draft will expire on April 30, 2015. 51 Copyright Notice 53 Copyright (c) 2014 IETF Trust and the persons identified as the 54 document authors. All rights reserved. 56 This document is subject to BCP 78 and the IETF Trust's Legal 57 Provisions Relating to IETF Documents 58 (http://trustee.ietf.org/license-info) in effect on the date of 59 publication of this document. Please review these documents 60 carefully, as they describe your rights and restrictions with respect 61 to this document. Code Components extracted from this document must 62 include Simplified BSD License text as described in Section 4.e of 63 the Trust Legal Provisions and are provided without warranty as 64 described in the Simplified BSD License. 66 Table of Contents 68 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5 69 2. Terminology and Notation . . . . . . . . . . . . . . . . . . . 6 70 2.1. Message and Message Field Notation . . . . . . . . . . . . 6 71 2.2. Variable Notation . . . . . . . . . . . . . . . . . . . . 7 72 2.3. Other Notation . . . . . . . . . . . . . . . . . . . . . . 7 73 2.4. Terminology . . . . . . . . . . . . . . . . . . . . . . . 7 74 3. Applicability Statement . . . . . . . . . . . . . . . . . . . 8 75 4. Protocol Overview and Functioning . . . . . . . . . . . . . . 9 76 4.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . 9 77 4.2. LOADng Routers and LOADng Interfaces . . . . . . . . . . . 10 78 4.3. Information Base Overview . . . . . . . . . . . . . . . . 11 79 4.4. Signaling Overview . . . . . . . . . . . . . . . . . . . . 12 80 5. Protocol Parameters . . . . . . . . . . . . . . . . . . . . . 13 81 5.1. Protocol and Port Numbers . . . . . . . . . . . . . . . . 13 82 5.2. Router Parameters . . . . . . . . . . . . . . . . . . . . 13 83 5.3. Interface Parameters . . . . . . . . . . . . . . . . . . . 14 84 5.4. Constants . . . . . . . . . . . . . . . . . . . . . . . . 14 85 6. Protocol Message Content . . . . . . . . . . . . . . . . . . . 15 86 6.1. Route Request (RREQ) Messages . . . . . . . . . . . . . . 15 87 6.2. Route Reply (RREP) Messages . . . . . . . . . . . . . . . 16 88 6.3. Route Reply Acknowledgement (RREP_ACK) Messages . . . . . 17 89 6.4. Route Error (RERR) Messages . . . . . . . . . . . . . . . 18 90 7. Information Base . . . . . . . . . . . . . . . . . . . . . . . 19 91 7.1. Routing Set . . . . . . . . . . . . . . . . . . . . . . . 19 92 7.2. Local Interface Set . . . . . . . . . . . . . . . . . . . 20 93 7.3. Blacklisted Neighbor Set . . . . . . . . . . . . . . . . . 20 94 7.4. Destination Address Set . . . . . . . . . . . . . . . . . 21 95 7.5. Pending Acknowledgment Set . . . . . . . . . . . . . . . . 21 96 8. LOADng Router Sequence Numbers . . . . . . . . . . . . . . . . 22 97 9. Route Maintenance . . . . . . . . . . . . . . . . . . . . . . 22 98 10. Unidirectional Link Handling . . . . . . . . . . . . . . . . . 24 99 10.1. Blacklist Usage . . . . . . . . . . . . . . . . . . . . . 24 100 11. Common Rules for RREQ and RREP Messages . . . . . . . . . . . 25 101 11.1. Identifying Invalid RREQ or RREP Messages . . . . . . . . 26 102 11.2. RREQ and RREP Message Processing . . . . . . . . . . . . . 26 103 12. Route Requests (RREQs) . . . . . . . . . . . . . . . . . . . . 30 104 12.1. RREQ Generation . . . . . . . . . . . . . . . . . . . . . 30 105 12.2. RREQ Processing . . . . . . . . . . . . . . . . . . . . . 31 106 12.3. RREQ Forwarding . . . . . . . . . . . . . . . . . . . . . 31 107 12.4. RREQ Transmission . . . . . . . . . . . . . . . . . . . . 32 108 13. Route Replies (RREPs) . . . . . . . . . . . . . . . . . . . . 32 109 13.1. RREP Generation . . . . . . . . . . . . . . . . . . . . . 32 110 13.2. RREP Processing . . . . . . . . . . . . . . . . . . . . . 33 111 13.3. RREP Forwarding . . . . . . . . . . . . . . . . . . . . . 34 112 13.4. RREP Transmission . . . . . . . . . . . . . . . . . . . . 34 113 14. Route Errors (RERRs) . . . . . . . . . . . . . . . . . . . . . 35 114 14.1. Identifying Invalid RERR Messages . . . . . . . . . . . . 36 115 14.2. RERR Generation . . . . . . . . . . . . . . . . . . . . . 36 116 14.3. RERR Processing . . . . . . . . . . . . . . . . . . . . . 37 117 14.4. RERR Forwarding . . . . . . . . . . . . . . . . . . . . . 38 118 14.5. RERR Transmission . . . . . . . . . . . . . . . . . . . . 38 119 15. Route Reply Acknowledgments (RREP_ACKs) . . . . . . . . . . . 39 120 15.1. Identifying Invalid RREP_ACK Messages . . . . . . . . . . 39 121 15.2. RREP_ACK Generation . . . . . . . . . . . . . . . . . . . 39 122 15.3. RREP_ACK Processing . . . . . . . . . . . . . . . . . . . 40 123 15.4. RREP_ACK Forwarding . . . . . . . . . . . . . . . . . . . 41 124 15.5. RREP_ACK Transmission . . . . . . . . . . . . . . . . . . 41 125 16. Metrics . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 126 16.1. Specifying New Metrics . . . . . . . . . . . . . . . . . . 41 127 17. Implementation Status . . . . . . . . . . . . . . . . . . . . 41 128 17.1. Implementation of Ecole Polytechnique . . . . . . . . . . 42 129 17.2. Implementation of Fujitsu Laboratories of America . . . . 42 130 17.3. Implementation of Hitachi Yokohama Research Laboratory 131 - 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 132 17.4. Implementation of Hitachi Yokohama Research Laboratory 133 -2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 134 18. Security Considerations . . . . . . . . . . . . . . . . . . . 43 135 18.1. Confidentiality . . . . . . . . . . . . . . . . . . . . . 44 136 18.2. Integrity . . . . . . . . . . . . . . . . . . . . . . . . 45 137 18.3. Channel Jamming and State Explosion . . . . . . . . . . . 46 138 18.4. Interaction with External Routing Domains . . . . . . . . 47 139 19. LOADng Specific IANA Considerations . . . . . . . . . . . . . 47 140 19.1. Error Codes . . . . . . . . . . . . . . . . . . . . . . . 47 141 20. Contributors . . . . . . . . . . . . . . . . . . . . . . . . . 48 142 21. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 49 143 22. References . . . . . . . . . . . . . . . . . . . . . . . . . . 49 144 22.1. Normative References . . . . . . . . . . . . . . . . . . . 49 145 22.2. Informative References . . . . . . . . . . . . . . . . . . 49 146 Appendix A. LOADng Control Messages using RFC5444 . . . . . . . . 51 147 A.1. RREQ-Specific Message Encoding Considerations . . . . . . 51 148 A.2. RREP-Specific Message Encoding Considerations . . . . . . 53 149 A.3. RREP_ACK Message Encoding . . . . . . . . . . . . . . . . 55 150 A.4. RERR Message Encoding . . . . . . . . . . . . . . . . . . 56 151 A.5. RFC5444-Specific IANA Considerations . . . . . . . . . . . 57 152 A.5.1. Expert Review: Evaluation Guidelines . . . . . . . . . 57 153 A.5.2. Message Types . . . . . . . . . . . . . . . . . . . . 58 154 A.6. RREQ Message-Type-Specific TLV Type Registries . . . . . . 58 155 A.7. RREP Message-Type-Specific TLV Type Registries . . . . . . 59 156 A.8. RREP_ACK Message-Type-Specific TLV Type Registries . . . . 62 157 A.9. RERR Message-Type-Specific TLV Type Registries . . . . . . 62 158 Appendix B. LOADng Control Packet Illustrations . . . . . . . . . 63 159 B.1. RREQ . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 160 B.2. RREP . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 161 B.3. RREP_ACK . . . . . . . . . . . . . . . . . . . . . . . . . 66 162 B.4. RERR . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 164 1. Introduction 166 The Lightweight On-demand Ad hoc Distance-vector Routing Protocol - 167 Next Generation (LOADng) is a routing protocol, derived from AODV 168 [RFC3561] and extended for use in Mobile Ad hoc NETworks (MANETs). 169 As a reactive protocol, the basic operations of LOADng include 170 generation of Route Requests (RREQs) by a LOADng Router (originator) 171 for when discovering a route to a destination, forwarding of such 172 RREQs until they reach the destination LOADng Router, generation of 173 Route Replies (RREPs) upon receipt of an RREQ by the indicated 174 destination, and unicast hop-by-hop forwarding of these RREPs towards 175 the originator. If a route is detected to be broken, e.g., if 176 forwarding of a data packet to the recorded next hop on the route 177 towards the intended destination is detected to fail, a Route Error 178 (RERR) message is returned to the originator of that data packet to 179 inform the originator about the route breakage. 181 Compared to [RFC3561], LOADng is simplified as follows: 183 o Only the destination is permitted to respond to an RREQ; 184 intermediate LOADng Routers are explicitly prohibited from 185 responding to RREQs, even if they may have active routes to the 186 sought destination, and RREQ/RREP messages generated by a given 187 LOADng Router share a single unique, monotonically increasing 188 sequence number. This also eliminates Gratuitous RREPs while 189 ensuring loop freedom. The rationale for this simplification is 190 reduced complexity of protocol operation and reduced message 191 sizes. 193 o A LOADng Router does not maintain a precursor list, thus when 194 forwarding of a data packet to the recorded next hop on the route 195 to the destination fails, an RERR is sent only to the originator 196 of that data packet. The rationale for this simplification is an 197 assumption that few overlapping routes are in use concurrently in 198 a given network. 200 Compared to [RFC3561], LOADng is extended as follows: 202 o Optimized flooding is supported, reducing the overhead incurred by 203 RREQ generation and flooding. If no optimized flooding operation 204 is specified for a given deployment, classical flooding is used by 205 default. 207 o Different address lengths are supported - from full 16 octet IPv6 208 addresses over 8 octet EUI64 addresss [EUI64], 6 octet MAC 209 addresses and 4 octet IPv4 addresses to shorter 1 and 2 octet 210 addresses such as [RFC4944]. The only requirement is, that within 211 a given routing domain, all addresses are of the same address 212 length. 214 o Control messages are carried by way of the Generalized MANET 215 Packet/Message Format [RFC5444]. 217 o Using [RFC5444], control messages can include TLV (Type-Length- 218 Value) elements, permitting protocol extensions to be developed. 220 o LOADng supports routing using arbitrary additive metrics, which 221 can be specified as extensions to this protocol. 223 2. Terminology and Notation 225 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 226 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 227 "OPTIONAL" in this document are to be interpreted as described in 228 [RFC2119]. 230 Additionally, this document uses the notations in Section 2.1, 231 Section 2.2, and Section 2.3 and the terminology defined in 232 Section 2.4. 234 2.1. Message and Message Field Notation 236 LOADng Routers generate and process messages, each of which has a 237 number of distinct fields. For describing the protocol operation, 238 specifically the generation and processing of such messages, the 239 following notation is employed: 241 MsgType.field 243 where: 245 MsgType - is the type of message (e.g., RREQ or RREP); 247 field - is the field in the message (e.g., originator). 249 The different messages, their fields and their meaning are described 250 in Section 6. The encoding of messages for transmission by way of 251 [RFC5444] packets/messages is described in Appendix A, and Appendix B 252 illustrates the bit layout of LOADng control messages. 254 The motivation for separating the high-level messages and their 255 content from the low-level encoding and frame format for transmission 256 is to allow discussions of the protocol logic to be separated from 257 the message encoding and frame format - and, to support different 258 frame formats. 260 2.2. Variable Notation 262 Variables are introduced into the specification solely as a means to 263 clarify the description. The following notation is used: 265 MsgType.field - If "field" is a field in the message MsgType, then 266 MsgType.field is also used to represent the value of that field. 268 bar - A variable (not prepended by MsgType), usually obtained 269 through calculations based on the value(s) of element(s). 271 2.3. Other Notation 273 This document uses the following additional notational conventions: 275 a := b An assignment operator, whereby the left side (a) is 276 assigned the value of the right side (b). 278 c = d A comparison operator, returning TRUE if the value of the 279 left side (c) is equal to the value of the right side (d). 281 2.4. Terminology 283 This document uses the following terminology: 285 LOADng Router - A router that implements this routing protocol. A 286 LOADng Router is equipped with at least one, and possibly more, 287 LOADng Interfaces. 289 LOADng Interface - A LOADng Router's attachment to a communications 290 medium, over which it receives and generates control messages, 291 according to this specification. A LOADng Interface is assigned 292 one or more addresses. 294 Link - A link between two LOADng Interfaces exists if either can 295 receive control messages, according to this specification, from 296 the other. 298 Message - The fundamental entity carrying protocol information, in 299 the form of address objects and TLVs. 301 Link Metric - The cost (weight) of a link between a pair of LOADng 302 Interfaces. 304 Route Metric - The sum of the Link Metrics for the links that an 305 RREQ or RREP has crossed. 307 3. Applicability Statement 309 LOADng is a reactive MANET protocol, i.e., routes are discovered only 310 when a data packet is sent by a router (e.g., on behalf of an 311 attached host), and when the router has no route for this 312 destination. In that case, the router floods Route Requests (RREQ) 313 throughout the network for discovering the destination. Reactive 314 protocols require state only for the routes currently in use, 315 contrary to proactive protocols, which periodically send control 316 traffic and store routes to all destinations in the network. As 317 MANETs are often operated on wireless channels, flooding RREQs may 318 lead to frame collisions and therefore data loss. Moreover, each 319 transmission on a network interface consumes energy, reducing the 320 life-time of battery-driven routers. Consequently, in order to 321 reduce the amount of control traffic, LOADng (and in general reactive 322 protocols) are most suitable under the following constraints: 324 o Few concurrent traffic flows in the network (i.e., traffic flows 325 only between few sources and destinations); 327 o Little data traffic overall, and therefore the traffic load from 328 periodic signaling (for proactive protocols) is greater than the 329 traffic load from flooding RREQs (for reactive protocols); 331 o State requirements on the router are very stringent, i.e., it is 332 beneficial to store only few routes on a router. 334 In these specific use cases, reactive MANET protocols have shown to 335 be beneficial, and may be preferable over the more general use case 336 of proactive MANET protocols. 338 Specifically, the applicability of LOADng is determined by its 339 characteristics, which are that this protocol: 341 o Is a reactive routing protocol for Mobile Ad hoc NETworks 342 (MANETs). 344 o Is designed to work in networks with dynamic topology in which the 345 links may be lossy due to collisions, channel instability, or 346 movement of routers. 348 o Supports the use of optimized flooding for RREQs. 350 o Enables any LOADng Router to discover bi-directional routes to 351 destinations in the routing domain, i.e., to any other LOADng 352 Router, as well as hosts or networks attached to that LOADng 353 Router, in the same routing domain. 355 o Supports addresses of any length with integral number of octets, 356 from 16 octets to a single octet. 358 o Is layer-agnostic, i.e., may be used at layer 3 as a "route over" 359 routing protocol, or at layer 2 as a "mesh under" routing 360 protocol. 362 o Supports per-destination route maintenance; if a destination 363 becomes unreachable, rediscovery of that single (bi-directional) 364 route is performed, without need for global topology 365 recalculation. 367 4. Protocol Overview and Functioning 369 The objective of this protocol is for each LOADng Router to, 370 independently: 372 o Discover a bi-directional route to any destination in the network. 374 o Establish a route only when there is data traffic to be sent along 375 that route. 377 o Maintain a route only for as long as there is data traffic being 378 sent along that route. 380 o Generate control traffic based on network events only: when a new 381 route is required, or when an active route is detected broken. 382 Specifically, this protocol does not require periodic signaling. 384 4.1. Overview 386 These objectives are achieved, for each LOADng Router, by performing 387 the following tasks: 389 o When having a data packet to deliver to a destination, for which 390 no tuple in the routing set exists and where the data packet 391 source is local to that LOADng Router (i.e., is an address in the 392 Local Interface Set or Destination Address Set of that LOADng 393 Router), generate a Route Request (RREQ) encoding the destination 394 address, and transmit this RREQ over all of its LOADng Interfaces. 396 o Upon receiving an RREQ, insert or refresh a tuple in the Routing 397 Set, recording a route towards the originator address from the 398 RREQ, as well as to the neighbor LOADng Router from which the RREQ 399 was received. This will install the Reverse Route (towards the 400 originator address from the RREQ). 402 o Upon receiving an RREQ, inspect the indicated destination address: 404 * If that address is an address in the Destination Address Set or 405 in the Local Interface Set of the LOADng Router, generate a 406 Route Reply (RREP), which is unicast in a hop-by-hop fashion 407 along the installed Reverse Route. 409 * If that address is not an address in the Destination Address 410 Set or in the Local Interface Set of the LOADng Router, 411 consider the RREQ as a candidate for forwarding. 413 o When an RREQ is considered a candidate for forwarding, retransmit 414 it according to the flooding operation, specified for the network. 416 o Upon receiving an RREP, insert or refresh a tuple in the Routing 417 Set, recording a route towards the originator address from the 418 RREP, as well as to the neighbor LOADng Router, from which that 419 RREP was received. This will install the Forward Route (towards 420 the originator address from the RREP). The originator address is 421 either an address from the Local Interface Set of the LOADng 422 Router, or an address from its Destination Address Set (i.e., an 423 address of a host attached to that LOADng Router). 425 o Upon receiving an RREP, forward it, as unicast, to the recorded 426 next hop along the corresponding Reverse Route until the RREP 427 reaches the LOADng Router that has the destination address from 428 the RREP in its Local Interface Set or Destination Address Set. 430 o When forwarding an RREQ or RREP, update the route metric, as 431 contained in that RREQ or RREP message. 433 A LOADng Router generating an RREQ specifies which metric type it 434 desires. Routers receiving an RREQ will process it and update route 435 metric information in the RREQ according to that metric, if they can. 436 All LOADng Routers, however, will update information in the RREQ so 437 as to be able to support a "hop-count" default metric. If a LOADng 438 Router is not able to understand the metric type, specified in an 439 RREQ, it will update the route metric value to its maximum value, so 440 as to ensure that this is indicated to the further recipients of the 441 RREQ. Once the route metric value is set to its maximum value, no 442 LOADng Router along the path towards the destination may change the 443 value. 445 4.2. LOADng Routers and LOADng Interfaces 447 A LOADng Router has a set of at least one, and possibly more, LOADng 448 Interfaces. Each LOADng Interface: 450 o Is configured with one or more addresses. 452 o Has a number of interface parameters. 454 In addition to a set of LOADng Interfaces as described above, each 455 LOADng Router: 457 o Has a number of router parameters. 459 o Has an Information Base. 461 o Generates and processes RREQ, RREP, RREP_ACK and RERR messages, 462 according to this specification. 464 4.3. Information Base Overview 466 Necessary protocol state is recorded by way of five information sets: 467 the "Routing Set", the "Local Interface Set", the "Blacklisted 468 Neighbor Set", the "Destination Address Set", and the "Pending 469 Acknowledgment Set". 471 The Routing Set contains tuples, each representing the next-hop on, 472 and the metric of, a route towards a destination address. 473 Additionally, the Routing Set records the sequence number of the last 474 message, received from the destination. This information is 475 extracted from the message (RREQ or RREP) that generated the tuple so 476 as to enable routing. The routing table is to be updated using this 477 Routing Set. (A LOADng Router may choose to use any or all 478 destination addresses in the Routing Set to update the routing table, 479 this selection is outside the scope of this specification.) 481 The Local Interface Set contains tuples, each representing a local 482 LOADng Interface of the LOADng Router. Each tuple contains a list of 483 one or more addresses of that LOADng Interface. 485 The Blacklisted Neighbor Set contains tuples representing neighbor 486 LOADng Interface addresses of a LOADng Router with which 487 unidirectional connectivity has been recently detected. 489 The Destination Address Set contains tuples representing addresses, 490 for which the LOADng Router is responsible, i.e., addresses of this 491 LOADng Router, or of hosts and networks directly attached to this 492 LOADng Router and which use it to connect to the routing domain. 493 These addresses may in particular belong to devices which do not 494 implement LOADng, and thus cannot process LOADng messages. A LOADng 495 Router provides connectivity to these addresses by generating RREPs 496 in response to RREQs directed towards them. 498 The Pending Acknowledgment Set contains tuples, representing 499 transmitted RREPs for which an RREP_ACK is expected, but where this 500 RREP_ACK has not yet been received. 502 The Routing Set, the Blacklisted Neighbor Set and the Pending 503 Acknowledgment Set are updated by this protocol. The Local Interface 504 Set and the Destination Address Set are used, but not updated by this 505 protocol. 507 4.4. Signaling Overview 509 This protocol generates and processes the following routing messages: 511 Route Request (RREQ) - Generated by a LOADng Router when it has a 512 data packet to deliver to a given destination, where the data 513 packet source is local to that LOADng Router (i.e., is an address 514 in the Local Interface Set or Destination Address Set of that 515 LOADng Router), but where it does not have an available tuple in 516 its Routing Set indicating a route to that destination. An RREQ 517 contains: 519 * The (destination) address to which a Forward Route is to be 520 discovered by way of soliciting the LOADng Router with that 521 destination address in its Local Interface Set or in its 522 Destination Address Set to generate an RREP. 524 * The (originator) address for which a Reverse Route is to be 525 installed by RREQ forwarding and processing, i.e., the source 526 address of the data packet which triggered the RREQ generation. 528 * The sequence number of the LOADng Router, generating the RREQ. 530 An RREQ is flooded through the network, according to the flooding 531 operation specified for the network. 533 Route Reply (RREP) - Generated as a response to an RREQ by the 534 LOADng Router which has the address (destination) from the RREQ in 535 its Local Interface Set or in its Destination Address Set. An RREP 536 is sent in unicast towards the originator of that RREQ. An RREP 537 contains: 539 * The (originator) address to which a Forward Route is to be 540 installed when forwarding the RREP. 542 * The (destination) address towards which the RREP is to be sent. 543 More precisely, the destination address determines the unicast 544 route which the RREP follows. 546 * The sequence number of the LOADng Router, generating the RREP. 548 Route Reply Acknowledgment (RREP_ACK) - Generated by a LOADng Router 549 as a response to an RREP, in order to signal to the neighbor that 550 transmitted the RREP that the RREP was successfully received. 551 Receipt of an RREP_ACK indicates that the link between these two 552 neighboring LOADng Routers is bidirectional. An RREP_ACK is 553 unicast to the neighbor from which the RREP has arrived, and is 554 not forwarded. RREP_ACKs are generated only in response to an 555 RREP which, by way of a flag, has explicitly indicated that an 556 RREP_ACK is desired. 558 Route Error (RERR) - Generated by a LOADng Router when a link on an 559 active route to a destination is detected as broken by way of 560 inability to forward a data packet towards that destination. An 561 RERR is unicast to the source of the undeliverable data packet. 563 5. Protocol Parameters 565 The following parameters and constants are used in this 566 specification. 568 5.1. Protocol and Port Numbers 570 When using LOADng as an IP routing protocol, the considerations of 571 [RFC5498] apply. 573 5.2. Router Parameters 575 NET_TRAVERSAL_TIME - is the maximum time that a RREQ message is 576 expected to take when traversing from one end of the network to 577 the other, with the consideration of RREQ_MAX_JITTER. 579 RREQ_RETRIES - is the maximum number of subsequent RREQs that a 580 particular LOADng Router may generate in order to discover a route 581 to a destination, before declaring that destination unreachable. 583 RREQ_MIN_INTERVAL - is the minimal interval (in milliseconds) of 584 RREQs that a particular LOADng Router is allowed to send. 586 R_HOLD_TIME - is the minimum time a Routing Tuple SHOULD be kept in 587 the Routing Set after it was last refreshed. 589 MAX_DIST - is the value representing the maximum possible metric 590 (R_metric field). 592 B_HOLD_TIME - is the time during which the link between the neighbor 593 LOADng Router and this LOADng Router MUST be considered as non- 594 bidirectional, and that therefore RREQs received from that 595 neighbor LOADng Router MUST be ignored during that time 596 (B_HOLD_TIME). B_HOLD_TIME should be greater than 2 x 597 NET_TRAVERSAL_TIME x RREQ_RETRIES, to ensure that subsequent RREQs 598 will reach the destination via a route, excluding the link to the 599 blacklisted neighbor. 601 MAX_HOP_LIMIT - is the maximum limit of the number of hops that 602 LOADng routing messages are allowed to traverse. 604 5.3. Interface Parameters 606 Different LOADng Interfaces (on the same or on different LOADng 607 Routers) MAY employ different interface parameter values and MAY 608 change their interface parameter values dynamically. A particular 609 case is where all LOADng Interfaces on all LOADng Routers within a 610 given LOADng routing domain employ the same set of interface 611 parameter values. 613 RREQ_MAX_JITTER - is the default value of MAXJITTER used in 614 [RFC5148] for RREQ messages forwarded by this LOADng Router on 615 this interface. 617 RREP_ACK_REQUIRED - is a boolean flag, which indicates (if set) that 618 the LOADng Router is configured to expect that each RREP it sends 619 be confirmed by an RREP_ACK, or, (if cleared) that no RREP_ACK is 620 expected for this interface. 622 USE_BIDIRECTIONAL_LINK_ONLY - is a boolean flag, which indicates if 623 the LOADng Router only uses verified bi-directional links for data 624 packet forwarding on this interface. It is set by default. If 625 cleared, then the LOADng Router can use links which have not been 626 verified to be bi-directional on this interface. 628 RREP_ACK_TIMEOUT - is the minimum amount of time after transmission 629 of an RREP, that a LOADng Router SHOULD wait for an RREP_ACK from 630 a neighbor LOADng Router, before considering the link to this 631 neighbor to be unidirectional. 633 5.4. Constants 635 MAX_HOP_COUNT - is the maximum number of hops as representable by 636 the encoding that is used (e.g., 255 when using [RFC5444]). It 637 SHOULD NOT be used to limit the scope of a message; the router 638 parameter MAX_HOP_LIMIT can be used to limit the scope of a LOADng 639 routing message. 641 6. Protocol Message Content 643 The protocol messages, generated and processed by LOADng, are 644 described in this section using the notational conventions described 645 in Section 2. The encoding of messages for transmission by way of 646 [RFC5444] packets/messages is described in Appendix A, and Appendix B 647 illustrates the bit layout of a selection of LOADng control messages. 648 Unless stated otherwise, the message fields described below are set 649 by the LOADng Router that generates the message, and MUST NOT be 650 changed by intermediate LOADng Routers. 652 6.1. Route Request (RREQ) Messages 654 A Route Request (RREQ) message has the following fields: 656 RREQ.addr-length is an unsigned integer field, encoding the length 657 of the originator and destination addresses as follows: 659 RREQ.addr-length := the length of an address in octets - 1 661 RREQ.seq-num is an unsigned integer field, containing the sequence 662 number (see Section 8) of the LOADng Router, generating the RREQ 663 message. 665 RREQ.metric-type is an unsigned integer field and specifies the type 666 of metric requested by this RREQ. 668 RREQ.route-metric is a unsigned integer field, of length defined by 669 RREQ.metric-type, which specifies the route metric of the route 670 (the sum of the link metrics of the links), through which this 671 RREQ has traveled. 673 RREQ.hop-count is an unsigned integer field and specifies the total 674 number of hops which the message has traversed from the 675 RREQ.originator. 677 RREQ.hop-limit is an unsigned integer field and specifies the number 678 of hops that the message is allowed to traverse. 680 RREQ.originator is an identifier of RREQ.addr-length + 1 octets, 681 specifying the address of the LOADng Interface over which this 682 RREQ was generated, and to which a route (the "reverse route") is 683 supplied by this RREQ. In case the message is generated by a 684 LOADng Router on behalf of an attached host, RREQ.originator 685 corresponds to an address of that host, otherwise it corresponds 686 to an address of the sending LOADng Interface of the LOADng 687 Router. 689 RREQ.destination is an identifier of RREQ.addr-length + 1 octets, 690 specifying the address to which the RREQ should be sent, i.e., the 691 destination address for which a route is sought. 693 The following fields of an RREQ message are immutable, i.e., they 694 MUST NOT be changed during processing or forwarding of the message: 695 RREQ.addr-length, RREQ.seq-num, RREQ.originator, and 696 RREQ.destination. 698 The following fields of an RREQ message are mutable, i.e., they will 699 be changed by intermediate routers during processing or forwarding, 700 as specified in Section 12.2 and Section 12.3: RREQ.metric-type, 701 RREQ.route-metric, RREQ.hop-limit, and RREQ.hop-count. 703 Any additional field that is added to the message by an extension to 704 this protocol, e.g., by way of TLVs, MUST be considered immutable, 705 unless the extension specifically defines the field as mutable. 707 6.2. Route Reply (RREP) Messages 709 A Route Reply (RREP) message has the following fields: 711 RREP.addr-length is an unsigned integer field, encoding the length 712 of the originator and destination addresses as follows: 714 RREP.addr-length := the length of an address in octets - 1 716 RREP.seq-num is an unsigned integer field, containing the sequence 717 number (see Section 8) of the LOADng Router, generating the RREP 718 message. 720 RREP.metric-type is an unsigned integer field and specifies the type 721 of metric, requested by this RREP. 723 RREP.route-metric is a unsigned integer field, of length defined by 724 RREP.metric-type, which specifies the route metric of the route 725 (the sum of the link metrics of the links) through which this RREP 726 has traveled. 728 RREP.ackrequired is a boolean flag which, when set ('1'), at least 729 one RREP_ACK MUST be generated by the recipient of an RREP if the 730 RREP is successfully processed. When cleared ('0'), an RREP_ACK 731 MUST NOT be generated in response to processing of the RREP. 733 RREP.hop-count is an unsigned integer field and specifies the total 734 number of hops which the message has traversed from 735 RREP.originator to RREP.destination. 737 RREP.hop-limit is an unsigned integer field and specifies the number 738 of hops that the message is allowed to traverse. 740 RREP.originator is an identifier of RREP.addr-length + 1 octets, 741 specifying the address for which this RREP was generated, and to 742 which a route (the "forward route") is supplied by this RREP. In 743 case the message is generated on a LOADng Router on behalf of an 744 attached host, RREP.originator corresponds to an address of that 745 host, otherwise it corresponds to an address of the LOADng 746 Interface of the LOADng Router, over which the RREP was generated. 748 RREP.destination is an identifier of RREP.addr-length + 1 octets, 749 specifying the address to which the RREP should be sent. (I.e., 750 this address is equivalent to RREQ.originator of the RREQ that 751 triggered the RREP.) 753 The following fields of an RREP message are immutable, i.e., they 754 MUST NOT be changed during processing or forwarding of the message: 755 RREP.addr-length, RREP.seq-num, RREP.originator, and 756 RREP.destination. 758 The following fields of an RREP message are mutable, i.e., they will 759 be changed by intermediate routers during processing or forwarding, 760 as specified in Section 13.2 and Section 13.3: RREP.metric-type, 761 RREP.route-metric, RREP.ackrequired, RREP.hop-limit, and RREP.hop- 762 count. 764 Any additional field that is added to the message by an extension to 765 this protocol, e.g., by way of TLVs, MUST be considered immutable, 766 unless the extension specifically defines the field as mutable. 768 6.3. Route Reply Acknowledgement (RREP_ACK) Messages 770 A Route Reply Acknowledgement (RREP_ACK) message has the following 771 fields: 773 RREP_ACK.addr-length is an unsigned integer field, encoding the 774 length of the destination and originator addresses as follows: 776 RREP_ACK.addr-length := the length of an address in octets - 1 778 RREP_ACK.seq-num is an unsigned integer field and contains the value 779 of RREP.seq-num from the RREP for which this RREP_ACK is sent. 781 RREP_ACK.destination is an identifier of RREP_ACK.addr-length + 1 782 octets and contains the value of the RREP.originator field from 783 the RREP for which this RREP_ACK is sent. 785 RREP_ACK messages are sent only across a single link and are never 786 forwarded. 788 6.4. Route Error (RERR) Messages 790 A Route Error (RERR) message has the following fields: 792 RERR.addr-length is an unsigned integer field, encoding the length 793 of RERR.destination and RERR.unreachableAddress, as follows: 795 RERR.addr-length := the length of an address in octets - 1 797 RERR.errorcode is an unsigned integer field and specifies the reason 798 for the error message being generated, according to Table 1. 800 RERR.unreachableAddress is an identifier of RERR.addr-length + 1 801 octets, specifying an address, which has become unreachable, and 802 for which an error is reported by way of this RERR message. 804 RERR.originator is an identifier of RERR.addr-length + 1 octets, 805 specifying the address of the LOADng Interface over which this 806 RERR was generated by a LOADng Router. 808 RERR.destination is an identifier of RERR.address-length + 1 octets, 809 specifying the destination address of this RERR message. 810 RERR.destination is, in general, the source address of a data 811 packet, for which delivery to RERR.unreachableAddress failed, and 812 the unicast destination of the RERR message is the LOADng Router 813 which has RERR.destination listed in a Local Interface Tuple or in 814 a Destination Address Tuple. 816 RERR.hop-limit is an unsigned integer field and specifies the number 817 of hops that the message is allowed to traverse. 819 The following fields of an RERR message are immutable, i.e., they 820 MUST NOT be changed during processing or forwarding of the message: 821 RERR.addr-length, RERR.errorcode, RERR.unreachableAddress, 822 RERR.originator and RERR.destination. 824 The following fields of an RERR message are mutable, i.e., they will 825 be changed by intermediate routers during processing or forwarding, 826 as specified in Section 14.3 and Section 14.4: RERR.hop-limit. 828 Any additional field that is added to the message by an extension to 829 this protocol, e.g., by way of TLVs, MUST be considered immutable, 830 unless the extension specifically defines the field as mutable. 832 7. Information Base 834 Each LOADng Router maintains an Information Base, containing the 835 information sets necessary for protocol operation, as described in 836 the following sections. The organization of information into these 837 information sets is non-normative, given so as to facilitate 838 description of message generation, forwarding and processing rules in 839 this specification. An implementation may choose any representation 840 or structure for when maintaining this information. 842 7.1. Routing Set 844 The Routing Set records the next hop on the route to each known 845 destination, when such a route is known. It consists of Routing 846 Tuples: 848 (R_dest_addr, R_next_addr, R_metric, R_metric_type, R_hop_count, 849 R_seq_num, R_bidirectional, R_local_iface_addr, R_valid_time) 851 where: 853 R_dest_addr - is the address of the destination, either an address 854 of a LOADng Interface of a destination LOADng Router, or an 855 address of an interface reachable via the destination LOADng 856 Router, but which is outside the routing domain. 858 R_next_addr - is the address of the "next hop" on the selected route 859 to the destination. 861 R_metric - is the metric associated with the selected route to the 862 destination with address R_dest_addr. 864 R_metric_type - specifies the metric type for this Routing Tuple - 865 in other words, how R_metric is defined and calculated. 867 R_hop_count - is the hop count of the selected route to the 868 destination with address R_dest_addr. 870 R_seq_num - is the value of the RREQ.seq-num or RREP.seq-num field 871 of the RREQ or RREP which installed or last updated this tuple. 872 For the Routing Tuples installed by previous hop information of 873 RREQ or RREP, R_seq_num MUST be set to -1. 875 R_bidirectional - is a boolean flag, which specifies if the Routing 876 Tuple is verified as representing a bi-directional route. Data 877 traffic SHOULD only be routed through a routing tuple with 878 R_bidirectional flag equals TRUE, unless the LOADng Router is 879 configured as accepting routes without bi-directionality 880 verification explicitly by setting USE_BIDIRECTIONAL_LINK_ONLY to 881 FALSE of the interface with R_local_iface_address. 883 R_local_iface_addr - is an address of the local LOADng Interface, 884 through which the destination can be reached. 886 R_valid_time - specifies the time until which the information 887 recorded in this Routing Tuple is considered valid. 889 7.2. Local Interface Set 891 A LOADng Router's Local Interface Set records its local LOADng 892 Interfaces. It consists of Local Interface Tuples, one per LOADng 893 Interface: 895 (I_local_iface_addr_list) 897 where: 899 I_local_iface_addr_list - is an unordered list of the network 900 addresses of this LOADng Interface. 902 The implementation MUST initialize the Local Interface Set with at 903 least one tuple containing at least one address of an LOADng 904 Interface. The Local Interface Set MUST be updated if there is a 905 change of the LOADng Interfaces of a LOADng Router (i.e., a LOADng 906 Interface is added, removed or changes addresses). 908 7.3. Blacklisted Neighbor Set 910 The Blacklisted Neighbor Set records the neighbor LOADng Interface 911 addresses of a LOADng Router, with which connectivity has been 912 detected to be unidirectional. Specifically, the Blacklisted 913 Neighbor Set records neighbors from which an RREQ has been received 914 (i.e., through which a Forward Route would possible) but to which it 915 has been determined that it is not possible to communicate (i.e., 916 forwarding Route Replies via this neighbor fails, rendering 917 installing the Forward Route impossible). It consists of Blacklisted 918 Neighbor Tuples: 920 (B_neighbor_address, B_valid_time) 922 where: 924 B_neighbor_address - is the address of the blacklisted neighbor 925 LOADng Interface. 927 B_valid_time - specifies the time until which the information 928 recorded in this tuple is considered valid. 930 7.4. Destination Address Set 932 The Destination Address Set records addresses, for which a LOADng 933 Router will generate RREPs in response to received RREQs, in addition 934 to its own LOADng Interface addresses (as listed in the Local 935 Interface Set). The Destination Address Set thus represents those 936 destinations (i.e., hosts), for which this LOADng Router is providing 937 connectivity. It consists of Destination Address Tuples: 939 (D_address) 941 where: 943 D_address - is the address of a destination (a host or a network), 944 attached to this LOADng Router and for which this LOADng Router 945 provides connectivity through the routing domain. 947 The Destination Address Set is used for generating signaling, but is 948 not itself updated by signaling specified in this document. Updates 949 to the Destination Address Set are due to changes of the environment 950 of a LOADng Router - hosts or external networks being connected to or 951 disconnected from a LOADng Router. The Destination Address Set may 952 be administrationally provisioned, or provisioned by external 953 protocols. 955 7.5. Pending Acknowledgment Set 957 The Pending Acknowledgment Set contains information about RREPs which 958 have been transmitted with the RREP.ackrequired flag set, and for 959 which an RREP_ACK has not yet been received. It consists of Pending 960 Acknowledgment Tuples: 962 (P_next_hop, P_originator, P_seq_num, 963 P_ack_received, P_ack_timeout) 965 where: 967 P_next_hop - is the address of the neighbor LOADng Interface to 968 which the RREP was sent. 970 P_originator - is the address of the originator of the RREP. 972 P_seq_num - is the RREP.seq-num field of the sent RREP. 974 P_ack_received - is a boolean flag, which specifies the tuple has 975 been acknowledged by a corresponding RREP_ACK message. The 976 default value is FALSE. 978 P_ack_timeout - is the time after which the tuple MUST be expired. 980 8. LOADng Router Sequence Numbers 982 Each LOADng Router maintains a single sequence number, which must be 983 included in each RREQ or RREP message it generates. Each LOADng 984 Router MUST make sure that no two messages (both RREQ and RREP) are 985 generated with the same sequence number, and MUST generate sequence 986 numbers such that these are monotonically increasing. This sequence 987 number is used as information for when comparing routes to the LOADng 988 Router having generated the message. 990 However, with a limited number of bits for representing sequence 991 numbers, wrap-around (that the sequence number is incremented from 992 the maximum possible value to zero) can occur. To prevent this from 993 interfering with the operation of the protocol, the following MUST be 994 observed. The term MAXVALUE designates in the following the largest 995 possible value for a sequence number. The sequence number S1 is said 996 to be "greater than" (denoted '>') the sequence number S2 if: 998 S2 < S1 AND S1 - S2 <= MAXVALUE/2 OR 1000 S1 < S2 AND S2 - S1 > MAXVALUE/2 1002 9. Route Maintenance 1004 Tuples in the Routing Set are maintained by way of five different 1005 mechanisms: 1007 o RREQ/RREP exchange, specified in Section 12 and Section 13. 1009 o Data traffic delivery success. 1011 o Data traffic delivery failure. 1013 o External signals indicating that a tuple in the Routing Set needs 1014 updating. 1016 o Information expiration. 1018 Routing Tuples in the Routing Set contain a validity time, which 1019 specifies the time until which the information recorded in this tuple 1020 is considered valid. After this time, the information in such tuples 1021 is to be considered as invalid, for the processing specified in this 1022 document. 1024 Routing Tuples for actively used routes (i.e., routes via which 1025 traffic is currently transiting) SHOULD NOT be removed, unless there 1026 is evidence that they no longer provide connectivity - i.e., unless a 1027 link on that route has broken. 1029 To this end, one or more of the following mechanisms (non-exhaustive 1030 list) MAY be used: 1032 o If a lower layer mechanism provides signals, such as when delivery 1033 to a presumed neighbor LOADng Router fails, this signal MAY be 1034 used to indicate that a link has broken, trigger early expiration 1035 of a Routing Tuple from the Routing Set, and to initiate Route 1036 Error Signaling (see Section 14). Conversely, absence of such a 1037 signal when attempting delivery MAY be interpreted as validation 1038 that the corresponding Routing Tuple(s) are valid, and their 1039 R_valid_time refreshed correspondingly. Note that when using such 1040 a mechanism, care should be taken to prevent that an intermittent 1041 error (e.g., an incidental wireless collision) triggers corrective 1042 action and signaling. This depends on the nature of the signals, 1043 provided by the lower layer, but can include the use of a 1044 hysteresis function or other statistical mechanisms. 1046 o Conversely, for each successful delivery of a packet to a neighbor 1047 or a destination, if signaled by a lower layer or a transport 1048 mechanism, or each positive confirmation of the presence of a 1049 neighbor by way of an external neighbor discovery protocol, MAY be 1050 interpreted as validation that the corresponding Routing Tuple(s) 1051 are valid, and their R_valid_time refreshed correspondingly. Note 1052 that when refreshing a Routing Tuple corresponding to a 1053 destination of a data packet, the Routing Tuple corresponding to 1054 the next hop toward that destination SHOULD also be refreshed. 1056 Furthermore, a LOADng Router may experience that a route currently 1057 used for forwarding data packets is no longer operational, and must 1058 act to either rectify this situation locally (Section 13) or signal 1059 this situation to the source of the data packets for which delivery 1060 was unsuccessful (Section 14). 1062 If a LOADng Router fails to deliver a data packet to a next-hop, it 1063 MUST generate an RERR message, as specified in Section 14. 1065 10. Unidirectional Link Handling 1067 Each LOADng Router MUST monitor the bidirectionality of the links to 1068 its neighbors and set the R_bidirectional flag of related routing 1069 tuples when processing Route Replies (RREP). To this end, one or 1070 more of the following mechanisms MAY be used (non exhaustive list): 1072 o If a lower layer mechanism provides signals, such as when delivery 1073 to a presumed neighbor LOADng Router fails, this signal MAY be 1074 used to detect that a link to this neighbor is broken or is 1075 unidirectional; the LOADng Router MUST then blacklist the neighbor 1076 (see Section 10.1). 1078 o If a mechanism such as NDP [RFC4861] is available, the LOADng 1079 Router MAY use it. 1081 o A LOADng Router MAY use a neighborhood discovery mechanism with 1082 bidirectionality verification, such as NHDP [RFC6130]. 1084 o RREP_ACK message exchange, as described in Section 15. 1086 o Upper-layer mechanisms, such as transport-layer acknowledgments, 1087 MAY be used to detect unidirectional or broken links. 1089 When a LOADng Router detects, via one of these mechanisms, that a 1090 link to a neighbor LOADng Router is unidirectional or broken, the 1091 LOADng Router MUST blacklist this neighbor (see Section 10.1). 1092 Conversely, if a LOADng Router detects via one of these mechanisms 1093 that a previously blacklisted LOADng Router has a bidirectional link 1094 to this LOADng Router, it MAY remove it from the blacklist before the 1095 B_valid_time of the corresponding tuple. 1097 10.1. Blacklist Usage 1099 The Blacklist is maintained according to Section 7.3. When an 1100 interface of neighbor LOADng Router is detected to have a 1101 unidirectional link to the LOADng Router, it is blacklisted, i.e., a 1102 tuple (B_neighbor_address, B_valid_time) is created thus: 1104 o B_neighbor_address := the address of the blacklisted neighbor 1105 LOADng Router interface 1107 o B_valid_time := current_time + B_HOLD_TIME 1109 When a neighbor LOADng Router interface is blacklisted, i.e., when 1110 there is a corresponding (B_neighbor_address, B_valid_time) tuple in 1111 the Blacklisted Neighbor Set, it is temporarily not considered as a 1112 neighbor, and thus: 1114 o Every RREQ received from this neighbor LOADng Router interface 1115 MUST be discarded; 1117 11. Common Rules for RREQ and RREP Messages 1119 RREQ and RREP messages, both, supply routes between their recipients 1120 and the originator of the RREQ or RREP message. The two message 1121 types therefore share common processing rules, and differ only in the 1122 following: 1124 o RREQ messages are multicast or broadcast, intended to be received 1125 by all LOADng Routers in the network, whereas RREP messages are 1126 all unicast, intended to be received only by LOADng Routers on a 1127 specific route towards a specific destination. 1129 o Receipt of an RREQ message by a LOADng router, which has the 1130 RREQ.destination address in its Local Interface Set or Destination 1131 Address Set MUST trigger the procedures for generation of an RREP 1132 message. 1134 o Receipt of an RREP message with RREP.ackrequired set MUST trigger 1135 generation of an RREP_ACK message. 1137 For the purpose of the processing description in this section, the 1138 following additional notation is used: 1140 received-route-metric is a variable, representing the route metric, 1141 as included in the received RREQ or RREP message, see Section 16. 1143 used-metric-type is a variable, representing the type of metric used 1144 for calculating received-route-metric, see Section 16. 1146 previous-hop is the address of the LOADng Router, from which the 1147 RREQ or RREP message was received. 1149 > is the comparison operator for sequence numbers, as specified in 1150 Section 8. 1152 MSG is a shorthand for either an RREQ or RREP message, used for when 1153 accessing message fields in the description of the common RREQ and 1154 RREP message processing in the following subsections. 1156 hop-count is a variable, representing the hop-count, as included in 1157 the received RREQ or RREP message. 1159 hop-limit is a variable, representing the hop-limit, as included in 1160 the received RREQ or RREP message. 1162 link-metric is a variable, representing the link metric between this 1163 LOADng Router and the LOADng Router from which the RREQ or RREP 1164 message was received, as calculated by the receiving LOADng 1165 Router, see Section 16. 1167 route-metric is a variable, representing the route metric, as 1168 included in the received RREQ or RREP message, plus the link- 1169 metric for the link, over which the RREQ or RREP was received, 1170 i.e., the total route cost from the originator to this LOADng 1171 Router. 1173 11.1. Identifying Invalid RREQ or RREP Messages 1175 A received RREQ or RREP message is invalid, and MUST be discarded 1176 without further processing, if any of the following conditions are 1177 true: 1179 o The address length specified by this message (i.e., MSG.addr- 1180 length + 1) differs from the length of the address(es) of this 1181 LOADng Router. 1183 o The address contained in MSG.originator is an address of this 1184 LOADng Router. 1186 o There is a tuple in the Routing Set where: 1188 * R_dest_addr = MSG.originator 1190 * R_seq_num > MSG.seq-num 1192 o For RREQ messages only, an RREQ MUST be considered invalid if the 1193 previous-hop is blacklisted (i.e., its address is in a tuple in 1194 the Blacklisted Neighbor Set, see Section 10.1). 1196 A LOADng Router MAY recognize additional reasons for identifying that 1197 an RREQ or RREP message is invalid for processing, e.g., to allow a 1198 security protocol to perform verification of integrity check values 1199 and prevent processing of unverifiable RREQ or RREP message by this 1200 protocol. 1202 11.2. RREQ and RREP Message Processing 1204 A received, and valid, RREQ or RREP message is processed as follows: 1206 1. Included TLVs are processed/updated according to their 1207 specification. 1209 2. Set the variable hop-count to MSG.hop-count + 1. 1211 3. Set the variable hop-limit to MSG.hop-limit - 1. 1213 4. If MSG.metric-type is known to this LOADng Router, and if 1214 MSG.metric-type is not HOP_COUNT, then: 1216 * Set the variable used-metric-type to the value of MSG.metric- 1217 type. 1219 * Determine the link metric over the link over which the message 1220 was received, according to used-metric-type, and set the 1221 variable link-metric to the calculated value. 1223 * Compute the route metric to MSG.originator according to used- 1224 metric-type by adding link-metric to the received-route-metric 1225 advertised by the received message, and set the variable 1226 route-metric to the calculated value. 1228 5. Otherwise: 1230 * Set the variable used-metric-type to HOP_COUNT. 1232 * Set the variable route-metric to MAX_DIST, see Section 16. 1234 * Set the variable link-metric to MAX_DIST. 1236 6. Find the Routing Tuple (henceforth, Matching Routing Tuple) 1237 where: 1239 * R_dest_addr = MSG.originator 1241 7. If no Matching Routing Tuple is found, then create a new Matching 1242 Routing Tuple (the "reverse route" for RREQ messages or "forward 1243 route" for RREP messages) with: 1245 * R_dest_addr := MSG.originator 1247 * R_next_addr := previous-hop 1249 * R_metric_type := used-metric-type 1251 * R_metric := MAX_DIST 1252 * R_hop_count := hop-count 1254 * R_seq_num := -1 1256 * R_valid_time := current time + R_HOLD_TIME 1258 * R_bidirectional := FALSE 1260 * R_local_iface_addr := the address of the LOADng Interface 1261 through which the message was received. 1263 8. The Matching Routing Tuple, existing or new, is compared to the 1264 received RREQ or RREP message: 1266 1. If 1268 + R_seq_num = MSG.seq-num; AND 1270 + R_metric_type = used-metric-type; AND 1272 + R_metric > route-metric 1274 OR 1276 + R_seq_num = MSG.seq-num; AND 1278 + R_metric_type = used-metric-type; AND 1280 + R_metric = route-metric; AND 1282 + R_hop_count > hop-count 1284 OR 1286 + R_seq_num = MSG.seq-num; AND 1288 + R_metric_type does not equal to used-metric-type; AND 1290 + R_metric_type = HOP_COUNT 1292 OR 1294 + R_seq_num < MSG.seq-num 1296 Then: 1298 12. The message is used for updating the Routing Set. The 1299 Routing Tuple, where: 1301 - R_dest_addr = MSG.originator; 1303 is updated thus: 1305 - R_next_addr := previous-hop 1307 - R_metric_type = used-metric-type 1309 - R_metric := route-metric 1311 - R_hop_count := hop-count 1313 - R_seq_num := MSG.seq-num 1315 - R_valid_time := current time + R_HOLD_TIME 1317 - R_bidirectional := TRUE, if the message being 1318 processed is an RREP. 1320 13. If previous-hop is not equal to MSG.originator, and if 1321 there is no Matching Routing Tuple in the Routing Set 1322 with R_dest_addr = previous-hop, create a new Matching 1323 Routing Tuple with: 1325 - R_dest_addr := previous-hop 1327 - R_next_addr := previous-hop 1329 14. The Routing Tuple with R_dest_addr = previous-hop, 1330 existing or new, is updated as follows 1332 - R_metric_type := used-metric-type 1334 - R_metric := link-metric 1336 - R_hop_count := 1 1338 - R_seq_num := -1 1340 - R_valid_time := current time + R_HOLD_TIME 1342 - R_bidirectional := TRUE, if the processed message is 1343 an RREP, otherwise FALSE. 1345 - R_local_iface_addr := the address of the LOADng 1346 Interface through which the message was received. 1348 2. Otherwise, if the message is an RREQ, it is not processed 1349 further and is not considered for forwarding. If it is an 1350 RREP and if RREP.ackrequired is set, an RREP_ACK message MUST 1351 be sent to the previous-hop, according to Section 15.2. The 1352 RREP is not considered for forwarding. 1354 12. Route Requests (RREQs) 1356 Route Requests (RREQs) are generated by a LOADng Router when it has 1357 data packets to deliver to a destination, where the data packet 1358 source is local to that LOADng Router (i.e., is an address in the 1359 Local Interface Set or Destination Address Set of that LOADng 1360 Router), but for which the LOADng router has no matching tuple in the 1361 Routing Set. Furthermore, if there is a matching tuple in the Routing 1362 Set with the R_bidirectional set to FALSE, and the parameter 1363 USE_BIDIRECTIONAL_LINK_ONLY of the interface with 1364 R_local_iface_address equals TRUE, an RREQ MUST be generated. 1366 After originating an RREQ, a LOADng Router waits for a corresponding 1367 RREP. If no such RREP is received within 2*NET_TRAVERSAL_TIME 1368 milliseconds, the LOADng Router MAY issue a new RREQ for the sought 1369 destination (with an incremented seq_num) up to a maximum of 1370 RREQ_RETRIES times. Two consequent RREQs generated on an interface 1371 of a LOADng Router SHOULD be separated at least RREQ_MIN_INTERVAL. 1373 12.1. RREQ Generation 1375 An RREQ message is generated according to Section 6 with the 1376 following content: 1378 o RREQ.addr-length set to the length of the address, as specified in 1379 Section 6; 1381 o RREQ.metric-type set to the desired metric type; 1383 o RREQ.route-metric := 0. 1385 o RREQ.seq-num set to the next unused sequence number, maintained by 1386 this LOADng Router; 1388 o RREQ.hop-count := 0; 1390 o RREQ.hop-limit := MAX_HOP_LIMIT; 1392 o RREQ.destination := the address to which a route is sought; 1394 o RREQ.originator := one address of the LOADng Interface of the 1395 LOADng Router that generates the RREQ. If the LOADng Router is 1396 generating RREQ on behalf of a host connected to this LOADng 1397 Router, the source address of the data packet, generated by that 1398 host, is used; 1400 12.2. RREQ Processing 1402 The variables hop-count and hop-limit have been updated in 1403 Section 11.2 (when processing the message) and are used in this 1404 section. On receiving an RREQ message, a LOADng Router MUST process 1405 the message according to this section: 1407 1. If the message is invalid for processing, as defined in 1408 Section 11.1, the message MUST be discarded without further 1409 processing. The message is not considered for forwarding. 1411 2. Otherwise, the message is processed according to Section 11.2. 1413 3. If RREQ.destination is listed in I_local_iface_addr_list of any 1414 Local Interface Tuple, or corresponds to D_address of any 1415 Destination Address Tuple of this LOADng Router, the RREP 1416 generation process in Section 13.1 MUST be applied. The RREQ is 1417 not considered for forwarding. 1419 4. Otherwise, if hop-count is less than MAX_HOP_COUNT and hop-limit 1420 is greater than 0, the message is considered for forwarding 1421 according to Section 12.3. 1423 12.3. RREQ Forwarding 1425 The variables used-metric type, hop-count, hop-limit and route-metric 1426 have been updated in Section 11.2 (when processing the message) and 1427 are used in this section to update the content of the message to be 1428 forwarded. An RREQ, considered for forwarding, MUST be updated as 1429 follows, prior to it being transmitted: 1431 1. RREQ.metric-type := used-metric-type (as set in Section 11.2) 1433 2. RREQ.route-metric := route-metric (as set in Section 11.2) 1435 3. RREQ.hop-count := hop-count (as set in Section 11.2) 1437 4. RREQ.hop-limit := hop-limit (as set in Section 11.2) 1439 An RREQ MUST be forwarded according to the flooding operation, 1440 specified for the network. This MAY be by way of classic flooding, a 1441 reduced relay set mechanism such as [RFC6621], or any other 1442 information diffusion mechanism such as [RFC6206]. Care must be 1443 taken that NET_TRAVERSAL_TIME is chosen so as to accommodate for the 1444 maximum time that may take for an RREQ to traverse the network, 1445 accounting for in-router delays incurring due to or imposed by such 1446 algorithms. 1448 12.4. RREQ Transmission 1450 RREQs, whether initially generated or forwarded, are sent to all 1451 neighbor LOADng Routers through all interfaces in the Local Interface 1452 Set. 1454 When an RREQ is transmitted, all receiving LOADng Routers will 1455 process the RREQ message and as a consequence consider the RREQ 1456 message for forwarding at the same, or at almost the same, time. If 1457 using data link and physical layers that are subject to packet loss 1458 due to collisions, such RREQ messages SHOULD be jittered as described 1459 in [RFC5148], using RREQ_MAX_JITTER, in order to avoid such losses. 1461 13. Route Replies (RREPs) 1463 Route Replies (RREPs) are generated by a LOADng Router in response to 1464 an RREQ (henceforth denoted "corresponding RREQ"), and are sent by 1465 the LOADng Router which has, in either its Destination Address Set or 1466 in its Local Interface Set, the address from RREQ.destination. RREPs 1467 are sent, hop by hop, in unicast towards the originator of the RREQ, 1468 in response to which the RREP was generated, along the Reverse Route 1469 installed by that RREQ. A LOADng Router, upon forwarding an RREP, 1470 installs the Forward Route towards the RREP.destination. 1472 Thus, with forwarding of RREQs installing the Reverse Route and 1473 forwarding of RREPs installing the Forward Route, bi-directional 1474 routes are provided between the RREQ.originator and RREQ.destination. 1476 13.1. RREP Generation 1478 At least one RREP MUST be generated in response to a (set of) 1479 received RREQ messages with identical (RREQ.originator, RREQ.seq- 1480 num). An RREP MAY be generated immediately as a response to each 1481 RREQ processed, in order to provide shortest possible route 1482 establishment delays, or MAY be generated after a certain delay after 1483 the arrival of the first RREQ, in order to use the "best" received 1484 RREQ (e.g., received over the lowest-cost route) but at the expense 1485 of longer route establishment delays. A LOADng Router MAY generate 1486 further RREPs for subsequent RREQs received with the same 1487 (RREQ.originator, RREQ.seq-num) pairs, if these indicate a better 1488 route, at the expense of additional control traffic being generated. 1489 In all cases, however, the content of an RREP is as follows: 1491 o RREP.addr-length set to the length of the address, as specified in 1492 Section 6; 1494 o RREP.seq-num set to the next unused sequence number, maintained by 1495 this LOADng Router; 1497 o RREP.metric-type set to the same value as the RREQ.metric-type in 1498 the corresponding RREQ if the metric type is known to the router. 1499 Otherwise, RREP.metric-type is set to HOP_COUNT; 1501 o RREP.route-metric := 0 1503 o RREP.hop-count := 0; 1505 o RREP.hop-limit := MAX_HOP_LIMIT; 1507 o RREP.destination := the address to which this RREP message is to 1508 be sent; this corresponds to the RREQ.originator from the RREQ 1509 message, in response to which this RREP message is generated; 1511 o RREP.originator := the address of the LOADng Router, generating 1512 the RREP. If the LOADng Router is generating an RREP on behalf of 1513 the hosts connected to it, or on behalf of one of the addresses 1514 contained in the LOADng Routers Destination Address Set, the host 1515 address is used. 1517 The RREP that is generated is transmitted according to Section 13.4. 1519 13.2. RREP Processing 1521 The variables hop-count and hop-limit have been updated in 1522 Section 11.2 (when processing the message) and are used in this 1523 section. On receiving an RREP message, a LOADng Router MUST process 1524 the message according to this section: 1526 1. If the message is invalid for processing, as defined in 1527 Section 11.1, the message MUST be discarded without further 1528 processing. The message is not considered for forwarding. 1530 2. Otherwise, the message is processed according to Section 11.2. 1532 3. If RREP.ackrequired is set, an RREP_ACK message MUST be sent to 1533 the previous-hop, according to Section 15.2. 1535 4. If hop-count is equal to MAX_HOP_COUNT or hop-limit is equal to 1536 0, the message is not considered for forwarding. 1538 5. Otherwise, if RREP.destination is not listed in 1539 I_local_iface_addr_list of any Local Interface Tuple and does not 1540 correspond to D_address of any Destination Address Tuple of this 1541 LOADng Router, the RREP message is considered for forwarding 1542 according to Section 13.3. 1544 13.3. RREP Forwarding 1546 The variables used-metric type, hop-count, hop-limit and route-metric 1547 have been updated in Section 11.2 (when processing the message) and 1548 are used in this section to update the content of the message to be 1549 forwarded. An RREP message, considered for forwarding, MUST be 1550 updated as follows, prior to it being transmitted: 1552 1. RREP.metric-type := used-metric-type (as set in Section 11.2) 1554 2. RREP.route-metric := route-metric (as set in Section 11.2) 1556 3. RREP.hop-count := hop-count (as set in Section 11.2) 1558 4. RREP.hop-limit := hop-limit (as set in Section 11.2) 1560 5. The RREP is transmitted, according to Section 13.4. 1562 The RREP message is then unicast to the next hop towards 1563 RREP.destination. 1565 13.4. RREP Transmission 1567 An RREP is, ultimately, destined for the LOADng Router which has the 1568 address listed in the RREP.destination field in either of its Local 1569 Interface Set, or in its Destination Address Set. The RREP is 1570 forwarded in unicast towards that LOADng Router. The RREP MUST, 1571 however, be transmitted so as to allow it to be processed in each 1572 intermediate LOADng Router to: 1574 o Install proper forward routes; AND 1576 o Permit that RREP.hop-count be updated to reflect the route. 1578 RREP Transmission is accomplished by the following procedure: 1580 1. Find the Routing Tuple (henceforth, the "Matching Routing Tuple") 1581 in the Routing Set, where: 1583 * R_dest_addr = RREP.destination 1585 2. Find the Local Interface Tuple (henceforth, "Matching Interface 1586 Tuple), where: 1588 * I_local_iface_addr_list contains R_local_iface_addr from the 1589 Matching Routing Tuple 1591 3. If RREP_ACK_REQUIRED is set for the LOADng Interface, identified 1592 by the Matching Interface Tuple: 1594 * Create a new Pending Acknowledgment Tuple with: 1596 + P_next_hop := R_next_addr from the Matching Routing Tuple 1598 + P_originator := RREP.originator 1600 + P_seq_num := RREP.seq-num 1602 + P_ack_received := FALSE 1604 + P_ack_timeout := current_time + RREP_ACK_TIMEOUT 1606 * RREP.ackrequired := TRUE 1608 4. Otherwise: 1610 * RREP.ackrequired := FALSE 1612 5. The RREP is transmitted over the LOADng Interface, identified by 1613 the Matching Interface Tuple to the neighbor LOADng Router, 1614 identified by R_next_addr from the Matching Routing Tuple. 1616 When a Pending Acknowledgement Tuple expires, if P_ack_received = 1617 FALSE, the P_next_hop address MUST be blacklisted by creating a 1618 Blacklisted Neighbor Tuple according to Section 7.3 1620 14. Route Errors (RERRs) 1622 If a LOADng Router fails to deliver a data packet to a next hop or a 1623 destination, and if neither the source nor destination address of 1624 that data packet belongs to the Destination Address Set of that 1625 LOADng Router, it MUST generate a Route Error (RERR). This RERR MUST 1626 be sent along the Reverse Route towards the source of the data packet 1627 for which delivery was unsuccessful (to the last LOADng Router along 1628 the Reverse Route, if the data packet was originated by a host behind 1629 that LOADng Router). 1631 The following definition is used in this section: 1633 o "EXPIRED" indicates that a timer is set to a value clearly 1634 preceding the current time (e.g., current time - 1). 1636 14.1. Identifying Invalid RERR Messages 1638 A received RERR is invalid, and MUST be discarded without further 1639 processing, if any of the following conditions are true: 1641 o The address length specified by this message (i.e., RERR.addr- 1642 length + 1) differs from the length of the address(es) of this 1643 LOADng Router. 1645 o The address contained in RERR.originator is an address of this 1646 LOADng Router. 1648 A LOADng Router MAY recognize additional reasons, external to this 1649 specification, for identifying that an RERR message is invalid for 1650 processing, e.g., to allow a security protocol to perform 1651 verification of signatures and prevent processing of unverifiable 1652 RERR message by this protocol. 1654 14.2. RERR Generation 1656 A packet with an RERR message is generated by the LOADng Router, 1657 detecting the link breakage, with the following content: 1659 o RERR.error-code := the error code corresponding to the event 1660 causing the RERR to be generated, from among those recorded in 1661 Table 1; 1663 o RERR.addr-length := the length of the address, as specified in 1664 Section 6; 1666 o RERR.unreachableAddress := the destination address from the 1667 unsuccessfully delivered data packet. 1669 o RERR.originator := one address of the LOADng Interface of the 1670 LOADng Router that generates the RERR. 1672 o RERR.destination := the source address from the unsuccessfully 1673 delivered data packet, towards which the RERR is to be sent. 1675 o RERR.hop-limit := MAX_HOP_LIMIT; 1677 14.3. RERR Processing 1679 For the purpose of the processing description below, the following 1680 additional notation is used: 1682 previous-hop is the address of the LOADng Router, from which the 1683 RERR was received. 1685 hop-limit is a variable, representing the hop-limit, as included in 1686 the received RERR message. 1688 Upon receiving an RERR, a LOADng Router MUST perform the following 1689 steps: 1691 1. If the RERR is invalid for processing, as defined in 1692 Section 14.1, the RERR MUST be discarded without further 1693 processing. The message is not considered for forwarding. 1695 2. Included TLVs are processed/updated according to their 1696 specification. 1698 3. Set the variable hop-limit to RERR.hop-limit - 1. 1700 4. Find the Routing Tuple (henceforth "matching Routing Tuple") in 1701 the Routing Set where: 1703 * R_dest_addr = RERR.unreachableAddress 1705 * R_next_addr = previous-hop 1707 5. If no matching Routing Tuple is found, the RERR is not processed 1708 further, but is considered for forwarding, as specified in 1709 Section 14.4. 1711 6. Otherwise, if one matching Routing Tuple is found: 1713 1. If RERR.errorcode is 0 ("No available route", as specified in 1714 Section 19.1), this matching Routing Tuple is updated as 1715 follows: 1717 + R_valid_time := EXPIRED 1719 Extensions to this specification MAY define additional error 1720 codes in the Error Code IANA registry, and MAY insert 1721 processing rules here for RERRs with that error code. 1723 2. If hop-limit is greater than 0, the RERR message is 1724 considered for forwarding, as specified in Section 14.4 1726 14.4. RERR Forwarding 1728 An RERR is, ultimately, destined for the LOADng Router which has, in 1729 either its Destination Address Set or in its Local Interface Set, the 1730 address from RERR.originator. 1732 An RERR, considered for forwarding is therefore processed as follows: 1734 1. RERR.hop-limit := hop-limit (as set in Section 14.3) 1736 2. Find the Destination Address Tuple (henceforth, matching 1737 Destination Address Tuple) in the Destination Address Set where: 1739 * D_address = RERR.destination 1741 3. If one or more matching Destination Address Tuples are found, the 1742 RERR message is discarded and not retransmitted, as it has 1743 reached the final destination. 1745 4. Otherwise, find the Local Interface Tuple (henceforth, matching 1746 Local Interface Tuple) in the Local Interface Set where: 1748 * I_local_iface_addr_list contains RERR.destination. 1750 5. If a matching Local Interface Tuple is found, the RERR message is 1751 discarded and not retransmitted, as it has reached the final 1752 destination. 1754 6. Otherwise, if no matching Destination Address Tuples or Local 1755 Interface Tuples are found, the RERR message is transmitted 1756 according to Section 14.5. 1758 14.5. RERR Transmission 1760 An RERR is, ultimately, destined for the LOADng Router which has the 1761 address listed in the RERR.destination field in either of its Local 1762 Interface Set, or in its Destination Address Set. The RERR is 1763 forwarded in unicast towards that LOADng Router. The RERR MUST, 1764 however, be transmitted so as to allow it to be processed in each 1765 intermediate LOADng Router to: 1767 o Allow intermediate LOADng Routers to update their Routing Sets, 1768 i.e., remove tuples for this destination. 1770 RERR Transmission is accomplished by the following procedure: 1772 1. Find the Routing Tuple (henceforth, the "Matching Routing Tuple") 1773 in the Routing Set, where: 1775 * R_dest_addr = RERR.destination 1777 2. Find the Local Interface Tuple (henceforth, "Matching Interface 1778 Tuple), where: 1780 * I_local_iface_addr_list contains R_local_iface_addr from the 1781 Matching Routing Tuple 1783 3. The RERR is transmitted over the LOADng Interface, identified by 1784 the Matching Interface Tuple to the neighbor LOADng Router, 1785 identified by R_next_addr from the Matching Routing Tuple. 1787 15. Route Reply Acknowledgments (RREP_ACKs) 1789 A LOADng Router MUST signal in a transmitted RREP that it is 1790 expecting an RREP_ACK, by setting RREP.ackrequired flag in the RREP. 1791 When doing so, the LOADng Router MUST also add a tuple (P_next_hop, 1792 P_originator, P_seq_num, P_ack_timeout) to the Pending Acknowledgment 1793 Set, and set P_ack_timeout to current_time + RREP_ACK_TIMEOUT, as 1794 described in Section 13.4. 1796 The following definition is used in this section: 1798 o "EXPIRED" indicates that a timer is set to a value clearly 1799 preceding the current time (e.g., current_time - 1). 1801 15.1. Identifying Invalid RREP_ACK Messages 1803 A received RREP_ACK is invalid, and MUST be discarded without further 1804 processing, if any of the following conditions are true: 1806 o The address length specified by this message (i.e., RREP_ACK.addr- 1807 length + 1) differs from the length of the address(es) of this 1808 LOADng Router. 1810 A LOADng Router MAY recognize additional reasons, external to this 1811 specification, for identifying that an RREP_ACK message is invalid 1812 for processing, e.g., to allow a security protocol to perform 1813 verification of signatures and prevent processing of unverifiable 1814 RREP_ACK message by this protocol. 1816 15.2. RREP_ACK Generation 1818 Upon reception of an RREP message with the RREP.ackrequired flag set, 1819 a LOADng Router MUST generate at least one RREP_ACK and send this 1820 RREP_ACK in unicast to the neighbor which originated the RREP. 1822 An RREP_ACK message is generated by a LOADng Router with the 1823 following content: 1825 o RREP_ACK.addr-length := the length of the address, as specified in 1826 Section 6; 1828 o RREP_ACK.seq-num := the value of the RREP.seq-num field of the 1829 received RREP; 1831 o RREP_ACK.destination := RREP.originator of the received RREP. 1833 15.3. RREP_ACK Processing 1835 On receiving an RREP_ACK from a LOADng neighbor LOADng Router, a 1836 LOADng Router MUST do the following: 1838 1. If the RREP_ACK is invalid for processing, as defined in 1839 Section 15.1, the RREP_ACK MUST be discarded without further 1840 processing. 1842 2. Find the Routing Tuple (henceforth, Matching Routing Tuple) 1843 where: 1845 * R_dest_addr = previous-hop; 1847 The Matching Routing Tuple is updated as follows: 1849 * R_bidirectional := TRUE 1851 3. If a Pending Acknowledgement Tuple (henceforth, Matching Pending 1852 Acknowledgement Tuple) exists, where: 1854 * P_next_hop is the address of the LOADng Router from which the 1855 RREP_ACK was received. 1857 * P_originator = RREP_ACK.destination 1859 * P_seq_num = RREP_ACK.seq-num 1861 Then the RREP has been acknowledged. The Matching Pending 1862 Acknowledgement Tuple is updated as follows: 1864 * P_ack_received := TRUE 1866 * P_ack_timeout := EXPIRED 1868 15.4. RREP_ACK Forwarding 1870 An RREP_ACK is intended only for a specific direct neighbor, and MUST 1871 NOT be forwarded. 1873 15.5. RREP_ACK Transmission 1875 An RREP_ACK is transmitted, in unicast, to the neighbor LOADng Router 1876 from which the RREP was received. 1878 16. Metrics 1880 This specification enables the use of different metrics for when 1881 calculating route metrics. 1883 Metrics as defined in LOADng are additive, and the routes that are to 1884 be created are those with the minimum sum of the metrics along that 1885 route. 1887 16.1. Specifying New Metrics 1889 When defining a metric, the following considerations SHOULD be taken 1890 into consideration: 1892 o The definition of the R_metric field, as well as the value of 1893 MAX_DIST. 1895 17. Implementation Status 1897 This section records the status of known implementations of the 1898 protocol defined by this specification at the time of posting of this 1899 Internet-Draft, and based on a proposal described in [RFC6982]. The 1900 description of implementations in this section is intended to assist 1901 the IETF in its decision processes in progressing drafts to RFCs. 1902 Please note that the listing of any individual implementation here 1903 does not imply endorsement by the IETF. Furthermore, no effort has 1904 been spent to verify the information presented here that was supplied 1905 by IETF contributors. This is not intended as, and must not be 1906 construed to be, a catalog of available implementations or their 1907 features. Readers are advised to note that other implementations may 1908 exist. 1910 According to [RFC6982], "this will allow reviewers and working groups 1911 to assign due consideration to documents that have the benefit of 1912 running code, which may serve as evidence of valuable experimentation 1913 and feedback that have made the implemented protocols more mature. 1914 It is up to the individual working groups to use this information as 1915 they see fit". 1917 In the following subsections, each publicly-known implementation of 1918 LOADng is listed. There are currently four publicly-known 1919 implementations of LOADng. These have been tested for 1920 interoperability in at least three interop events, as described in 1921 [I-D.loadng-interop-report]. 1923 17.1. Implementation of Ecole Polytechnique 1925 This implementation is developed by the Networking Group at Ecole 1926 Polytechnique. It can run over real network interfaces, and can also 1927 be integrated with the network simulator NS2. It is a Java 1928 implementation, and can be used on any platform that includes a Java 1929 virtual machine. 1931 The implementation has been maintained since the 00 revision of 1932 LOADng, and is quite mature. It has been tested in interoperability 1933 events with other implementations (as described in 1934 [I-D.loadng-interop-report]), and in large-scale network simulations 1935 with up to 1000 routers. There have been several scientific 1936 publications based on this implementation, such as [IEEE_VTC2012] 1937 [IEEE_WiCom2012] [IEEE_ICWITS2012]. 1939 All the protocol functions of this revision (-08) of the 1940 specification, including RREQ/RREP/RREP-ACK/RERR generation, 1941 processing, forwarding and transmission, as well as blacklisting, are 1942 implemented. 1944 The latest implementation conforms to the LOADng-07 revision as 1945 documented in this specification. This software is currently closed 1946 source. 1948 17.2. Implementation of Fujitsu Laboratories of America 1950 This implementation is developed by Fujitsu Laboratories of America. 1951 It is a Java implementation, structured in multiple separate modules, 1952 notably a [RFC5444] generator and parser, and integration module in 1953 the network simulator Ns-2, a kernel module for integrating the 1954 implementation in a Linux kernel (not yet completed), and the 1955 protocol core. 1957 The implementation is mature and has been tested both in 1958 interoperability tests with other implementations 1959 [I-D.loadng-interop-report], as well as large-scale simulations with 1960 hundreds of routers. The implementation is not currently used in 1961 deployments. The implementation supports all LOADng functions (RREQ, 1962 RREP, RREP-ACK generation, processing, forwarding and transmission), 1963 and conforms to the LOADng-06 specification. The software is 1964 currently closed source. 1966 17.3. Implementation of Hitachi Yokohama Research Laboratory - 1 1968 This implementation is developed by Hitachi, Ltd. Yokohama Research 1969 Laboratory. It can run over real embedded devices. It is a C 1970 implementation. The implementation is maintained since the 00 1971 revision of LOADng. It was tested in the first interoperability 1972 event with other implementations, as described in 1973 [I-D.loadng-interop-report]. 1975 This implementation is alpha version, mainly for performance test and 1976 evaluations. All the functions of the protocol, including RREQ/RREP/ 1977 RREP-ACK/RERR generation, processing, forwarding and transmission, 1978 blacklisting, have been implemented. Also a RFC5444 generator and 1979 parser have been implemented. The latest implementation conforms to 1980 LOADng-06 revision. This software is currently closed source. 1982 17.4. Implementation of Hitachi Yokohama Research Laboratory -2 1984 This implementation is developed by Hitachi, Ltd. Yokohama Research 1985 Laboratory. It can run over real network interface, and can also be 1986 integrated with network simulator NS2. It is a C++ implementation. 1988 The implementation is mature and maintained since the 00 revision of 1989 LOADng. It was tested in large-scale network simulations up to 500 1990 routers. 1992 All the functions of the protocol, including RREQ/RREP/RREP-ACK/RERR 1993 generation, processing, forwarding and transmission, blacklisting, 1994 have been implemented. The latest implementation conforms to the 1995 LOADng-05 revision. This software is currently closed source. 1997 18. Security Considerations 1999 Currently, this protocol does not specify any special security 2000 measures. As a reactive routing protocol, this protocol is a 2001 potential target for various attacks. Various possible 2002 vulnerabilities are discussed in this section. 2004 By way of (i) enabling inclusion of TLVs and (ii) permitting that 2005 LOADng recognizes external reasons for rejecting RREQ, RREP, RREP_ACK 2006 and RERR messages, development of security measures, appropriate for 2007 a given deployment, is however supported. This architecture is a 2008 result of the observation that with respect to security in LOADng 2009 routed networks, "one size rarely fits all". This, as LOADng 2010 deployment domains have varying security requirements ranging from 2011 "unbreakable" to "virtually none", depending on, e.g., physical 2012 access to the network, or on security available on other layers. The 2013 virtue of this approach is that LOADng routing protocol 2014 specifications (and implementations) can remain "generic", with 2015 extensions providing proper deployment-domain specific security 2016 mechanisms. 2018 18.1. Confidentiality 2020 This protocol floods Route Requests (RREQs) to all the LOADng Routers 2021 in the network, when there is traffic to deliver to a given 2022 destination. Hence, if used in an unprotected network (such as an 2023 unprotected wireless network): 2025 o Part of the network topology is revealed to anyone who listens, 2026 specifically (i) the identity (and existence) of the source LOADng 2027 Router; (ii) the identity of the destination; and (iii) the fact 2028 that a path exists between the source LOADng Router and the LOADng 2029 Router from which the RREQ was received. 2031 o The network traffic patterns are revealed to anyone who listens to 2032 the LOADng control traffic, specifically which pairs of devices 2033 communicate. If, for example, a majority of traffic originates 2034 from or terminates in a specific LOADng Router, this may indicate 2035 that this LOADng Router has a central role in the network. 2037 This protocol also unicasts Route Replies (RREPs) from the 2038 destination of an RREQ to the originator of that same RREQ. Hence, 2039 if used in an unprotected network (such as an unprotected wireless 2040 network): 2042 o Part of the network topology is revealed to anyone who is near or 2043 on the unicast path of the RREP (such as within radio range of 2044 LOADng Routers on the unicast path in an unprotected wireless 2045 network), specifically that a path from the originator (of the 2046 RREP) to the destination (of the RREP) exists. 2048 Finally, this protocol unicasts Route Errors (RERRs) when an 2049 intermediate LOADng Router detects that the path from a source to a 2050 destination is no longer available. Hence, if used in an unprotected 2051 network (such as an unprotected wireless network): 2053 o A disruption of the network topology is revealed to anyone who is 2054 near or on the unicast path of the RERR (such as within radio 2055 range of LOADng Routers on the unicast path in an unprotected 2056 wireless network), specifically that a path from the originator 2057 (of the RERR) to the destination (of the RERR) has been disrupted. 2059 This protocol signaling behavior enables, for example, an attacker to 2060 identify central devices in the network (by monitoring RREQs) so as 2061 to target an attack, and (by way of monitoring RERRs) to measure the 2062 success of an attack. 2064 18.2. Integrity 2066 A LOADng Router injects topological information into the network by 2067 way of transmitting RREQ and RREP messages, and removes installed 2068 topological information by way of transmitting RERR messages. If 2069 some LOADng Routers for some reason, malice or malfunction, inject 2070 invalid control traffic, network integrity may be compromised. 2071 Therefore, message authentication is recommended. 2073 Different such situations may occur, for instance: 2075 1. A LOADng Router generates RREQ messages, pretending to be another 2076 LOADng Router; 2078 2. A LOADng Router generates RREP messages, pretending to be another 2079 LOADng Router; 2081 3. A LOADng Router generates RERR messages, pretending to be another 2082 LOADng Router; 2084 4. A LOADng Router generates RERR messages, indicating that a link 2085 on a path to a destination is broken; 2087 5. A LOADng Router forwards altered control messages; 2089 6. A LOADng Router does not forward control messages; 2091 7. A LOADng Router forwards RREPs and RREQs, but does not forward 2092 unicast data traffic; 2094 8. A LOADng Router "replays" previously recorded control messages 2095 from another LOADng Router. 2097 Authentication of the originator LOADng Router for control messages 2098 (for situations 1, 2 and 3) and on individual links announced in the 2099 control message (for situation 2 and 4) may be used as a 2100 countermeasure. However, to prevent routers from repeating old (and 2101 correctly authenticated) information (situation 8), temporal 2102 information is required, requiring a router to positively identify 2103 such a delayed message. 2105 In general, integrity check values and other required security 2106 information may be transmitted as a separate Message Type, or 2107 signatures and security information may be transmitted within the 2108 control messages, using the TLV mechanism. Either option permits 2109 that "secured" and "unsecured" routers can coexist in the same 2110 network, if desired. 2112 Specifically, if LOADng is used on the IP layer, the authenticity of 2113 entire control messages can be established through employing IPsec 2114 authentication headers, whereas authenticity of individual links 2115 (situations 2 and 4) require additional security information to be 2116 distributed. 2118 18.3. Channel Jamming and State Explosion 2120 A reactive protocol, LOADng control messages are generated in 2121 response to network events. For RREQs, such an event is that a data 2122 packet is present in a router which does not have a route to the 2123 destination of the data packet, or that the router receives an RERR 2124 message, invalidating a route. For RREPs, such an event is the 2125 receipt of an RREQ corresponding to a destination owned by the LOADng 2126 Router. A router that forwards an RREQ records the reverse route 2127 state. A router that forwards an RREP records the forward route 2128 state. If some routers for some reason, malice or malfunction, 2129 generates excessive RREQ, RREP or RERRs, otherwise correctly 2130 functioning LOADng Routers may fall victim to either "indirect 2131 jamming" (being "tricked" into generating excessive control traffic) 2132 or an explosion in the state necessary for maintaining protocol state 2133 (potentially, exhausting the available memory resources). 2135 Different such situations may occur, for instance: 2137 1. A router, within a short time, generates RREQs to an excessive 2138 amount of destinations in the network (possibly all destinations, 2139 possibly even destinations not present in the network), causing 2140 intermediate routers to allocate state for the forward routes. 2142 2. A router generates excessively frequent RREQs to the same 2143 (existing) destination, causing the corresponding LOADng Router 2144 to generate excessive RREPs. 2146 3. A router generates RERRs for a destination to the source LOADng 2147 Router for traffic to that destination, causing that LOADng 2148 Router to flood renewed RREQs. 2150 For situation 1, the state required for recording forward and/or 2151 reverse routes may exceed the memory available in the intermediate 2152 LOADng Routers - to the detriment of being able of recording state 2153 for other routes. This, in particular, if a LOADng Router generates 2154 RREQs for destinations "not present in the network". 2156 A router which, within a short time, generates RREPs to an excessive 2157 amount of destinations in the network (possibly all destinations, 2158 possibly even destinations not present in the network), will not have 2159 the same network-wide effect: an intermediate router receiving an 2160 RREP for a destination for which no reverse route exists will neither 2161 attempt forwarding the RREP nor allocate state for the forward route. 2163 For situations 1, 2, and 3, a possible countermeasure is to rate- 2164 limit the number of control messages that a LOADng Router forwards on 2165 behalf of another LOADng Router. Such a rate limit should take into 2166 consideration the expected normal traffic for a given LOADng 2167 deployment. Authentication may furthermore be used so as to prohibit 2168 a LOADng Router from forwarding control traffic from any non- 2169 authenticated router (with the assumption being that an authenticated 2170 router is not expected to exhibit such rogue behavior). 2172 18.4. Interaction with External Routing Domains 2174 This protocol does provide a basic mechanism for a LOADng Router to 2175 be able to discover routes to external routing domains: a LOADng 2176 Router configured to "own" a given set of addresses will respond to 2177 RREQs for destinations with these addresses, and can - by whatever 2178 protocols governing the routing domain wherein these addresses exist 2179 - provide paths to these addresses. 2181 When operating routers connecting a LOADng domain to an external 2182 routing domain, destinations inside the LOADng domain can be injected 2183 into the external domain, if the routing protocol governing that 2184 domain so permits. Care MUST be taken to not allow potentially 2185 insecure and untrustworthy information to be injected into the 2186 external domain. 2188 In case LOADng is used on the IP layer, a RECOMMENDED way of 2189 extending connectivity from an external routing domain to a LOADng 2190 routed domain is to assign an IP prefix (under the authority of the 2191 routers/gateways connecting the LOADng routing domain with the 2192 external routing domain) exclusively to that LOADng routing domain, 2193 and to statically configure gateways to advertise routes for that 2194 prefix into the external domain. Within the LOADng domain, gateways 2195 SHOULD only generate RREPs for destinations which are not part of 2196 that prefix; this is in particularly important if a gateway otherwise 2197 provides connectivity to "a default route". 2199 19. LOADng Specific IANA Considerations 2201 19.1. Error Codes 2203 IANA is requested to create a new registry for Error Codes, with 2204 initial assignments and allocation policies as specified in Table 1. 2206 +---------+--------------------+-------------------+ 2207 | Code | Description | Allocation Policy | 2208 +---------+--------------------+-------------------+ 2209 | 0 | No available route | | 2210 | 1-251 | Unassigned | Expert Review | 2211 | 252-255 | Unassigned | Experimental Use | 2212 +---------+--------------------+-------------------+ 2214 Table 1: Error Codes 2216 20. Contributors 2218 This specification is the result of the joint efforts of the 2219 following contributors - listed alphabetically. 2221 o Alberto Camacho, LIX, France, 2223 o Thomas Heide Clausen, LIX, France, 2225 o Axel Colin de Verdiere, LIX, France, 2227 o Kenneth Garey, Maxim Integrated Products, USA, 2228 2230 o Ulrich Herberg, Fujitsu Laboratories of America, USA 2231 2233 o Yuichi Igarashi, Hitachi Ltd, Yokohama Research Laboratory, Japan, 2234 2236 o Cedric Lavenu, EDF R&D, France, 2238 o Afshin Niktash, Maxim Integrated Products, USA, 2239 2241 o Charles E. Perkins, Futurewei Inc, USA, 2243 o Hiroki Satoh, Hitachi Ltd, Yokohama Research Laboratory, Japan, 2244 2246 o Thierry Lys, ERDF, France, 2248 o Jiazi Yi, LIX, France, 2250 21. Acknowledgments 2252 The authors would like to acknowledge the team behind AODV [RFC3561]. 2253 The authors would also like to acknowledge the efforts of K. Kim 2254 (picosNet Corp/Ajou University), S. Daniel Park (Samsung 2255 Electronics), G. Montenegro (Microsoft Corporation), S. Yoo (Ajou 2256 University) and N. Kushalnagar (Intel Corp.) for their work on an 2257 initial version of a specification, from which this protocol is 2258 derived. 2260 22. References 2262 22.1. Normative References 2264 [RFC2119] Bradner, S., "Key words for use in RFCs 2265 to Indicate Requirement Levels", 2266 RFC 2119, BCP 14, March 1997. 2268 [RFC5444] Clausen, T., Dean, J., Dearlove, C., and 2269 C. Adjih, "Generalized Mobile Ad Hoc 2270 Network (MANET) Packet/Message Format", 2271 RFC 5444, February 2009. 2273 [RFC5498] Chakeres, I., "IANA Allocations for 2274 Mobile Ad Hoc Network (MANET) 2275 Protocols", RFC 5498, March 2009. 2277 22.2. Informative References 2279 [RFC6982] Sheffer, Y. and A. Farrel, "Improving 2280 Awareness of Running Code: The 2281 Implementation Status Section", 2282 RFC 6982, July 2013. 2284 [I-D.loadng-interop-report] Clausen, T., Camacho, A., Yi, J., Colin 2285 de Verdiere, A., Igarashi, Y., Satoh, 2286 H., Morii, Y., Heropberg, U., and C. 2287 Lavenu, "Interoperability Report for the 2288 Lightweight On-demand Ad hoc Distance- 2289 vector Routing Protocol - Next 2290 Generation (LOADng)", draft-lavenu-lln- 2291 loadng-interoperability-report-04 (work 2292 in progress), December 2012. 2294 [RFC3561] Perkins, C., Belding-Royer, E., and S. 2295 Das, "Ad hoc On-Demand Distance Vector 2296 (AODV) Routing", RFC 3561, July 2003. 2298 [RFC4861] Narten, T., Nordmark, E., Simpson, W., 2299 and H. Soliman, "Neighbor Discovery for 2300 IP version 6 (IPv6)", RFC 4861, 2301 September 2007. 2303 [RFC4944] Montenegro, G., Kushalnagar, N., Hui, 2304 J., and D. Culler, "Transmission of IPv6 2305 Packets over IEEE 802.15.4 Networks", 2306 RFC 4944, September 2007. 2308 [RFC5148] Clausen, T., Dearlove, C., and B. 2309 Adamson, "Jitter Considerations in 2310 Mobile Ad Hoc Networks (MANETs)", 2311 RFC 5148, February 2008. 2313 [RFC6130] Clausen, T., Dean, J., and C. Dearlove, 2314 "MANET Neighborhood Discovery Protocol 2315 (NHDP)", RFC 6130, April 2011. 2317 [RFC6206] Levis, P., Clausen, T., Gnawali, O., and 2318 J. Ko, "The Trickle Algorithm", 2319 RFC 6206, March 2011. 2321 [RFC6621] Macker, J., "Simplified Multicast 2322 Forwarding", RFC 6621, May 2012. 2324 [EUI64] IEEE, "Guidelines for 64-bit Global 2325 Identifier (EUI-64) Registration 2326 Authority". 2328 [IEEE754-2008] IEEE, "IEEE 754-2008: IEEE Standard for 2329 Floating-Point Arithmetic", 2008. 2331 [IEEE_VTC2012] Clausen, T., Yi, J., and A. Coline de 2332 Verdiere, "Towards AODV Version 2", 2333 Proceedings of IEEE VTC 2012 Fall, IEEE 2334 76th Vehicular Technology Conference, 2335 2012. 2337 [IEEE_WiCom2012] Yi, J., Clausen, T., and A. Coline de 2338 Verdiere, "Efficient Data Acquisition in 2339 Sensor Networks:Introducing (the) LOADng 2340 Collection Tree Protocol", 2341 Proceedings of IEEE WiCom 2012, The 8th 2342 IEEE International Conference on 2343 Wireless Communications, Networking and 2344 Mobile Computing., 2012. 2346 [IEEE_ICWITS2012] Yi, J., Clausen, T., and A. Bas, "Smart 2347 Route Request for On-demand Route 2348 Discovery in Constrained Environments", 2349 Proceedings of IEEE ICWITS 2012, IEEE 2350 International Conference on Wireless 2351 Information Technology and Systems., 2352 2012. 2354 Appendix A. LOADng Control Messages using RFC5444 2356 This section presents how the abstract LOADng messages, used 2357 throughout this specification, are mapped into [RFC5444] messages. 2359 A.1. RREQ-Specific Message Encoding Considerations 2361 This protocol defines, and hence owns, the RREQ Message Type. Thus, 2362 as specified in [RFC5444], this protocol generates and transmits all 2363 RREQ messages, receives all RREQ messages and is responsible for 2364 determining whether and how each RREQ message is to be processed 2365 (updating the Information Base) and/or forwarded, according to this 2366 specification. Table 2 specifies how RREQ messages are mapped into 2367 [RFC5444]-elements. 2369 +-------------------+-------------------+---------------------------+ 2370 | RREQ Element | RFC5444-Element | Considerations | 2371 +-------------------+-------------------+---------------------------+ 2372 | RREQ.addr-length | | Supports addresses from | 2373 | | | 1-16 octets | 2374 | RREQ.seq-num | | 16 bits, hence MAXVALUE | 2375 | | | (Section 8) is 65535. | 2376 | | | MUST be included | 2377 | RREQ.metric-type | METRIC Message | Encoded by way of the | 2378 | | TLV | Type-Extension of a | 2379 | | | Message-Type-specific | 2380 | | | Message TLV of type | 2381 | | | METRIC, defined in | 2382 | | | Table 8. A LOADng Router | 2383 | | | generating an RREQ (as | 2384 | | | specified in | 2385 | | | Section 12.1) when using | 2386 | | | the HOP_COUNT metric, | 2387 | | | MUST NOT add the METRIC | 2388 | | | Message TLV to the RREQ | 2389 | | | (in order to reduce | 2390 | | | overhead, as the hop | 2391 | | | count value is already | 2392 | | | encoded in | 2393 | | | RREQ.hop-count). LOADng | 2394 | | | Routers receiving an RREQ | 2395 | | | without METRIC Message | 2396 | | | TLV assume that | 2397 | | | RREQ.metric-type is | 2398 | | | HOP_COUNT, and MUST not | 2399 | | | add the METRIC Message | 2400 | | | TLV when forwarding the | 2401 | | | message. Otherwise, | 2402 | | | exactly one METRIC TLV | 2403 | | | MUST be included in each | 2404 | | | RREQ message. | 2405 | RREQ.route-metric | METRIC Message | Encoded as the value | 2406 | | TLV value | field of the METRIC TLV. | 2407 | | | (LOADng Routers | 2408 | | | generating RREQs when | 2409 | | | using the HOP_COUNT | 2410 | | | metric do not need need | 2411 | | | to add the METRIC Message | 2412 | | | TLV, as specified above | 2413 | | | for the RREQ.metric-type | 2414 | | | field.) | 2415 | RREQ.hop-limit | | 8 bits. MUST be included | 2416 | | | in an RREQ message | 2417 | RREQ.hop-count | | 8 bits, hence | 2418 | | | MAX_HOP_COUNT is 255. | 2419 | | | MUST be included in an | 2420 | | | RREQ message. | 2421 | RREQ.originator | | MUST be included in an | 2422 | | | RREQ message. | 2423 | RREQ.destination | Address in | Encoded by way of an | 2424 | | Address-Block | address in an address | 2425 | | w/TLV | block, with which a | 2426 | | | Message-Type-specific | 2427 | | | Address Block TLV of type | 2428 | | | ADDR-TYPE and with | 2429 | | | Type-Extension | 2430 | | | DESTINATION is | 2431 | | | associated, defined in | 2432 | | | Table 9. An RREQ MUST | 2433 | | | contain exactly one | 2434 | | | address with a TLV of | 2435 | | | type ADDR-TYPE and with | 2436 | | | Type-Extension | 2437 | | | DESTINATION associated. | 2438 +-------------------+-------------------+---------------------------+ 2440 Table 2: RREQ Message Elements 2442 A.2. RREP-Specific Message Encoding Considerations 2444 This protocol defines, and hence owns, the RREP Message Type. Thus, 2445 as specified in [RFC5444], this protocol generates and transmits all 2446 RREP messages, receives all RREP messages and is responsible for 2447 determining whether and how each RREP message is to be processed 2448 (updating the Information Base) and/or forwarded, according to this 2449 specification. Table 3 describes how RREP messages are mapped into 2450 [RFC5444]-elements. 2452 +-------------------+-------------------+---------------------------+ 2453 | RREP Element | RFC5444-Element | Considerations | 2454 +-------------------+-------------------+---------------------------+ 2455 | RREP.addr-length | | Supports addresses from | 2456 | | | 1-16 octets | 2457 | RREP.seq-num | | 16 bits, hence MAXVALUE | 2458 | | | (Section 8) is 65535. | 2459 | | | MUST be included | 2460 | RREP.metric-type | METRIC Message | Encoded by way of the | 2461 | | TLV | Type-Extension of a | 2462 | | | Message-Type-specific | 2463 | | | Message TLV of type | 2464 | | | METRIC, defined in | 2465 | | | Table 12. A LOADng | 2466 | | | Router generating an RREP | 2467 | | | (as specified in | 2468 | | | Section 13.1) when using | 2469 | | | the HOP_COUNT metric, | 2470 | | | MUST NOT add the METRIC | 2471 | | | Message TLV to the RREP | 2472 | | | (in order to reduce | 2473 | | | overhead, as the hop | 2474 | | | count value is already | 2475 | | | encoded in | 2476 | | | RREP.hop-count). LOADng | 2477 | | | Routers receiving an RREP | 2478 | | | without METRIC Message | 2479 | | | TLV assume that | 2480 | | | RREP.metric-type is | 2481 | | | HOP_COUNT, and MUST not | 2482 | | | add the METRIC Message | 2483 | | | TLV when forwarding the | 2484 | | | message. Otherwise, | 2485 | | | exactly one METRIC TLV | 2486 | | | MUST be included in each | 2487 | | | RREP message. | 2488 | RREP.route-metric | METRIC Message | Encoded as the value | 2489 | | TLV value | field of the METRIC TLV. | 2490 | | | (LOADng Routers | 2491 | | | generating RREPs when | 2492 | | | using the HOP_COUNT | 2493 | | | metric do not need need | 2494 | | | to add the METRIC Message | 2495 | | | TLV, as specified above | 2496 | | | for the RREP.metric-type | 2497 | | | field.) | 2498 | RREP.ackrequired | FLAGS Message TLV | Encoded by way of a | 2499 | | | Message-Type-specific | 2500 | | | Message TLV of type | 2501 | | | FLAGS, defined in | 2502 | | | Table 13. A TLV of type | 2503 | | | FLAGS MUST always be | 2504 | | | included in an RREP | 2505 | | | message. | 2506 | RREP.hop-limit | | 8 bits. MUST be included | 2507 | | | in an RREQ message | 2508 | RREP.hop-count | | 8 bits, hence | 2509 | | | MAX_HOP_COUNT is 255. | 2510 | | | MUST be included in an | 2511 | | | RREP message. | 2512 | RREP.originator | | MUST be included in an | 2513 | | | RREP message. | 2514 | RREP.destination | Address in | Encoded by way of an | 2515 | | Address-Block | address in an address | 2516 | | w/TLV | block, with which a | 2517 | | | Message-Type-specific | 2518 | | | Address Block TLV of type | 2519 | | | ADDR-TYPE and with | 2520 | | | Type-Extension | 2521 | | | DESTINATION is | 2522 | | | associated, defined in | 2523 | | | Table 14. An RREP MUST | 2524 | | | contain exactly one | 2525 | | | address with a TLV of | 2526 | | | type ADDR-TYPE and with | 2527 | | | Type-Extension | 2528 | | | DESTINATION associated. | 2529 +-------------------+-------------------+---------------------------+ 2531 Table 3: RREP Message Elements 2533 A.3. RREP_ACK Message Encoding 2535 This protocol defines, and hence owns, the RREP_ACK Message Type. 2536 Thus, as specified in [RFC5444], this protocol generates and 2537 transmits all RREP_ACK messages, receives all RREP_ACK messages and 2538 is responsible for determining whether and how each RREP_ACK message 2539 is to be processed (updating the Information Base), according to this 2540 specification. Table 4 describes how RREP_ACK Messages are mapped 2541 into [RFC5444]-elements. 2543 +----------------------+-------------------+------------------------+ 2544 | RREP_ACK Element | RFC5444-Element | Considerations | 2545 +----------------------+-------------------+------------------------+ 2546 | RREP_ACK.addr-length | | Supports addresses | 2547 | | | from 1-16 octets | 2548 | RREP_ACK.seq-num | | 16 bits, hence | 2549 | | | MAXVALUE (Section 8) | 2550 | | | is 65535. MUST be | 2551 | | | included | 2552 | RREP_ACK.destination | Address in | Encoded by way of an | 2553 | | Address-Block | address in an address | 2554 | | w/TLV | block, with which a | 2555 | | | Message-Type-specific | 2556 | | | Address Block TLV of | 2557 | | | type ADDR-TYPE and | 2558 | | | with Type-Extension | 2559 | | | DESTINATION is | 2560 | | | associated, defined in | 2561 | | | Table 17. An RREP_ACK | 2562 | | | MUST contain exactly | 2563 | | | one address with a TLV | 2564 | | | of type ADDR-TYPE and | 2565 | | | with Type-Extension | 2566 | | | DESTINATION | 2567 | | | associated. | 2568 +----------------------+-------------------+------------------------+ 2570 Table 4: RREP_ACK Message Elements 2572 A.4. RERR Message Encoding 2574 This protocol defines, and hence owns, the RERR Message Type. Thus, 2575 as specified in [RFC5444], this protocol generates and transmits all 2576 RERR messages, receives all RERR messages and is responsible for 2577 determining whether and how each RERR message is to be processed 2578 (updating the Information Base) and/or forwarded, according to this 2579 specification. Table 5 describes how RERR Messages are mapped into 2580 [RFC5444]-elements. 2582 +------------------------+------------------+-----------------------+ 2583 | RERR Element | RFC5444-Element | Considerations | 2584 +------------------------+------------------+-----------------------+ 2585 | RERR.addr-length | | from 1-16 octets | 2587 | RERR.hop-limit | | 8 bits. MUST be | 2588 | | | included in an RREQ | 2589 | | | message | 2590 | RERR.errorcode | Address Block | According to | 2591 | | TLV Value | Section 19.1. | 2592 | RERR.unreachableAddres | Address in | Encoded by way of an | 2593 | s | Address-Block | address in an address | 2594 | | w/TLV | block, with which a | 2595 | | | Message-Type-specific | 2596 | | | Address Block TLV of | 2597 | | | type ADDR-TYPE and | 2598 | | | with Type-Extension | 2599 | | | ERRORCODE is | 2600 | | | associated, defined | 2601 | | | in Table 20. | 2602 | RERR.originator | | MUST be included in | 2603 | | | an RERR message. | 2604 | RERR.destination | Address in | Encoded by way of an | 2605 | | Address-Block | address in an address | 2606 | | w/TLV | block, with which a | 2607 | | | Message-Type-specific | 2608 | | | Address Block TLV of | 2609 | | | type ADDR-TYPE and | 2610 | | | with Type-Extension | 2611 | | | DESTINATION is | 2612 | | | associated, defined | 2613 | | | in Table 20. An RERR | 2614 | | | MUST contain exactly | 2615 | | | one address with a | 2616 | | | TLV of type ADDR-TYPE | 2617 | | | and with | 2618 | | | Type-Extension | 2619 | | | DESTINATION | 2620 | | | associated. | 2621 +------------------------+------------------+-----------------------+ 2623 Table 5: RERR Message Elements 2625 A.5. RFC5444-Specific IANA Considerations 2627 This specification defines four Message Types, which must be 2628 allocated from the "Message Types" repository of [RFC5444], two 2629 Message TLV Types, which must be allocated from the "Message TLV 2630 Types" repository of [RFC5444], and four Address Block TLV Types, 2631 which must be allocated from the "Address Block TLV Types" repository 2632 of [RFC5444]. 2634 A.5.1. Expert Review: Evaluation Guidelines 2636 For the registries where an Expert Review is required, the designated 2637 expert should take the same general recommendations into 2638 consideration as are specified by [RFC5444]. 2640 A.5.2. Message Types 2642 This specification defines four Message Type, to be allocated from 2643 the 0-223 range of the "Message Types" namespace defined in 2644 [RFC5444], as specified in Table 6. 2646 +------+-----------------------------------------------+ 2647 | Type | Description | 2648 +------+-----------------------------------------------+ 2649 | TBD1 | RREQ: Route Request Message | 2650 | TBD1 | RREP: Route Reply Message | 2651 | TBD1 | RREP_ACK: Route Reply Acknowledgement Message | 2652 | TBD1 | RERR: Route Error Message | 2653 +------+-----------------------------------------------+ 2655 Table 6: Message Type assignment 2657 A.6. RREQ Message-Type-Specific TLV Type Registries 2659 IANA is requested to create a registry for Message-Type-specific 2660 Message TLVs for RREQ messages, in accordance with Section 6.2.1 of 2661 [RFC5444], and with initial assignments and allocation policies as 2662 specified in Table 7. 2664 +---------+-------------+-------------------+ 2665 | Type | Description | Allocation Policy | 2666 +---------+-------------+-------------------+ 2667 | 128 | METRIC | | 2668 | 129-223 | Unassigned | Expert Review | 2669 +---------+-------------+-------------------+ 2671 Table 7: RREQ Message-Type-specific Message TLV Types 2673 Allocation of the METRIC TLV from the RREQ Message-Type-specific 2674 Message TLV Types in Table 7 will create a new Type Extension 2675 registry, with assignments as specified in Table 8. 2677 +--------+------+-----------+------------------------+--------------+ 2678 | Name | Type | Type | Description | Allocation | 2679 | | | Extension | | Policy | 2680 +--------+------+-----------+------------------------+--------------+ 2681 | METRIC | 128 | 0 | HOP_COUNT: | | 2682 | | | | MSG.hop-count is used | | 2683 | | | | instead of the METRIC | | 2684 | | | | TLV Value. MAX_DIST | | 2685 | | | | is 255. | | 2686 | METRIC | 128 | 1 | DIMENSIONLESS: A | | 2687 | | | | 32-bit, dimensionless, | | 2688 | | | | additive metric, | | 2689 | | | | single precision | | 2690 | | | | float, formatted | | 2691 | | | | according to | | 2692 | | | | [IEEE754-2008]. | | 2693 | METRIC | 128 | 2-251 | Unassigned | Expert | 2694 | | | | | Review | 2695 | METRIC | 128 | 252-255 | Unassigned | Experimental | 2696 +--------+------+-----------+------------------------+--------------+ 2698 Table 8: Message TLV Type assignment: METRIC 2700 IANA is requested to create a registry for Message-Type-specific 2701 Address Block TLVs for RREQ messages, in accordance with Section 2702 6.2.1 of [RFC5444], and with initial assignments and allocation 2703 policies as specified in Table 9. 2705 +---------+-------------+-------------------+ 2706 | Type | Description | Allocation Policy | 2707 +---------+-------------+-------------------+ 2708 | 128 | ADDR-TYPE | Expert Review | 2709 | 129-223 | Unassigned | Expert Review | 2710 +---------+-------------+-------------------+ 2712 Table 9: RREQ Message-Type-specific Address Block TLV Types 2714 Allocation of the ADDR-TYPE TLV from the RREQ Message-Type-specific 2715 Address Block TLV Types in Table 9 will create a new Type Extension 2716 registry, with assignments as specified in Table 10. 2718 +-----------+------+----------------+-------------+-----------------+ 2719 | Name | Type | Type Extension | Description | Allocation | 2720 | | | | | Policy | 2721 +-----------+------+----------------+-------------+-----------------+ 2722 | ADDR-TYPE | 128 | 0 | DESTINATION | | 2723 | ADDR-TYPE | 128 | 2-255 | Unassigned | Expert Review | 2724 +-----------+------+----------------+-------------+-----------------+ 2726 Table 10: Address Block TLV Type assignment: ADDR-TYPE 2728 A.7. RREP Message-Type-Specific TLV Type Registries 2730 IANA is requested to create a registry for Message-Type-specific 2731 Message TLVs for RREP messages, in accordance with Section 6.2.1 of 2732 [RFC5444], and with initial assignments and allocation policies as 2733 specified in Table 11. 2735 +---------+-------------+-------------------+ 2736 | Type | Description | Allocation Policy | 2737 +---------+-------------+-------------------+ 2738 | 128 | METRIC | | 2739 | 129 | FLAGS | | 2740 | 130-223 | Unassigned | Expert Review | 2741 +---------+-------------+-------------------+ 2743 Table 11: RREP Message-Type-specific Message TLV Types 2745 Allocation of the METRIC TLV from the RREP Message-Type-specific 2746 Message TLV Types in Table 11 will create a new Type Extension 2747 registry, with assignments as specified in Table 12. 2749 +--------+------+-----------+------------------------+--------------+ 2750 | Name | Type | Type | Description | Allocation | 2751 | | | Extension | | Policy | 2752 +--------+------+-----------+------------------------+--------------+ 2753 | METRIC | 128 | 0 | HOP_COUNT: | | 2754 | | | | MSG.hop-count is used | | 2755 | | | | instead of the METRIC | | 2756 | | | | TLV Value. MAX_DIST | | 2757 | | | | is 255. | | 2758 | METRIC | 128 | 1 | DIMENSIONLESS: A | | 2759 | | | | 32-bit, dimensionless, | | 2760 | | | | additive metric, | | 2761 | | | | single precision | | 2762 | | | | float, formatted | | 2763 | | | | according to | | 2764 | | | | [IEEE754-2008]. | | 2765 | METRIC | 128 | 2-251 | Unassigned | Expert | 2766 | | | | | Review | 2767 | METRIC | 128 | 252-255 | Unassigned | Experimental | 2768 +--------+------+-----------+------------------------+--------------+ 2770 Table 12: Message TLV Type assignment: METRIC 2772 Allocation of the FLAGS TLV from the RREP Message-Type-specific 2773 Message TLV Types in Table 11 will create a new Type Extension 2774 registry, with assignments as specified in Table 13. 2776 +-------+------+-----------+---------------------------+------------+ 2777 | Name | Type | Type | Description | Allocation | 2778 | | | Extension | | Policy | 2779 +-------+------+-----------+---------------------------+------------+ 2780 | FLAGS | 129 | 0 | Bit 0 represents the | | 2781 | | | | ackrequired flag (i.e., | | 2782 | | | | ackrequired is TRUE when | | 2783 | | | | bit 0 is set to 1 and | | 2784 | | | | FALSE when bit 0 is 0.). | | 2785 | | | | All other bits are | | 2786 | | | | reserved for future use. | | 2787 | FLAGS | 129 | 1-255 | Unassigned | Expert | 2788 | | | | | Review | 2789 +-------+------+-----------+---------------------------+------------+ 2791 Table 13: Message TLV Type assignment: FLAGS 2793 IANA is requested to create a registry for Message-Type-specific 2794 Address Block TLVs for RREP messages, in accordance with Section 2795 6.2.1 of [RFC5444], and with initial assignments and allocation 2796 policies as specified in Table 14. 2798 +---------+-------------+-------------------+ 2799 | Type | Description | Allocation Policy | 2800 +---------+-------------+-------------------+ 2801 | 128 | ADDR-TYPE | Expert Review | 2802 | 129-223 | Unassigned | Expert Review | 2803 +---------+-------------+-------------------+ 2805 Table 14: RREP Message-Type-specific Address Block TLV Types 2807 Allocation of the ADDR-TYPE TLV from the RREP Message-Type-specific 2808 Address Block TLV Types in Table 14 will create a new Type Extension 2809 registry, with assignments as specified in Table 15. 2811 +-----------+------+----------------+-------------+-----------------+ 2812 | Name | Type | Type Extension | Description | Allocation | 2813 | | | | | Policy | 2814 +-----------+------+----------------+-------------+-----------------+ 2815 | ADDR-TYPE | 128 | 0 | DESTINATION | | 2816 | ADDR-TYPE | 128 | 1-255 | Unassigned | Expert Review | 2817 +-----------+------+----------------+-------------+-----------------+ 2819 Table 15: Address Block TLV Type assignment: ADDR-TYPE 2821 A.8. RREP_ACK Message-Type-Specific TLV Type Registries 2823 IANA is requested to create a registry for Message-Type-specific 2824 Message TLVs for RREP_ACK messages, in accordance with Section 6.2.1 2825 of [RFC5444], and with initial assignments and allocation policies as 2826 specified in Table 16. 2828 +---------+-------------+-------------------+ 2829 | Type | Description | Allocation Policy | 2830 +---------+-------------+-------------------+ 2831 | 128-223 | Unassigned | Expert Review | 2832 +---------+-------------+-------------------+ 2834 Table 16: RREP_ACK Message-Type-specific Message TLV Types 2836 IANA is requested to create a registry for Message-Type-specific 2837 Address Block TLVs for RREP_ACK messages, in accordance with Section 2838 6.2.1 of [RFC5444], and with initial assignments and allocation 2839 policies as specified in Table 17. 2841 +---------+-------------+-------------------+ 2842 | Type | Description | Allocation Policy | 2843 +---------+-------------+-------------------+ 2844 | 128 | ADDR-TYPE | Expert Review | 2845 | 129-223 | Unassigned | Expert Review | 2846 +---------+-------------+-------------------+ 2848 Table 17: RREP_ACK Message-Type-specific Address Block TLV Types 2850 Allocation of the ADDR-TYPE TLV from the RREP_ACK Message-Type- 2851 specific Address Block TLV Types in Table 17 will create a new Type 2852 Extension registry, with assignments as specified in Table 18. 2854 +-----------+------+----------------+-------------+-----------------+ 2855 | Name | Type | Type Extension | Description | Allocation | 2856 | | | | | Policy | 2857 +-----------+------+----------------+-------------+-----------------+ 2858 | ADDR-TYPE | 128 | 0 | DESTINATION | | 2859 | ADDR-TYPE | 128 | 2-255 | Unassigned | Expert Review | 2860 +-----------+------+----------------+-------------+-----------------+ 2862 Table 18: Address Block TLV Type assignment: ADDR-TYPE 2864 A.9. RERR Message-Type-Specific TLV Type Registries 2866 IANA is requested to create a registry for Message-Type-specific 2867 Message TLVs for RERR messages, in accordance with Section 6.2.1 of 2868 [RFC5444], and with initial assignments and allocation policies as 2869 specified in Table 19. 2871 +---------+-------------+-------------------+ 2872 | Type | Description | Allocation Policy | 2873 +---------+-------------+-------------------+ 2874 | 128-223 | Unassigned | Expert Review | 2875 +---------+-------------+-------------------+ 2877 Table 19: RERR Message-Type-specific Message TLV Types 2879 IANA is requested to create a registry for Message-Type-specific 2880 Address Block TLVs for RERR messages, in accordance with Section 2881 6.2.1 of [RFC5444], and with initial assignments and allocation 2882 policies as specified in Table 20. 2884 +---------+-------------+-------------------+ 2885 | Type | Description | Allocation Policy | 2886 +---------+-------------+-------------------+ 2887 | 128 | ADDR-TYPE | Expert Review | 2888 | 129-223 | Unassigned | Expert Review | 2889 +---------+-------------+-------------------+ 2891 Table 20: RREP_ACK Message-Type-specific Address Block TLV Types 2893 Allocation of the ADDR-TYPE TLV from the RERR Message-Type-specific 2894 Address Block TLV Types in Table 20 will create a new Type Extension 2895 registry, with assignments as specified in Table 21. 2897 +-----------+------+----------------+-------------+-----------------+ 2898 | Name | Type | Type Extension | Description | Allocation | 2899 | | | | | Policy | 2900 +-----------+------+----------------+-------------+-----------------+ 2901 | ADDR-TYPE | 128 | 0 | DESTINATION | | 2902 | ADDR-TYPE | 128 | 1 | ERRORCODE | | 2903 | ADDR-TYPE | 128 | 2-255 | Unassigned | Expert Review | 2904 +-----------+------+----------------+-------------+-----------------+ 2906 Table 21: Address Block TLV Type assignment: ADDR-TYPE 2908 Appendix B. LOADng Control Packet Illustrations 2910 This section presents example packets following this specification. 2912 B.1. RREQ 2914 RREQ messages are instances of [RFC5444] messages. This 2915 specification requires that RREQ messages contain RREQ.msg-seq-num, 2916 RREQ.msg-hop-limit, RREQ.msg-hop-count and RREQ.msg-orig-addr fields. 2918 It supports RREQ messages with any combination of remaining message 2919 header options and address encodings, enabled by [RFC5444] that 2920 convey the required information. As a consequence, there is no 2921 single way to represent how all RREQ messages look. This section 2922 illustrates an RREQ message, the exact values and content included 2923 are explained in the following text. 2925 The RREQ message's four bit Message Flags (MF) field has value 15 2926 indicating that the message header contains originator address, hop 2927 limit, hop count, and message sequence number fields. Its four bit 2928 Message Address Length (MAL) field has value 3, indicating addresses 2929 in the message have a length of four octets, here being IPv4 2930 addresses. The overall message length is 30 octets. 2932 The message has a Message TLV Block with content length 6 octets 2933 containing one TLV. The TLVs is of type METRIC and has a Flags octet 2934 (MTLVF) value 144, indicating that it has a Value, a type extension, 2935 but no start and stop indexes. The Value Length of the METRIC TLV is 2936 2 octets. 2938 The message has one Address Block. The Address Block contains 1 2939 address, with Flags octet (ATLVF) value 0, hence with no Head or Tail 2940 sections, and hence with a Mid section with length four octets. The 2941 following TLV Block (content length 2 octets) contains one TLV. The 2942 TLV is an ADDR_TYPE TLV with Flags octet (ATLVF) value 0, indicating 2943 no Value and no indexes. Thus, the address is associated with the 2944 Type ADDR_TYPE, i.e., it is the destination address of the RREQ. 2946 0 1 2 3 2947 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2948 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2949 | RREQ | MF=15 | MAL=3 | Message Length = 30 | 2950 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2951 | Originator Address | 2952 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2953 | Hop Limit | Hop Count | Message Sequence Number | 2954 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2955 | Message TLV Block Length = 6 | METRIC | MTLVF = 144 | 2956 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2957 | Type Ext. | Value Len = 2 | Value (metric) | 2958 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2959 | Num Addrs = 1 | ABF = 0 | Mid | 2960 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2961 | Mid | Address TLV Block Length = 2 | 2962 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2963 | ADDR-TYPE | ATLVF = 0 | 2964 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2966 B.2. RREP 2968 RREP messages are instances of [RFC5444] messages. This 2969 specification requires that RREP messages contain RREP.msg-seq-num, 2970 RREP.msg-hop-limit, RREP.msg-hop-count and RREP.msg-orig-addr fields. 2971 It supports RREP messages with any combination of remaining message 2972 header options and address encodings, enabled by [RFC5444] that 2973 convey the required information. As a consequence, there is no 2974 single way to represent how all RREP messages look. This section 2975 illustrates an RREP message, the exact values and content included 2976 are explained in the following text. 2978 The RREP message's four bit Message Flags (MF) field has value 15 2979 indicating that the message header contains originator address, hop 2980 limit, hop count, and message sequence number fields. Its four bit 2981 Message Address Length (MAL) field has value 3, indicating addresses 2982 in the message have a length of four octets, here being IPv4 2983 addresses. The overall message length is 34 octets. 2985 The message has a Message TLV Block with content length 10 octets 2986 containing two TLVs. The first TLV is of type METRIC and has a Flags 2987 octet (MTLVF) value 144, indicating that it has a Value, a type 2988 extension, but no start and stop indexes. The Value Length of the 2989 METRIC TLV is 2 octets. The second TLV is of type FLAGS and has a 2990 Flags octet (MTLVF) value of 16, indicating that it has a Value, but 2991 no type extension or start and stop indexes. The Value Length of the 2992 FLAGS TLV is 1 octet. The TLV value is 0x80 indicating that the 2993 ackrequired flag is set. 2995 The message has one Address Block. The Address Block contains 1 2996 address, with Flags octet (ATLVF) value 0, hence with no Head or Tail 2997 sections, and hence with a Mid section with length four octets. The 2998 following TLV Block (content length 2 octets) contains one TLV. The 2999 TLV is an ADDR_TYPE TLV with Flags octet (ATLVF) value 0, indicating 3000 no Value and no indexes. Thus, the address is associated with the 3001 Type ADDR_TYPE, i.e., it is the destination address of the RREP. 3003 0 1 2 3 3004 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 3005 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3006 | RREP | MF=15 | MAL=3 | Message Length = 34 | 3007 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3008 | Originator Address | 3009 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3010 | Hop Limit | Hop Count | Message Sequence Number | 3011 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3012 | Message TLV Block Length = 10 | METRIC | MTLVF = 144 | 3013 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3014 | Type Ext. | Value Len = 2 | Value (metric) | 3015 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3016 | FLAGS | MTLVF = 16 | Value Len = 1 | Value (0x80) | 3017 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3018 | Num Addrs = 1 | ABF = 0 | Mid | 3019 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3020 | Mid | Address TLV Block Length = 2 | 3021 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3022 | ADDR-TYPE | ATLVF = 0 | 3023 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3025 B.3. RREP_ACK 3027 RREP_ACK messages are instances of [RFC5444] messages. This 3028 specification requires that RREP_ACK messages contains RREP_ACK.msg- 3029 seq-num. It supports RREP_ACK messages with any combination of 3030 remaining message header options and address encodings, enabled by 3031 [RFC5444] that convey the required information. As a consequence, 3032 there is no single way to represent how all RREP_ACK messages look. 3033 This section illustrates an RREP_ACK message, the exact values and 3034 content included are explained in the following text. 3036 The RREP_ACK message's four bit Message Flags (MF) field has value 1 3037 indicating that the message header contains the message sequence 3038 number field. Its four bit Message Address Length (MAL) field has 3039 value 3, indicating addresses in the message have a length of four 3040 octets, here being IPv4 addresses. The overall message length is 18 3041 octets. 3043 The message has a Message TLV Block with content length 0 octets 3044 containing zero TLVs. 3046 The message has one Address Block. The Address Block contains 1 3047 address, with Flags octet (ATLVF) value 0, hence with no Head or Tail 3048 sections, and hence with a Mid section with length four octets. The 3049 following TLV Block (content length 2 octets) contains one TLV. The 3050 TLV is an ADDR_TYPE TLV with Flags octet (ATLVF) value 0, indicating 3051 no Value and no indexes. Thus, the address is associated with the 3052 Type ADDR_TYPE, i.e., it is the destination address of the RREP_ACK. 3054 0 1 2 3 3055 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 3056 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3057 | RREP_ACK | MF=1 | MAL=3 | Message Length = 18 | 3058 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3059 | Message Sequence Number | Message TLV Block Length = 0 | 3060 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3061 | Num Addrs = 1 | ABF = 0 | Mid | 3062 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3063 | Mid | Address TLV Block Length = 2 | 3064 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3065 | ADDR-TYPE | ATLVF = 0 | 3066 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3068 B.4. RERR 3070 RERR messages are instances of [RFC5444] messages. This 3071 specification supports RERR messages with any combination of message 3072 header options and address encodings, enabled by [RFC5444] that 3073 convey the required information. As a consequence, there is no 3074 single way to represent how all RERR messages look. This section 3075 illustrates an RERR message, the exact values and content included 3076 are explained in the following text. 3078 The RERR message's four bit Message Flags (MF) field has value 12 3079 indicating that the message header contains RERR.msg-orig-addr field 3080 and RERR.msg-hop-limit field. Its four bit Message Address Length 3081 (MAL) field has value 3, indicating addresses in the message have a 3082 length of four octets, here being IPv4 addresses. The overall 3083 message length is 30 octets. 3085 The message has a Message TLV Block with content length 0 octets 3086 containing zero TLVs. 3088 The message has one Address Block. The Address Block contains 2 3089 addresses, with Flags octet (ATLVF) value 128, hence with a Head 3090 section (with length 3 octets), but no Tail section, and hence with 3091 Mid sections with length one octet. The following TLV Block (content 3092 length 9 octets) contains two TLVs. The first TLV is an ADDR_TYPE 3093 TLV with Flags octet (ATLVF) value 64, indicating a single index of 3094 0, but no Value. Thus, the first address is associated with the Type 3095 ADDR_TYPE and Type Extension DESTINATION, i.e., it is the destination 3096 address of the RERR. The second TLV is an ADDR_TYPE TLV with Flags 3097 octet (ATLVF) value 208, indicating Type Extension, Value, and single 3098 index. Thus, the second address is associated with the Type 3099 ADDR_TYPE, Type Extension ERRORCODE, and Value 0, i.e., it is 3100 associated with error code 0. 3102 0 1 2 3 3103 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 3104 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3105 | RERR | MF=12 | MAL=3 | Message Length = 30 | 3106 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3107 | Originator Address | 3108 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3109 | Hop Limit | Message TLV Block Length = 0 | Num Addrs = 2 | 3110 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3111 | ABF = 128 | Head Len = 3 | Head | 3112 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3113 | Head | Mid | Address TLV | 3114 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3115 |Block Length= 9| ADDR-TYPE | ATLVF = 64 | Index = 0 | 3116 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3117 | ADDR-TYPE | ATLVF = 208 |TypEx=ERRORCODE| Index = 1 | 3118 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3119 | Value Len = 1 | Value = 0 | 3120 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 3122 Authors' Addresses 3124 Thomas Heide Clausen 3125 LIX, Ecole Polytechnique 3127 Phone: +33 6 6058 9349 3128 EMail: T.Clausen@computer.org 3129 URI: http://www.ThomasClausen.org/ 3131 Axel Colin de Verdiere 3132 LIX, Ecole Polytechnique 3134 Phone: +33 6 1264 7119 3135 EMail: axel@axelcdv.com 3136 URI: http://www.axelcdv.com/ 3137 Jiazi Yi 3138 LIX, Ecole Polytechnique 3140 Phone: +33 1 6933 4031 3141 EMail: jiazi@jiaziyi.com 3142 URI: http://www.jiaziyi.com/ 3144 Afshin Niktash 3145 Maxim Integrated Products 3147 Phone: +1 94 9450 1692 3148 EMail: afshin.niktash@maxim-ic.com 3149 URI: http://www.Maxim-ic.com/ 3151 Yuichi Igarashi 3152 Hitachi, Ltd., Yokohama Research Laboratory 3154 Phone: +81 45 860 3083 3155 EMail: yuichi.igarashi.hb@hitachi.com 3156 URI: http://www.hitachi.com/ 3158 Hiroki Satoh 3159 Hitachi, Ltd., Yokohama Research Laboratory 3161 Phone: +81 44 959 0205 3162 EMail: hiroki.satoh.yj@hitachi.com 3163 URI: http://www.hitachi.com/ 3165 Ulrich Herberg 3166 Fujitsu Laboratories of America 3168 Phone: +1 408 530 4528 3169 EMail: ulrich@herberg.name 3170 URI: http://www.herberg.name/ 3172 Cedric Lavenu 3173 EDF R&D 3175 Phone: +33 1 4765 2729 3176 EMail: cedric-2.lavenu@edf.fr 3177 URI: http://www.edf.fr/ 3178 Thierry Lys 3179 ERDF 3181 Phone: +33 1 8197 6777 3182 EMail: thierry.lys@erdfdistribution.fr 3183 URI: http://www.erdfdistribution.fr/ 3185 Justin Dean 3186 Naval Research Laboratory 3188 EMail: jdean@itd.nrl.navy.mil 3189 URI: http://cs.itd.nrl.navy.mil/