== Format == The following is the bitwise structure for a !MobilityFirst packet: {{{ #!html
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 Bit
0             1               2               3                 Octet 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Version   |           Service Type        |  Protocol     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Payload Offset       |         Reserved              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Payload Size                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                             ~
|                        Source GUID                          |
~                                                             ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Source NA                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                             ~
|                        Destination GUID                     |
~                                                             ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Destination NA                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                             ~
|                        Extension Header(s)                  |
~                                                             ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                             ~
|                        Payload                              |
~                                                             ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
}}} * '''Version''' - !MobilityFirst network protocol version encoded as ''major.minor'' (4-bits each) * '''Service type ''' - Encodes requested processing or delivery service(s); MSB of '1' indicates presence of one or more extension headers following the fixed header fields. * '''Protocol''' - Upper protocol identifier * '''Payload Offset''' - Offset after any variable length extension headers * '''Reserved''' - TODO to include hop count, checksum and other efficient/reliable routing enablers * '''Payload Size''' - data length in bytes * '''Source GUID''' - Source endpoint identifier; normally a 160-bit crypo-hash of the full GUID * '''Source NA''' - Topological address of attachment point of source EP. Optional, can be blank. * '''Destination GUID''' - Destination endpoint identifier; same format as src GUID * '''Destination NA''' - latest resolved address for destination EP; could be blank if unresolved. * '''Extension Headers''' - Used to encode non-basic SIDs and any parameters required in service handling * '''Payload''' - Data portion of the packet ----- == Service Type (ST) == The table below lists the 16-bit values designated for 'basic' services in !MobilityFirst network protocol. It is not expected that each network element support all of these services, and may either choose to ignore unsupported services (when makes sense) or report back a failure to packet originator. || '''Network service''' || '''ST value''' || '''Description''' || ||Default || 0x0000 ||Unicast, block data transfer, temporary hold under poor downstream path conditions, dynamic NA resolution, late-binding || ||Multicast ||0x0001 || || ||Anycast ||0x0002 || || ||MultiHoming ||0x0004 || || ||GUID-routing ||0x0008 ||Flat routing, no GNRS resolution || ||Stream ||0x0010 || || ||Real time ||0x0020 || || ||Delay Tolerant ||0x0040 || || ||Acknowledge on Store ||0x0080 || || ||Acknowledge on Delivery ||0x0100 || || ||Content Request ||0x0200 || || ||Content Response ||0x0400 || || ||Compute Layer Processing ||0x0800 || || ||Source Routing ||0x1000 || || ||Endpoint Broadcast ||0x2000 ||broadcast of data blocks at the destination || ||Future ||0x4000 || || ||Extended Services ||0x8000 || || SIDs for services not included in the basic set above are accommodated as extended services with SID pattern of 0x8xxx. The services can be requested by adding extension headers under the particular SID. ----- == Extension Headers == The following is the common format for extension headers: {{{ #!html
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 Bit
0             1               2               3                 Octet 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Service Type         |          Next Header          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                             ~
|                 Service Arguments (optional)                |
~                                                             ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
}}} * '''Service Type ''' - Encodes requested processing or delivery service(s); Here the MSB of '1' indicates indicates an extended service. * '''Next Header''' - Offset to next header or '0' when this is the last extension header. * '''Service Parameters''' - Parameters encoded in a format defined by particular service === Multihome Delivery Extension Header === The extension header to support additional locators for delivery to multi-homed endpoints is shown below: {{{ #!html
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 Bit
0             1               2               3                 Octet 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Service Type          |          Next Header          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Multihome Options     | Src. NA Count | Dest. NA Count|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                             ~
|                         Source NA(s)                        |
~                                                             ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                             ~
|                         Destination NA(s)                   |
~                                                             ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
}}} * '''Multihome Options''' - TBD * '''Src. NA Count / Dest. NA Count''' - Number locator entries for source and (followed by) destination endpoints; maximum of 256 entries for each * '''Source NA / Destination NA''' - Route-able addresses for EPs; Source NAs may be populated by source, while the destination NAs be populated as a result of GNRS resolution === Compute Layer Service Extension Header === {{{ #!html
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 Bit
0             1               2               3                 Octet 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Service Type         |          Next Header          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                             ~
|                   Compute Service GUID                      |
~                                                             ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Arguments Count       |         Results Count         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                             ~
|                   Compute Service Arguments                 |
~                                                             ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~                                                             ~
|                   Compute Service Results                   |
~                                                             ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

}}} * '''Compute Service GUID''' - GUID of the compute plane service to be invoked on the payload * '''!Arguments/Results Count''' - number of arguments and number of results (post processing) to and from the processing of the payload. This is besides any changes to the payload itself. TBD - if the payload changes in some way (e.g., size, checksum) the results should indicate these changes so stack layers may take it into consideration when validating the payload. * '''Compute Service Arguments''' - arguments in TLV, for instance, with pre-defined types and length for each argument expected by the compute service. * '''Compute Service Results''' - results encoded in TLV, for instance, with pre-defined types well known to the routing layer. These results may chiefly help the routing/transport layers to understand changes to the payload