rfc9617v2.txt | rfc9617.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) T. Zhou, Ed. | Internet Engineering Task Force (IETF) T. Zhou, Ed. | |||
Request for Comments: 9617 Huawei | Request for Comments: 9617 Huawei | |||
Category: Standards Track J. Guichard | Category: Standards Track J. Guichard | |||
ISSN: 2070-1721 Futurewei | ISSN: 2070-1721 Futurewei | |||
F. Brockners | F. Brockners | |||
S. Raghavan | S. Raghavan | |||
Cisco Systems | Cisco Systems | |||
July 2024 | August 2024 | |||
A YANG Data Model for In Situ Operations, Administration, and | A YANG Data Model for In Situ Operations, Administration, and | |||
Maintenance (IOAM) | Maintenance (IOAM) | |||
Abstract | Abstract | |||
In situ Operations, Administration, and Maintenance (IOAM) is an | In situ Operations, Administration, and Maintenance (IOAM) is an | |||
example of an on-path hybrid measurement method. IOAM defines a | example of an on-path hybrid measurement method. IOAM defines a | |||
method for producing operational and telemetry information that may | method for producing operational and telemetry information that may | |||
be exported using the in-band or out-of-band method. RFCs 9197 and | be exported using the in-band or out-of-band method. RFCs 9197 and | |||
skipping to change at line 92 ¶ | skipping to change at line 92 ¶ | |||
be exported using the in-band or out-of-band method. The data types | be exported using the in-band or out-of-band method. The data types | |||
and data formats for IOAM data records have been defined in [RFC9197] | and data formats for IOAM data records have been defined in [RFC9197] | |||
and [RFC9326]. The IOAM data can be embedded in many protocol | and [RFC9326]. The IOAM data can be embedded in many protocol | |||
encapsulations, such as the Network Service Header (NSH) [RFC9452] | encapsulations, such as the Network Service Header (NSH) [RFC9452] | |||
and IPv6. | and IPv6. | |||
This document defines a data model for the configuration of IOAM | This document defines a data model for the configuration of IOAM | |||
capabilities using the YANG data modeling language [RFC7950]. This | capabilities using the YANG data modeling language [RFC7950]. This | |||
YANG data model supports five IOAM options, which are as follows: | YANG data model supports five IOAM options, which are as follows: | |||
* Incremental Tracing Option [RFC9197] | * Incremental Trace-Option [RFC9197] | |||
* Pre-allocated Tracing Option [RFC9197] | * Pre-allocated Trace-Option [RFC9197] | |||
* Direct Export Option [RFC9326] | * Direct Export Option [RFC9326] | |||
* Proof of Transit (POT) Option [RFC9197] | * Proof of Transit (POT) Option [RFC9197] | |||
* Edge-to-Edge Option [RFC9197] | * Edge-to-Edge Option [RFC9197] | |||
2. Conventions Used in This Document | 2. Conventions Used in This Document | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
skipping to change at line 179 ¶ | skipping to change at line 179 ¶ | |||
profile can apply. There may be multiple filter types. Access | profile can apply. There may be multiple filter types. Access | |||
Control Lists (ACLs) [RFC8519] provide a common way to specify a | Control Lists (ACLs) [RFC8519] provide a common way to specify a | |||
flow. Each IOAM profile can associate with an ACE (Access Control | flow. Each IOAM profile can associate with an ACE (Access Control | |||
Entry). When the matched ACE "forwarding" action is "accept", IOAM | Entry). When the matched ACE "forwarding" action is "accept", IOAM | |||
actions MUST be driven by the accepted packets. | actions MUST be driven by the accepted packets. | |||
The IOAM data can be encapsulated into multiple protocols, e.g., IPv6 | The IOAM data can be encapsulated into multiple protocols, e.g., IPv6 | |||
[RFC9486] and the NSH [RFC9452]. The "protocol-type" parameter is | [RFC9486] and the NSH [RFC9452]. The "protocol-type" parameter is | |||
used to indicate where IOAM is applied. For example, if "protocol- | used to indicate where IOAM is applied. For example, if "protocol- | |||
type" is set to "ipv6", the IOAM ingress node will encapsulate the | type" is set to "ipv6", the IOAM ingress node will encapsulate the | |||
associated flow with the "IOAM in IPv6" format, per [RFC9486]. | associated flow according to [RFC9486]. | |||
In this document, IOAM data includes five encapsulation types, i.e., | In this document, IOAM data includes five encapsulation types, i.e., | |||
incremental tracing data, pre-allocated tracing data, direct export | incremental tracing data, pre-allocated tracing data, direct export | |||
data, proof of transit data, and end-to-end data. In practice, | data, proof of transit data, and end-to-end data. In practice, | |||
multiple IOAM data types can be encapsulated into the same IOAM | multiple IOAM data types can be encapsulated into the same IOAM | |||
header. The "profile" parameter contains a set of sub-profiles, each | header. The "profile" parameter contains a set of sub-profiles, each | |||
of which relates to one encapsulation type. The configured object | of which relates to one encapsulation type. The configured object | |||
may not support all the sub-profiles. The supported sub-profiles are | may not support all the sub-profiles. The supported sub-profiles are | |||
indicated by five defined features, i.e., "incremental-trace", | indicated by five defined features, i.e., "incremental-trace", | |||
"preallocated-trace", "direct-export", "proof-of-transit", and "edge- | "preallocated-trace", "direct-export", "proof-of-transit", and "edge- | |||
skipping to change at line 203 ¶ | skipping to change at line 203 ¶ | |||
[RFC8519], the "ietf-interfaces" YANG module [RFC8343], and the | [RFC8519], the "ietf-interfaces" YANG module [RFC8343], and the | |||
"ietf-lime-time-types" YANG module [RFC8532]. | "ietf-lime-time-types" YANG module [RFC8532]. | |||
The YANG data model in this document conforms to the Network | The YANG data model in this document conforms to the Network | |||
Management Datastore Architecture (NMDA) defined in [RFC8342]. | Management Datastore Architecture (NMDA) defined in [RFC8342]. | |||
3.2. Pre-allocated Tracing Profile | 3.2. Pre-allocated Tracing Profile | |||
To ensure visibility into the entire path that a packet takes within | To ensure visibility into the entire path that a packet takes within | |||
an IOAM domain, the IOAM tracing data is expected to be collected at | an IOAM domain, the IOAM tracing data is expected to be collected at | |||
every node that a packet traverses. The pre-allocated tracing option | every node that a packet traverses. The Pre-allocated Trace-Option | |||
will create pre-allocated space for each node to populate its | will create pre-allocated space for each node to populate its | |||
information. The "preallocated-tracing-profile" parameter contains | information. The "preallocated-tracing-profile" parameter contains | |||
the detailed information for the pre-allocated tracing data. This | the detailed information for the pre-allocated tracing data. This | |||
information includes: | information includes: | |||
node-action: indicates the operation (e.g., encapsulate the IOAM | node-action: indicates the operation (e.g., encapsulate the IOAM | |||
header, transit the IOAM data, or decapsulate the IOAM header) | header, transit the IOAM data, or decapsulate the IOAM header) | |||
applied to the dedicated flow. | applied to the dedicated flow. | |||
use-namespace: indicates the namespace used for the trace types. | use-namespace: indicates the namespace used for the trace types. | |||
skipping to change at line 230 ¶ | skipping to change at line 230 ¶ | |||
+--rw preallocated-tracing-profile {preallocated-trace}? | +--rw preallocated-tracing-profile {preallocated-trace}? | |||
+--rw node-action? ioam-node-action | +--rw node-action? ioam-node-action | |||
+--rw trace-types | +--rw trace-types | |||
| +--rw use-namespace? ioam-namespace | | +--rw use-namespace? ioam-namespace | |||
| +--rw trace-type* ioam-trace-type | | +--rw trace-type* ioam-trace-type | |||
+--rw max-length? uint32 | +--rw max-length? uint32 | |||
3.3. Incremental Tracing Profile | 3.3. Incremental Tracing Profile | |||
The incremental tracing option contains a variable-length list of | The Incremental Trace-Option contains a variable-length list of node | |||
node data fields, where each node allocates and pushes its node data | data fields, where each node allocates and pushes its node data | |||
immediately following the option header. The "incremental-tracing- | immediately following the option header. The "incremental-tracing- | |||
profile" parameter contains the detailed information for the | profile" parameter contains the detailed information for the | |||
incremental tracing data. This information is the same as that for | incremental tracing data. This information is the same as that for | |||
the Pre-allocated Tracing Profile; see Section 3.2. | the Pre-allocated Tracing Profile; see Section 3.2. | |||
+--rw incremental-tracing-profile {incremental-trace}? | +--rw incremental-tracing-profile {incremental-trace}? | |||
+--rw node-action? ioam-node-action | +--rw node-action? ioam-node-action | |||
+--rw trace-types | +--rw trace-types | |||
| +--rw use-namespace? ioam-namespace | | +--rw use-namespace? ioam-namespace | |||
| +--rw trace-type* ioam-trace-type | | +--rw trace-type* ioam-trace-type | |||
+--rw max-length? uint32 | +--rw max-length? uint32 | |||
3.4. Direct Export Profile | 3.4. Direct Export Profile | |||
The direct export option is used as a trigger for IOAM data to be | The Direct Export Option is used as a trigger for IOAM data to be | |||
directly exported or locally aggregated without being pushed into in- | directly exported or locally aggregated without being pushed into in- | |||
flight data packets. The "direct-export-profile" parameter contains | flight data packets. The "direct-export-profile" parameter contains | |||
the detailed information for the direct export data. This | the detailed information for the direct export data. This | |||
information is the same as that for the Pre-allocated Tracing Profile | information is the same as that for the Pre-allocated Tracing Profile | |||
(Section 3.2), but with two more optional variables: | (Section 3.2), but with two more optional variables: | |||
flow-id: used to correlate the exported data of the same flow from | flow-id: used to correlate the exported data of the same flow from | |||
multiple nodes and from multiple packets. | multiple nodes and from multiple packets. | |||
enable-sequence-number: indicates whether the sequence number is | enable-sequence-number: indicates whether the sequence number is | |||
used in the direct export option. | used in the Direct Export Option. | |||
+--rw direct-export-profile {direct-export}? | +--rw direct-export-profile {direct-export}? | |||
+--rw node-action? ioam-node-action | +--rw node-action? ioam-node-action | |||
+--rw trace-types | +--rw trace-types | |||
| +--rw use-namespace? ioam-namespace | | +--rw use-namespace? ioam-namespace | |||
| +--rw trace-type* ioam-trace-type | | +--rw trace-type* ioam-trace-type | |||
+--rw flow-id? uint32 | +--rw flow-id? uint32 | |||
+--rw enable-sequence-number? boolean | +--rw enable-sequence-number? boolean | |||
3.5. Proof of Transit Profile | 3.5. Proof of Transit Profile | |||
skipping to change at line 286 ¶ | skipping to change at line 286 ¶ | |||
data. To align with [RFC9197], this document only defines IOAM POT | data. To align with [RFC9197], this document only defines IOAM POT | |||
type 0. Users need to augment this module for the configuration of a | type 0. Users need to augment this module for the configuration of a | |||
specific POT type. | specific POT type. | |||
+--rw pot-profile {proof-of-transit}? | +--rw pot-profile {proof-of-transit}? | |||
+--rw use-namespace? ioam-namespace | +--rw use-namespace? ioam-namespace | |||
+--rw pot-type? ioam-pot-type | +--rw pot-type? ioam-pot-type | |||
3.6. Edge-to-Edge Profile | 3.6. Edge-to-Edge Profile | |||
The IOAM edge-to-edge option is used to carry data that is added by | The IOAM Edge-to-Edge Option is used to carry data that is added by | |||
the IOAM encapsulating node and interpreted by the IOAM decapsulating | the IOAM encapsulating node and interpreted by the IOAM decapsulating | |||
node. The "e2e-profile" parameter contains the detailed information | node. The "e2e-profile" parameter contains the detailed information | |||
for the edge-to-edge data. This information includes: | for the edge-to-edge data. This information includes: | |||
node-action: the same semantic as that provided in Section 3.2. | node-action: the same semantic as that provided in Section 3.2. | |||
use-namespace: indicates the namespace used for the edge-to-edge | use-namespace: indicates the namespace used for the edge-to-edge | |||
types. | types. | |||
e2e-type: indicates data to be carried from the ingress IOAM node to | e2e-type: indicates data to be carried from the ingress IOAM node to | |||
skipping to change at line 387 ¶ | skipping to change at line 387 ¶ | |||
"RFC 9617: A YANG Data Model for In Situ Operations, | "RFC 9617: A YANG Data Model for In Situ Operations, | |||
Administration, and Maintenance (IOAM)"; | Administration, and Maintenance (IOAM)"; | |||
} | } | |||
/* | /* | |||
* FEATURES | * FEATURES | |||
*/ | */ | |||
feature incremental-trace { | feature incremental-trace { | |||
description | description | |||
"This feature indicates that the incremental tracing option | "This feature indicates that the Incremental Trace-Option is | |||
is supported."; | supported."; | |||
reference | reference | |||
"RFC 9197: Data Fields for In Situ Operations, | "RFC 9197: Data Fields for In Situ Operations, | |||
Administration, and Maintenance (IOAM)"; | Administration, and Maintenance (IOAM)"; | |||
} | } | |||
feature preallocated-trace { | feature preallocated-trace { | |||
description | description | |||
"This feature indicates that the pre-allocated tracing | "This feature indicates that the Pre-allocated Trace-Option | |||
option is supported."; | is supported."; | |||
reference | reference | |||
"RFC 9197: Data Fields for In Situ Operations, | "RFC 9197: Data Fields for In Situ Operations, | |||
Administration, and Maintenance (IOAM)"; | Administration, and Maintenance (IOAM)"; | |||
} | } | |||
feature direct-export { | feature direct-export { | |||
description | description | |||
"This feature indicates that the direct export option is | "This feature indicates that the Direct Export Option is | |||
supported."; | supported."; | |||
reference | reference | |||
"RFC 9326: In Situ Operations, Administration, and | "RFC 9326: In Situ Operations, Administration, and | |||
Maintenance (IOAM) Direct Exporting"; | Maintenance (IOAM) Direct Exporting"; | |||
} | } | |||
feature proof-of-transit { | feature proof-of-transit { | |||
description | description | |||
"This feature indicates that the proof of transit option is | "This feature indicates that the Proof of Transit Option is | |||
supported."; | supported."; | |||
reference | reference | |||
"RFC 9197: Data Fields for In Situ Operations, | "RFC 9197: Data Fields for In Situ Operations, | |||
Administration, and Maintenance (IOAM)"; | Administration, and Maintenance (IOAM)"; | |||
} | } | |||
feature edge-to-edge { | feature edge-to-edge { | |||
description | description | |||
"This feature indicates that the edge-to-edge option is | "This feature indicates that the Edge-to-Edge Option is | |||
supported."; | supported."; | |||
reference | reference | |||
"RFC 9197: Data Fields for In Situ Operations, | "RFC 9197: Data Fields for In Situ Operations, | |||
Administration, and Maintenance (IOAM)"; | Administration, and Maintenance (IOAM)"; | |||
} | } | |||
/* | /* | |||
* IDENTITIES | * IDENTITIES | |||
*/ | */ | |||
skipping to change at line 853 ¶ | skipping to change at line 853 ¶ | |||
of the same flow from multiple nodes and from multiple | of the same flow from multiple nodes and from multiple | |||
packets."; | packets."; | |||
} | } | |||
leaf enable-sequence-number { | leaf enable-sequence-number { | |||
when "derived-from-or-self(../node-action, | when "derived-from-or-self(../node-action, | |||
'ioam:action-encapsulate')"; | 'ioam:action-encapsulate')"; | |||
type boolean; | type boolean; | |||
default "false"; | default "false"; | |||
description | description | |||
"This boolean value indicates whether the sequence number | "This boolean value indicates whether the sequence number | |||
is used in the direct export option's 32-bit flow | is used in the Direct Export Option's 32-bit flow | |||
identifier. If this value is set to 'true', the sequence | identifier. If this value is set to 'true', the sequence | |||
number is used. It is turned off by default."; | number is used. It is turned off by default."; | |||
} | } | |||
} | } | |||
grouping ioam-e2e-profile { | grouping ioam-e2e-profile { | |||
description | description | |||
"A grouping for the Edge-to-Edge Profile."; | "A grouping for the Edge-to-Edge Profile."; | |||
leaf node-action { | leaf node-action { | |||
type ioam-node-action; | type ioam-node-action; | |||
skipping to change at line 974 ¶ | skipping to change at line 974 ¶ | |||
IOAM."; | IOAM."; | |||
} | } | |||
leaf protocol-type { | leaf protocol-type { | |||
type ioam-protocol-type; | type ioam-protocol-type; | |||
description | description | |||
"This object is used to indicate the carrier protocol | "This object is used to indicate the carrier protocol | |||
where IOAM is applied."; | where IOAM is applied."; | |||
} | } | |||
container incremental-tracing-profile { | container incremental-tracing-profile { | |||
if-feature "incremental-trace"; | if-feature "incremental-trace"; | |||
presence "Enables the incremental tracing option."; | presence "Enables the Incremental Trace-Option."; | |||
description | description | |||
"This container describes the profile for the | "This container describes the profile for the | |||
incremental tracing option."; | Incremental Trace-Option."; | |||
uses ioam-incremental-tracing-profile; | uses ioam-incremental-tracing-profile; | |||
} | } | |||
container preallocated-tracing-profile { | container preallocated-tracing-profile { | |||
if-feature "preallocated-trace"; | if-feature "preallocated-trace"; | |||
presence "Enables the pre-allocated tracing option."; | presence "Enables the Pre-allocated Trace-Option."; | |||
description | description | |||
"This container describes the profile for the | "This container describes the profile for the | |||
pre-allocated tracing option."; | Pre-allocated Trace-Option."; | |||
uses ioam-preallocated-tracing-profile; | uses ioam-preallocated-tracing-profile; | |||
} | } | |||
container direct-export-profile { | container direct-export-profile { | |||
if-feature "direct-export"; | if-feature "direct-export"; | |||
presence "Enables the direct export option."; | presence "Enables the Direct Export Option."; | |||
description | description | |||
"This container describes the profile for the | "This container describes the profile for the | |||
direct export option."; | Direct Export Option."; | |||
uses ioam-direct-export-profile; | uses ioam-direct-export-profile; | |||
} | } | |||
container pot-profile { | container pot-profile { | |||
if-feature "proof-of-transit"; | if-feature "proof-of-transit"; | |||
presence "Enables the proof of transit (POT) option."; | presence "Enables the Proof of Transit Option."; | |||
description | description | |||
"This container describes the profile for the | "This container describes the profile for the | |||
POT option."; | Proof of Transit Option."; | |||
leaf use-namespace { | leaf use-namespace { | |||
type ioam-namespace; | type ioam-namespace; | |||
default "default-namespace"; | default "default-namespace"; | |||
description | description | |||
"This object indicates the namespace used for the | "This object indicates the namespace used for the | |||
POT types."; | POT types."; | |||
} | } | |||
leaf pot-type { | leaf pot-type { | |||
type ioam-pot-type; | type ioam-pot-type; | |||
description | description | |||
"The type of a particular POT variant that specifies | "The type of a particular POT variant that specifies | |||
the POT data that is included."; | the POT data that is included."; | |||
} | } | |||
} | } | |||
container e2e-profile { | container e2e-profile { | |||
if-feature "edge-to-edge"; | if-feature "edge-to-edge"; | |||
presence "Enables the edge-to-edge option."; | presence "Enables the Edge-to-Edge Option."; | |||
description | description | |||
"This container describes the profile for the | "This container describes the profile for the | |||
edge-to-edge option."; | Edge-to-Edge Option."; | |||
uses ioam-e2e-profile; | uses ioam-e2e-profile; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
5. Security Considerations | 5. Security Considerations | |||
skipping to change at line 1286 ¶ | skipping to change at line 1286 ¶ | |||
</profiles> | </profiles> | |||
</ioam> | </ioam> | |||
</config> | </config> | |||
</edit-config> | </edit-config> | |||
</rpc> | </rpc> | |||
Appendix C. An Example of the Direct Export Profile | Appendix C. An Example of the Direct Export Profile | |||
An example of the Direct Export Profile is depicted in the following | An example of the Direct Export Profile is depicted in the following | |||
figure. This configuration is received by an IOAM egress node. This | figure. This configuration is received by an IOAM egress node. This | |||
node detects the IOAM direct export option in the IPv6 extension | node detects the IOAM Direct Export Option in the IPv6 extension | |||
header and removes the option to clean all the IOAM data. | header and removes the option to clean all the IOAM data. | |||
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
message-id="101"> | message-id="101"> | |||
<edit-config> | <edit-config> | |||
<target> | <target> | |||
<candidate/> | <candidate/> | |||
</target> | </target> | |||
<config> | <config> | |||
<ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | |||
skipping to change at line 1349 ¶ | skipping to change at line 1349 ¶ | |||
</profiles> | </profiles> | |||
</ioam> | </ioam> | |||
</config> | </config> | |||
</edit-config> | </edit-config> | |||
</rpc> | </rpc> | |||
Appendix E. An Example of the Edge-to-Edge Profile | Appendix E. An Example of the Edge-to-Edge Profile | |||
An example of the Edge-to-Edge Profile is depicted in the following | An example of the Edge-to-Edge Profile is depicted in the following | |||
figure. This configuration is received by an IOAM egress node. This | figure. This configuration is received by an IOAM egress node. This | |||
node detects the IOAM edge-to-edge option in the IPv6 extension | node detects the IOAM Edge-to-Edge Option in the IPv6 extension | |||
header and removes the option to clean all the IOAM data. As the | header and removes the option to clean all the IOAM data. As the | |||
IOAM egress node, it may collect the edge-to-edge data and deliver it | IOAM egress node, it may collect the edge-to-edge data and deliver it | |||
to the data-exporting process. | to the data-exporting process. | |||
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
message-id="101"> | message-id="101"> | |||
<edit-config> | <edit-config> | |||
<target> | <target> | |||
<candidate/> | <candidate/> | |||
</target> | </target> | |||
End of changes. 27 change blocks. | ||||
30 lines changed or deleted | 30 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |