The NSH is defined in [
RFC 8300]. IOAM-Data-Fields are carried as NSH payload using a Next Protocol header that follows the NSH headers. An IOAM header containing the IOAM-Data-Fields is added. The IOAM-Data-Fields
MUST follow the definitions corresponding to IOAM Option-Types (e.g., see
Section 4 of
RFC 9197 and
Section 3.2 of
RFC 9326). In an administrative domain where IOAM is used, insertion of the IOAM header in NSH is enabled at the NSH tunnel endpoints, which are also configured to serve as encapsulating and decapsulating nodes for IOAM. The operator
MUST ensure that SFC-aware nodes along the Service Function Path support IOAM; otherwise, packets might be dropped (see the last paragraph of this section as well as
Section 2.2 of
RFC 8300). The IOAM transit nodes (e.g., a Service Function Forwarder (SFF))
MUST process all the IOAM headers that are relevant based on its configuration. See [
RFC 9378] for a discussion of deployment-related aspects of IOAM-Data-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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
|Ver|O|U| TTL | Length |U|U|U|U|MD Type| NP = 0x06 | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ N
| Service Path Identifier | Service Index | S
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ H
| ... | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
| IOAM-Type | IOAM HDR Len | Reserved | Next Protocol | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ I
! | O
! | A
~ IOAM Option and Optional Data Space ~ M
| | |
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+
| |
| |
| Payload + Padding (L2/L3/...) |
| |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The NSH header and fields are defined in [
RFC 8300]. The O bit
MUST be handled following the rules in [
RFC 9451]. The "NSH Next Protocol" value (referred to as "NP" in the diagram above) is 0x06.
The IOAM-related fields in NSH are defined as follows:
-
IOAM-Type:
-
8-bit field defining the IOAM Option-Type, as defined in the "IOAM Option-Type" registry specified in [RFC 9197].
-
IOAM HDR Len:
-
8-bit field that contains the length of the IOAM header in multiples of 4-octets, including the "IOAM-Type" and "IOAM HDR Len" fields.
-
Reserved bits:
-
Reserved bits are present for future use. The reserved bits MUST be set to 0x0 upon transmission and ignored upon receipt.
-
Next Protocol:
-
8-bit unsigned integer that determines the type of header following IOAM. The semantics of this field are identical to the Next Protocol field in [RFC 8300].
-
IOAM Option and Optional Data Space:
-
IOAM-Data-Fields as specified by the IOAM-Type field. IOAM-Data-Fields are defined corresponding to the IOAM Option-Type (e.g., see Section 4 of RFC 9197 and Section 3.2 of RFC 9326) and are always aligned by 4 octets. Thus, there is no padding field.
Multiple IOAM Option-Types
MAY be included within the NSH encapsulation. For example, if an NSH encapsulation contains two IOAM Option-Types before a data payload, the Next Protocol field of the first IOAM option will contain the value 0x06, while the Next Protocol field of the second IOAM Option-Type will contain the "NSH Next Protocol" number indicating the type of the data payload. The applicability of the IOAM Active and Loopback flags [
RFC 9322] is outside the scope of this document and may be specified in the future.
In case the IOAM Incremental Trace Option-Type is used, an SFC-aware node that serves as an IOAM transit node needs to adjust the "IOAM HDR Len" field accordingly. See
Section 4.4 of
RFC 9197.
Per
Section 2.2 of
RFC 8300, packets with unsupported Next Protocol values
SHOULD be silently dropped by default. Thus, when a packet with IOAM is received at an NSH-based forwarding node (such as an SFF) that does not support the IOAM header, it
SHOULD drop the packet. The mechanisms to maintain and notify of such events are outside the scope of this document.