Internet DRAFT - draft-wang-roll-data-robustness

draft-wang-roll-data-robustness











     
     
    Network Working Group                                         G. Wang 
    Internet Draft                                                G. Feng 
    Intended status: Standards Track                                UESTC 
    Expires: May 2014                                    November 29, 2013 
                                       
     
                                          
        Network Coding for Enhancing Data Robustness in Low-Power and Lossy 
                                     Networks 
                      draft-wang-roll-data-robustness-00.txt 


    Status of this Memo 

       This Internet-Draft is submitted in full conformance with the 
       provisions of BCP 78 and BCP 79.  

       Internet-Drafts are working documents of the Internet Engineering 
       Task Force (IETF). Note that other groups may also distribute working 
       documents as Internet-Drafts. The list of current Internet-Drafts is 
       at http://datatracker.ietf.org/drafts/current. 

       Internet-Drafts are draft documents valid for a maximum of six months 
       and may be updated, replaced, or obsoleted by other documents at any 
       time. It is inappropriate to use Internet-Drafts as reference 
       material or to cite them other than as "work in progress." 

       This Internet-Draft will expire on May 29, 2014. 

    Copyright Notice 

       Copyright (c) 2013 IETF Trust and the persons identified as the 
       document authors. All rights reserved. 

       This document is subject to BCP 78 and the IETF Trust's Legal 
       Provisions Relating to IETF Documents 
       (http://trustee.ietf.org/license-info) in effect on the date of 
       publication of this document. Please review these documents carefully, 
       as they describe your rights and restrictions with respect to this 
       document.  

    Abstract 

       This document specifies a solution for improving the robustness of 
       data transmission in multi-hop Low-Power and Lossy Networks (LLNs). 
       It uses the network coding technique in conjunction with the Routing 
       Protocol for LLNs (RPL) to increase the success rate of data 

     
     
     
    Wang                    Expires May 29, 2014                  [Page 1] 
     
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       collection at the sink node, with reasonable processing and traffic 
       cost. 

    Table of Contents 

        
       1. Introduction ................................................ 3 
       2. Terminology ................................................. 3 
       3. Protocol Overview ........................................... 5 
       4. Packet Format ............................................... 6 
          4.1. Coding Option .......................................... 6 
          4.2. Coding Control Messages ................................ 7 
             4.2.1. Degree Advertisement Message ...................... 7 
             4.2.2. Coding Period Start Message ....................... 8 
             4.2.3. Coding Procedure Pause Message .................... 8 
       5. Retrieve Information from Network ........................... 9 
          5.1. Sensor Nodes Number .................................... 9 
          5.2. Neighbor Nodes Number .................................. 9 
          5.3. Child Nodes Number .................................... 10 
       6. Coding Procedure Control ................................... 11 
          6.1. Coding Period ......................................... 11 
          6.2. Growth of Coding Degree ............................... 12 
       7. Coding Packet Processing ................................... 15 
          7.1. Coding Packet and Codewords ........................... 15 
             7.1.1. Codewords and Packets Transformation ............. 15 
             7.1.2. The Addition of Codewords ........................ 17 
          7.2. Receiving Packet ...................................... 18 
          7.3. Sending Packet ........................................ 19 
          7.4. Encoding and Decoding ................................. 21 
       8. Constants and Variables .................................... 21 
       9. Security Considerations .................................... 22 
       10. IANA Considerations........................................ 23 
          10.1. Additions to Hop-by-Hop Options ...................... 23 
          10.2. New Registry for Coding Option's Flags ............... 23 
          10.3. Coding Control Message ............................... 24 
          10.4. New Registry for Coding Control Codes ................ 24 
          10.5. Child Flag ........................................... 24 
       11. References ................................................ 25 
          11.1. Normative References ................................. 25 
          11.2. Informative References ............................... 25 
       12. Acknowledgments ........................................... 26 
       Appendix A. Encoding and Decoding Algorithm ................... 27 
          A.1. Decoding .............................................. 27 
          A.2. Manage Codewords in the Codeword Cache ................ 28 
          A.3. Choose Codewords for Encoding ......................... 29 
       Appendix B. The Growth of Coding Degree ....................... 31 
          B.1. Calculate the Degree Transition Sequence .............. 31 
     
     
    Wang                    Expires May 29, 2014                  [Page 2] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

          B.2. Update the Degree Transition Sequence ................. 32 
     

    1. Introduction 

       RPL [RFC6550] is a distance vector IPv6 routing protocol designed for 
       Low-Power and Lossy Networks (LLNs). Such networks are typically 
       constrained in node's processing power and storage capacity, and the 
       quality of the link between nodes is usually poor.  

       Experiments have shown that RPL can work well in LLNs. However, data 
       transmission in such networks is vulnerable to packet loss, delay and 
       congestion. With network scaling up, the number of hops to the data 
       collection node increases. It is difficult to deliver data to the 
       destination, due to lack of data reliability mechanism. 

       This document proposes a solution to the aforementioned problem. It 
       uses a network coding scheme in conjunction with the Routing Protocol 
       for LLNs (RPL) to increase the success rate of data collection at 
       sink node with reasonable processing and traffic cost, and thus 
       enhance the robustness of data transmission in LLNs. 

       The network coding scheme used in this document is based on Growth 
       Codes [Kamra06]. This document only discusses the case of multipoint-
       to-point UDP traffic. Discussions on point-to-multipoint or point-to-
       point traffic may be included in future documents. 

    2. Terminology 

       The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 
       "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 
       document are to be interpreted as described in RFC-2119 [RFC2119].  

       In this document, these words will appear with that interpretation 
       only when in ALL CAPS. Lower case uses of these words are not to be   
       interpreted as carrying RFC-2119 significance. 

       Additionally, this document uses terminology from [RFC2460] and 
       [ROLL-TERMS], and introduces the following terminology: 

       Symbol: a Symbol include the data generated by a node, which is to be 
              transmitted to the sink, and the descriptive information about 
              the data. 

       Codeword: In the encoding procedure, multiple Symbols can be "XORed" 
              together to generate a codeword. A codeword is constituted of 
              data and its descriptive information. 
     
     
    Wang                    Expires May 29, 2014                  [Page 3] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       Coding Packet: the IPv6 packet which encapsulates a codeword. 

       Codeword Cache: a part of memory allocated to temporarily store the 
              codewords extracted from receiving Coding Packet. 

       Coding Procedure: the functions a node performs to encode or decode 
              data. When a node performs encoding, it uses codewords in the 
              Codeword Cache and the codeword contained in the packet to be 
              sent to generate a new codeword by using XOR operation. 
              Subsequently, the new codeword is encapsulated in a Coding 
              Packet and transmitted. When a node (usually the data sink) 
              performs decoding, it extracts a new codeword from the 
              receiving packet and executes the decoding function with this 
              codeword and Codeword Cache as input, hopefully to generate 
              new Symbols. 

       Symbol Cache: a part of memory allocated to temporarily store the 
              Symbols as output of the decoding function. 

       Coding Complexity: the number of Symbols, which are "XORed" together 
              to form the codeword. 

       Coding Degree: the same with the Coding Complexity, Degree in short. 

       Regular Packet: when a node receives a Coding Packet, if this 
              packet's link layer destination is the receiver, this packet 
              is called a Regular Packet.  

       Overheard Packet: in contrast to the Regular Packet, if the received 
              packet's link layer destination is not the receiver, but the 
              receiver still accepts this packet, this packet is called an 
              Overheard Packet. 

       Neighbor Node: The neighbors of a node are the nodes that are located 
              in the node's communication range. 

       Child Node: The children of a specific node are the nodes which 
              choose this node as the preferred parent in the RPL topology. 

       Promiscuous Mode: in this mode, a node receives not only Regular 
              Packets, but also Overheard Packets.  

       DA: Degree Advertisement Message (see section 4.2.1). 

       CPS: Coding Period Start Message (see section 4.2.2). 

       CPP: Coding Procedure Pause Message (see section 4.2.3). 
     
     
    Wang                    Expires May 29, 2014                  [Page 4] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

    3. Protocol Overview 

       This document specifies a solution to enhance the robustness of data 
       transmission in the networks which run IPv6 and RPL protocol. In the 
       network, RPL constructs the topology called DODAG. This specification 
       divides the data transmission procedure into multiple periods. In 
       every period, sensors generate data, encapsulate it into Coding 
       Packet and send it out. Sensors also encoding the packet received 
       from other nodes and forward it towards the data sink. Meanwhile, the 
       data sink receives Coding Packets from the nodes around it and 
       decodes them to retrieve original data. 

       Sensors perform the Coding Procedure to generate a new Coding Packet, 
       then send the packet to the next hop determined by the RPL protocol. 
       The Coding Procedure uses the "XOR" Operation, where multiple 
       codewords are combined together in a bit-wise XOR manner. Such an 
       operation's computational cost is relatively low, which meets the 
       constraints of LLNs. A node may retransmit some of those packets it 
       received to prevent packet loss due to poor link quality or channel 
       collision. According to the Growth Codes' principle, the codeword's 
       Coding Complexity grows gradually in a period, thus the amount of 
       duplicate packets that the data sink receives is reduced. When a node 
       sends out a packet, not only the next hop node will receive this 
       packet, but all the neighbors of the sender will overhear and receive 
       it. The neighbors which perform listening will re-code packets and 
       send the Overheard Packets. In this way, the possibility that data 
       reaches to the data sink is increased. 

       The data sink calculates the Coding Complexity according to the 
       quantity of original data it has retrieved. When the Coding 
       Complexity increases, the sink broadcasts a DA message, and when a 
       sensor sends a Coding Packet, the packet will carry the information 
       of Coding Degree. When a sensor receives a DA message, it updates its 
       Coding Degree. Sometimes, a sensor may firstly increase its Coding 
       Complexity according to the number of packets it has sent. 
       Considering that the packets far away from the sink will have a lower 
       possibility to arrive at the sink, sensors take precedence to forward 
       those packets. 

       Data sink has a Symbol Cache and a Codeword Cache. The Symbol Cache 
       is used for storing the original data of the contemporary period, and 
       the Codeword Cache is for caching the codewords which could not be 
       decoded immediately. Different from the sink node, sensors only need 
       Codeword Cache for packets used in the Coding Procedure, including 
       the packet sent out by the node itself and those packets received 
       from other nodes. The size of these caches SHOULD be configured 
       according to node's storage capacity. 
     
     
    Wang                    Expires May 29, 2014                  [Page 5] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

    4. Packet Format 

       This document defines a Hop-by-Hop option and a new kind of ICMPv6 
       Message.  

    4.1. Coding Option 

       The coding option is used for depicting the network coding 
       information in the packet. Coding option is encapsulated in the IPv6 
       Hop-by-Hop Options Header, so that the node on the packet's 
       transmission path can properly process the packet. The format of the 
       coding option is as follows: 

         0                   1                   2                   3 
         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 
                                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
                                        |  Option Type  | Opt Data Len  | 
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
        | Flags |Version|  Send Count   |    Degree     |               | 
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+               | 
        |                     (Source Addresses...)                     | 
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

                              Figure 1: Coding Option 

       Option Type: TBD1.  

       Opt Data Len: 8-bit field indicating the length of the option in 
              octets, excluding the Option Type and Opt Data Len fields. 

       Flags: 4-bit field. Currently the coding flags are defined as follows: 

          Degree Update "U": 0x08. This flag is used for advertising that 
                 the receiver should update its Coding Degree to the value 
                 of Degree in this option. If a sending packet's degree is 
                 equal to the sender's Coding Degree, this flag SHOULD be 
                 set, otherwise this flag is cleared. 

          Degree Advertisement "A": 0x04. This flag indicates that the 
                 receiver SHOULD update its Coding Degree to value (Degree-
                 1). If the sending packet's degree is greater than the 
                 sender's Coding Degree, this flag SHOULD be set, otherwise 
                 it should be cleared. 

          This Code "T": 0x02. This flag indicates that the packet's sender 
                 requests the receiver to retransmit the data generated by 

     
     
    Wang                    Expires May 29, 2014                  [Page 6] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

                 the sender. When sending the next packet, the receiver 
                 SHOULD choose the sender's data to encode and send. 

       Version: 4-bit sequence number used for distinguishing the packets of 
              different period. 

       Send Count: 8-bit fields representing the codeword's priority (see 
              Appendix A.2). 

       Degree: 8-bit fields representing the Coding Complexity of this 
              codeword. 

       Source Addresses: the coding coefficients, which are derived from the 
              data sources' IP address. In this document, each coefficient 
              which occupies 8 bits, represents the IP address's lowest byte. 
              The number of coefficients is determined by the Coding Degree, 
              thus this field is variable length. 

       This option has no multi-byte field, so there is no alignment 
       requirement. 

    4.2. Coding Control Messages 

    4.2.1. Degree Advertisement Message 

       The sink node uses the Degree Advertisement Message to broadcast 
       Coding Degree. This message is a type of ICMPv6 packet [RFC4443] and 
       its format is shown in Figure 2. 

         0                   1                   2                   3 
         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 
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
        |  Type = TBD2  |  Code = 0x00  |           Check Sum           | 
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
        |  InstanceID   |   DegreeAdv   |           Reserved            | 
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-| 

                      Figure 2: Degree Advertisement Message 

       Type: TBD2.  

       Code: 0x00 indicates that this packet is used for advertising the 
              Coding Degree. 

       Check Sum: ICMPv6 packet's checksum. 

       InstanceID: RPL instance identifier. 
     
     
    Wang                    Expires May 29, 2014                  [Page 7] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       DegreeAdv: the Coding Degree advertised by the sink node. Receiver 
              SHOULD update its Coding Degree to the advertised degree. 

       Reserved: this field is currently reserved and the sender should set 
              it to zero. 

    4.2.2. Coding Period Start Message 

       The Coding Period Start Message is carried by ICMPv6 packet, and its 
       format is shown as follows. 

         0                   1                   2                   3 
         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 
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
        |  Type = TBD2  |  Code = 0x01  |           Check Sum           | 
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
        |    Version    |                    Reserved                   | 
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-| 

                       Figure 3: Coding Period Start Message 

       Type: TBD2. 

       Code: 0x01, this packet advertises that coding period starts. 

       Check Sum: ICMPv6 packet's checksum. 

       Version: 8-bit field representing the coding period's sequence number. 

       Reserved: this field is reserved currently and the sender should set 
              it to zero. 

    4.2.3. Coding Procedure Pause Message 

       The Coding Procedure Pause Message is carried by ICMPv6 packet, and 
       its format is shown as follows. 

         0                   1                   2                   3 
         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 
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
        |  Type = TBD2  |     Code      |           Check Sum           | 
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
        |    Version    |                    Reserved                   | 
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-| 

                       Figure 4: Coding Period Pause Message 

     
     
    Wang                    Expires May 29, 2014                  [Page 8] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       Type: TBD2. 

       Code: 0x02, this packet advertises that the Coding Procedure should 
              be stopped temporarily. 

       Check Sum: ICMPv6 packet's checksum. 

       Version: 8-bit field representing the coding period's sequence number. 

       Reserved: this field is reserved currently and the sender should set 
              it to zero. 

    5. Retrieve Information from Network 

       To guarantee that the protocol works properly, sensors and the data 
       sink need some predefined configurations and information collected 
       from the network. 

    5.1. Sensor Nodes Number 

       It is difficult for every node to have the knowledge of the total 
       number of nodes in the network. Before the network is deployed, the 
       number of sensor nodes is hard-coded into every node. It is out of 
       this document's discussion that the network's node number is variable. 

    5.2. Neighbor Nodes Number 

       In order to facilitate calculation, the nodes treat themselves as a 
       neighbor, and thus in the beginning, the number of a node's neighbor 
       is 1. 

       In this document, sensors need to count the number of neighbor nodes. 
       Because sensors overhear all packets on the channel, they can record 
       the source MAC address of the packet which identifies the neighbor. 
       Nodes establish a table of neighbor information, whose entry includes 
       the information listed below. 

       neighbor_id: the neighbor's identifier derived from packet's source 
              MAC address. 

       alive_timer: the neighbor entry's lifetime, its initial value is set 
              to NEIGHBOR_ENTRY_TIME. This field is decreased with time, 
              when it reaches zero, the entry becomes invalid and should be 
              removed from the table. 

       flags: flags that indicate the neighbor's attributes. Currently 
              defined flags are depicted below: 
     
     
    Wang                    Expires May 29, 2014                  [Page 9] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

          Child "C": 0x80, indicating this neighbor is a child node. Next 
                 section will introduce this flag's usage. 

       When a packet arrives, if its source MAC address is a unicast address, 
       then the node searches the neighbor table to find if the 
       corresponding neighbor entry is present. If not, then a new entry is 
       added to the table and the entry's fields are initialized. Otherwise, 
       the existing entry is updated, including the alive_timer field. A 
       node determines the neighbor node number by the number of the 
       neighbor entries. Note that the data sink should be excluded when 
       collecting the neighbor information. 

       Even if a node overhears to all packets on the link, the neighbor 
       information may not be collected or will be removed due to the 
       expiration of the alive_timer if there is no packet sent on the link. 
       In this circumstance, this document provides a pair of 
       Request/Response message to solve this problem. Before the neighbor 
       entry is expired, the recording node sends a Request message. If the 
       target neighbor is properly functioning, it will send back a Response 
       message after receiving the Request message. The requesting node 
       updates the target neighbor's entry when receiving the Response 
       message. Since all sensors work under Promiscuous Mode, other nodes 
       in the interactive nodes' communication range can also receive the 
       Request/Response message, such that their neighbor information can be 
       updated at the same time. An implementation MAY use the Neighbor 
       Solicitation/Advertisement (NS/NA) in IPv6 Neighbor Discovery 
       [RFC4861] to represent the Request/Response messages. 

    5.3. Child Nodes Number 

       A child node must be a neighbor of a node, so the child node's 
       information MAY also be saved in the neighbor information table. The 
       child entry is distinguished from normal neighbor by the flags field 
       of the entry. Specifically, the "C" flag (see section 5.2) is set in 
       the child entry's flags field while it is cleared in the normal 
       neighbor entry's flags field. Child entry's default lifetime which is 
       used to initialize the alive_timer is CHILD_ENTRY_TIME. 

       Under the Downward Routing Storing Mode of RPL, the RPL DAO message 
       is always sent with link-local address, from child to parent node. 
       Nodes can record the DAO message's source IP address to evaluate the 
       child nodes number. In this document, it is assumed that a node's 
       link-local IP address is derived from its MAC address, and thus it is 
       equivalent to using the IP address or the MAC address to identify a 
       node. 


     
     
    Wang                    Expires May 29, 2014                 [Page 10] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       The sending rate of DAO message gradually decreases due to the 
       stabilization of the network. Thus in this specification, the 
       reserved fields in DIO Message and NS/NA packet are utilized for 
       facilitating the counting of child nodes number. The flags and 
       reserved fields in DIO message are not used in the RPL specification. 
       NS packet's reserved field has 4 bytes available and NA packet's 
       flags and reserved fields have 29 bits available. This specification 
       uses these available fields to carry child information. 

       A child flag "C" is used in the three types of packets above. When 
       the DIO's flags field is set with this "C" flag (see section 10.5), 
       the reserved field of DIO represents the identifier of the sender's 
       parent node, which is the lowest byte of the node's MAC address. If 
       the DIO receiver is the target parent node that the reserved field 
       stands for, the sender is added to the neighbor information table or 
       it is updated as a child node. If the receiver is not the target 
       parent, but the sender is recorded as the child of this node, the 
       child entry is replaced with a neighbor entry of the sender. 

       NS packet has no flags field. This document defines the first byte of 
       the reserved field as flags field. When the flags field of NS is set 
       with "C" flag, the sender is inquiring its child. The target NS 
       receiver looks up the routing table to decide if the sender is the 
       preferred parent. If the NS sender is the target receiver's parent, 
       then the receiver sends a NA packet with the flags field set a "C" 
       flag, acknowledging that the NA sender is the NS sender's child. When 
       NS sender receives the NA packet, the NA sender is added to the 
       neighbor information table as a child or the NA sender's child entry 
       is updated. 

       Nodes count the neighbor entries which set the child flag described 
       in Section 5.2 to determine the child nodes number. 

    6. Coding Procedure Control 

    6.1. Coding Period 

       In order to periodically transmit data, synchronization among all 
       nodes is required, though it is not strict. This section introduces 
       the mechanism to start and stop the Coding Procedure. The duration of 
       the coding period is configured by the application and the Coding 
       Procedure's start and stop are controlled by the coding module. 

       Data sink sets T as the coding period, and broadcasts a Coding Period 
       Start (CPS) message which will be flooded in the network. When a node 
       receives a CPS message, it compares the message's Version field with 
       its local record version which represents the node's coding period 
     
     
    Wang                    Expires May 29, 2014                 [Page 11] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       sequence number. If the message's version is higher, the node updates 
       its local version, resets the Codeword Cache and enters a new coding 
       period, and relays the start message. If the message's version is 
       lower, the node does not update its local version but updates the 
       message's Version field, then relays the message to notify the 
       message's last sender. If the two versions are equal, then discards 
       the message and does not do any more processing. 

       If a node receives a Coding Procedure Pause (CPP) message, then it 
       compares the versions like the CPS message. If the message's version 
       matches the local version and the Coding Procedure is running, the 
       Coding Procedure is stopped until next coding period starts and the 
       CPP message is relayed. If the two versions are the same but the 
       Coding Procedure has already stopped or the pause message's version 
       is inconsistent with the local version, then this message should be 
       ignored. 

       If a node receives a Coding Packet when Coding Procedure is paused, 
       then discards the packet and broadcasts a CPP message to notice the 
       neighbors. When Coding Procedure is running and a node receives a 
       Coding Packet, it compares the Version field of the packet's coding 
       option to the local version. If the local version is lower than the 
       coding option's Version, then local version is updated, the Codeword 
       Cache is reset and the node reloads the Coding Procedure, and sends 
       out a CPS message. If the local version is higher, which indicates 
       the data is obsolete, the data sink or sensors should discard this 
       packet, and send out a CPS message to inform the neighbors to get to 
       the next coding period. 

       When a sensor needs to send a Coding Control message (CPS, CPP), it 
       MUST postpone the sending by a random range of time to avoid nodes 
       sending packet synchronously, which causes collisions in the wireless 
       channel. The data sink does not need back off when sending Coding 
       Control message. 

    6.2. Growth of Coding Degree 

       According to the number of packets it receives, the data sink decides 
       the time when to increase and advertise the Coding Degree. The 
       sensors propagate the degree information by piggybacking it in the 
       Coding Packets. 

       A node needs the following variables to maintain the Coding Degree: 

       o N: the network's scale, i.e., the number of sensors in the network. 

       The Data sink additionally needs the following data: 
     
     
    Wang                    Expires May 29, 2014                 [Page 12] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       o R: the degree transition sequence.  

       o NsRecv: the number of different Symbols that the data sink has 
          received. 

       o DegExp: the Coding Degree of the packet that the data sink expects 
          to receive. 

       The data sink controls the growth of Coding Degree as follows: 

       1. The sink initiates the variables mentioned above: R is initialized 
          according to N (see Appendix B.1). DegExp is set to 1 and NsRecv 
          is set to 0. 

       2. If a Coding Packet Pr is received, and Pr's Coding Degree is less 
          than DegExp, or Pr's Coding Degree equals to DegExp and the Coding 
          Option's Flags field of Pr sets the "U" flag, the sink broadcasts 
          DA message with Coding Degree DegExp to its neighbors. 

       3. If Pr is decoded successfully and a new Symbol is generated, the 
          data sink updates NsRecv. If NsRecv is equal to or greater than 
          R[DegExp], the sink increases DegExp until NsRecv is less than 
          R[DegExp] or DegExp reaches MAX_DEGREE, and broadcasts DA message 
          with the new Coding Degree to its neighbors. 

       4. Repeat Steps 2 and 3, until the Coding Procedure is paused or new 
          coding period begins. 

       The sensors additionally need the following data: 

       o K: the degree transition sequence.  

       o DegCur: the current Coding Degree. 

       o BoolDegState: the current Coding Degree's state which is a Boolean 
          value. When it is TRUE, DegCur has been updated by DA message or 
          Coding Packet. When it is FALSE, DegCur has been updated by the 
          increment of the number of sending packet. 

       o NumRegular: the number of Regular Packets a sensor has sent. 

       o NumOverhear: the number of Overheard Packets a sensor has sent. 

       The sensors control the growth of Coding Degree as follows: 



     
     
    Wang                    Expires May 29, 2014                 [Page 13] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       1. The sensor initiates related variables: it calculates the sequence 
          K according to N (see Appendix B.1), sets DegCur to 1, sets 
          BoolDegState to TRUE, sets NumRegular and NumOverhear to 0. 

       2. A sensor receives a DA message, which broadcasts a Coding Degree 
          DegAdv. If DegAdv is more than DegCur, the node updates DegCur to 
          DegAdv, sets BoolDegState to TRUE, and updates the sequence K (see 
          Appendix B.2). If DegAdv equals to DegCur and BoolDegState equals 
          to FALSE, BoolDegState is set to TRUE and the sequence K is 
          updated. 

       3. A sensor sends a Coding Packet Ps. If Ps's Coding Degree is equal 
          to DegCur and BoolDegState is TRUE, the packet's Coding Option's 
          Flags is set with the "U" flag. If Ps's Coding Degree equal to 
          (D_now-1) and BoolDegState is TRUE, the packet's Coding Option's 
          Flags is set with the "A" flag. In other cases, the "U" and "A" 
          flag are cleared. 

       4. A sensor receives a Coding Packet Pr with degree DegAdv and Pr's 
          Coding Option's Flags field is set with the "U" flag. If DegAdv is 
          more than DegCur, the node updates DegCur to DegAdv, sets 
          BoolDegState to TRUE, and updates K. If DegAdv equals to DegCur 
          and BoolDegState is FALSE, then BoolDegState is set to TRUE, and 
          the sequence K is updated. 

       5. A sensor receives a Coding Packet Pr with degree DegAdv and Pr's 
          Coding Option's Flags field is set with the "A" flag. If (DegAdv-1) 
          is more than DegCur, DegCur is updated to DegAdv, BoolDegState is 
          set to TRUE, and the sequence K is updated. If (DegAdv-1) equals 
          to DegCur and BoolDegState is FALSE, the node sets BoolDegState to 
          TRUE, and updates the sequence K. 

       6. The sensor checks the number of packets it has sent. If 
           
              ( NumRegular + NumOverhear ) > K[DegCur] 
           
          Then DegCur is increased until the above expression is false or 
          DegCur reaches its maximum value and sets BoolDegState to FALSE. 

       7. Repeat Steps 2 to 6, until the Coding Procedure is paused or new 
          coding period begins. 

       Since the nodes located in the network edge have fewer packets to 
       send, it is difficult to encode high degree packet. But, it is 
       possible to re-code high degree packets at intermediate nodes. Thus, 
       those nodes in the edge of the network need not to use the same 
       degree distribution, and the sensor's increment of degree (DegCur) is 
     
     
    Wang                    Expires May 29, 2014                 [Page 14] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       limited by the node's hop count. For example, the nodes whose hop 
       count is 1 can reach a degree of MAX_DEGREE, hop count 2 nodes can 
       reach (MAX_DEGREE-1)...hop count H nodes can reach MAX(MAX_DEGREE-
       H+1,2). When a sensor runs the above control procedure, this limit 
       should be considered at first. 

    7. Coding Packet Processing 

       Sensors run in Promiscuous Mode at data link layer, to receive 
       packets including those whose destination is not this node. Sensors 
       associate every packet with a variable, CodeFlags, to save flags. 
       When CODES_FLAG_PROMISCUOUS is set, the associated packet is treated 
       as an Overheard Packet whose destination is not the receive node. 
       When the CODES_FLAG_PROMISCUOUS flag is cleared, the associated 
       packet is a Regular Packet which should be sent to this node. 

       Since sensors run in Promiscuous Mode, data can be disseminated more 
       widely so that it can flow through multiple paths, increasing the 
       possibility that the data reaches the data sink. By receiving the 
       Overheard Packet, sensors can collect more data from other nodes. 
       Thus there are more coding opportunities, which makes the diffusion 
       of data more effectively. 

    7.1. Coding Packet and Codewords 

    7.1.1. Codewords and Packets Transformation 

       Almost all nodes in LLNs are resource constrained including the 
       storage. In order to cut down the requirement of memory, received 
       packets are not directly added to the Codeword Cache, but the coding 
       data and its related information are extracted from the packet and 
       saved as codewords. In this way, redundant fields in the packet are 
       elided. When decoding or encoding, reading data from codewords is 
       more convenient than that from the original packets. An item of 
       Codeword Cache SHOULD include the fields listed below: 

       payload_length: indicating the length of the packet's data that is 
              the IP packet excludes IP header and Hop-by-Hop Options Header. 

       hop_limit: the Hop Limit field of the IP packet which is used by the 
              router to decide if drop the packet. 

       next_header: the Next Header field in the Hop-by-Hop Options Header.  

       version: the Version field of the Coding Option. 


     
     
    Wang                    Expires May 29, 2014                 [Page 15] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       flags: saving flags for Coding Procedure. This field is initialized 
              to zero. 

       degree: the Coding Degree of the codeword, corresponding to the 
              Degree field of the packet's Coding Option. The maximum Coding 
              Degree defined in this document is MAX_DEGREE. 

       src_ids: the codeword's coding coefficients extracted from the Coding 
              Option's Source Address field. In order to facilitate encoding 
              and decoding, the src_ids are sorted in ascending order. 
              Original packets' source IP address which is utilized to 
              calculate the checksum in the transmission layer, can be 
              recovered according to the coding coefficients. 

       data: the coded data, that is, the part of a packet represented by 
              the payload_length, which is the payload after Hop-by-Hop 
              Options Header. 

       send_count: this field represents the sending priority of cached 
              codewords corresponding to the Send Count field of the 
              packet's Coding Option, and thus only used by sensors. The 
              codewords in the Codeword Cache are sorted according to the 
              degree and send_count. That is, firstly, the less the 
              send_count, the more precedent the codeword is; and secondly, 
              the higher the degree is, the prior the codeword is. Then 
              minimum value by which send_count can be increased or 
              decreased is PRI_UNIT. 

       The following fields of a Coding Packet are not saved to the Codeword 
       Cache, since they can be recovered from common knowledge or coding 
       information. Because of IPv6, The Version field of all IP packet is 
       set to 0x06. The Traffic Class and Flow Label fields in an IP packet 
       that encapsulates the UDP data is set to zero. The Coding Packets 
       which include a Coding Option must have a Hop-by-Hop Options Header, 
       so the Next Header field in the IP Header is always set to 0x00. 
       Source Address also does not need to be saved, since it can be 
       recovered from the coding coefficients. Destination Address is elided 
       in the cache because all the Coding Packet's destination should be 
       the sink node. Any Coding Packet whose destination is not the sink 
       node should be dropped quietly. Because only the sink node is the 
       Coding Packets' destination, there is no problem with this processing 
       method. 

       Management of the Codeword Cache, such as replacement strategy of a 
       codeword in the Codeword Cache, may influence the coding efficiency. 
       It is out of this document's scope to determine an optimal method to 

     
     
    Wang                    Expires May 29, 2014                 [Page 16] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       manage the Codeword Cache. An implementation may refer to the method 
       in the Appendix A.2. 

       Besides the above rules, when transforming a codeword to a packet, if 
       the codeword has degree one, the coding coefficient is used to 
       recover the new packet's Source Address. If the codeword's degree is 
       more than 1, the coding node's IP address is used as the new packet's 
       Source Address. The RPL option [RFC6553] and Coding Option should be 
       removed, since they are used in the link local scope and the 
       information they carried has been read by the current node. Also, the 
       Pad1 and PadN option should be removed because they carry no 
       information. When converting a codeword to a packet, RPL option and 
       Coding Option should be added to the Hop-by-Hop Options Header. To 
       meet the alignment requirement of the extension header and options, 
       the Pad1 and PadN option may be added into the header. The header's 
       Length field is computed according to the total length of the options 
       in the header. 

    7.1.2. The Addition of Codewords 

       The addition of codewords is how to combine multiple codeword 
       together to generate a new codeword.  

       The codewords' data field is added in a bitwise "XOR" manner. If the 
       codewords' payload_length is different, then the codewords which has 
       smaller payload_length is padded with zero. Therefore, the addition 
       also be called the "XOR" operation. The following text depicts how to 
       perform addition on the other fields of the codeword. 

       1. The payload length of codewords may be different, since the 
          corresponding Coding Packet may carry data with different length 
          or have different extension headers. In this document, the 
          codewords which have different payload_length can be coded 
          together, and the packets that have smaller length are padded with 
          zero bytes. In this way, the new codeword's payload_length field 
          is set to the maximum value of payload_length among the packets 
          participating in coding. Thanks to the length field of UDP packet 
          [RFC768], it is easy to remove the padding and recover the 
          original payload after transforming codewords to Coding Packet. 

       2. In order to keep the validity of hop_limit, the minimum value 
          among the coding involved codewords is chosen as the new 
          codeword's hop_limit. 




     
     
    Wang                    Expires May 29, 2014                 [Page 17] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       3. The next_header field of degree-one codeword indicates the next 
          extension header type or the upper layer protocol type of the 
          original packet. This field of degree-more codeword is the "XOR" 
          result of multiple codewords' corresponding field. For example, if 
          two degree-one codewords' next_header is 17(UDP), and another 
          degree-one codeword's is 0(Hop-by-Hop Options Header), then the 
          new codeword's this field is 0 (17 XOR 17 XOR 0). This field is 
          used for identifying the next header and will not be read by the 
          intermediate node, so coding this field is feasible. The decoding 
          node will recover this field along with the coding data. 

       4. When encoding two codewords, the common coefficients of the two 
          will be eliminated. Specifically, the new codeword's src_ids field 
          is the combination of the two's excludes those common ones, thus 
          the degree of the new codeword is calculated as follows: 
           
              degree_new = degree_a + degree_b - common_degree; 

       5. Only the codewords which has the same version field can be coded 
          together, and thus the new codeword's version field is the same 
          with the old ones'. 

       6. When encoding two codewords, if one of the codewords' send_count 
          equals to zero, the new codeword's send_count field is equal to 
          another codeword's send_count. Otherwise, the send_count of the 
          new codeword is a relatively small value of the two codewords' 
          send_count. 

    7.2. Receiving Packet 

       All packets are received at the link layer and the network coding 
       module only needs to process those Coding Packet (and in this 
       document, only UDP packet will be coded). Hence a packet filter 
       should be added to drop those packets which need not to be processed, 
       so as to reduce the processing cost of sensors. 

       After IP header is handled at the network layer, the Hop-by-Hop 
       Options Header of the packet will be checked. If no Hop-by-Hop 
       Options Header or no Coding Option in the Hop-by-Hop Options Header 
       presents, this packet is not a Coding Packet. If such a packet's 
       CodeFlags is set with the flag CODES_FLAG_PROMISCUOUS, it should be 
       quietly dropped, since it is an overheard non-Coding Packet, such as 
       those UDP data which need not be coded or ICMP messages. If the flag 
       CODES_FLAG_PROMISCUOUS is not set, the packet is a non-Coding Packet, 
       and should be processed according to the regular IP routine. 


     
     
    Wang                    Expires May 29, 2014                 [Page 18] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       If a Coding Option exists there, this packet is a Coding Packet and 
       needs to be re-coded and forwarded by the sensors or be decoded by 
       the sink node. After re-coding or decoding, if a new packet is 
       generated, the CODES_FLAG_PROMISCUOUS flag should be cleared from its 
       CodeFlags field.  

       This document sets the sink node as Coding Packet's destination, and 
       thus all nodes only deal with the packets whose destination is the 
       sink node, and other packets should be directly dropped with no more 
       processing. If a Coding Packet is received, and its destination is 
       the sink, the sensor reads the Coding Option, retrieves the packet's 
       coding information, and adds the packet to the Codeword Cache. If the 
       received packet is an Overheard Packet, the sensor does not forward 
       the packet immediately but backs off a random time to encode and 
       forward it. Otherwise, the received packet is re-coded and the new 
       packet is forwarded at once. 

       If re-coding is needed, the coding algorithm (see section 7.3) is 
       performed to generate new codeword and Coding Option is added to it 
       to generate a new Coding Packet. Before the new packet is sent out, 
       RPL option should be added. If re-coding is not needed before 
       forwarding, the RPL option of the received packet is updated. 

       If the data sink receives a Coding Packet whose destination is the 
       sink, then it tries to decode the packet (see section 7.3). If 
       decoding succeeds, new Symbols are generated and transformed into a 
       packet. The new packets are processed by the network layer like other 
       non-Coding Packet, and delivered to the upper layer. The packet which 
       cannot be decoded immediately is moved to the Codeword Cache. If 
       multiple Symbols are produced in one decoding function, those Symbols 
       should be processed successively. 

    7.3. Sending Packet 

       In Promiscuous Mode, nodes will receive two type of Coding Packets, 
       i.e., Regular Packet whose link layer destination is the receiver and 
       Overheard Packet whose link layer destination is not the receiver. 
       Obviously, a node cannot forward all the Overheard Packets. Otherwise, 
       it is prone to produce broadcast storm when neighbors relay each 
       other's packets in the dense node area. 

       This document specifies a forwarding strategy which combines the 
       sending of the two kinds of packets. Firstly, when receiving a 
       Regular Packet, the sensor immediately re-codes and relays it, to 
       minimize the delay of the packet. Secondly, to avoid the situation 
       that too many Overheard Packets are sent out in the dense node area 
       and guarantee that there are some Overheard Packets to be sent in the 
     
     
    Wang                    Expires May 29, 2014                 [Page 19] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       sparse node area, this document considers that the send count of 
       Regular Packets and Overheard Packets is in proportion to the number 
       of neighbors and the number of child nodes. Assuming that the number 
       of neighbors of a node is denoted by NumNeighbor, and the number of 
       child nodes is NumChild, then the number of non-child neighbors is 
       (NumNeighbor - NumChild). Suppose that the number of Regular Packet 
       which the node has sent is NumRegular, and NumOverhear is the number 
       of Overheard Packet the node has sent, then a node can forward an 
       Overheard Packet if the following condition is satisfied: 

           NumOverhear/NumRegular <= (NumNeighbor-NumChild)/NumChild 

       The procedure of sending packet is presented below: 

       1. If a Regular Packet Pr is received, and Pr has not been relayed, 
          Pr is re-coded and sent. If Pr has been sent before, and 
           
            NumOverhear/NumRegular >= (NumNeighbor-NumChild)/NumChild 
           
          Pr is also re-coded and forwarded. 

       2. If an Overheard Packet Po is received, and 
           
            NumOverhear/NumRegular < (NumNeighbor-NumChild)/NumChild 
           
          back off a random time, and then the node encode and forward a new 
          Coding Packet. 

       3. If Regular Packet is sent, NumRegular is increased. While 
          overheard Coding Packet is sent, NumOverhear is increased. When 
          one of these values is increased, the degree growth algorithm 
          should be performed (see section 5.2). 

       According to the settings specified in this document, only the UDP 
       packets that sensors send to the sink node need the coding processing, 
       while the sink node sends packets without coding. Besides, all the 
       control messages should not be coded. The packet that does not 
       contain Coding Option is treated as a non-Coding Packet, so if a 
       packet needs not be coded, MUST not add a Coding Option to it. 

       In order to enable the sensor to flexibly send Coding Packet and non-
       Coding Packet, an implementation SHOULD provide an interface for the 
       upper layer. When sending Coding Packet, this interface sets the 
       packet's associated variable CodeFlags with the flag 
       CODES_FLAG_ENCODE to let the coding module know the packet need to be 
       coded. When a sensor sends out its own coding data, it should save 
       the codeword to Codeword Cache. To ensure the sensor's own data to be 
     
     
    Wang                    Expires May 29, 2014                 [Page 20] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       delivered to the data sink, this Codeword should be stored separately 
       from other received codewords to avoid it be replaced by new 
       codewords. 

    7.4. Encoding and Decoding 

       The encoding function inputs one or more codewords, "XORs" them 
       together and generates a new codeword. The operation and the output 
       of the encoding function are determined, but the input, that is, how 
       to choose the source codewords is not determined by this document. 
       There may be many algorithm to choose codewords to gain high coding 
       efficiency, and this document specifies one in the Appendix A.3. 

       Given the coding information carried by the Coding Option, which 
       provides the coding coefficients, decoding can be performed. This 
       document illustrates the decoding algorithm in Appendix A.1. 

    8. Constants and Variables 

       The following is a summary of constants and variables adopted by this 
       document: 

       T: the duration of coding period whose value is 120 seconds. 

       NEIGHBOR_ENTRY_TIME: the lifetime of neighbor entry in the neighbor 
       information table. Its default value is 15 seconds. 

       CHILD_ENTRY_TIME: the lifetime of child entry in the neighbor 
       information table. Its default value is 20 seconds. 

       CODES_FLAG_PROMISCUOUS: this is a flag used for setting the variable 
       CodeFlags. It indicates the associated packet is an Overheard Packet. 
       Its value is 0x0001. 

       CODES_FLAG_ENCODE: this is a flag used for setting the variable 
       CodeFlags. It indicates the associated packet need to be coded. Its 
       value is 0x0002. 

       MAX_DEGREE: the Coding Degree's upper limit. Setting a limit for the 
       Coding Degree is for limiting the packet's overhead and the 
       computational complexity when degree grows. Its value is 16. 

       PRI_UNIT: the unit of the codeword's priority. Its value is set to 4. 




     
     
    Wang                    Expires May 29, 2014                 [Page 21] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

    9. Security Considerations 

       This document mainly aims at the implementation of data transmission, 
       and security schemes are not the goal, so this section only mentions 
       some primary threat to this specification. Additionally, IPsec 
       [RFC4301] has put forward a security architecture for the Internet 
       layer, RPL [RFC6550] has given a framework for routing in LLNs, and 
       other documents may propose new security solutions for this 
       specification. 

       Nodes in LLNs communicate on the wireless channel. This specification 
       provides that a node can overhear all the packet on the wireless 
       channel. So an attack node can easily eavesdrop in the same way. If 
       active attack node is present, then the coding data may be tampered 
       and injected into the network again, which will pollute a large 
       amount of coding data in the network. 

       Furthermore, if hostile nodes irregularly send the DA message, a 
       node's Coding Degree may growth too quickly, resulting in efficiency 
       degradation of the coding algorithm. If the hostile nodes send the 
       Coding Control message (CPS, CPP) at the wrong time, it usually makes 
       nodes pause the Coding Procedure and drop the packets from neighbors, 
       result in denial of service. 

       Since those fake nodes may not run according to the RPL protocol and 
       this specification, they cannot be treated as neighbor nodes or child 
       nodes. A node can hardly recognize a fake node, so there may be a 
       deviation on the count of neighbors and child nodes, which can affect 
       the protocol's performance. 

       In order to ensure that the protocol is running properly, 
       confidentiality must be provided, that is, the source of a packet 
       must be credible and the packet must not be modified during the 
       transmission. Generally, a data authentication scheme is needed to 
       provide confidentiality. To protect packets from eavesdropping, an 
       encryption mechanism should be adopted and both symmetric encryption 
       and public key encryption can be an alternative method. However, the 
       nodes in LLNs is resources limited, therefore, the security mechanism 
       must be provided with relatively low cost. The solution like IPsec-AH 
       and IPsec-ESP may not fit for the resources constrained nodes.  






     
     
    Wang                    Expires May 29, 2014                 [Page 22] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

    10. IANA Considerations 

    10.1. Additions to Hop-by-Hop Options 

       IANA has created a registry for the Hop-by-Hop Options. This document 
       defines the Coding Option, which carries coding information including 
       coding coefficients. The Option Type's value is as follows: 

         Hex Value Binary Value 
                   act chg  rest    Description    Reference 
         --------- --- --- ------- -------------- --------------- 
           TBD1     01   1  xxxxx  Coding Option  [This document] 

                   Figure 5: Details of the Option Type's value 

       As specified in IPv6, the first two bits indicate that the IPv6 node 
       MUST discard the packet if it doesn't recognize the option type. 
       Because the packet including this option was coded, the node which do 
       not realize the coding option can't further handle it. Since the 
       packet needs to be re-coded during transmission, it may be modified 
       by the intermediate node and the Type value's third bit is set to 1. 
       IANA is requested to assign a new value for the Coding Option in the 
       Hop-by-Hop Options registry to replace TBD1 before publication 
       [RFC5226]. 

    10.2. New Registry for Coding Option's Flags 

       IANA is requested to define a new registry for the Coding Option's 
       Flags field. The flags can be set in the Flags field is depicted 
       below: 

       +-------+-----------------------------------+-------------------+ 
       | Value |              Meaning              |     Reference     | 
       +-------+-----------------------------------+-------------------+ 
       | 0x08  | Degree Update                     | This document     | 
       +-------+-----------------------------------+-------------------+ 
       | 0x04  | Degree Advertisement              | This document     | 
       +-------+-----------------------------------+-------------------+ 
       | 0x02  | This Code                         | This document     | 
       +-------+-----------------------------------+-------------------+ 

                          Figure 6: Coding Option's Flags 

       The details of these flags are described in section 4.1. 



     
     
    Wang                    Expires May 29, 2014                 [Page 23] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

    10.3. Coding Control Message 

       Coding Control message is defined as a new type of ICMPv6 
       informational message, which is used for the control of Coding 
       Procedure and the degree growth during the Coding Procedure.  

       IANA has created a registry for the ICMPv6 Type number and IANA is 
       requested to assign a number between 0x80~0xFF for the Coding Control 
       message to replace the value TBD2 in this document before publication. 

    10.4. New Registry for Coding Control Codes 

       IANA is requested to define a new registry for the Coding Control 
       Message's Codes. The Codes' value and meaning are illustrated in the 
       following figure: 

       +-------+-----------------------------------+-------------------+ 
       | Value |              Meaning              |     Reference     | 
       +-------+-----------------------------------+-------------------+ 
       | 0x00  | Degree Advertisement Message      | This document     | 
       +-------+-----------------------------------+-------------------+ 
       | 0x01  | Coding Period Start Message       | This document     | 
       +-------+-----------------------------------+-------------------+ 
       | 0x02  | Coding Procedure Pause Message    | This document     | 
       +-------+-----------------------------------+-------------------+ 

                     Figure 7: Coding Control Message's Codes 

       The details of the Codes field are described in section 4.2. 

    10.5. Child Flag 

       IANA is requested to assign a new flag value used for the RPL DIO's 
       Flags field. This new flag's value is TBD3, and should be replaced by 
       the IANA assigned value before publication. 

       IANA is requested to assigned a new flag value used for the NA's 
       Flags field. This new flag's value is TBD4, and should be replaced by 
       the IANA assign value before publication. 

       Since NS has no flags field and this document defines the first byte 
       of the reserved field as flags field, IANA is requested to create a 
       new registry for the NS flags field. IANA is also requested to assign 
       a value to the Child Flag (in section 6.3). The new entry should be 
       tracked with the following properties: 


     
     
    Wang                    Expires May 29, 2014                 [Page 24] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       +-------+-----------------------------------+-------------------+ 
       | Value |              Meaning              |     Reference     | 
       +-------+-----------------------------------+-------------------+ 
       | 0x80  | Child Flag                        | This document     | 
       +-------+-----------------------------------+-------------------+ 

                  Figure 8: new Flags registry for the NS packet 

    11. References 

    11.1. Normative References 

       [RFC6550] Winter, T., Ed., Thubert, P., Ed., Brandt, A., Hui, 
                 J.,Kelsey, R., Levis, P., Pister, K., Struik, R., Vasseur, 
                 JP., and Alexander, R., "RPL: IPv6 Routing Protocol for 
                 Low-Power and Lossy Networks", RFC 6550, March 2012. 

       [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 
                 Requirement Levels", BCP 14, RFC 2119, March 1997. 

       [RFC2460] Deering, S. and Hinden, R., "Internet Protocol, Version 6 
                 (IPv6) Specification", RFC 2460, December 1998. 

       [RFC4443] Conta, A., Deering, S., and Gupta, M., "Internet Control 
                 Message Protocol (ICMPv6) for the Internet Protocol Version 
                 6 (IPv6) Specification", RFC 4443, March 2006. 

       [RFC768]  Postel, J., "User Datagram Protocol", RFC 768, August 1980. 

       [RFC4861] Narten, T., Nordmark, E., Simpson, W., and Soliman, H., 
                 "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, 
                 September 2007. 

       [RFC6553] Hui, J., and Vasseur, JP., "The Routing Protocol for Low-
                 Power and Lossy Networks (RPL) Option for Carrying RPL 
                 Information in Data-Plane Datagrams", RFC 6553, March 2012. 

       [RFC5226] Narten, T. and Alvestrand, H., "Guidelines for Writing an 
                 IANA Considerations Section in RFCs", BCP 26, RFC 5226, May 
                 2008. 

    11.2. Informative References 

       [Kamra06] Kamra, A., Misra, V., Feldman, J., and Rubenstein, D., 
                 "Growth codes: Maximizing sensor network data persistence", 
                 ACM SIGCOMM Computer Communication Review, Vol. 36, No. 4, 
                 pp. 255-266, September 2006. 
     
     
    Wang                    Expires May 29, 2014                 [Page 25] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       [ROLL-TERMS] 
                 Vasseur, JP., "Terminology in Low power And Lossy Networks", 
                 Work in Progress, March 2013. 

    12. Acknowledgments 

       This document was prepared using 2-Word-v2.0.template.dot. 







































     
     
    Wang                    Expires May 29, 2014                 [Page 26] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

    Appendix A. Encoding and Decoding Algorithm 

    A.1. Decoding 

       Data sink maintains a Codeword Cache and a Symbol Cache, which are 
       denoted by CodeCache and SymbolCache respectively, to be used for 
       decoding. 

       When the sink receives a valid Coding Packet Pvc, it should conforms 
       to the following rules to perform decoding: 

       1. If Pvc's Coding Degree is one, Pvc is transformed into a Symbol; 
          if Pvc's degree is more than one, it is transformed into a 
          codeword denoted by Cw. 

       2. Simplifying the codeword Cw by the SymbolCache, i.e., performing 
          addition on Cw with the known Symbols in SymbolCache, if Cw 
          contains them. The simplification removes the known data in Cw. 
          After simplification, if Cw's degree reaches 1, then Cw is 
          transformed into a Symbol. 

       3. Simplifying Cw by CodeCache, i.e., performing addition on Cw with 
          the known codewords in CodeCache, if Cw contains them. After 
          simplification, if Cw's degree reaches 1, then Cw is transformed 
          into a Symbol. 

       4. Simplifying CodeCache by Cw, i.e., performing addition on 
          codewords in CodeCache with Cw. If a codeword in CodeCache 
          contains Cw, Cw is removed from the codewords. After 
          simplification, the degree-1 codewords in CodeCache are 
          transformed into Symbols. 

       5. In the above rules, if a Symbol is generated and it is not put in 
          SymbolCache, it is denoted by S here. S is put into SymbolCache 
          and CodeCache can also be simplified by S like the rule 4.  

       6. During the simplification, if Cw's degree reaches zero, that is to 
          say, there is no new data carried by codeword Cw, the decoding 
          function thus ends here. A codeword in the CodeCache should also 
          be removed if its degree reaches zero or it is transformed into a 
          Symbol.  

       7. Through the above rules, if Cw's Coding Degree is still more than 
          one, Cw should be added to CodeCache for future decoding. 

       When a new Symbol presents, it should be recovered as an IP packet to 
       be delivered to the network layer for later processing. 
     
     
    Wang                    Expires May 29, 2014                 [Page 27] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

    A.2. Manage Codewords in the Codeword Cache 

       Codeword Cache size depends on the storage size of the node. However, 
       usually the sensor's storage is constrained which limits the number 
       of codewords in the Codeword Cache, and thus the coding opportunity 
       is decreased. In order to reduce the influence of memory size, the 
       sensor needs to manage the Codeword Cache. The codewords that no more 
       need to be sent should not be put in the Codeword Cache; and some 
       codewords in the Codeword Cache may become obsolete with the growth 
       of Coding Degree and the increasing of their send_count, which should 
       be removed when there is no more space to save new codeword in the 
       Codeword Cache. 

       In the Codeword Cache, codewords are sorted by the send_count and 
       degree fields of each item. A node updates the value of send_count 
       through receiving and sending Coding Packets. The larger the value of 
       send_count is, the lower the codeword's priority is. When a sensor 
       receives a codeword from the lower rank node, this codeword's 
       send_count is increased by P1; when receiving a codeword from the 
       equal rank node or sending a codeword, this codeword's send_count is 
       increased by P2; when receiving a codeword from higher rank node, 
       this codeword's send_count is increased by P3. To ensure the data 
       which is further from the sink can reach the sink with a relatively 
       high possibility, the following inequality should be satisfied: 

           P1 > P2 > P3; 

       Thus, let P1 = 32*PRI_UNIT, P2 = 4*PRI_UNIT, P3 = -2*PRI_UNIT. 

       Let CodeCache denotes the Codeword Cache, DegCur denotes the current 
       Coding Degree. If a sensor receives a codeword Cr, the following 
       rules should be observed to decide how to store the codeword: 

       1. If Cr has been in the CodeCache, i.e., Cr equals to CodeCache[i] 
          which denotes one of the codewords in the Codeword Cache, then Cr 
          is discarded and the send_count of CodeCache[i] updated according 
          to where Cr is received. 

       2. If Cr includes CodeCache[i], then Cr is simplified by CodeCache[i] 
          (see Appendix A.1) and the send_count of CodeCache[i] is updated 
          according to where Cr is received. 

       3. When CodeCache[i] includes Cr, if CodeCache is not full, then 
          CodeCache[i] is simplified by Cr; and if CodeCache is full, and 
          CodeCache[i]'s degree is less than DegCur, Cr is discarded; 
          otherwise CodeCache[i] is replaced with Cr. 

     
     
    Wang                    Expires May 29, 2014                 [Page 28] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       4. If CodeCache is not full, Cr should be stored in CodeCache. 

       5. When CodeCache is full and Cr's degree is higher than DegCur, if 
          the maximum degree of the codewords in CodeCache is lower than 
          Cr's, then drops Cr; otherwise, the codeword whose send_count is 
          the largest should be replaced with Cr. 

       6. If CodeCache is full and Cr's degree is lower than DegCur, the 
          codeword whose send_count is the largest in the Codeword Cache, 
          should be replaced with Cr.  

       7. If the content of the Codeword Cache is changed, it is necessary 
          to sort the Codeword Cache again according to the degree and 
          send_count. 

    A.3. Choose Codewords for Encoding 

       The following variables are defined at first to depict the encoding 
       method: 

       o DegCur: current Coding Degree of the sensor. 

       o CodeCache: the Codeword Cache. 

       o ThisCode: the codeword which is constructed from the data 
          generated by the node itself. 

       o BoolNewCode: a Boolean variable indicating if the method has 
          chosen a codewords which has never been sent before. When the 
          method starts, this variable is initialized to FALSE. 

       o CodeNew: this is a memory block used for saving the new codeword. 

       How to choose codewords to generate a new codeword whose degree is no 
       more than DegCur is described as follows: 

       1. CodeNew is initialized as an empty codeword whose degree is zero. 
          When a codeword is chosen for encoding, it should be added to the 
          new codeword CodeNew. That is: 
           
              CodeNew = CodeNew + CodeChosen ; 
           

       2. There may be a codeword designated to be encoded in CodeNew. It 
          may be ThisCode or other codeword in the Codeword Cache. It should 
          be encoded in CodeNew firstly. 

     
     
    Wang                    Expires May 29, 2014                 [Page 29] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       3. If a node has sent out its own data and it has never been 
          acknowledged, the node may choose ThisCode to be encoded in 
          CodeNew if it is not the designated codeword in the step 2. 

       4. Search for codeword which can be encoded in CodeNew from the 
          Codeword Cache. The codeword with the highest priority is checked 
          at first. The current checked codeword in the Codeword Cache is 
          denoted as CodeCache[i]. If CodeCache[i], is the designated 
          codeword in step 2, this codeword skipped. 

       5. If CodeCache[i]'s send_count is more than MAX_SEND_COUNT, it 
          should not be sent any more. When a codeword's send_count reaches 
          MAX_SEND_COUNT, it has been sent for many times or it has been 
          acknowledged by the node which is close to the sink. The constant 
          MAX_SEND_COUNT depends on the unit value of priority PRI_UNIT, in 
          this document, it is set to (32*PRI_UNIT). Since the Codeword 
          Cache is ascendingly sorted by the send_count value, when a 
          codeword's send_count is greater than MAX_SEND_COUNT, the 
          codewords after it should be ignored totally. 

       6. If a codeword that is never been sent is chosen for encoding, then 
          sets BoolNewCode to TRUE. If BoolNewCode is TRUE and 
          CodeCache[i]'s send_count field is 0, then this codeword is 
          skipped. That is, in the encoding, only chooses one codeword that 
          is never been sent by this node. 

       7. When CodeCache[i] is checked, evaluate the desired new code, which 
          is the sum of CodeCache[i] and CodeNew. If the desired new code's 
          degree is more than CodeNew and less than or equal to DegCur, then 
          CodeCache[i] can be encoded into CodeNew. 

       8. When CodeCache[i] is chosen, accordingly change its priority, that 
          is, the value of the send_count field of this codeword. 

        

        









     
     
    Wang                    Expires May 29, 2014                 [Page 30] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

    Appendix B. The Growth of Coding Degree 

    B.1. Calculate the Degree Transition Sequence 

       According to Growth Codes, the data sink needs lower degree packet at 
       first to retrieve original data, and higher and higher degree packet 
       gradually to remove the redundancy of retransmission. Therefore, a 
       degree transition sequence is needed to decide when to switch to 
       higher Coding Degree. 

       The degree transition sequence R of the sink is an integer array. The 
       ith element of the sequence represents the number of different 
       original Symbols that the sink needs to receive before expecting to 
       receive a degree (i+1) packet. For example, if R[1]=5, R[2]=10, 
       before expecting to receive degree-2 packets, the sensor needs to 
       recover 5 original Symbols, and before expecting receive degree-3 
       packets, the sensor needs to recover 10 original Symbols. 

       The elements of R are computed as follows according to Growth Codes: 

           R[i] = ( i * N - 1 ) / ( i + 1 ); 

       In which, i represent the current expecting Coding Degree. 

       The degree transition sequence K of the sensors is an integer array, 
       whose elements' value represent the number of packets a node need to 
       send to switch to higher degree. For example, if K[1]=10 and a node 
       wishes to send a degree-2 packet, it needs to send out 10 degree-1 
       packets at first. If K[2]=15, and a node wishes to send a degree-3 
       packet, it needs to send out 5 degree-2 packets firstly after 
       switching from degree-1 to degree-2. 

       The sequence K is computed as follows according to Growth Codes: 

       1. Create a sequence Rt which is the same to the sequence R of the 
          data sink. Rt[0] is initialized to 0. 

       2. Create a sequence A, its elements are initialized by the following 
          formula: 
           
            A[j] = SUM{ C(N,j) / C(r,j-1) * (N-r) } R[j-1] <= r <= R[j]-1; 
           
          In which, "SUM{*}" represents summation of the content. "C(n, k)" 
          refers to the combination of taking k from n things. 



     
     
    Wang                    Expires May 29, 2014                 [Page 31] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

       3. Initialize the sequence K by summarizing sequence A: 
           
              K[i] = SUM{ A[j] }  1 <= j <= i; 

    B.2. Update the Degree Transition Sequence 

       The degree transition sequence is calculated by the network scale N. 
       Since not every node can hear all the sensor nodes' data, the 
       sequence is not precise enough for growth of degree. It is necessary 
       to adjust the degree transition sequence during the Coding Procedure. 

       To update the degree transition sequence, firstly compute a parameter 
       ALPHA: 

           ALPHA = ( NumRegular + NumOverhear ) / K[DegCur-1]; 

       Then updates the sequence K as follows: 

           K[i] = ALPHA * K[i]; 



























     
     
    Wang                    Expires May 29, 2014                 [Page 32] 
        
    Internet-Draft         Network Coding in LLNs            November 2013 
        

    Authors' Addresses 

       Gang Wang 
       UESTC (University of Electronic Science and Technology of China) 
       No.2006, Xiyuan Ave, West Hi-Tech Zone 
       Chengdu, Sichuan, P.R.China 611731 
          
       Phone: +86 151-8442-0373 
       Email: wanggang_uestc@163.com 
        

       Gang Feng 
       UESTC (University of Electronic Science and Technology of China) 
       No.2006, Xiyuan Ave, West Hi-Tech Zone 
       Chengdu, Sichuan, P.R.China 611731 
          
       Phone: +86 132-5825-6256 
       Email: fenggang@uestc.edu.cn 
     



























     
     
    Wang                    Expires May 29, 2014                 [Page 33]