LocalControlHeader » History » Version 25
Junxiao Shi, 10/19/2014 01:46 PM
| 1 | 18 | Alex Afanasyev | # NFD Local Control Header |
|---|---|---|---|
| 2 | 3 | Alex Afanasyev | |
| 3 | 24 | Junxiao Shi | NFD LocalControlHeader is used between application and local forwarding daemon to exchange various NFD-specific local information that is not part of Interest and Data packet. |
| 4 | For example, LocalControlHeader allows applications to specify FaceId to which the Interest should be forwarded. |
||
| 5 | 1 | Junxiao Shi | |
| 6 | 24 | Junxiao Shi | ## Enabling and disabling LocalControlHeader |
| 7 | 1 | Junxiao Shi | |
| 8 | 24 | Junxiao Shi | LocalControlHeader is not enabled initially. |
| 9 | Application can invoke [[FaceMgmt#Enable a LocalControlHeader feature|faces/enable-local-control]] command to enable a LocalControlHeader feature, |
||
| 10 | and invoke [[FaceMgmt#Disable a LocalControlHeader feature|faces/disable-local-control]] command to disable a LocalControlHeader feature, |
||
| 11 | 1 | Junxiao Shi | |
| 12 | 24 | Junxiao Shi | NFD MUST NOT deliver packets with LocalControlHeader to an application unless the application has enabled at least one LocalControlHeader feature. |
| 13 | NFD SHOULD ignore a LocalControlHeader field if the corresponding feature is not enabled. |
||
| 14 | An enable or disable command MAY NOT take effect immediately. |
||
| 15 | Packets scheduled for transmission before processing the enable or disable command could be delivered or processed in the old state. |
||
| 16 | 16 | Junxiao Shi | |
| 17 | 24 | Junxiao Shi | ## LocalControlHeader structure |
| 18 | 16 | Junxiao Shi | |
| 19 | 8 | Alex Afanasyev | LocalControlHeader ::= LOCAL-CONTROL-HEADER-TYPE TLV-LENGTH |
| 20 | 16 | Junxiao Shi | IncomingFaceId? |
| 21 | 8 | Alex Afanasyev | NextHopFaceId? |
| 22 | 25 | Junxiao Shi | CachingPolicy? |
| 23 | 1 | Junxiao Shi | ...? |
| 24 | 12 | Alex Afanasyev | (Interest | Data) |
| 25 | 3 | Alex Afanasyev | |
| 26 | IncomingFaceId ::= INCOMING-FACE-ID-TYPE TLV-LENGTH |
||
| 27 | nonNegativeInteger |
||
| 28 | 15 | Alex Afanasyev | |
| 29 | 1 | Junxiao Shi | NextHopFaceId ::= NEXT-HOP-FACE-ID-TYPE TLV-LENGTH |
| 30 | 3 | Alex Afanasyev | nonNegativeInteger |
| 31 | 1 | Junxiao Shi | |
| 32 | 24 | Junxiao Shi | Although all fields before `(Interest | Data)` in LocalControlHeader are marked optional, at least one of them must be present. |
| 33 | 1 | Junxiao Shi | |
| 34 | 24 | Junxiao Shi | ## IncomingFaceId feature |
| 35 | |||
| 36 | This feature allows application to learn the incoming face of each Interest and Data packet. |
||
| 37 | |||
| 38 | If this feature is enabled, |
||
| 39 | when an incoming Interest or Data is delivered to application, |
||
| 40 | the packet is encapsulated in LocalControlHeader, with IncomingFaceId field is set to the incoming FaceId. |
||
| 41 | However, Datas from the ContentStore won't have a IncomingFaceId field. |
||
| 42 | |||
| 43 | ## NextHopFaceId feature |
||
| 44 | |||
| 45 | This feature allows application to pick a nexthop for its Interest. |
||
| 46 | |||
| 47 | If this feature is enabled, |
||
| 48 | application can encapsulate an Interest in LocalControlHeader, and set NextHopFaceId field to the desired nexthop. |
||
| 49 | |||
| 50 | **ClientControl strategy** SHOULD be [[StrategyChoice|chosen]] as the effective strategy on the Interest's namespace. |
||
| 51 | It will honor NextHopFaceId field, and forward Interest to the desired nexthop. |
||
| 52 | If other strategy is being used, NextHopFaceId has no effect. |
||
| 53 | 21 | Alex Afanasyev | |
| 54 | 25 | Junxiao Shi | ## CachingPolicy feature |
| 55 | |||
| 56 | This feature allows application to give ContentStore an instruction about whether/how to cache the Data packet. |
||
| 57 | |||
| 58 | If this feature is enabled, |
||
| 59 | application MAY attach a CachingPolicy field on a Data packet to NFD, |
||
| 60 | which has the following structure: |
||
| 61 | |||
| 62 | CachingPolicy ::= CACHING-POLICY-TYPE TLV-LENGTH |
||
| 63 | NoCache |
||
| 64 | |||
| 65 | NoCache ::= NO-CACHE-TYPE TLV-LENGTH(=0) |
||
| 66 | |||
| 67 | The CachingPolicy field contains exactly one sub-TLV as the instruction. |
||
| 68 | |||
| 69 | Currently only one instruction TLV is defined: |
||
| 70 | |||
| 71 | * NoCache: ContentStore SHOULD NOT cache the Data packet. |
||
| 72 | This instruction TLV has no parameter and therefore is empty. |
||
| 73 | |||
| 74 | Instruction TLVs defined in the future MAY need have parameter as its TLV-VALUE. |
||
| 75 | |||
| 76 | Caching field MUST NOT be attached to a packet from NFD to application, or to a non-Data packet. |
||
| 77 | |||
| 78 | 1 | Junxiao Shi | ## TLV-TYPE assignments |
| 79 | |||
| 80 | Type | Assigned value | Assigned value (hex) |
||
| 81 | ------------------------------------------- | ----------------- | -------------------- |
||
| 82 | 23 | Alex Afanasyev | LocalControlHeader | 80 | 0x50 |
| 83 | IncomingFaceId | 81 | 0x51 |
||
| 84 | NextHopFaceId | 82 | 0x52 |
||
| 85 | 25 | Junxiao Shi | CachingPolicy | 83 | 0x53 |
| 86 | NoCache | 96 | 0x60 |