Project

General

Profile

LocalControlHeader » History » Revision 16

Revision 15 (Alex Afanasyev, 02/10/2014 10:52 AM) → Revision 16/26 (Junxiao Shi, 02/13/2014 08:34 AM)

# NFD local control header 

 NFD local control header is can be used between application and local forwarding daemon to exchange various NFD-specific local information that is not part of Interest and Data packet.   
 
 For example, local the control header allows applications to request bypassing the Interest forwarding strategy by directly specify FaceId to which the Interest should be forwarded. 

 ## Enabling and disabling local control header 

 NFD local control header is not enabled by default and requires explicit request from the client to enable.   
 NFD MUST NOT deliver packets with LocalControlHeader to an application unless the application has enabled at least one control module. 

 
 This request to enable/disable local control header is in form of [[Command_Interests|Command [[Signed_Interests|Signed Interest]] and have the following structure: 

     /localhost/nfd/control-header/<control-module>/<command-verb>/<timestamp>/<SignatureInfo>/<SignatureValue> /localhost/nfd/control-header/<control-module>/command-verb>/<timestamp>/<SignatureInfo>/<SignatureValue> 
    
     \                              / \                                                          / \                                            / 
      ------------    ------------       ------------    -------------- -------------     --------------------    -------------------- 
                  \/                               \/                                                                            \/ 
        NFD Control Command            "in-faceid"              "enable" or        Command         Signed Interest related information 
                                   "nexthop-faceid"          "disable" 

 An enable/disable command MAY NOT take effect immediately. 
 Packets scheduled for transmission before processing the enable/disable command successfully could be delivered or processed in the old state. 

 ## Control modules modules: 

 ### in-faceid 

 This control module allows application * ``in-faceid``    Enable/disable ability to receive information about incoming FaceId for each received Interest and Data packet. 

 When enabled, packet 

     After successful enable, subsequent packets will be encapsulated in within LocalControlHeader, as defined below.    And vice versa, after successful disable, subsequent packets will not be encapsulated. 

     Note that the command may not be immediate.    Packets that were scheduled for transmission before the command arrival will be received without (or with) LocalControlHeader present. 

 ### nexthop-faceid 

 This control module allows application * ``nexthop-faceid`` Enable/disable ability to specify nexthop FaceId in outgoing Interests. 

 When enabled, FaceId. 

     After this command, NFD will accept incoming Interests encapsulated in LocalControlHeader that specifies nexthop FaceId to forward this Interest. 

 The specified `NextHopFaceId` is effective 

     Note that this will affect only if the Interest for namespaces that is under a namespace managed by `ClientControl` special ``ClientControl`` strategy. 
    If FIB entry for the namespace Interest uses any other strategy, `NextHopFaceId` information specified in LocalControlHeader will be ignored. 

 <!-- 
 * ``sniffer`` Enable/disable sniffing on all or specific Faces.    The format of this command is actually is a little bit different and requires one more option: ``<face-id>``: 

         /localhost/nfd/control-header/sniffer/(enable|disable)/<face-id>/<timestamp>/<SignatureInfo>/<SignatureValue> 
    
     To snif on all faces, ``<face-id>`` should be 0. 
 --> 

 

 ## LocalControlHeader 

 The LocalControlHeader is defined as follows: 

     LocalControlHeader ::= LOCAL-CONTROL-HEADER-TYPE TLV-LENGTH 
                              LocalControlInfo 
                              (Interest | Data) 

     LocalControlInfo     ::= LOCAL-CONTROL-INFO-TYPE TLV-LENGTH 
                              (IncomingFaceId | 
                               NextHopFaceId) 

     IncomingFaceId       ::= INCOMING-FACE-ID-TYPE TLV-LENGTH 
                               nonNegativeInteger 

     NextHopFaceId        ::= NEXT-HOP-FACE-ID-TYPE TLV-LENGTH 
                               nonNegativeInteger 


 <!-- 
                               SnifferInfo) 
     SnifferInfo          ::= SNIFFER-INFO-TYPE TLV-LENGTH 
                              ... 
                              (TBD) 
 --> 

 

 ## TLV-TYPE assignments 

 Type                                          | Assigned value      | Assigned value (hex) 
 ------------------------------------------- | ----------------- | -------------------- 
 LocalControlHeader                            | 109                 | 0x6d 
 LocalControlInfo                              | 110                 | 0x6e 
 IncomingFaceId                                | 111                 | 0x6f 
 NextHopFaceId                                 | 112                 | 0x70 
 (reserved)                                    Reserved                                      | 113                 | 0x71