| rfc9617.original | rfc9617.txt | |||
|---|---|---|---|---|
| IPPM T. Zhou, Ed. | Internet Engineering Task Force (IETF) T. Zhou, Ed. | |||
| Internet-Draft Huawei | Request for Comments: 9617 Huawei | |||
| Intended status: Standards Track J. Guichard | Category: Standards Track J. Guichard | |||
| Expires: 2 September 2024 Futurewei | ISSN: 2070-1721 Futurewei | |||
| F. Brockners | F. Brockners | |||
| S. Raghavan | S. Raghavan | |||
| Cisco Systems | Cisco Systems | |||
| 1 March 2024 | August 2024 | |||
| A YANG Data Model for In-Situ OAM | A YANG Data Model for In Situ Operations, Administration, and | |||
| draft-ietf-ippm-ioam-yang-13 | 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 to produce operational and telemetry information that may be | method for producing operational and telemetry information that may | |||
| exported using the in-band or out-of-band method. RFC9197 and | be exported using the in-band or out-of-band method. RFCs 9197 and | |||
| RFC9326 discuss the data fields and associated data types for IOAM. | 9326 discuss the data fields and associated data types for IOAM. | |||
| This document defines a YANG module for the configuration of IOAM | This document defines a YANG module for the configuration of IOAM | |||
| functions. | functions. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 2 September 2024. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9617. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2024 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | ||||
| Please review these documents carefully, as they describe your rights | carefully, as they describe your rights and restrictions with respect | |||
| and restrictions with respect to this document. Code Components | to this document. Code Components extracted from this document must | |||
| extracted from this document must include Revised BSD License text as | include Revised BSD License text as described in Section 4.e of the | |||
| described in Section 4.e of the Trust Legal Provisions and are | Trust Legal Provisions and are provided without warranty as described | |||
| provided without warranty as described in the Revised BSD License. | in the Revised BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
| 2. Conventions used in this document . . . . . . . . . . . . . . 3 | 2. Conventions Used in This Document | |||
| 2.1. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 | 2.1. Tree Diagrams | |||
| 3. Design of the IOAM YANG Data Model . . . . . . . . . . . . . 3 | 3. Design of the IOAM YANG Data Model | |||
| 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 3 | 3.1. Overview | |||
| 3.2. Preallocated Tracing Profile . . . . . . . . . . . . . . 5 | 3.2. Pre-allocated Tracing Profile | |||
| 3.3. Incremental Tracing Profile . . . . . . . . . . . . . . . 6 | 3.3. Incremental Tracing Profile | |||
| 3.4. Direct Export Profile . . . . . . . . . . . . . . . . . . 6 | 3.4. Direct Export Profile | |||
| 3.5. Proof of Transit Profile . . . . . . . . . . . . . . . . 6 | 3.5. Proof of Transit Profile | |||
| 3.6. Edge-to-Edge Profile . . . . . . . . . . . . . . . . . . 7 | 3.6. Edge-to-Edge Profile | |||
| 4. IOAM YANG Module . . . . . . . . . . . . . . . . . . . . . . 7 | 4. IOAM YANG Module | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | 5. Security Considerations | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | 6. IANA Considerations | |||
| 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 23 | 7. Normative References | |||
| 8. Normative References . . . . . . . . . . . . . . . . . . . . 24 | Appendix A. An Example of the Incremental Tracing Profile | |||
| Appendix A. An Example of Incremental Tracing Profile . . . . . 26 | Appendix B. An Example of the Pre-allocated Tracing Profile | |||
| Appendix B. An Example of Pre-allocated Tracing Profile . . . . 26 | Appendix C. An Example of the Direct Export Profile | |||
| Appendix C. An Example of Direct Export Profile . . . . . . . . 27 | Appendix D. An Example of the Proof of Transit Profile | |||
| Appendix D. An Example of Proof of Transit Profile . . . . . . . 28 | Appendix E. An Example of the Edge-to-Edge Profile | |||
| Appendix E. An Example of Edge-to-Edge Profile . . . . . . . . . 29 | Acknowledgements | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 30 | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| 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 to produce operational and telemetry information that may be | method for producing operational and telemetry information that may | |||
| exported using the in-band or out-of-band method. The data types and | be exported using the in-band or out-of-band method. The data types | |||
| data formats for IOAM data records have been defined in [RFC9197] and | and data formats for IOAM data records have been defined in [RFC9197] | |||
| [RFC9326]. The IOAM data can be embedded in many protocol | and [RFC9326]. The IOAM data can be embedded in many protocol | |||
| encapsulations such as Network Services Header (NSH) and IPv6. | encapsulations, such as the Network Service Header (NSH) [RFC9452] | |||
| 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 model supports five IOAM options, which are: | YANG data model supports five IOAM options, which are as follows: | |||
| * Incremental Tracing Option [RFC9197] | * Incremental Trace-Option [RFC9197] | |||
| * Pre-allocated Trace-Option [RFC9197] | ||||
| * Pre-allocated Tracing 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 keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP14, [RFC2119], [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| The following terms are defined in [RFC7950] and are used in this | The following terms are defined in [RFC7950] and are used in this | |||
| specification: | specification: | |||
| * augment | * augment | |||
| * data model | * data model | |||
| * data node | * data node | |||
| skipping to change at page 3, line 39 ¶ | skipping to change at line 131 ¶ | |||
| 2.1. Tree Diagrams | 2.1. Tree Diagrams | |||
| Tree diagrams used in this document follow the notation defined in | Tree diagrams used in this document follow the notation defined in | |||
| [RFC8340]. | [RFC8340]. | |||
| 3. Design of the IOAM YANG Data Model | 3. Design of the IOAM YANG Data Model | |||
| 3.1. Overview | 3.1. Overview | |||
| The IOAM model is organized as list of profiles as shown in the | The IOAM model is organized as a list of profiles, as shown in the | |||
| following figure. Each profile associates with one flow and the | following figure. Each profile associates with one flow and the | |||
| corresponding IOAM information. | corresponding IOAM information. | |||
| module: ietf-ioam | module: ietf-ioam | |||
| +--rw ioam | +--rw ioam | |||
| +--ro info | +--ro info | |||
| | +--ro timestamp-type? identityref | | +--ro timestamp-type? identityref | |||
| | +--ro available-interface* [if-name] | | +--ro available-interface* [if-name] | |||
| | +--ro if-name if:interface-ref | | +--ro if-name if:interface-ref | |||
| +--rw admin-config | +--rw admin-config | |||
| | +--rw enabled? boolean | | +--rw enabled? boolean | |||
| +--rw profiles | +--rw profiles | |||
| +--rw profile* [profile-name] | +--rw profile* [profile-name] | |||
| +--rw profile-name string | +--rw profile-name string | |||
| +--rw filter | +--rw filter | |||
| | +--rw filter-type? ioam-filter-type | | +--rw filter-type? ioam-filter-type | |||
| | +--rw ace-name? -> /acl:acls/acl/aces/ace/name | | +--rw ace-name? -> /acl:acls/acl/aces/ace/name | |||
| +--rw protocol-type? ioam-protocol-type | +--rw protocol-type? ioam-protocol-type | |||
| +--rw incremental-tracing-profile {incremental-trace}? | +--rw incremental-tracing-profile {incremental-trace}? | |||
| | ... | | ... | |||
| +--rw preallocated-tracing-profile {preallocated-trace}? | +--rw preallocated-tracing-profile {preallocated-trace}? | |||
| | ... | | ... | |||
| +--rw direct-export-profile {direct-export}? | +--rw direct-export-profile {direct-export}? | |||
| | ... | | ... | |||
| +--rw pot-profile {proof-of-transit}? | +--rw pot-profile {proof-of-transit}? | |||
| | ... | | ... | |||
| +--rw e2e-profile {edge-to-edge}? | +--rw e2e-profile {edge-to-edge}? | |||
| ... | ||||
| The "info" is a container for all the read-only information that | The "info" parameter is a container for all the read-only information | |||
| assists monitoring systems in the interpretation of the IOAM data. | that assists monitoring systems in the interpretation of the IOAM | |||
| data. | ||||
| The "enabled" is an administrative configuration. When it is set to | The "enabled" parameter is an administrative configuration. When it | |||
| true, IOAM configuration is enabled for the system. Meanwhile, the | is set to "true", IOAM configuration is enabled for the system. | |||
| IOAM data-plane functionality is enabled. | Meanwhile, the IOAM data plane functionality is enabled. | |||
| The "filter" is used to identify a flow, where the IOAM profile can | The "filter" parameter is used to identify a flow, where the IOAM | |||
| apply. There may be multiple filter types. ACL [RFC8519] is a | profile can apply. There may be multiple filter types. Access | |||
| common way to specify a flow. Each IOAM profile can associate with | Control Lists (ACLs) [RFC8519] provide a common way to specify a | |||
| an ACE(Access Control Entry). IOAM actions MUST be driven by the | flow. Each IOAM profile can associate with an ACE (Access Control | |||
| accepted packets, when the matched ACE "forwarding" action is | Entry). When the matched ACE "forwarding" action is "accept", IOAM | |||
| "accept". | 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 NSH [RFC9452]. The "protocol-type" is used to indicate | [RFC9486] and the NSH [RFC9452]. The "protocol-type" parameter is | |||
| where the IOAM is applied. For example, if the "protocol-type" is | used to indicate where IOAM is applied. For example, if "protocol- | |||
| IPv6, the IOAM ingress node will encapsulate the associated flow with | type" is set to "ipv6", the IOAM ingress node will encapsulate the | |||
| the IPv6-IOAM [RFC9486] format. | 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, preallocated 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" contains a set of sub-profiles, each of which | header. The "profile" parameter contains a set of sub-profiles, each | |||
| relates to one encapsulation type. The configured object may not | of which relates to one encapsulation type. The configured object | |||
| support all the sub-profiles. The supported sub-profiles are | may not support all the sub-profiles. The supported sub-profiles are | |||
| indicated by 5 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- | |||
| to-edge". | to-edge". | |||
| This document uses the Access Control List YANG module [RFC8519], the | This document uses the "ietf-access-control-list" YANG module | |||
| Interfaces YANG module [RFC8343] and the LIME Time Types YANG module | [RFC8519], the "ietf-interfaces" YANG module [RFC8343], and the | |||
| [RFC8532]. | "ietf-lime-time-types" YANG module [RFC8532]. | |||
| The YANG data model in this document conform 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. Preallocated Tracing Profile | 3.2. Pre-allocated Tracing Profile | |||
| The IOAM tracing data is expected to be collected at every node that | To ensure visibility into the entire path that a packet takes within | |||
| a packet traverses to ensure visibility into the entire path a packet | an IOAM domain, the IOAM tracing data is expected to be collected at | |||
| takes within an IOAM domain. The preallocated tracing option will | every node that a packet traverses. The Pre-allocated Trace-Option | |||
| create pre-allocated space for each node to populate its information | will create pre-allocated space for each node to populate its | |||
| . The "preallocated-tracing-profile" contains the detailed | information. The "preallocated-tracing-profile" parameter contains | |||
| information for the preallocated tracing data. The information | the detailed information for the pre-allocated tracing data. This | |||
| includes: | information includes: | |||
| * node-action: indicates the operation (e.g., encapsulate IOAM | node-action: indicates the operation (e.g., encapsulate the IOAM | |||
| header, transit the IOAM data, or decapsulate IOAM header) applied | header, transit the IOAM data, or decapsulate the IOAM header) | |||
| 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. | |||
| * trace-type: indicates the per-hop data to be captured by the IOAM | trace-type: indicates the per-hop data to be captured by IOAM- | |||
| enabled nodes and included in the node data list. | enabled nodes and included in the node data list. | |||
| * max-length: specifies the maximum length of the node data list in | max-length: specifies the maximum length of the node data list in | |||
| octets. The max-length is only defined at the encapsulation node. | octets. "max-length" is only defined at the encapsulation node. | |||
| +--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 node data fields | The Incremental Trace-Option contains a variable-length list of node | |||
| where each node allocates and pushes its node data immediately | data fields, where each node allocates and pushes its node data | |||
| following the option header. The "incremental-tracing-profile" | immediately following the option header. The "incremental-tracing- | |||
| contains the detailed information for the incremental tracing data. | profile" parameter contains the detailed information for the | |||
| The detailed information is the same as the Preallocated Tracing | incremental tracing data. This information is the same as that for | |||
| Profile. | 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" contains the | flight data packets. The "direct-export-profile" parameter contains | |||
| detailed information for the direct export data. The detailed | the detailed information for the direct export data. This | |||
| information is the same as the Preallocated Tracing Profile, but with | information is the same as that for the Pre-allocated Tracing Profile | |||
| two more optional variables: | (Section 3.2), but with two more optional variables: | |||
| * flow-id: is used to correlate the exported data of the same flow | flow-id: used to correlate the exported data of the same flow from | |||
| 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 | |||
| The IOAM Proof of Transit data is to support the path or service | The IOAM proof of transit data is used to support the path or service | |||
| function chain verification use cases. The "pot-profile" is intended | function chain verification use cases. The "pot-profile" parameter | |||
| to contain the detailed information for the proof of transit data. | is intended to contain the detailed information for the proof of | |||
| "use-namespace" indicates the namespace used for the POT types. | transit data. The "use-namespace" parameter indicates the namespace | |||
| "pot-type" indicates a particular POT variant that specifies the POT | used for the POT types. The "pot-type" parameter indicates a | |||
| data that is included. There may be several POT types, which have | particular POT variant that specifies the POT data that is included. | |||
| different configuration data. To align with [RFC9197], this document | There may be several POT types, each having different configuration | |||
| only defines IOAM POT type 0. User need to augment this module for | data. To align with [RFC9197], this document only defines IOAM POT | |||
| the configuration of a specifc POT type. | type 0. Users need to augment this module for the configuration of a | |||
| 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 to carry data that is added by the | The IOAM Edge-to-Edge Option is used to carry data that is added by | |||
| IOAM encapsulating node and interpreted by IOAM decapsulating node. | the IOAM encapsulating node and interpreted by the IOAM decapsulating | |||
| The "e2e-profile" contains the detailed information for the edge-to- | node. The "e2e-profile" parameter contains the detailed information | |||
| edge data. The detailed information includes: | for the edge-to-edge data. This information includes: | |||
| * node-action is the same semantic as in Section 3.2. | node-action: the same semantic as that provided in Section 3.2. | |||
| * use-namespace: indicate 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 | e2e-type: indicates data to be carried from the ingress IOAM node to | |||
| to the egress IOAM node. | the egress IOAM node. | |||
| +--rw e2e-profile {edge-to-edge}? | +--rw e2e-profile {edge-to-edge}? | |||
| +--rw node-action? ioam-node-action | +--rw node-action? ioam-node-action | |||
| +--rw e2e-types | +--rw e2e-types | |||
| +--rw use-namespace? ioam-namespace | +--rw use-namespace? ioam-namespace | |||
| +--rw e2e-type* ioam-e2e-type | +--rw e2e-type* ioam-e2e-type | |||
| 4. IOAM YANG Module | 4. IOAM YANG Module | |||
| <CODE BEGINS> file "ietf-ioam@2024-03-01.yang" | The "ietf-ioam" module defined in this document imports typedefs from | |||
| [RFC8519], [RFC8343], and [RFC8532]. This document also references | ||||
| [RFC9197], [RFC9326], [RFC9486], and [RFC9452]. | ||||
| <CODE BEGINS> file "ietf-ioam@2024-07-12.yang" | ||||
| module ietf-ioam { | module ietf-ioam { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-ioam"; | namespace "urn:ietf:params:xml:ns:yang:ietf-ioam"; | |||
| prefix "ioam"; | prefix ioam; | |||
| import ietf-access-control-list { | import ietf-access-control-list { | |||
| prefix "acl"; | prefix acl; | |||
| reference | reference | |||
| "RFC 8519: YANG Data Model for Network Access Control | "RFC 8519: YANG Data Model for Network Access Control | |||
| Lists (ACLs)"; | Lists (ACLs)"; | |||
| } | } | |||
| import ietf-interfaces { | import ietf-interfaces { | |||
| prefix "if"; | prefix if; | |||
| reference | reference | |||
| "RFC 8343: A YANG Data Model for Interface Management"; | "RFC 8343: A YANG Data Model for Interface Management"; | |||
| } | } | |||
| import ietf-lime-time-types { | import ietf-lime-time-types { | |||
| prefix "lime"; | prefix lime; | |||
| reference | reference | |||
| "RFC 8532: Generic YANG Data Model for the Management of | "RFC 8532: Generic YANG Data Model for the Management of | |||
| Operations, Administration, and Maintenance (OAM) Protocols | Operations, Administration, and Maintenance (OAM) Protocols | |||
| That Use Connectionless Communications"; | That Use Connectionless Communications"; | |||
| } | } | |||
| organization | organization | |||
| "IETF IPPM (IP Performance Metrics) Working Group"; | "IETF IPPM (IP Performance Measurement) Working Group"; | |||
| contact | contact | |||
| "WG Web: <https://datatracker.ietf.org/wg/ippm> | "WG Web: <https://datatracker.ietf.org/wg/ippm> | |||
| WG List: <ippm@ietf.org> | WG List: <mailto:ippm@ietf.org> | |||
| Editor: zhoutianran@huawei.com | Editor: Tianran Zhou | |||
| Editor: james.n.guichard@futurewei.com | <mailto:zhoutianran@huawei.com> | |||
| Editor: fbrockne@cisco.com | Author: Jim Guichard | |||
| Editor: srihari@cisco.com"; | <mailto:james.n.guichard@futurewei.com> | |||
| Author: Frank Brockners | ||||
| <mailto:fbrockne@cisco.com> | ||||
| Author: Srihari Raghavan | ||||
| <mailto:srihari@cisco.com>"; | ||||
| description | description | |||
| "This YANG module specifies a vendor-independent data | "This YANG module specifies a vendor-independent data model | |||
| model for the In Situ OAM (IOAM). | for In Situ Operations, Administration, and Maintenance | |||
| (IOAM). | ||||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |||
| 'MAY', and 'OPTIONAL' in this document are to be interpreted as | 'MAY', and 'OPTIONAL' in this document are to be interpreted as | |||
| described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |||
| they appear in all capitals, as shown here. | they appear in all capitals, as shown here. | |||
| Copyright (c) 2024 IETF Trust and the persons identified as | Copyright (c) 2024 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
| without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
| the license terms contained in, the Revised BSD License set | the license terms contained in, the Revised BSD License set | |||
| forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| Relating to IETF Documents | Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC 9617; see the | |||
| (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | RFC itself for full legal notices."; | |||
| for full legal notices."; | ||||
| revision 2024-03-01 { | ||||
| description "Initial revision."; | ||||
| reference "RFC XXXX: A YANG Data Model for In-Situ OAM"; | ||||
| revision 2024-07-12 { | ||||
| description | ||||
| "Initial revision."; | ||||
| reference | ||||
| "RFC 9617: A YANG Data Model for In Situ Operations, | ||||
| Administration, and Maintenance (IOAM)"; | ||||
| } | } | |||
| /* | /* | |||
| * FEATURES | * FEATURES | |||
| */ | */ | |||
| feature incremental-trace | feature incremental-trace { | |||
| { | ||||
| description | description | |||
| "This feature indicated that the incremental tracing option is | "This feature indicates that the Incremental Trace-Option is | |||
| supported."; | supported."; | |||
| reference "RFC 9197: Data Fields for In-situ OAM"; | reference | |||
| "RFC 9197: Data Fields for In Situ Operations, | ||||
| Administration, and Maintenance (IOAM)"; | ||||
| } | } | |||
| feature preallocated-trace | feature preallocated-trace { | |||
| { | ||||
| description | description | |||
| "This feature indicated that the preallocated tracing option is | "This feature indicates that the Pre-allocated Trace-Option | |||
| supported."; | is supported."; | |||
| reference "RFC 9197: Data Fields for In-situ OAM"; | reference | |||
| "RFC 9197: Data Fields for In Situ Operations, | ||||
| Administration, and Maintenance (IOAM)"; | ||||
| } | } | |||
| feature direct-export | feature direct-export { | |||
| { | ||||
| description | description | |||
| "This feature indicated that the direct export option is | "This feature indicates that the Direct Export Option is | |||
| supported."; | supported."; | |||
| reference "RFC 9326: In-situ OAM Direct Exporting"; | reference | |||
| "RFC 9326: In Situ Operations, Administration, and | ||||
| Maintenance (IOAM) Direct Exporting"; | ||||
| } | } | |||
| feature proof-of-transit | feature proof-of-transit { | |||
| { | ||||
| description | description | |||
| "This feature indicated that the proof of transit option is | "This feature indicates that the Proof of Transit Option is | |||
| supported"; | supported."; | |||
| reference "RFC 9197: Data Fields for In-situ OAM"; | reference | |||
| "RFC 9197: Data Fields for In Situ Operations, | ||||
| Administration, and Maintenance (IOAM)"; | ||||
| } | } | |||
| feature edge-to-edge | feature edge-to-edge { | |||
| { | ||||
| description | description | |||
| "This feature indicated that the edge-to-edge option is | "This feature indicates that the Edge-to-Edge Option is | |||
| supported."; | supported."; | |||
| reference "RFC 9197: Data Fields for In-situ OAM"; | reference | |||
| "RFC 9197: Data Fields for In Situ Operations, | ||||
| Administration, and Maintenance (IOAM)"; | ||||
| } | } | |||
| /* | /* | |||
| * IDENTITIES | * IDENTITIES | |||
| */ | */ | |||
| identity filter { | identity filter { | |||
| description | description | |||
| "Base identity to represent a filter. A filter is used to | "Base identity to represent a filter. A filter is used to | |||
| specify the flow to apply the IOAM profile. "; | specify the flow to apply the IOAM profile."; | |||
| } | } | |||
| identity acl-filter { | identity acl-filter { | |||
| base filter; | base filter; | |||
| description | description | |||
| "Apply ACL rules to specify the flow."; | "Apply Access Control List (ACL) rules to specify the | |||
| flow."; | ||||
| } | } | |||
| identity protocol { | identity protocol { | |||
| description | description | |||
| "Base identity to represent the carrier protocol. It's used to | "Base identity to represent the carrier protocol. It is | |||
| indicate what layer and protocol the IOAM data is embedded."; | used to indicate in what layer and protocol the IOAM data | |||
| is embedded."; | ||||
| } | } | |||
| identity ipv6 { | identity ipv6 { | |||
| base protocol; | base protocol; | |||
| description | description | |||
| "The described IOAM data is embedded in IPv6 protocol."; | "The described IOAM data is embedded in IPv6."; | |||
| reference | reference | |||
| "RFC 9486: In-situ OAM IPv6 Options"; | "RFC 9486: IPv6 Options for In Situ Operations, | |||
| Administration, and Maintenance (IOAM)"; | ||||
| } | } | |||
| identity nsh { | identity nsh { | |||
| base protocol; | base protocol; | |||
| description | description | |||
| "The described IOAM data is embedded in NSH."; | "The described IOAM data is embedded in the Network Service | |||
| Header (NSH)."; | ||||
| reference | reference | |||
| "RFC 9452: Network Service Header (NSH) | "RFC 9452: Network Service Header (NSH) Encapsulation for | |||
| Encapsulation for In-situ OAM (IOAM) Data"; | In Situ OAM (IOAM) Data"; | |||
| } | } | |||
| identity node-action { | identity node-action { | |||
| description | description | |||
| "Base identity to represent the node actions. It's used to | "Base identity to represent the node actions. It is used to | |||
| indicate what action the node will take."; | indicate what action the node will take."; | |||
| } | } | |||
| identity action-encapsulate { | identity action-encapsulate { | |||
| base node-action; | base node-action; | |||
| description | description | |||
| "It indicates the node is to encapsulate the IOAM packet"; | "This identity indicates that the node is used to | |||
| encapsulate the IOAM packet."; | ||||
| } | } | |||
| identity action-decapsulate { | identity action-decapsulate { | |||
| base node-action; | base node-action; | |||
| description | description | |||
| "It indicates the node is to decapsulate the IOAM packet"; | "This identity indicates that the node is used to | |||
| decapsulate the IOAM packet."; | ||||
| } | } | |||
| identity action-transit { | identity action-transit { | |||
| base node-action; | base node-action; | |||
| description | description | |||
| "It indicates the node is to transit the IOAM packet"; | "This identity indicates that the node is used to transit | |||
| the IOAM packet."; | ||||
| } | } | |||
| identity trace-type { | identity trace-type { | |||
| description | description | |||
| "Base identity to represent trace types."; | "Base identity to represent trace types."; | |||
| } | } | |||
| identity trace-hop-lim-node-id { | identity trace-hop-lim-node-id { | |||
| base trace-type; | base trace-type; | |||
| description | description | |||
| "It indicates the presence of Hop_Lim and node_id in the | "This identity indicates the presence of 'Hop_Lim' and | |||
| node data."; | 'node_id' in the node data."; | |||
| reference | ||||
| "RFC 9197: Data Fields for In Situ Operations, | ||||
| Administration, and Maintenance (IOAM)"; | ||||
| } | } | |||
| identity trace-if-id { | identity trace-if-id { | |||
| base trace-type; | base trace-type; | |||
| description | description | |||
| "It indicates presence of ingress_if_id and egress_if_id | "This identity indicates the presence of 'ingress_if_id' and | |||
| (short format) in the node data."; | 'egress_if_id' (short format) in the node data."; | |||
| reference | ||||
| "RFC 9197: Data Fields for In Situ Operations, | ||||
| Administration, and Maintenance (IOAM)"; | ||||
| } | } | |||
| identity trace-timestamp-seconds { | identity trace-timestamp-seconds { | |||
| base trace-type; | base trace-type; | |||
| description | description | |||
| "It indicates presence of timestamp seconds in the node data."; | "This identity indicates the presence of timestamp seconds | |||
| in the node data."; | ||||
| } | } | |||
| identity trace-timestamp-fraction { | identity trace-timestamp-fraction { | |||
| base trace-type; | base trace-type; | |||
| description | description | |||
| "It indicates presence of timestamp fraction in the node | "This identity indicates the presence of a timestamp | |||
| data."; | fraction in the node data."; | |||
| } | } | |||
| identity trace-transit-delay { | identity trace-transit-delay { | |||
| base trace-type; | base trace-type; | |||
| description | description | |||
| "It indicates presence of transit delay in the node data."; | "This identity indicates the presence of transit delay in | |||
| the node data."; | ||||
| } | } | |||
| identity trace-namespace-data { | identity trace-namespace-data { | |||
| base trace-type; | base trace-type; | |||
| description | description | |||
| "It indicates presence of name space specific data (short | "This identity indicates the presence of namespace-specific | |||
| format) in the node data."; | data (short format) in the node data."; | |||
| } | } | |||
| identity trace-queue-depth { | identity trace-queue-depth { | |||
| base trace-type; | base trace-type; | |||
| description | description | |||
| "It indicates presence of queue depth in the node data."; | "This identity indicates the presence of queue depth in the | |||
| node data."; | ||||
| } | } | |||
| identity trace-checksum-complement { | identity trace-checksum-complement { | |||
| base trace-type; | base trace-type; | |||
| description | description | |||
| "It indicates presence of the Checksum Complement node data."; | "This identity indicates the presence of the Checksum | |||
| Complement in the node data."; | ||||
| reference | ||||
| "RFC 9197: Data Fields for In Situ Operations, | ||||
| Administration, and Maintenance (IOAM)"; | ||||
| } | } | |||
| identity trace-hop-lim-node-id-wide { | identity trace-hop-lim-node-id-wide { | |||
| base trace-type; | base trace-type; | |||
| description | description | |||
| "It indicates presence of Hop_Lim and node_id in wide format | "This identity indicates the presence of 'Hop_Lim' and | |||
| in the node data."; | 'node_id' (wide format) in the node data."; | |||
| } | } | |||
| identity trace-if-id-wide { | identity trace-if-id-wide { | |||
| base trace-type; | base trace-type; | |||
| description | description | |||
| "It indicates presence of ingress_if_id and egress_if_id in | "This identity indicates the presence of 'ingress_if_id' and | |||
| wide format in the node data."; | 'egress_if_id' (wide format) in the node data."; | |||
| } | } | |||
| identity trace-namespace-data-wide { | identity trace-namespace-data-wide { | |||
| base trace-type; | base trace-type; | |||
| description | description | |||
| "It indicates presence of IOAM-Namespace specific data in wide | "This identity indicates the presence of | |||
| format in the node data."; | IOAM-namespace-specific data (wide format) in the | |||
| node data."; | ||||
| } | } | |||
| identity trace-buffer-occupancy { | identity trace-buffer-occupancy { | |||
| base trace-type; | base trace-type; | |||
| description | description | |||
| "It indicates presence of buffer occupancy in the node data."; | "This identity indicates the presence of buffer occupancy | |||
| in the node data."; | ||||
| } | } | |||
| identity trace-opaque-state-snapshot { | identity trace-opaque-state-snapshot { | |||
| base trace-type; | base trace-type; | |||
| description | description | |||
| "It indicates presence of variable length Opaque State Snapshot | "This identity indicates the presence of the variable-length | |||
| field."; | Opaque State Snapshot field."; | |||
| } | } | |||
| identity pot-type { | identity pot-type { | |||
| description | description | |||
| "Base identity to represent Proof of Transit (PoT) types."; | "Base identity to represent Proof of Transit (POT) types."; | |||
| } | } | |||
| identity pot-type-0 { | identity pot-type-0 { | |||
| base pot-type; | base pot-type; | |||
| description | description | |||
| "The IOAM POT Type field value is 0, and POT data is a 16 | "The IOAM field value for the POT type is 0, and POT data is | |||
| Octet field to carry data associated to POT procedures."; | a 16-octet field to carry data associated with POT | |||
| procedures."; | ||||
| } | } | |||
| identity e2e-type { | identity e2e-type { | |||
| description | description | |||
| "Base identity to represent edge-to-edge types."; | "Base identity to represent edge-to-edge types."; | |||
| } | } | |||
| identity e2e-seq-num-64 { | identity e2e-seq-num-64 { | |||
| base e2e-type; | base e2e-type; | |||
| description | description | |||
| "It indicates presence of a 64-bit sequence number."; | "This identity indicates the presence of a 64-bit | |||
| sequence number."; | ||||
| } | } | |||
| identity e2e-seq-num-32 { | identity e2e-seq-num-32 { | |||
| base e2e-type; | base e2e-type; | |||
| description | description | |||
| "It indicates the presence of a 32-bit sequence number."; | "This identity indicates the presence of a 32-bit | |||
| sequence number."; | ||||
| } | } | |||
| identity e2e-timestamp-seconds { | identity e2e-timestamp-seconds { | |||
| base e2e-type; | base e2e-type; | |||
| description | description | |||
| "It indicates the presence of timestamp seconds representing | "This identity indicates the presence of timestamp seconds | |||
| the time at which the packet entered the IOAM-domain."; | representing the time at which the packet entered the | |||
| IOAM domain."; | ||||
| } | } | |||
| identity e2e-timestamp-fraction { | identity e2e-timestamp-fraction { | |||
| base e2e-type; | base e2e-type; | |||
| description | description | |||
| "It indicates the presence of timestamp fraction representing | "This identity indicates the presence of a timestamp | |||
| the time at which the packet entered the IOAM-domain."; | fraction representing the time at which the packet entered | |||
| the IOAM domain."; | ||||
| } | } | |||
| identity namespace { | identity namespace { | |||
| description | description | |||
| "Base identity to represent the Namespace-ID."; | "Base identity to represent the Namespace-ID."; | |||
| } | } | |||
| identity default-namespace { | identity default-namespace { | |||
| base namespace; | base namespace; | |||
| description | description | |||
| "The Namespace-ID value of 0x0000 is defined as the | "The Namespace-ID value of 0x0000 is defined as the | |||
| Default-Namespace-ID and MUST be known to all the nodes | Default-Namespace-ID and MUST be known to all the nodes | |||
| implementing IOAM."; | implementing IOAM."; | |||
| } | } | |||
| /* | /* | |||
| * TYPE DEFINITIONS | * TYPE DEFINITIONS | |||
| */ | */ | |||
| typedef ioam-filter-type { | typedef ioam-filter-type { | |||
| type identityref { | type identityref { | |||
| base filter; | base filter; | |||
| } | } | |||
| description | description | |||
| "It specifies a known type of filter."; | "This type specifies a known type of filter."; | |||
| } | } | |||
| typedef ioam-protocol-type { | typedef ioam-protocol-type { | |||
| type identityref { | type identityref { | |||
| base protocol; | base protocol; | |||
| } | } | |||
| description | description | |||
| "It specifies a known type of carrier protocol for the IOAM | "This type specifies a known type of carrier protocol for | |||
| data."; | the IOAM data."; | |||
| } | } | |||
| typedef ioam-node-action { | typedef ioam-node-action { | |||
| type identityref { | type identityref { | |||
| base node-action; | base node-action; | |||
| } | } | |||
| description | description | |||
| "It specifies a known type of node action."; | "This type specifies a known type of node action."; | |||
| } | } | |||
| typedef ioam-trace-type { | typedef ioam-trace-type { | |||
| type identityref { | type identityref { | |||
| base trace-type; | base trace-type; | |||
| } | } | |||
| description | description | |||
| "It specifies a known trace type."; | "This type specifies a known trace type."; | |||
| } | } | |||
| typedef ioam-pot-type { | typedef ioam-pot-type { | |||
| type identityref { | type identityref { | |||
| base pot-type; | base pot-type; | |||
| } | } | |||
| description | description | |||
| "It specifies a known pot type."; | "This type specifies a known POT type."; | |||
| } | } | |||
| typedef ioam-e2e-type { | typedef ioam-e2e-type { | |||
| type identityref { | type identityref { | |||
| base e2e-type; | base e2e-type; | |||
| } | } | |||
| description | description | |||
| "It specifies a known edge-to-edge type."; | "This type specifies a known edge-to-edge type."; | |||
| } | } | |||
| typedef ioam-namespace { | typedef ioam-namespace { | |||
| type identityref { | type identityref { | |||
| base namespace; | base namespace; | |||
| } | } | |||
| description | description | |||
| "It specifies the supported namespace."; | "This type specifies the supported namespace."; | |||
| } | } | |||
| /* | /* | |||
| * GROUP DEFINITIONS | * GROUP DEFINITIONS | |||
| */ | */ | |||
| grouping ioam-filter { | grouping ioam-filter { | |||
| description "A grouping for IOAM filter definition"; | description | |||
| "A grouping for IOAM filter definitions."; | ||||
| leaf filter-type { | leaf filter-type { | |||
| type ioam-filter-type; | type ioam-filter-type; | |||
| description "filter type"; | description | |||
| "Filter type."; | ||||
| } | } | |||
| leaf ace-name { | leaf ace-name { | |||
| when "derived-from-or-self(../filter-type, 'ioam:acl-filter')"; | when "derived-from-or-self(../filter-type, 'ioam:acl-filter')"; | |||
| type leafref { | type leafref { | |||
| path "/acl:acls/acl:acl/acl:aces/acl:ace/acl:name"; | path "/acl:acls/acl:acl/acl:aces/acl:ace/acl:name"; | |||
| } | } | |||
| description "The Access Control Entry name is used to | description | |||
| refer to an ACL specification."; | "The Access Control Entry name is used to refer to an ACL | |||
| specification."; | ||||
| } | } | |||
| } | } | |||
| grouping encap-tracing { | grouping encap-tracing { | |||
| description | description | |||
| "A grouping for the generic configuration for | "A grouping for the generic configuration for the | |||
| tracing profile."; | tracing profile."; | |||
| container trace-types { | container trace-types { | |||
| description | description | |||
| "It indicates the list of trace types for encapsulation."; | "This container provides the list of trace types for | |||
| encapsulation."; | ||||
| leaf use-namespace { | leaf use-namespace { | |||
| type ioam-namespace; | type ioam-namespace; | |||
| default default-namespace; | default "default-namespace"; | |||
| description | description | |||
| "It indicates the name space used for encapsulation."; | "This object indicates the namespace used for | |||
| encapsulation."; | ||||
| } | } | |||
| leaf-list trace-type { | leaf-list trace-type { | |||
| type ioam-trace-type; | type ioam-trace-type; | |||
| description | description | |||
| "The trace type is only defined at the encapsulation | "The trace type is only defined at the encapsulation | |||
| node."; | node."; | |||
| } | } | |||
| } | } | |||
| leaf max-length { | leaf max-length { | |||
| when "derived-from-or-self(../node-action, | when "derived-from-or-self(../node-action, | |||
| 'ioam:action-encapsulate')"; | 'ioam:action-encapsulate')"; | |||
| type uint32; | type uint32; | |||
| units bytes; | units "bytes"; | |||
| description | description | |||
| "This field specifies the maximum length of the node data | "This field specifies the maximum length of the node data | |||
| list in octets. The max-length is only defined at the | list in octets. 'max-length' is only defined at the | |||
| encapsulation node."; | encapsulation node."; | |||
| } | } | |||
| } | } | |||
| grouping ioam-incremental-tracing-profile { | grouping ioam-incremental-tracing-profile { | |||
| description | description | |||
| "A grouping for incremental tracing profile."; | "A grouping for the Incremental Tracing Profile."; | |||
| leaf node-action { | leaf node-action { | |||
| type ioam-node-action; | type ioam-node-action; | |||
| default action-transit; | default "action-transit"; | |||
| description | description | |||
| "This object indicates the action the node need to | "This object indicates the action the node needs to | |||
| take, e.g. encapsulation."; | take, e.g., encapsulation."; | |||
| } | } | |||
| uses encap-tracing { | uses encap-tracing { | |||
| when "derived-from-or-self(node-action, | when "derived-from-or-self(node-action, | |||
| 'ioam:action-encapsulate')"; | 'ioam:action-encapsulate')"; | |||
| } | } | |||
| } | } | |||
| grouping ioam-preallocated-tracing-profile { | grouping ioam-preallocated-tracing-profile { | |||
| description | description | |||
| "A grouping for pre-allocated tracing profile."; | "A grouping for the Pre-allocated Tracing Profile."; | |||
| leaf node-action { | leaf node-action { | |||
| type ioam-node-action; | type ioam-node-action; | |||
| default action-transit; | default "action-transit"; | |||
| description | description | |||
| "This object indicates the action the node need to | "This object indicates the action the node needs to | |||
| take, e.g. encapsulation."; | take, e.g., encapsulation."; | |||
| } | } | |||
| uses encap-tracing { | uses encap-tracing { | |||
| when "derived-from-or-self(node-action, | when "derived-from-or-self(node-action, | |||
| 'ioam:action-encapsulate')"; | 'ioam:action-encapsulate')"; | |||
| } | } | |||
| } | } | |||
| grouping ioam-direct-export-profile { | grouping ioam-direct-export-profile { | |||
| description | description | |||
| "A grouping for direct export profile."; | "A grouping for the Direct Export Profile."; | |||
| leaf node-action { | leaf node-action { | |||
| type ioam-node-action; | type ioam-node-action; | |||
| default action-transit; | default "action-transit"; | |||
| description | description | |||
| "This object indicates the action the node need to | "This object indicates the action the node needs to | |||
| take, e.g. encapsulation."; | take, e.g., encapsulation."; | |||
| } | } | |||
| uses encap-tracing { | uses encap-tracing { | |||
| when "derived-from-or-self(node-action, | when "derived-from-or-self(node-action, | |||
| 'ioam:action-encapsulate')"; | 'ioam:action-encapsulate')"; | |||
| } | } | |||
| leaf flow-id { | leaf flow-id { | |||
| when "derived-from-or-self(../node-action, | when "derived-from-or-self(../node-action, | |||
| 'ioam:action-encapsulate')"; | 'ioam:action-encapsulate')"; | |||
| type uint32; | type uint32; | |||
| description | description | |||
| "A 32-bit flow identifier. The field is set at the | "A 32-bit flow identifier. The field is set at the | |||
| encapsulating node. The Flow ID can be uniformly assigned | encapsulating node. The Flow ID can be uniformly | |||
| by a central controller or algorithmically generated by the | assigned by a central controller or algorithmically | |||
| encapsulating node. The latter approach cannot guarantee | generated by the encapsulating node. The latter approach | |||
| the uniqueness of Flow ID, yet the conflict probability is | cannot guarantee the uniqueness of the Flow ID, yet the | |||
| small due to the large Flow ID space. flow-id is used to | probability of conflict is small due to the large Flow ID | |||
| correlate the exported data of the same flow from multiple | space. 'flow-id' is used to correlate the exported data | |||
| nodes and from multiple packets."; | of the same flow from multiple nodes and from multiple | |||
| 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 is | "This boolean value indicates whether the sequence number | |||
| used in the direct export option 32-bit flow identifier. If | is used in the Direct Export Option's 32-bit flow | |||
| this value is true, the sequence number is used. By default, | identifier. If this value is set to 'true', the sequence | |||
| it's turned off."; | number is used. It is turned off by default."; | |||
| } | } | |||
| } | } | |||
| grouping ioam-e2e-profile { | grouping ioam-e2e-profile { | |||
| description | description | |||
| "A grouping for 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; | |||
| default action-transit; | default "action-transit"; | |||
| description | description | |||
| "This object indicates the action the node need to | "This object indicates the action the node needs to | |||
| take, e.g. encapsulation."; | take, e.g., encapsulation."; | |||
| } | } | |||
| container e2e-types { | container e2e-types { | |||
| when "derived-from-or-self(../node-action, | when "derived-from-or-self(../node-action, | |||
| 'ioam:action-encapsulate')"; | 'ioam:action-encapsulate')"; | |||
| description | description | |||
| "It indicates the list of edge-to-edge types for | "This container provides the list of edge-to-edge types | |||
| encapsulation."; | for encapsulation."; | |||
| leaf use-namespace { | leaf use-namespace { | |||
| type ioam-namespace; | type ioam-namespace; | |||
| default default-namespace; | default "default-namespace"; | |||
| description | description | |||
| "It indicates the name space used for encapsulation."; | "This object indicates the namespace used for | |||
| encapsulation."; | ||||
| } | } | |||
| leaf-list e2e-type { | leaf-list e2e-type { | |||
| type ioam-e2e-type; | type ioam-e2e-type; | |||
| description | description | |||
| "The edge-to-edge type is only defined at the encapsulation | "The edge-to-edge type is only defined at the | |||
| node."; | encapsulation node."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping ioam-admin-config { | grouping ioam-admin-config { | |||
| description | description | |||
| "IOAM top-level administrative configuration."; | "IOAM top-level administrative configuration."; | |||
| leaf enabled { | leaf enabled { | |||
| type boolean; | type boolean; | |||
| default false; | default "false"; | |||
| description | description | |||
| "This object is to control the availability of configuration. | "This object is used to control the availability of | |||
| It MUST be true before anything in the | configuration. It MUST be set to 'true' before anything | |||
| /ioam/profiles/profile subtree can be edited. | in the /ioam/profiles/profile subtree can be edited. | |||
| If false, any configuration in place is not used."; | If 'false', any configuration in place is not used."; | |||
| } | } | |||
| } | } | |||
| /* | /* | |||
| * DATA NODES | * DATA NODES | |||
| */ | */ | |||
| container ioam { | container ioam { | |||
| description "IOAM top level container"; | description | |||
| "IOAM top-level container."; | ||||
| container info { | container info { | |||
| config false; | config false; | |||
| description | description | |||
| "Describes information such as units or timestamp format that | "Describes information, such as units or timestamp format, | |||
| assists monitoring systems in the interpretation of the IOAM | that assists monitoring systems in the interpretation of | |||
| data."; | the IOAM data."; | |||
| leaf timestamp-type { | leaf timestamp-type { | |||
| type identityref { | type identityref { | |||
| base lime:timestamp-type; | base lime:timestamp-type; | |||
| } | } | |||
| description | description | |||
| "Type of timestamp, such as Truncated PTP or NTP."; | "Type of timestamp, such as Truncated PTP (Precision | |||
| Time Protocol) or NTP."; | ||||
| } | } | |||
| list available-interface { | list available-interface { | |||
| key "if-name"; | key "if-name"; | |||
| description | description | |||
| "A list of available interfaces that support IOAM."; | "A list of available interfaces that support IOAM."; | |||
| leaf if-name { | leaf if-name { | |||
| type if:interface-ref; | type if:interface-ref; | |||
| description "This is a reference to the Interface name."; | description | |||
| "This is a reference to the interface name."; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| container admin-config { | container admin-config { | |||
| description | description | |||
| "Contains all the administrative configurations related to | "Contains all the administrative configurations related to | |||
| the IOAM functionalities and all the IOAM profiles."; | the IOAM functionalities and all the IOAM profiles."; | |||
| uses ioam-admin-config; | uses ioam-admin-config; | |||
| } | } | |||
| container profiles { | container profiles { | |||
| description | description | |||
| "Contains a list of IOAM profiles."; | "Contains a list of IOAM profiles."; | |||
| list profile { | list profile { | |||
| key "profile-name"; | key "profile-name"; | |||
| description | description | |||
| "A list of IOAM profiles that configured on the node. | "A list of IOAM profiles that are configured on the | |||
| There is no mandatory type of profile (e.g., | node. There is no mandatory type of profile (e.g., | |||
| incremental-trace, preallocated-trace.) in the list. | 'incremental-trace', 'preallocated-trace') in the list. | |||
| But at least one profile should be added."; | But at least one profile should be added."; | |||
| leaf profile-name { | leaf profile-name { | |||
| type string{ | type string { | |||
| length "1..300"; | length "1..300"; | |||
| } | } | |||
| description | description | |||
| "Unique identifier for each IOAM profile."; | "Unique identifier for each IOAM profile."; | |||
| } | } | |||
| container filter { | container filter { | |||
| uses ioam-filter; | uses ioam-filter; | |||
| description | description | |||
| "The filter which is used to indicate the flow to apply | "The filter that is used to indicate the flow to apply | |||
| IOAM."; | IOAM."; | |||
| } | } | |||
| leaf protocol-type { | leaf protocol-type { | |||
| type ioam-protocol-type; | type ioam-protocol-type; | |||
| description | description | |||
| "This item is used to indicate the carrier protocol where | "This object is used to indicate the carrier protocol | |||
| the 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 incremental tracing option."; | presence "Enables the Incremental Trace-Option."; | |||
| description | description | |||
| "It describes the profile for incremental tracing | "This container describes the profile for the | |||
| 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 preallocated tracing option."; | presence "Enables the Pre-allocated Trace-Option."; | |||
| description | description | |||
| "It describes the profile for preallocated tracing | "This container describes the profile for the | |||
| 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 direct-export option."; | presence "Enables the Direct Export Option."; | |||
| description | description | |||
| "It describes the profile for direct-export option"; | "This container describes the profile for the | |||
| 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 Proof of Transit option."; | presence "Enables the Proof of Transit Option."; | |||
| description | description | |||
| "It describes the profile for PoT option."; | "This container describes the profile for the | |||
| Proof of Transit Option."; | ||||
| leaf use-namespace { | leaf use-namespace { | |||
| type ioam-namespace; | type ioam-namespace; | |||
| default default-namespace; | default "default-namespace"; | |||
| description | description | |||
| "It indicates the namespace used for the POT types."; | "This object indicates the namespace used for the | |||
| 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 edge-to-edge option."; | presence "Enables the Edge-to-Edge Option."; | |||
| description | description | |||
| "It describes the profile for edge-to-edge option."; | "This container describes the profile for the | |||
| 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 page 22, line 46 ¶ | skipping to change at line 1053 ¶ | |||
| RESTCONF protocol operations and content. | RESTCONF protocol operations and content. | |||
| There are a number of data nodes defined in this YANG module that are | There are a number of data nodes defined in this YANG module that are | |||
| writable/creatable/deletable (i.e., config true, which is the | writable/creatable/deletable (i.e., config true, which is the | |||
| default). These data nodes may be considered sensitive or vulnerable | default). These data nodes may be considered sensitive or vulnerable | |||
| in some network environments. Write operations (e.g., edit-config) | in some network environments. Write operations (e.g., edit-config) | |||
| to these data nodes without proper protection can have a negative | to these data nodes without proper protection can have a negative | |||
| effect on network operations. These are the subtrees and data nodes | effect on network operations. These are the subtrees and data nodes | |||
| and their sensitivity/vulnerability: | and their sensitivity/vulnerability: | |||
| * /ioam/admin-config: The items in the container above include the | /ioam/admin-config: The items in the "admin-config" container above | |||
| top level administrative configurations related to the IOAM | include the top-level administrative configurations related to the | |||
| functionalities and all the IOAM profiles. Unexpected changes to | IOAM functionalities and all the IOAM profiles. Unexpected | |||
| these items could lead to the IOAM function disruption and/or | changes to these items could lead to disruption of IOAM functions | |||
| misbehavior of all the IOAM profiles. | and/or misbehaving IOAM profiles. | |||
| * /ioam/profiles/profile: The entries in the list above include the | /ioam/profiles/profile: The entries in the "profile" list above | |||
| whole IOAM profile configurations. Unexpected changes to these | include the whole IOAM profile configurations. Unexpected changes | |||
| entries could lead to the mistake of the IOAM behavior for the | to these entries could lead to incorrect IOAM behavior for the | |||
| corresponding flows. Consequently, it will impact the performance | corresponding flows. Consequently, such changes would impact | |||
| monitoring, data analytics, and the associated reaction to network | performance monitoring, data analytics, and associated | |||
| services. | interactions with network services. | |||
| Some readable data nodes in these YANG modules may be considered | Some of the readable data nodes in this YANG module may be considered | |||
| sensitive or vulnerable in some network environments. It is thus | sensitive or vulnerable in some network environments. It is thus | |||
| important to control read access (e.g., via get, get-config, or | important to control read access (e.g., via get, get-config, or | |||
| notification) to these data nodes. These are the subtrees and data | notification) to these data nodes. These are the subtrees and data | |||
| nodes and their sensitivity/vulnerability: | nodes and their sensitivity/vulnerability: | |||
| * /ioam/profiles/profile: The information contained in this subtree | /ioam/profiles/profile: The information contained in this subtree | |||
| might give information about the services deployed for the | might reveal information about the services deployed for | |||
| customers.For instance, a customer might be given access to | customers. For instance, a customer might be given access to | |||
| monitor their services status. In that example, the customer | monitor the status of their services. In this scenario, the | |||
| access should be restricted to nodes representing their services | customer's access should be restricted to nodes representing their | |||
| so as not to divulge information about the underlying network | services so as not to divulge information about the underlying | |||
| structure or services. | network structure or services. | |||
| 6. IANA Considerations | 6. IANA Considerations | |||
| RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | IANA has registered the following URI in the "IETF XML Registry" | |||
| actual RFC number (and remove this note). | [RFC3688]: | |||
| IANA is requested to assign a new URI from the IETF XML Registry | ||||
| [RFC3688]. The following URI is suggested: | ||||
| URI: urn:ietf:params:xml:ns:yang:ietf-ioam | ||||
| Registrant Contact: The IESG. | ||||
| XML: N/A; the requested URI is an XML namespace. | ||||
| This document also requests a new YANG module name in the YANG Module | ||||
| Names registry [RFC7950] with the following suggestion: | ||||
| name: ietf-ioam | URI: urn:ietf:params:xml:ns:yang:ietf-ioam | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-ioam | Registrant Contact: The IESG. | |||
| prefix: ioam | XML: N/A; the requested URI is an XML namespace. | |||
| reference: RFC XXXX | ||||
| 7. Acknowledgements | IANA has registered the following YANG module in the "YANG Module | |||
| Names" registry [RFC6020]: | ||||
| For their valuable comments, discussions, and feedback, we wish to | Name: ietf-ioam | |||
| acknowledge Greg Mirsky, Reshad Rahman, Tom Petch, Mickey Spiegel, | Namespace: urn:ietf:params:xml:ns:yang:ietf-ioam | |||
| Thomas Graf, Alex Huang Feng and Justin Iurman. | Prefix: ioam | |||
| Reference: RFC 9617 | ||||
| 8. Normative References | 7. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
| DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
| <https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
| [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | ||||
| the Network Configuration Protocol (NETCONF)", RFC 6020, | ||||
| DOI 10.17487/RFC6020, October 2010, | ||||
| <https://www.rfc-editor.org/info/rfc6020>. | ||||
| [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | |||
| and A. Bierman, Ed., "Network Configuration Protocol | and A. Bierman, Ed., "Network Configuration Protocol | |||
| (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | |||
| <https://www.rfc-editor.org/info/rfc6241>. | <https://www.rfc-editor.org/info/rfc6241>. | |||
| [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | |||
| Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, | Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, | |||
| <https://www.rfc-editor.org/info/rfc6242>. | <https://www.rfc-editor.org/info/rfc6242>. | |||
| [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
| skipping to change at page 26, line 5 ¶ | skipping to change at line 1189 ¶ | |||
| [RFC9452] Brockners, F., Ed. and S. Bhandari, Ed., "Network Service | [RFC9452] Brockners, F., Ed. and S. Bhandari, Ed., "Network Service | |||
| Header (NSH) Encapsulation for In Situ OAM (IOAM) Data", | Header (NSH) Encapsulation for In Situ OAM (IOAM) Data", | |||
| RFC 9452, DOI 10.17487/RFC9452, August 2023, | RFC 9452, DOI 10.17487/RFC9452, August 2023, | |||
| <https://www.rfc-editor.org/info/rfc9452>. | <https://www.rfc-editor.org/info/rfc9452>. | |||
| [RFC9486] Bhandari, S., Ed. and F. Brockners, Ed., "IPv6 Options for | [RFC9486] Bhandari, S., Ed. and F. Brockners, Ed., "IPv6 Options for | |||
| In Situ Operations, Administration, and Maintenance | In Situ Operations, Administration, and Maintenance | |||
| (IOAM)", RFC 9486, DOI 10.17487/RFC9486, September 2023, | (IOAM)", RFC 9486, DOI 10.17487/RFC9486, September 2023, | |||
| <https://www.rfc-editor.org/info/rfc9486>. | <https://www.rfc-editor.org/info/rfc9486>. | |||
| Appendix A. An Example of Incremental Tracing Profile | [W3C.REC-xml11-20060816] | |||
| Bray, T., Paoli, J., Sperberg-McQueen, C. M., Maler, E., | ||||
| Yergeau, F., and J. Cowan, "Extensible Markup Language | ||||
| (XML) 1.1 (Second Edition)", W3C Consortium Recommendation | ||||
| REC-xml11-20060816, August 2006, | ||||
| <https://www.w3.org/TR/2006/REC-xml11-20060816>. | ||||
| An example of incremental tracing profile is depicted in the | Appendix A. An Example of the Incremental Tracing Profile | |||
| following figure. This configuration is received by an IOAM ingress | ||||
| node. This node encapsulates the IOAM data in IPv6 Hop-by-Hop option | An XML example (per [W3C.REC-xml11-20060816]) of the Incremental | |||
| header. The trace type indicates that each on path node need to | Tracing Profile is depicted in the following figure. This | |||
| capture the transit delay, and add to the IOAM node data list. The | configuration is received by an IOAM ingress node. This node | |||
| incremental tracing data space is variable, however, the node data | encapsulates the IOAM data in the IPv6 Hop-by-Hop option header. The | |||
| trace type indicates that each on-path node needs to capture the | ||||
| transit delay and add the data to the IOAM node data list. The | ||||
| incremental tracing data space is variable; however, the node data | ||||
| list must not exceed 512 bytes. | list must not exceed 512 bytes. | |||
| <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="101"> | <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
| <edit-config> | message-id="101"> | |||
| <target> | <edit-config> | |||
| <candidate/> | <target> | |||
| </target> | <candidate/> | |||
| <config> | </target> | |||
| <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | <config> | |||
| <admin-config> | <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | |||
| <enabled>true</enabled> | <admin-config> | |||
| </admin-config> | <enabled>true</enabled> | |||
| <profiles> | </admin-config> | |||
| <profile> | <profiles> | |||
| <profile-name>ietf-test-profile</profile-name> | <profile> | |||
| <protocol-type>ipv6</protocol-type> | <profile-name>ietf-test-profile</profile-name> | |||
| <incremental-tracing-profile> | <protocol-type>ipv6</protocol-type> | |||
| <node-action>action-encapsulate</node-action> | <incremental-tracing-profile> | |||
| <trace-types> | <node-action>action-encapsulate</node-action> | |||
| <use-namespace>default-namespace</use-namespace> | <trace-types> | |||
| <trace-type>trace-transit-delay</trace-type> | <use-namespace>default-namespace</use-namespace> | |||
| </trace-types> | <trace-type>trace-transit-delay</trace-type> | |||
| <max-length>512</max-length> | </trace-types> | |||
| </incremental-tracing-profile> | <max-length>512</max-length> | |||
| </profile> | </incremental-tracing-profile> | |||
| </profiles> | </profile> | |||
| </ioam> | </profiles> | |||
| </config> | </ioam> | |||
| </edit-config> | </config> | |||
| </rpc> | </edit-config> | |||
| </rpc> | ||||
| Appendix B. An Example of Pre-allocated Tracing Profile | Appendix B. An Example of the Pre-allocated Tracing Profile | |||
| An example of pre-allocated tracing profile is depicted in the | An example of the Pre-allocated Tracing Profile is depicted in the | |||
| following figure. This configuration is received by an IOAM ingress | following figure. This configuration is received by an IOAM ingress | |||
| node. This node firstly identifies the target flow by using ACL | node. This node first identifies the target flow by using the ACL | |||
| "test-acl", and then encapsulates the IOAM data in the NSH header. | parameter "test-acl" and then encapsulates the IOAM data in the NSH. | |||
| The trace type indicates that each on path node need to capture the | The trace type indicates that each on-path node needs to capture the | |||
| name space specific data in the short format, and add to the IOAM | namespace-specific data in short format and add the data to the IOAM | |||
| node data list. This node preallocates the node data list in the | node data list. This node pre-allocates the node data list in the | |||
| packect with 512 bytes. | packet with 512 bytes. | |||
| <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="101"> | <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
| <edit-config> | message-id="101"> | |||
| <target> | <edit-config> | |||
| <candidate/> | <target> | |||
| </target> | <candidate/> | |||
| <config> | </target> | |||
| <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | <config> | |||
| <admin-config> | <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | |||
| <enabled>true</enabled> | <admin-config> | |||
| </admin-config> | <enabled>true</enabled> | |||
| <profiles> | </admin-config> | |||
| <profile> | <profiles> | |||
| <profile-name>ietf-test-profile</profile-name> | <profile> | |||
| <filter> | <profile-name>ietf-test-profile</profile-name> | |||
| <filter-type>acl-filter</filter-type> | <filter> | |||
| <ace-name>test-acl</ace-name> | <filter-type>acl-filter</filter-type> | |||
| </filter> | <ace-name>test-acl</ace-name> | |||
| <protocol-type>nsh</protocol-type> | </filter> | |||
| <preallocated-tracing-profile> | <protocol-type>nsh</protocol-type> | |||
| <node-action>action-encapsulate</node-action> | <preallocated-tracing-profile> | |||
| <trace-types> | <node-action>action-encapsulate</node-action> | |||
| <use-namespace>default-namespace</use-namespace> | <trace-types> | |||
| <trace-type>trace-namespace-data</trace-type> | <use-namespace>default-namespace</use-namespace> | |||
| </trace-types> | <trace-type>trace-namespace-data</trace-type> | |||
| <max-length>512</max-length> | </trace-types> | |||
| </preallocated-tracing-profile> | <max-length>512</max-length> | |||
| </profile> | </preallocated-tracing-profile> | |||
| </profiles> | </profile> | |||
| </ioam> | </profiles> | |||
| </config> | </ioam> | |||
| </edit-config> | </config> | |||
| </rpc> | </edit-config> | |||
| </rpc> | ||||
| Appendix C. An Example of Direct Export Profile | Appendix C. An Example of the Direct Export Profile | |||
| An example of 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" message-id="101"> | <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
| <edit-config> | message-id="101"> | |||
| <target> | <edit-config> | |||
| <candidate/> | <target> | |||
| </target> | <candidate/> | |||
| <config> | </target> | |||
| <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | <config> | |||
| <admin-config> | <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | |||
| <enabled>true</enabled> | <admin-config> | |||
| </admin-config> | <enabled>true</enabled> | |||
| <profiles> | </admin-config> | |||
| <profile> | <profiles> | |||
| <profile-name>ietf-test-profile</profile-name> | <profile> | |||
| <protocol-type>ipv6</protocol-type> | <profile-name>ietf-test-profile</profile-name> | |||
| <direct-export-profile> | <protocol-type>ipv6</protocol-type> | |||
| <node-action>action-decapsulate</node-action> | <direct-export-profile> | |||
| </direct-export-profile> | <node-action>action-decapsulate</node-action> | |||
| </profile> | </direct-export-profile> | |||
| </profiles> | </profile> | |||
| </ioam> | </profiles> | |||
| </config> | </ioam> | |||
| </edit-config> | </config> | |||
| </rpc> | </edit-config> | |||
| </rpc> | ||||
| Appendix D. An Example of Proof of Transit Profile | Appendix D. An Example of the Proof of Transit Profile | |||
| The following figure is a simple example of POT option. This | A simple example of the Proof of Transit Profile is depicted in the | |||
| configuration indicates the node to apply POT type 0 with IPv6 | following figure. This configuration indicates the node to apply POT | |||
| encapsulation. | type 0 with IPv6 encapsulation. | |||
| <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="101"> | <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
| <edit-config> | message-id="101"> | |||
| <target> | <edit-config> | |||
| <candidate/> | <target> | |||
| </target> | <candidate/> | |||
| <config> | </target> | |||
| <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | <config> | |||
| <admin-config> | <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | |||
| <enabled>true</enabled> | <admin-config> | |||
| </admin-config> | <enabled>true</enabled> | |||
| <profiles> | </admin-config> | |||
| <profile> | <profiles> | |||
| <profile-name>ietf-test-profile</profile-name> | <profile> | |||
| <protocol-type>ipv6</protocol-type> | <profile-name>ietf-test-profile</profile-name> | |||
| <pot-profile> | <protocol-type>ipv6</protocol-type> | |||
| <pot-type>pot-type-0</pot-type> | <pot-profile> | |||
| </pot-profile> | <pot-type>pot-type-0</pot-type> | |||
| </profile> | </pot-profile> | |||
| </profiles> | </profile> | |||
| </ioam> | </profiles> | |||
| </config> | </ioam> | |||
| </edit-config> | </config> | |||
| </rpc> | </edit-config> | |||
| </rpc> | ||||
| Appendix E. An Example of Edge-to-Edge Profile | Appendix E. An Example of the Edge-to-Edge Profile | |||
| The following figure shows an example of edge-to-edge option. This | An example of the Edge-to-Edge Profile is depicted in the following | |||
| configuration is received by an IOAM egress node. This node detects | figure. This configuration is received by an IOAM egress node. This | |||
| the IOAM edge-to-edge option in the IPv6 extension header, and | node detects the IOAM Edge-to-Edge Option in the IPv6 extension | |||
| removes the option to clean all the IOAM data. As the IOAM egress | header and removes the option to clean all the IOAM data. As the | |||
| node, it may collect the edge-to-edge data and deliver to the data | IOAM egress node, it may collect the edge-to-edge data and deliver it | |||
| exporting process. | to the data-exporting process. | |||
| <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="101"> | <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | |||
| <edit-config> | message-id="101"> | |||
| <target> | <edit-config> | |||
| <candidate/> | <target> | |||
| </target> | <candidate/> | |||
| <config> | </target> | |||
| <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | <config> | |||
| <admin-config> | <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | |||
| <enabled>true</enabled> | <admin-config> | |||
| </admin-config> | <enabled>true</enabled> | |||
| <profiles> | </admin-config> | |||
| <profile> | <profiles> | |||
| <profile-name>ietf-test-profile</profile-name> | <profile> | |||
| <protocol-type>ipv6</protocol-type> | <profile-name>ietf-test-profile</profile-name> | |||
| <e2e-profile> | <protocol-type>ipv6</protocol-type> | |||
| <node-action>action-decapsulate</node-action> | <e2e-profile> | |||
| </e2e-profile> | <node-action>action-decapsulate</node-action> | |||
| </profile> | </e2e-profile> | |||
| </profiles> | </profile> | |||
| </ioam> | </profiles> | |||
| </config> | </ioam> | |||
| </edit-config> | </config> | |||
| </rpc> | </edit-config> | |||
| </rpc> | ||||
| Acknowledgements | ||||
| For their valuable comments, discussions, and feedback, we wish to | ||||
| acknowledge Greg Mirsky, Reshad Rahman, Tom Petch, Mickey Spiegel, | ||||
| Thomas Graf, Alex Huang Feng, and Justin Iurman. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Tianran Zhou | Tianran Zhou (editor) | |||
| Huawei | Huawei | |||
| 156 Beiqing Rd. | 156 Beiqing Rd. | |||
| Beijing | Beijing | |||
| 100095 | 100095 | |||
| China | China | |||
| Email: zhoutianran@huawei.com | Email: zhoutianran@huawei.com | |||
| Jim Guichard | Jim Guichard | |||
| Futurewei | Futurewei | |||
| United States of America | United States of America | |||
| Email: james.n.guichard@futurewei.com | Email: james.n.guichard@futurewei.com | |||
| Frank Brockners | Frank Brockners | |||
| Cisco Systems | Cisco Systems | |||
| Hansaallee 249, 3rd Floor | Hansaallee 249, 3rd Floor | |||
| 40549 Duesseldorf | 40549 Düsseldorf, Nordrhein-Westfalen | |||
| Germany | Germany | |||
| Email: fbrockne@cisco.com | Email: fbrockne@cisco.com | |||
| Srihari Raghavan | Srihari Raghavan | |||
| Cisco Systems | Cisco Systems | |||
| Tril Infopark Sez, Ramanujan IT City | Tril Infopark Sez, Ramanujan IT City | |||
| Neville Block, 2nd floor, Old Mahabalipuram Road | Neville Block, 2nd floor, Old Mahabalipuram Road | |||
| Chennai 600113 | Chennai 600113 | |||
| Tamil Nadu | Tamil Nadu | |||
| India | India | |||
| Email: srihari@cisco.com | Email: srihari@cisco.com | |||
| End of changes. 228 change blocks. | ||||
| 611 lines changed or deleted | 642 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||