NDN Packet Type
Packet ::= Version
           PacketType
           Length
           (Interest | ContentObject)
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Version    |   PacketType  |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
 
For ccnb-encoding compatibility, Version / PacketType has two reserved values to denote ccnb-encoded packet:
Version 0x01, PacketType 0xD2 — ccnb-encoded Interest packet
Version 0x04, PacketType 0x82 — ccnb-encoded ContentObject packet
Version
The current version of the packet format.  Right only value 0x80 is allowed.
 
PacketType
In the current version, two packet types are defined:
- Interest (PacketType = 0)
 
- ContentObject (PacketType = 1)
 
Any other value of PacketType is invalid and such a packet should be discarded.
 
 
Interest
The objective of the new format is to optimize encoding/decoding operations.
Interest ::= Nonce
             Scope
             NackType
             InterestLifetime
             Name
             Selectors
             Options
 
 
Minumum size of the Interest packet: 1 + 4 + 2 + 1 + (2 + 0) + (2 + 0) + (2 + 0) = 14
Maximum size of the Interest packet: 1 + 4 + 2 + 1 + (2 + 65535) + (2 + 65535) + (2 + 65535) = 196619
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Nonce                                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Scope     |   NackType    |      InterestLifetime         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Length             |                               |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
~                                                               ~
~                            Name                               ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Length             |                               |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
~                                                               ~
~                          Selectors                            ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Length             |                               |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
~                                                               ~
~                          Options                              ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
 
NackType
Currently, ndnSIM defines following NackTypes:
- 0: NORMAL_INTEREST
 
- 10: NACK_LOOP
 
- 11: NACK_CONGESTION
 
- 12: NACK_GIVEUP_PIT
 
Values 128-255 are reserved for any application-specific and experimental purposes.
 
InterestLifetime
InterestLifetime := uint16_t
 
 
Interest lifetime is specified in seconds.  Max value is about 18 hours.
 
Scope
Scope 0 prevents propagation beyond the local ccnd (even to other applications on the same host). Scope 1 limits propagation to the applications on the originating host. Scope 2 limits propagation to no further than the next host.
 
Name
Name ::= Length (NameComponent)*
NameComponent ::= Blob
 
 
 
Selectors
Selectors ::= Length (SelectorType Selector)*
SelectorType ::= uint8_t
Selector ::= MinSuffixComponents | MaxSuffixComponents | Publisher | Exclude | ChildSelector | AnswerOriginKind
 
 
Currently, ndnSIM defines following SelectorTypes:
Other types are currently undefined
 
Exclude
Exclude ::= Length (ExcludeComponent)*
ExcludeComponent ::= ExcludeNameType NameComponent ExcludeAnyType? |
                     ExcludeAnyType
ExcludeNameType ::= uint8_t  (==0x01)
ExcludeAnyType ::= uint8_t   (==0x02)
 
 
 
Options
Options ::= Length (Option)*
 
 
 
 
ContentObject
ContentObject ::= Name
                  Content
                  Signature
 
 
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Length             |                               |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
~                                                               ~
~                             Name                              ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Length             |                               |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
~                                                               ~
~                           Content                             ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Length             |                               |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
~                                                               ~
~                           Signature                           ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
 
Signature
Signature ::= Length
              SignatureType
              <type-dependeds signature data>
 
 
Length specifies cumulative size of SignatureInfo and SignatureBits.  If SignatureType is not recognized, the received can either discard the packet or ignore the signature using Length field, specified combined length of SignatureType and SignatureType-dependent fields.
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Length              |         SignatureType         |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                               ~
~               <type-dependeds signature data>                 ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
 
SignatureType
SignatureType ::= uint16_t
 
 
The current version specifies three type of signatures:
- 0x0000: empty signature
 
- 0x0001: SHA256 (not a real signature, but just a digest of the content)
 
- 0x0002: SHA256withRSA (real public-key signature based on SHA-256 digest)
 
Other values may be defined in future.
- Values greater or equal to 0xFF00 are for experimental purposes (e.g., for simulations)
 
 
<type-dependeds signature data>
| SignatureType | 
SignatureData definition | 
| 0 (empty) | 
empty sequence | 
| 1 (sha256) | 
CHAR{32} | 
| 2 (SHA256withRSA) | 
CHAR{32} KeyLocator | 
 
KeyLocator
KeyLocator ::= CertName
CertName ::= Name
 
 
 
Content
Content ::= Length
            ContentInfo
            ContentData
 
 
Content length can be computed as:  Length - (1 - ContentInfo.Length)
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Length             |       Length (content Info)   |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Timestamp                           |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Freshness           |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Length (ContentInfoOptions)  |                               |
|-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
~                                                               ~
~                       ContentInfoOptions                      ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                               ~
~                         ContentData                           ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
 
 
ContentInfo
ContentInfo ::= Length
                Timestamp
                Freshness
                ContentOptions
 
 
 
 
Timestamp
Timestamp specifies content generation time as Unix time timestamp (number of seconds since midnight 1/1/1970).
 
Freshness
Freshness specifies time in seconds (since Timestamp) for which the content is considered valid.
Value 0xFFFF means that content is always valid.
 
ContentOptions
ContentOptions ::= Length
                   ContentOption*
ContentOption ::= Type |
                  FinalBlockID
 
 
Not currently defined