| < draft-ietf-ippm-ioam-yang-01.txt | draft-ietf-ippm-ioam-yang-02.txt > | |||
|---|---|---|---|---|
| IPPM T. Zhou, Ed. | IPPM T. Zhou, Ed. | |||
| Internet-Draft Huawei | Internet-Draft Huawei | |||
| Intended status: Standards Track J. Guichard | Intended status: Standards Track J. Guichard | |||
| Expires: January 13, 2022 Futurewei | Expires: 18 July 2022 Futurewei | |||
| F. Brockners | F. Brockners | |||
| S. Raghavan | S. Raghavan | |||
| Cisco Systems | Cisco Systems | |||
| July 12, 2021 | 14 January 2022 | |||
| A YANG Data Model for In-Situ OAM | A YANG Data Model for In-Situ OAM | |||
| draft-ietf-ippm-ioam-yang-01 | draft-ietf-ippm-ioam-yang-02 | |||
| Abstract | Abstract | |||
| In-situ Operations, Administration, and Maintenance (IOAM) records | In-situ Operations, Administration, and Maintenance (IOAM) records | |||
| operational and telemetry information in user packets while the | operational and telemetry information in user packets while the | |||
| packets traverse a path between two points in the network. This | packets traverse a path between two points in the network. This | |||
| document defines a YANG module for the IOAM function. | document defines a YANG module for the IOAM function. | |||
| Status of This Memo | Status of This Memo | |||
| skipping to change at page 1, line 37 ¶ | skipping to change at page 1, line 37 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on January 13, 2022. | This Internet-Draft will expire on 18 July 2022. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2022 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 | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | license-info) in effect on the date of publication of this document. | |||
| 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 Simplified BSD License text as described in Section 4.e of | described in Section 4.e of the Trust Legal Provisions and are | |||
| the Trust Legal Provisions and are provided without warranty as | provided without warranty as described in the Revised BSD License. | |||
| described in the Simplified BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Conventions used in this document . . . . . . . . . . . . . . 2 | 2. Conventions used in this document . . . . . . . . . . . . . . 3 | |||
| 2.1. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 | 2.1. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Design of the IOAM YANG Data Model . . . . . . . . . . . . . 3 | 3. Design of the IOAM YANG Data Model . . . . . . . . . . . . . 3 | |||
| 3.1. Profiles . . . . . . . . . . . . . . . . . . . . . . . . 3 | 3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3.2. Preallocated Tracing Profile . . . . . . . . . . . . . . 5 | 3.2. Preallocated Tracing Profile . . . . . . . . . . . . . . 5 | |||
| 3.3. Incremental Tracing Profile . . . . . . . . . . . . . . . 5 | 3.3. Incremental Tracing Profile . . . . . . . . . . . . . . . 6 | |||
| 3.4. Direct Export Profile . . . . . . . . . . . . . . . . . . 6 | 3.4. Direct Export Profile . . . . . . . . . . . . . . . . . . 6 | |||
| 3.5. Proof of Transit Profile . . . . . . . . . . . . . . . . 6 | 3.5. Proof of Transit Profile . . . . . . . . . . . . . . . . 6 | |||
| 3.6. Edge to Edge Profile . . . . . . . . . . . . . . . . . . 7 | 3.6. Edge to Edge Profile . . . . . . . . . . . . . . . . . . 7 | |||
| 4. IOAM YANG Module . . . . . . . . . . . . . . . . . . . . . . 7 | 4. IOAM YANG Module . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 5. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 23 | 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . 23 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 23 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 24 | 8.2. Informative References . . . . . . . . . . . . . . . . . 24 | |||
| Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 24 | Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 25 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
| 1. Introduction | 1. Introduction | |||
| In-situ Operations, Administration, and Maintenance (IOAM) | In-situ Operations, Administration, and Maintenance (IOAM) | |||
| [I-D.ietf-ippm-ioam-data] records OAM information within user packets | [I-D.ietf-ippm-ioam-data] records OAM information within user packets | |||
| while the packets traverse a network. The data types and data | while the packets traverse a network. The data types and data | |||
| formats for IOAM data records have been defined in | formats for IOAM data records have been defined in | |||
| [I-D.ietf-ippm-ioam-data]. The IOAM data can be embedded in many | [I-D.ietf-ippm-ioam-data]. The IOAM data can be embedded in many | |||
| protocol encapsulations such as Network Services Header (NSH) and | protocol encapsulations such as Network Services Header (NSH) and | |||
| IPv6. | IPv6. | |||
| This document defines a data model for IOAM capabilities using the | This document defines a data model for IOAM capabilities using the | |||
| YANG data modeling language [RFC7950]. This YANG model supports all | YANG data modeling language [RFC7950]. This YANG model supports five | |||
| the five IOAM options, which are Incremental Tracing Option, Pre- | IOAM options, which are Incremental Tracing Option, Pre-allocated | |||
| allocated Tracing Option, Direct Export | Tracing Option, Direct Export | |||
| Option[I-D.ietf-ippm-ioam-direct-export], Proof of Transit(PoT) | Option[I-D.ietf-ippm-ioam-direct-export], Proof of Transit (PoT) | |||
| Option, and Edge-to-Edge Option. | Option, and Edge-to-Edge Option. | |||
| 2. Conventions used in this document | 2. Conventions used in this document | |||
| The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The keywords "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 | BCP14, [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: | |||
| o augment | * augment | |||
| o data model | * data model | |||
| o data node | * data node | |||
| The terminology for describing YANG data models is found in | The terminology for describing YANG data models is found in | |||
| [RFC7950]. | [RFC7950]. | |||
| 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. Profiles | 3.1. Overview | |||
| The IOAM model is organized as list of profiles as shown in the | The IOAM model is organized as 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. | |||
| The "ioam-info" is a container for all the read only assistant | The "ioam-info" is a container for all the read only assistant | |||
| information such as units or timestamp format. So that monitoring | information, so that monitoring systems can interpret the IOAM data. | |||
| systems can interpret the IOAM data. | ||||
| module: ietf-ioam | module: ietf-ioam | |||
| +--rw ioam | +--rw ioam | |||
| +--ro ioam-info | +--ro ioam-info | |||
| | +--ro timestamp-type? identityref | ||||
| | +--ro available-interface* [if-name] | ||||
| | +--ro if-name -> if:interfaces/interface/name | ||||
| +--rw ioam-profiles | +--rw ioam-profiles | |||
| +--rw admin-config | +--rw admin-config | |||
| | +--rw enabled? boolean | | +--rw enabled? boolean | |||
| +--rw ioam-profile* [profile-name] | +--rw ioam-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 "enabled" is an administrative configuration. When it is set to | In the "ioam-profiles", the "enabled" is an administrative | |||
| true, IOAM configuration is enabled for the system. Meanwhile, the | configuration. When it is set to true, IOAM configuration is enabled | |||
| IOAM data-plane functionality is enabled. | for the system. Meanwhile, the IOAM data-plane functionality is | |||
| enabled. | ||||
| The "filter" is used to identify a flow, where the IOAM profile can | The "filter" is used to identify a flow, where the IOAM profile can | |||
| apply. There may be multiple filter types. ACL [RFC8519] is a | apply. There may be multiple filter types. ACL [RFC8519] is a | |||
| common way to specify a flow. Each IOAM profile can associate with | common way to specify a flow. Each IOAM profile can associate with | |||
| an ACE(Access Control Entry). IOAM actions MUST be driven by the | an ACE(Access Control Entry). IOAM actions MUST be driven by the | |||
| accepted packets, when the matched ACE "forwarding" action is | accepted packets, when the matched ACE "forwarding" action is | |||
| "accept". | "accept". | |||
| The IOAM data can be encapsulated into multiple protocols, e.g., IPv6 | The IOAM data can be encapsulated into multiple protocols, e.g., IPv6 | |||
| [I-D.ietf-ippm-ioam-ipv6-options] and NSH [I-D.ietf-sfc-ioam-nsh]. | [I-D.ietf-ippm-ioam-ipv6-options] and NSH [I-D.ietf-sfc-ioam-nsh]. | |||
| skipping to change at page 5, line 17 ¶ | skipping to change at page 5, line 21 ¶ | |||
| 3.2. Preallocated Tracing Profile | 3.2. Preallocated Tracing Profile | |||
| The IOAM tracing data is expected to be collected at every node that | The IOAM tracing data is expected to be collected at every node that | |||
| a packet traverses to ensure visibility into the entire path a packet | a packet traverses to ensure visibility into the entire path a packet | |||
| takes within an IOAM domain. The preallocated tracing option will | takes within an IOAM domain. The preallocated tracing option will | |||
| create pre-allocated space for each node to populate its information | create pre-allocated space for each node to populate its information | |||
| . The "preallocated-tracing-profile" contains the detailed | . The "preallocated-tracing-profile" contains the detailed | |||
| information for the preallocated tracing data. The information | information for the preallocated tracing data. The information | |||
| includes: | includes: | |||
| o enabled: indicates whether the preallocated tracing profile is | * enabled: indicates whether the preallocated tracing profile is | |||
| enabled. | enabled. | |||
| o node-action: indicates the operation (e.g., encapsulate IOAM | * node-action: indicates the operation (e.g., encapsulate IOAM | |||
| header, transit the IOAM data, or decapsulate IOAM header) applied | header, transit the IOAM data, or decapsulate IOAM header) applied | |||
| to the dedicated flow. | to the dedicated flow. | |||
| o use-namespace: indicate the namespace used for the trace types. | * use-namespace: indicate the namespace used for the trace types. | |||
| o trace-type: indicates the per-hop data to be captured by the IOAM | * trace-type: indicates the per-hop data to be captured by the IOAM | |||
| enabled nodes and included in the node data list. | enabled nodes and included in the node data list. | |||
| o Loopback mode is used to send a copy of a packet back towards the | * Loopback mode is used to send a copy of a packet back towards the | |||
| source. | source. | |||
| o Active mode indicates that a packet is used for active | * Active mode indicates that a packet is used for active | |||
| measurement. | measurement. | |||
| +--rw preallocated-tracing-profile {preallocated-trace}? | +--rw preallocated-tracing-profile {preallocated-trace}? | |||
| +--rw enabled? boolean | +--rw enabled? boolean | |||
| +--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 enable-loopback-mode? boolean | +--rw enable-loopback-mode? boolean | |||
| +--rw enable-active-mode? boolean | +--rw enable-active-mode? boolean | |||
| skipping to change at page 6, line 41 ¶ | skipping to change at page 6, line 49 ¶ | |||
| | +--rw use-namespace? ioam-namespace | | +--rw use-namespace? ioam-namespace | |||
| | +--rw trace-type* ioam-trace-type | | +--rw trace-type* ioam-trace-type | |||
| +--rw enable-loopback-mode? boolean | +--rw enable-loopback-mode? boolean | |||
| +--rw enable-active-mode? boolean | +--rw enable-active-mode? boolean | |||
| +--rw flow-id? uint32 | +--rw flow-id? uint32 | |||
| 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 to support the path or service | |||
| function chain verification use cases. The "pot-profile" contains | function chain verification use cases. The "pot-profile" contains | |||
| the detailed information for the prove of transit data. The detailed | the detailed information for the proof of transit data. "pot-type" | |||
| information are described in [I-D.ietf-sfc-proof-of-transit]. | indicates a particular POT variant that specifies the POT data that | |||
| is included. There may be several POT types, which have different | ||||
| configuration data. To align with [I-D.ietf-ippm-ioam-data], this | ||||
| document only defines IOAM POT type 0. User need to augment this | ||||
| module for the configuration of a specifc POT type. | ||||
| +--rw pot-profile {proof-of-transit}? | +--rw pot-profile {proof-of-transit}? | |||
| +--rw enabled? boolean | +--rw enabled? boolean | |||
| +--rw active-profile-index? pot:profile-index-range | +--rw pot-type? ioam-pot-type | |||
| +--rw pot-profile-list* [pot-profile-index] | ||||
| +--rw pot-profile-index profile-index-range | ||||
| +--rw prime-number uint64 | ||||
| +--rw secret-share uint64 | ||||
| +--rw public-polynomial uint64 | ||||
| +--rw lpc uint64 | ||||
| +--rw validator? boolean | ||||
| +--rw validator-key? uint64 | ||||
| +--rw bitmask? uint64 | ||||
| +--rw opot-masks | ||||
| +--rw downstream-mask* uint64 | ||||
| +--rw upstream-mask* uint64 | ||||
| 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 to carry data that is added by the | |||
| IOAM encapsulating node and interpreted by IOAM decapsulating node. | IOAM encapsulating node and interpreted by IOAM decapsulating node. | |||
| The "e2e-profile" contains the detailed information for the edge to | The "e2e-profile" contains the detailed information for the edge to | |||
| edge data. The detailed information includes: | edge data. The detailed information includes: | |||
| o enabled: indicates whether the edge to edge profile is enabled. | * enabled: indicates whether the edge to edge profile is enabled. | |||
| o node-action is the same semantic as in Section 2.2. | * node-action is the same semantic as in Section 2.2. | |||
| o use-namespace: indicate the namespace used for the edge to edge | * use-namespace: indicate the namespace used for the edge to edge | |||
| types. | types. | |||
| o 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 the egress IOAM node. | to the egress IOAM node. | |||
| +--rw e2e-profile {edge-to-edge}? | +--rw e2e-profile {edge-to-edge}? | |||
| +--rw enabled? boolean | +--rw enabled? boolean | |||
| +--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@2021-01-12.yang" | <CODE BEGINS> file "ietf-ioam@2021-01-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-pot-profile { | ||||
| prefix "pot"; | ||||
| reference "draft-ietf-sfc-proof-of-transit"; | ||||
| } | ||||
| import ietf-access-control-list { | ||||
| prefix "acl"; | ||||
| reference | ||||
| "RFC 8519: YANG Data Model for Network Access Control | ||||
| Lists (ACLs)"; | ||||
| } | ||||
| organization | ||||
| "IETF IPPM (IP Performance Metrics) Working Group"; | ||||
| contact | ||||
| "WG Web: <http://tools.ietf.org/wg/ippm> | ||||
| WG List: <ippm@ietf.org> | ||||
| Editor: zhoutianran@huawei.com | ||||
| Editor: james.n.guichard@futurewei.com | ||||
| Editor: fbrockne@cisco.com | ||||
| Editor: srihari@cisco.com"; | ||||
| description | ||||
| "This YANG module specifies a vendor-independent data | ||||
| model for the In Situ OAM (IOAM). | ||||
| Copyright (c) 2020 IETF Trust and the persons identified as | ||||
| authors of the code. All rights reserved. | ||||
| Redistribution and use in source and binary forms, with or | ||||
| without modification, is permitted pursuant to, and subject | ||||
| to the license terms contained in, the Simplified BSD License | ||||
| set forth in Section 4.c of the IETF Trust's Legal Provisions | ||||
| Relating to IETF Documents | ||||
| (http://trustee.ietf.org/license-info). | ||||
| This version of this YANG module is part of RFC XXXX; see the | import ietf-access-control-list { | |||
| RFC itself for full legal notices."; | prefix "acl"; | |||
| reference | ||||
| "RFC 8519: YANG Data Model for Network Access Control | ||||
| Lists (ACLs)"; | ||||
| } | ||||
| revision 2021-01-12 { | import ietf-interfaces { | |||
| description "Initial revision."; | prefix "if"; | |||
| reference "draft-ietf-ippm-ioam-yang"; | reference | |||
| } | "RFC 8343: A YANG Data Model for Interface Management"; | |||
| } | ||||
| /* | import ietf-lime-time-types { | |||
| * FEATURES | prefix "lime"; | |||
| */ | reference | |||
| feature incremental-trace | "RFC RFC 8532: Generic YANG Data Model for the Management of | |||
| { | Operations, Administration, and Maintenance (OAM) Protocols | |||
| description | That Use Connectionless Communications"; | |||
| "This feature indicated that the incremental tracing option is | } | |||
| supported"; | ||||
| reference "draft-ietf-ippm-ioam-data"; | ||||
| } | ||||
| feature preallocated-trace | organization | |||
| { | "IETF IPPM (IP Performance Metrics) Working Group"; | |||
| description | ||||
| "This feature indicated that the preallocated tracing option is | ||||
| supported"; | ||||
| reference "draft-ietf-ippm-ioam-data"; | ||||
| } | ||||
| feature direct-export | contact | |||
| { | "WG Web: <http://tools.ietf.org/wg/ippm> | |||
| description | WG List: <ippm@ietf.org> | |||
| "This feature indicated that the direct export option is | Editor: zhoutianran@huawei.com | |||
| supported"; | Editor: james.n.guichard@futurewei.com | |||
| reference "ietf-ippm-ioam-direct-export"; | Editor: fbrockne@cisco.com | |||
| } | Editor: srihari@cisco.com"; | |||
| feature proof-of-transit | ||||
| { | ||||
| description | description | |||
| "This feature indicated that the proof of transit option is | "This YANG module specifies a vendor-independent data | |||
| supported"; | model for the In Situ OAM (IOAM). | |||
| reference "draft-ietf-ippm-ioam-data"; | ||||
| } | ||||
| feature edge-to-edge | Copyright (c) 2021 IETF Trust and the persons identified as | |||
| { | authors of the code. All rights reserved. | |||
| description | ||||
| "This feature indicated that the edge to edge option is | ||||
| supported"; | ||||
| reference "draft-ietf-ippm-ioam-data"; | ||||
| } | ||||
| /* | Redistribution and use in source and binary forms, with or | |||
| * IDENTITIES | without modification, is permitted pursuant to, and subject | |||
| */ | to the license terms contained in, the Simplified BSD License | |||
| identity base-filter { | set forth in Section 4.c of the IETF Trust's Legal Provisions | |||
| description | Relating to IETF Documents | |||
| "Base identity to represent a filter. A filter is used to | (http://trustee.ietf.org/license-info). | |||
| specify the flow to apply the IOAM profile. "; | ||||
| } | ||||
| identity acl-filter { | ||||
| base base-filter; | ||||
| description | ||||
| "Apply ACL rules to specify the flow."; | ||||
| } | ||||
| identity base-protocol { | This version of this YANG module is part of RFC XXXX; see the | |||
| description | RFC itself for full legal notices."; | |||
| "Base identity to represent the carrier protocol. It's used to | ||||
| indicate what layer and protocol the IOAM data is embedded."; | ||||
| } | ||||
| identity ipv6-protocol { | revision 2022-01-12 { | |||
| base base-protocol; | description "Firstd revision."; | |||
| description | reference "draft-ietf-ippm-ioam-yang"; | |||
| "The described IOAM data is embedded in IPv6 protocol."; | } | |||
| reference "ietf-ippm-ioam-ipv6-options"; | ||||
| } | ||||
| identity nsh-protocol { | /* | |||
| base base-protocol; | * FEATURES | |||
| description | */ | |||
| "The described IOAM data is embedded in NSH."; | ||||
| reference "ietf-sfc-ioam-nsh"; | ||||
| } | ||||
| identity base-node-action { | feature incremental-trace | |||
| description | { | |||
| "Base identity to represent the node actions. It's used to | description | |||
| indicate what action the node will take."; | "This feature indicated that the incremental tracing option is | |||
| } | supported"; | |||
| reference "draft-ietf-ippm-ioam-data"; | ||||
| } | ||||
| identity action-encapsulate { | feature preallocated-trace | |||
| base base-node-action; | { | |||
| description | description | |||
| "indicate the node is to encapsulate the IOAM packet"; | "This feature indicated that the preallocated tracing option is | |||
| } | supported"; | |||
| reference "draft-ietf-ippm-ioam-data"; | ||||
| } | ||||
| identity action-decapsulate { | feature direct-export | |||
| base base-node-action; | { | |||
| description | description | |||
| "indicate the node is to decapsulate the IOAM packet"; | "This feature indicated that the direct export option is | |||
| } | supported"; | |||
| reference "ietf-ippm-ioam-direct-export"; | ||||
| } | ||||
| identity base-trace-type { | feature proof-of-transit | |||
| description | { | |||
| "Base identity to represent trace types"; | description | |||
| } | "This feature indicated that the proof of transit option is | |||
| identity trace-hop-lim-node-id { | supported"; | |||
| base base-trace-type; | reference "draft-ietf-ippm-ioam-data"; | |||
| description | } | |||
| "indicates presence of Hop_Lim and node_id in the | ||||
| node data."; | ||||
| } | ||||
| identity trace-if-id { | feature edge-to-edge | |||
| base base-trace-type; | { | |||
| description | description | |||
| "indicates presence of ingress_if_id and egress_if_id in the | "This feature indicated that the edge to edge option is | |||
| node data."; | supported"; | |||
| } | reference "draft-ietf-ippm-ioam-data"; | |||
| } | ||||
| identity trace-timestamp-seconds { | /* | |||
| base base-trace-type; | * IDENTITIES | |||
| description | */ | |||
| "indicates presence of time stamp seconds in the node data."; | identity base-filter { | |||
| } | description | |||
| "Base identity to represent a filter. A filter is used to | ||||
| specify the flow to apply the IOAM profile. "; | ||||
| } | ||||
| identity trace-timestamp-nanoseconds { | identity acl-filter { | |||
| base base-trace-type; | base base-filter; | |||
| description | description | |||
| "indicates presence of time stamp nanoseconds in the node data."; | "Apply ACL rules to specify the flow."; | |||
| } | } | |||
| identity trace-transit-delay { | identity base-protocol { | |||
| base base-trace-type; | description | |||
| description | "Base identity to represent the carrier protocol. It's used to | |||
| "indicates presence of transit delay in the node data."; | indicate what layer and protocol the IOAM data is embedded."; | |||
| } | } | |||
| identity trace-namespace-data { | identity ipv6-protocol { | |||
| base base-trace-type; | base base-protocol; | |||
| description | description | |||
| "indicates presence of namespace specific data (short format) | "The described IOAM data is embedded in IPv6 protocol."; | |||
| in the node data."; | reference "ietf-ippm-ioam-ipv6-options"; | |||
| } | } | |||
| identity trace-queue-depth { | identity nsh-protocol { | |||
| base base-trace-type; | base base-protocol; | |||
| description | description | |||
| "indicates presence of queue depth in the node data."; | "The described IOAM data is embedded in NSH."; | |||
| } | reference "ietf-sfc-ioam-nsh"; | |||
| } | ||||
| identity trace-opaque-state-snapshot { | identity base-node-action { | |||
| base base-trace-type; | description | |||
| description | "Base identity to represent the node actions. It's used to | |||
| "indicates presence of variable length Opaque State Snapshot | indicate what action the node will take."; | |||
| field."; | } | |||
| } | ||||
| identity trace-hop-lim-node-id-wide { | identity action-encapsulate { | |||
| base base-trace-type; | base base-node-action; | |||
| description | description | |||
| "indicates presence of Hop_Lim and node_id wide in the | "indicate the node is to encapsulate the IOAM packet"; | |||
| node data."; | } | |||
| } | ||||
| identity trace-if-id-wide { | identity action-decapsulate { | |||
| base base-trace-type; | base base-node-action; | |||
| description | description | |||
| "indicates presence of ingress_if_id and egress_if_id wide in | "indicate the node is to decapsulate the IOAM packet"; | |||
| the node data."; | } | |||
| } | ||||
| identity trace-namespace-data-wide { | identity base-trace-type { | |||
| base base-trace-type; | description | |||
| description | "Base identity to represent trace types"; | |||
| "indicates presence of namespace specific data in wide format | } | |||
| in the node data."; | ||||
| } | ||||
| identity trace-buffer-occupancy { | identity trace-hop-lim-node-id { | |||
| base base-trace-type; | base base-trace-type; | |||
| description | description | |||
| "indicates presence of buffer occupancy in the node data."; | "indicates presence of Hop_Lim and node_id in the | |||
| } | node data."; | |||
| } | ||||
| identity trace-checksum-complement { | identity trace-if-id { | |||
| base base-trace-type; | base base-trace-type; | |||
| description | description | |||
| "indicates presence of the Checksum Complement node data."; | "indicates presence of ingress_if_id and egress_if_id in the | |||
| } | node data."; | |||
| } | ||||
| identity base-pot-type { | identity trace-timestamp-seconds { | |||
| description | base base-trace-type; | |||
| "Base identity to represent Proof of Transit(PoT) types"; | description | |||
| } | "indicates presence of time stamp seconds in the node data."; | |||
| } | ||||
| identity pot-bytes-16 { | identity trace-timestamp-nanoseconds { | |||
| base base-pot-type; | base base-trace-type; | |||
| description | description | |||
| "POT data is a 16 Octet field."; | "indicates presence of time stamp nanoseconds in the node data."; | |||
| } | } | |||
| identity base-e2e-type { | ||||
| description | ||||
| "Base identity to represent e2e types"; | ||||
| } | ||||
| identity e2e-seq-num-64 { | identity trace-transit-delay { | |||
| base base-e2e-type; | base base-trace-type; | |||
| description | description | |||
| "indicates presence of a 64-bit sequence number"; | "indicates presence of transit delay in the node data."; | |||
| } | } | |||
| identity e2e-seq-num-32 { | identity trace-namespace-data { | |||
| base base-e2e-type; | base base-trace-type; | |||
| description | description | |||
| "indicates presence of a 32-bit sequence number"; | "indicates presence of namespace specific data (short format) | |||
| } | in the node data."; | |||
| } | ||||
| identity e2e-timestamp-seconds { | identity trace-queue-depth { | |||
| base base-e2e-type; | base base-trace-type; | |||
| description | description | |||
| "indicates presence of timestamp seconds for the | "indicates presence of queue depth in the node data."; | |||
| transmission of the frame"; | } | |||
| } | identity trace-opaque-state-snapshot { | |||
| base base-trace-type; | ||||
| description | ||||
| "indicates presence of variable length Opaque State Snapshot | ||||
| field."; | ||||
| } | ||||
| identity e2e-timestamp-subseconds { | identity trace-hop-lim-node-id-wide { | |||
| base base-e2e-type; | base base-trace-type; | |||
| description | description | |||
| "indicates presence of timestamp subseconds for the | "indicates presence of Hop_Lim and node_id wide in the | |||
| transmission of the frame"; | node data."; | |||
| } | } | |||
| identity base-namespace { | identity trace-if-id-wide { | |||
| description | base base-trace-type; | |||
| "Base identity to represent the namespace"; | description | |||
| } | "indicates presence of ingress_if_id and egress_if_id wide in | |||
| the node data."; | ||||
| } | ||||
| identity namespace-ietf { | identity trace-namespace-data-wide { | |||
| base base-namespace; | base base-trace-type; | |||
| description | description | |||
| "namespace that specified in IETF."; | "indicates presence of namespace specific data in wide format | |||
| } | in the node data."; | |||
| } | ||||
| /* | identity trace-buffer-occupancy { | |||
| * TYPE DEFINITIONS | base base-trace-type; | |||
| */ | description | |||
| "indicates presence of buffer occupancy in the node data."; | ||||
| } | ||||
| typedef ioam-filter-type { | identity trace-checksum-complement { | |||
| type identityref { | base base-trace-type; | |||
| base base-filter; | description | |||
| "indicates presence of the Checksum Complement node data."; | ||||
| } | } | |||
| description | ||||
| "Specifies a known type of filter."; | ||||
| } | ||||
| typedef ioam-protocol-type { | identity base-pot-type { | |||
| type identityref { | description | |||
| base base-protocol; | "Base identity to represent Proof of Transit(PoT) types"; | |||
| } | } | |||
| description | ||||
| "Specifies a known type of carrier protocol for the IOAM data."; | ||||
| } | ||||
| typedef ioam-node-action { | identity pot-type-0 { | |||
| type identityref { | base base-pot-type; | |||
| base base-node-action; | description | |||
| "POT data is a 16 Octet field to carry data associated to | ||||
| POT procedures."; | ||||
| } | } | |||
| description | ||||
| "Specifies a known type of node action."; | ||||
| } | ||||
| typedef ioam-trace-type { | identity base-e2e-type { | |||
| type identityref { | description | |||
| base base-trace-type; | "Base identity to represent e2e types"; | |||
| } | } | |||
| description | ||||
| "Specifies a known trace type."; | ||||
| } | ||||
| typedef ioam-pot-type { | identity e2e-seq-num-64 { | |||
| type identityref { | base base-e2e-type; | |||
| base base-pot-type; | description | |||
| "indicates presence of a 64-bit sequence number"; | ||||
| } | } | |||
| description | ||||
| "Specifies a known pot type."; | ||||
| } | ||||
| typedef ioam-e2e-type { | identity e2e-seq-num-32 { | |||
| type identityref { | ||||
| base base-e2e-type; | base base-e2e-type; | |||
| description | ||||
| "indicates presence of a 32-bit sequence number"; | ||||
| } | } | |||
| description | ||||
| "Specifies a known e2e type."; | ||||
| } | ||||
| typedef ioam-namespace { | identity e2e-timestamp-seconds { | |||
| type identityref { | base base-e2e-type; | |||
| base base-namespace; | description | |||
| "indicates presence of timestamp seconds for the | ||||
| transmission of the frame"; | ||||
| } | } | |||
| description | ||||
| "Specifies the supported namespace."; | ||||
| } | ||||
| /* | identity e2e-timestamp-subseconds { | |||
| * GROUP DEFINITIONS | base base-e2e-type; | |||
| */ | description | |||
| "indicates presence of timestamp subseconds for the | ||||
| transmission of the frame"; | ||||
| } | ||||
| grouping ioam-filter { | identity base-namespace { | |||
| description "A grouping for IOAM filter definition"; | description | |||
| "Base identity to represent the namespace"; | ||||
| } | ||||
| leaf filter-type { | identity namespace-ietf { | |||
| type ioam-filter-type; | base base-namespace; | |||
| description "filter type"; | description | |||
| "namespace that specified in IETF."; | ||||
| } | } | |||
| leaf ace-name { | /* | |||
| when "../filter-type = 'ioam:acl-filter'"; | * TYPE DEFINITIONS | |||
| type leafref { | */ | |||
| path "/acl:acls/acl:acl/acl:aces/acl:ace/acl:name"; | typedef ioam-filter-type { | |||
| type identityref { | ||||
| base base-filter; | ||||
| } | } | |||
| description "Access Control Entry name."; | description | |||
| "Specifies a known type of filter."; | ||||
| } | } | |||
| } | ||||
| grouping encap-tracing { | typedef ioam-protocol-type { | |||
| description | type identityref { | |||
| "A grouping for the generic configuration for | base base-protocol; | |||
| tracing profile."; | } | |||
| container trace-types { | ||||
| description | description | |||
| "the list of trace types for encapsulate"; | "Specifies a known type of carrier protocol for the IOAM data."; | |||
| } | ||||
| leaf use-namespace { | typedef ioam-node-action { | |||
| type ioam-namespace; | type identityref { | |||
| description | base base-node-action; | |||
| "the namespace used for the encapsulation"; | ||||
| } | } | |||
| description | ||||
| "Specifies a known type of node action."; | ||||
| } | ||||
| leaf-list trace-type { | typedef ioam-trace-type { | |||
| type ioam-trace-type; | type identityref { | |||
| description | base base-trace-type; | |||
| "The trace type is only defined at the encapsulation node."; | ||||
| } | } | |||
| description | ||||
| "Specifies a known trace type."; | ||||
| } | } | |||
| leaf enable-loopback-mode { | ||||
| type boolean; | typedef ioam-pot-type { | |||
| default false; | type identityref { | |||
| base base-pot-type; | ||||
| } | ||||
| description | description | |||
| "Loopback mode is used to send a copy of a packet back towards | "Specifies a known pot type."; | |||
| the source. The loopback mode is only defined at the | ||||
| encapsulation node."; | ||||
| } | } | |||
| leaf enable-active-mode { | typedef ioam-e2e-type { | |||
| type boolean; | type identityref { | |||
| default false; | base base-e2e-type; | |||
| } | ||||
| description | description | |||
| "Active mode indicates that a packet is used for active | "Specifies a known e2e type."; | |||
| measurement. An IOAM decapsulating node that receives a | } | |||
| packet with the Active flag set in one of its Trace options | typedef ioam-namespace { | |||
| must terminate the packet."; | type identityref { | |||
| base base-namespace; | ||||
| } | ||||
| description | ||||
| "Specifies the supported namespace."; | ||||
| } | } | |||
| } | ||||
| grouping ioam-incremental-tracing-profile { | /* | |||
| description | * GROUP DEFINITIONS | |||
| "A grouping for incremental tracing profile."; | */ | |||
| leaf node-action { | grouping ioam-filter { | |||
| type ioam-node-action; | description "A grouping for IOAM filter definition"; | |||
| description "node action"; | ||||
| } | ||||
| uses encap-tracing { | leaf filter-type { | |||
| when "node-action = 'ioam:action-encapsulate'"; | type ioam-filter-type; | |||
| description "filter type"; | ||||
| } | ||||
| leaf ace-name { | ||||
| when "../filter-type = 'ioam:acl-filter'"; | ||||
| type leafref { | ||||
| path "/acl:acls/acl:acl/acl:aces/acl:ace/acl:name"; | ||||
| } | ||||
| description "Access Control Entry name."; | ||||
| } | ||||
| } | } | |||
| leaf max-length { | grouping encap-tracing { | |||
| when "../node-action = 'ioam:action-encapsulate'"; | ||||
| type uint32; | ||||
| units bytes; | ||||
| description | description | |||
| "This field specifies the maximum length of the node data list | "A grouping for the generic configuration for | |||
| in octets. The max-length is only defined at the | tracing profile."; | |||
| encapsulation node. And it's only used for the incremental | ||||
| tracing mode."; | ||||
| } | ||||
| } | ||||
| grouping ioam-preallocated-tracing-profile { | container trace-types { | |||
| description | description | |||
| "A grouping for incremental tracing profile."; | "the list of trace types for encapsulate"; | |||
| leaf node-action { | leaf use-namespace { | |||
| type ioam-node-action; | type ioam-namespace; | |||
| description "node action"; | description | |||
| } | "the namespace used for the encapsulation"; | |||
| } | ||||
| uses encap-tracing { | leaf-list trace-type { | |||
| when "node-action = 'ioam:action-encapsulate'"; | type ioam-trace-type; | |||
| } | description | |||
| } | "The trace type is only defined at the encapsulation node."; | |||
| grouping ioam-direct-export-profile { | } | |||
| description | } | |||
| "A grouping for direct export profile."; | ||||
| leaf node-action { | leaf enable-loopback-mode { | |||
| type ioam-node-action; | type boolean; | |||
| description "node action"; | default false; | |||
| } | description | |||
| "Loopback mode is used to send a copy of a packet back towards | ||||
| the source. The loopback mode is only defined at the | ||||
| encapsulation node."; | ||||
| } | ||||
| uses encap-tracing { | leaf enable-active-mode { | |||
| when "node-action = 'ioam:action-encapsulate'"; | type boolean; | |||
| default false; | ||||
| description | ||||
| "Active mode indicates that a packet is used for active | ||||
| measurement. An IOAM decapsulating node that receives a | ||||
| packet with the Active flag set in one of its Trace options | ||||
| must terminate the packet."; | ||||
| } | ||||
| } | } | |||
| leaf flow-id { | grouping ioam-incremental-tracing-profile { | |||
| when "../node-action = 'ioam:action-encapsulate'"; | ||||
| type uint32; | ||||
| description | description | |||
| "A 32-bit flow identifier. The field is set at the | "A grouping for incremental tracing profile."; | |||
| encapsulating node. The Flow ID can be uniformly assigned | ||||
| by a central controller or algorithmically generated by the | ||||
| encapsulating node. The latter approach cannot guarantee | ||||
| the uniqueness of Flow ID, yet the conflict probability is | ||||
| small due to the large Flow ID space.flow-id is used to | ||||
| correlate the exported data of the same flow from multiple | ||||
| nodes and from multiple packets."; | ||||
| } | ||||
| } | ||||
| grouping ioam-e2e-profile { | leaf node-action { | |||
| description | type ioam-node-action; | |||
| "A grouping for end to end profile."; | description "node action"; | |||
| } | ||||
| leaf node-action { | uses encap-tracing { | |||
| type ioam-node-action; | when "node-action = 'ioam:action-encapsulate'"; | |||
| } | ||||
| leaf max-length { | ||||
| when "../node-action = 'ioam:action-encapsulate'"; | ||||
| type uint32; | ||||
| units bytes; | ||||
| description | ||||
| "This field specifies the maximum length of the node data list | ||||
| in octets. The max-length is only defined at the | ||||
| encapsulation node. And it's only used for the incremental | ||||
| tracing mode."; | ||||
| } | ||||
| } | ||||
| grouping ioam-preallocated-tracing-profile { | ||||
| description | description | |||
| "indicate how the node act for this profile"; | "A grouping for incremental tracing profile."; | |||
| leaf node-action { | ||||
| type ioam-node-action; | ||||
| description "node action"; | ||||
| } | ||||
| uses encap-tracing { | ||||
| when "node-action = 'ioam:action-encapsulate'"; | ||||
| } | ||||
| } | } | |||
| container e2e-types { | ||||
| when "../node-action = 'ioam:action-encapsulate'"; | grouping ioam-direct-export-profile { | |||
| description | description | |||
| "the list of e2e types for encapsulate"; | "A grouping for direct export profile."; | |||
| leaf use-namespace { | leaf node-action { | |||
| type ioam-namespace; | type ioam-node-action; | |||
| description | description "node action"; | |||
| "the namespace used for the encapsulation"; | ||||
| } | } | |||
| leaf-list e2e-type { | uses encap-tracing { | |||
| type ioam-e2e-type; | when "node-action = 'ioam:action-encapsulate'"; | |||
| } | ||||
| leaf flow-id { | ||||
| when "../node-action = 'ioam:action-encapsulate'"; | ||||
| type uint32; | ||||
| description | description | |||
| "The e2e type is only defined at the encapsulation node."; | "A 32-bit flow identifier. The field is set at the | |||
| encapsulating node. The Flow ID can be uniformly assigned | ||||
| by a central controller or algorithmically generated by the | ||||
| encapsulating node. The latter approach cannot guarantee | ||||
| the uniqueness of Flow ID, yet the conflict probability is | ||||
| small due to the large Flow ID space.flow-id is used to | ||||
| correlate the exported data of the same flow from multiple | ||||
| nodes and from multiple packets."; | ||||
| } | } | |||
| } | } | |||
| } | ||||
| grouping ioam-admin-config { | grouping ioam-e2e-profile { | |||
| description | ||||
| "IOAM top-level administrative configuration."; | ||||
| leaf enabled { | ||||
| type boolean; | ||||
| default false; | ||||
| description | description | |||
| "When true, IOAM configuration is enabled for the system. | "A grouping for end to end profile."; | |||
| Meanwhile, the IOAM data-plane functionality is enabled."; | ||||
| } | ||||
| } | ||||
| /* | leaf node-action { | |||
| * DATA NODES | type ioam-node-action; | |||
| */ | description | |||
| "indicate how the node act for this profile"; | ||||
| } | ||||
| container ioam { | container e2e-types { | |||
| description "IOAM top level container"; | when "../node-action = 'ioam:action-encapsulate'"; | |||
| description | ||||
| "the list of e2e types for encapsulate"; | ||||
| container ioam-info { | leaf use-namespace { | |||
| config false; | type ioam-namespace; | |||
| description | description | |||
| "Describes assistant information such as units or timestamp | "the namespace used for the encapsulation"; | |||
| format. So that monitoring systems can interpret the IOAM | } | |||
| data."; | ||||
| leaf-list e2e-type { | ||||
| type ioam-e2e-type; | ||||
| description | ||||
| "The e2e type is only defined at the encapsulation node."; | ||||
| } | ||||
| } | ||||
| } | } | |||
| container ioam-profiles { | ||||
| grouping ioam-admin-config { | ||||
| description | description | |||
| "Contains a list of IOAM profiles."; | "IOAM top-level administrative configuration."; | |||
| container admin-config { | leaf enabled { | |||
| type boolean; | ||||
| default false; | ||||
| description | description | |||
| "Contains all the administrative configurations related to | "When true, IOAM configuration is enabled for the system. | |||
| the IOAM functionalities and all the IOAM profiles."; | Meanwhile, the IOAM data-plane functionality is enabled."; | |||
| uses ioam-admin-config; | ||||
| } | } | |||
| } | ||||
| list ioam-profile { | /* | |||
| key "profile-name"; | * DATA NODES | |||
| ordered-by user; | */ | |||
| container ioam { | ||||
| description "IOAM top level container"; | ||||
| container ioam-info { | ||||
| config false; | ||||
| description | description | |||
| "A list of IOAM profiles that configured on the node."; | "Describes assistant information such as units or timestamp | |||
| format. So that monitoring systems can interpret the IOAM | ||||
| data."; | ||||
| leaf profile-name { | leaf timestamp-type { | |||
| type string; | type identityref { | |||
| mandatory true; | base lime:timestamp-type; | |||
| } | ||||
| description | description | |||
| "Unique identifier for each IOAM profile"; | "Type of timestamp, such as Truncated PTP or NTP."; | |||
| } | } | |||
| container filter { | list available-interface { | |||
| uses ioam-filter; | key "if-name"; | |||
| ordered-by user; | ||||
| description | description | |||
| "The filter which is used to indicate the flow to apply | "A list of available interfaces that support IOAM."; | |||
| IOAM."; | leaf if-name { | |||
| type leafref { | ||||
| path "/if:interfaces/if:interface/if:name"; | ||||
| } | ||||
| description "Interface name."; | ||||
| } | ||||
| } | } | |||
| } | ||||
| leaf protocol-type { | container ioam-profiles { | |||
| type ioam-protocol-type; | description | |||
| "Contains a list of IOAM profiles."; | ||||
| container admin-config { | ||||
| description | description | |||
| "This item is used to indicate the carrier protocol where | "Contains all the administrative configurations related to | |||
| the IOAM is applied."; | the IOAM functionalities and all the IOAM profiles."; | |||
| uses ioam-admin-config; | ||||
| } | } | |||
| container incremental-tracing-profile { | list ioam-profile { | |||
| if-feature incremental-trace; | key "profile-name"; | |||
| ordered-by user; | ||||
| description | description | |||
| "describe the profile for incremental tracing option"; | "A list of IOAM profiles that configured on the node."; | |||
| leaf enabled { | leaf profile-name { | |||
| type boolean; | type string; | |||
| default false; | mandatory true; | |||
| description | description | |||
| "When true, apply incremental tracing option to the | "Unique identifier for each IOAM profile"; | |||
| specified flow identified by the filter."; | ||||
| } | ||||
| uses ioam-incremental-tracing-profile; | } | |||
| } | ||||
| container preallocated-tracing-profile { | container filter { | |||
| if-feature preallocated-trace; | uses ioam-filter; | |||
| description | description | |||
| "describe the profile for preallocated tracing option"; | "The filter which is used to indicate the flow to apply | |||
| IOAM."; | ||||
| } | ||||
| leaf enabled { | leaf protocol-type { | |||
| type boolean; | type ioam-protocol-type; | |||
| default false; | ||||
| description | description | |||
| "When true, apply preallocated tracing option to the | "This item is used to indicate the carrier protocol where | |||
| specified flow identified by the following filter."; | the IOAM is applied."; | |||
| } | } | |||
| uses ioam-preallocated-tracing-profile; | container incremental-tracing-profile { | |||
| } | if-feature incremental-trace; | |||
| description | ||||
| "describe the profile for incremental tracing option"; | ||||
| container direct-export-profile { | leaf enabled { | |||
| if-feature direct-export; | type boolean; | |||
| description | default false; | |||
| "describe the profile for direct-export option"; | description | |||
| "When true, apply incremental tracing option to the | ||||
| specified flow identified by the filter."; | ||||
| } | ||||
| leaf enabled { | uses ioam-incremental-tracing-profile; | |||
| type boolean; | ||||
| default false; | ||||
| description | ||||
| "When true, apply direct-export option to the | ||||
| specified flow identified by the following filter."; | ||||
| } | } | |||
| uses ioam-direct-export-profile; | container preallocated-tracing-profile { | |||
| } | if-feature preallocated-trace; | |||
| description | ||||
| "describe the profile for preallocated tracing option"; | ||||
| container pot-profile { | leaf enabled { | |||
| if-feature proof-of-transit; | type boolean; | |||
| description | default false; | |||
| "describe the profile for PoT option"; | description | |||
| "When true, apply preallocated tracing option to the | ||||
| specified flow identified by the following filter."; | ||||
| } | ||||
| leaf enabled { | uses ioam-preallocated-tracing-profile; | |||
| type boolean; | } | |||
| default false; | container direct-export-profile { | |||
| if-feature direct-export; | ||||
| description | description | |||
| "When true, apply Proof of Transit option to the | "describe the profile for direct-export option"; | |||
| specified flow identified by the following filter."; | ||||
| leaf enabled { | ||||
| type boolean; | ||||
| default false; | ||||
| description | ||||
| "When true, apply direct-export option to the | ||||
| specified flow identified by the following filter."; | ||||
| } | ||||
| uses ioam-direct-export-profile; | ||||
| } | } | |||
| leaf active-profile-index { | container pot-profile { | |||
| type pot:profile-index-range; | if-feature proof-of-transit; | |||
| description | description | |||
| "Proof of transit profile index that is currently | "describe the profile for PoT option"; | |||
| active. Will be set in the first hop of the path | ||||
| or chain. Other nodes will not use this field."; | ||||
| } | ||||
| uses pot:pot-profile; | leaf enabled { | |||
| } | type boolean; | |||
| default false; | ||||
| description | ||||
| "When true, apply Proof of Transit option to the | ||||
| specified flow identified by the following filter."; | ||||
| } | ||||
| container e2e-profile { | leaf pot-type { | |||
| if-feature edge-to-edge; | type ioam-pot-type; | |||
| description | description | |||
| "describe the profile for e2e option"; | "The type of a particular POT variant that specifies | |||
| the POT data that is included.."; | ||||
| } | ||||
| } | ||||
| leaf enabled { | container e2e-profile { | |||
| type boolean; | if-feature edge-to-edge; | |||
| default false; | ||||
| description | description | |||
| "When true, apply End to end option to the | "describe the profile for e2e option"; | |||
| specified flow identified by the following filter."; | ||||
| } | ||||
| uses ioam-e2e-profile; | leaf enabled { | |||
| type boolean; | ||||
| default false; | ||||
| description | ||||
| "When true, apply End to end option to the | ||||
| specified flow identified by the following filter."; | ||||
| } | ||||
| uses ioam-e2e-profile; | ||||
| } | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | <CODE ENDS> | |||
| <CODE ENDS> | ||||
| 5. Security Considerations | 5. Security Considerations | |||
| The YANG module specified in this document defines a schema for data | The YANG module specified in this document defines a schema for data | |||
| that is designed to be accessed via network management protocols such | that is designed to be accessed via network management protocols such | |||
| as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer | |||
| is the secure transport layer, and the mandatory-to-implement secure | is the secure transport layer, and the mandatory-to-implement secure | |||
| transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer | |||
| is HTTPS, and the mandatory-to-implement secure transport is TLS | is HTTPS, and the mandatory-to-implement secure transport is TLS | |||
| [RFC5246]. | [RFC5246]. | |||
| skipping to change at page 22, line 15 ¶ | skipping to change at page 22, line 38 ¶ | |||
| operations and content. | 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: | |||
| o /ioam/ioam-profiles/admin-config | * /ioam/ioam-profiles/admin-config | |||
| The items in the container above include the top level administrative | The items in the container above include the top level administrative | |||
| configurations related to the IOAM functionalities and all the IOAM | configurations related to the IOAM functionalities and all the IOAM | |||
| profiles. Unexpected changes to these items could lead to the IOAM | profiles. Unexpected changes to these items could lead to the IOAM | |||
| function disruption and/ or misbehavior of all the IOAM profiles. | function disruption and/ or misbehavior of all the IOAM profiles. | |||
| o /ioam/ioam-profiles/ioam-profile | * /ioam/ioam-profiles/ioam-profile | |||
| The entries in the list above include the whole IOAM profile | The entries in the list above include the whole IOAM profile | |||
| configurations which indirectly create or modify the device | configurations which indirectly create or modify the device | |||
| configurations. Unexpected changes to these entries could lead to | configurations. Unexpected changes to these entries could lead to | |||
| the mistake of the IOAM behavior for the corresponding flows. | the mistake of the IOAM behavior for the corresponding flows. | |||
| 6. IANA Considerations | 6. IANA Considerations | |||
| RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
| actual RFC number (and remove this note). | actual RFC number (and remove this note). | |||
| skipping to change at page 23, line 8 ¶ | skipping to change at page 23, line 28 ¶ | |||
| Names registry [RFC7950] with the following suggestion: | Names registry [RFC7950] with the following suggestion: | |||
| name: ietf-ioam | name: ietf-ioam | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-ioam | namespace: urn:ietf:params:xml:ns:yang:ietf-ioam | |||
| prefix: ioam | prefix: ioam | |||
| reference: RFC XXXX | reference: RFC XXXX | |||
| 7. Acknowledgements | 7. Acknowledgements | |||
| For their valuable comments, discussions, and feedback, we wish to | For their valuable comments, discussions, and feedback, we wish to | |||
| acknowledge Greg Mirsky, Reshad Rahman and Tom Petch. | acknowledge Greg Mirsky, Reshad Rahman, Tom Petch and Mickey Spiegel. | |||
| 8. References | 8. References | |||
| 8.1. Normative References | 8.1. Normative References | |||
| [I-D.ietf-ippm-ioam-data] | [I-D.ietf-ippm-ioam-data] | |||
| Brockners, F., Bhandari, S., and T. Mizrahi, "Data Fields | Brockners, F., Bhandari, S., and T. Mizrahi, "Data Fields | |||
| for In-situ OAM", draft-ietf-ippm-ioam-data-12 (work in | for In-situ OAM", Work in Progress, Internet-Draft, draft- | |||
| progress), February 2021. | ietf-ippm-ioam-data-17, 13 December 2021, | |||
| <https://www.ietf.org/archive/id/draft-ietf-ippm-ioam- | ||||
| data-17.txt>. | ||||
| [I-D.ietf-ippm-ioam-direct-export] | [I-D.ietf-ippm-ioam-direct-export] | |||
| Song, H., Gafni, B., Zhou, T., Li, Z., Brockners, F., | Song, H., Gafni, B., Zhou, T., Li, Z., Brockners, F., | |||
| Bhandari, S., Sivakolundu, R., and T. Mizrahi, "In-situ | Bhandari, S., Sivakolundu, R., and T. Mizrahi, "In-situ | |||
| OAM Direct Exporting", draft-ietf-ippm-ioam-direct- | OAM Direct Exporting", Work in Progress, Internet-Draft, | |||
| export-03 (work in progress), February 2021. | draft-ietf-ippm-ioam-direct-export-07, 13 October 2021, | |||
| <https://www.ietf.org/archive/id/draft-ietf-ippm-ioam- | ||||
| [I-D.ietf-sfc-proof-of-transit] | direct-export-07.txt>. | |||
| Brockners, F., Bhandari, S., Mizrahi, T., Dara, S., and S. | ||||
| Youell, "Proof of Transit", draft-ietf-sfc-proof-of- | ||||
| transit-08 (work in progress), November 2020. | ||||
| [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>. | |||
| skipping to change at page 24, line 34 ¶ | skipping to change at page 25, line 6 ¶ | |||
| <https://www.rfc-editor.org/info/rfc8340>. | <https://www.rfc-editor.org/info/rfc8340>. | |||
| [RFC8519] Jethanandani, M., Agarwal, S., Huang, L., and D. Blair, | [RFC8519] Jethanandani, M., Agarwal, S., Huang, L., and D. Blair, | |||
| "YANG Data Model for Network Access Control Lists (ACLs)", | "YANG Data Model for Network Access Control Lists (ACLs)", | |||
| RFC 8519, DOI 10.17487/RFC8519, March 2019, | RFC 8519, DOI 10.17487/RFC8519, March 2019, | |||
| <https://www.rfc-editor.org/info/rfc8519>. | <https://www.rfc-editor.org/info/rfc8519>. | |||
| 8.2. Informative References | 8.2. Informative References | |||
| [I-D.ietf-ippm-ioam-ipv6-options] | [I-D.ietf-ippm-ioam-ipv6-options] | |||
| Bhandari, S., Brockners, F., Pignataro, C., Gredler, H., | Bhandari, S. and F. Brockners, "In-situ OAM IPv6 Options", | |||
| Leddy, J., Youell, S., Mizrahi, T., Kfir, A., Gafni, B., | Work in Progress, Internet-Draft, draft-ietf-ippm-ioam- | |||
| Lapukhov, P., Spiegel, M., Krishnan, S., Asati, R., and M. | ipv6-options-06, 31 July 2021, | |||
| Smith, "In-situ OAM IPv6 Options", draft-ietf-ippm-ioam- | <https://www.ietf.org/archive/id/draft-ietf-ippm-ioam- | |||
| ipv6-options-05 (work in progress), February 2021. | ipv6-options-06.txt>. | |||
| [I-D.ietf-sfc-ioam-nsh] | [I-D.ietf-sfc-ioam-nsh] | |||
| Brockners, F. and S. Bhandari, "Network Service Header | Brockners, F. and S. Bhandari, "Network Service Header | |||
| (NSH) Encapsulation for In-situ OAM (IOAM) Data", draft- | (NSH) Encapsulation for In-situ OAM (IOAM) Data", Work in | |||
| ietf-sfc-ioam-nsh-05 (work in progress), December 2020. | Progress, Internet-Draft, draft-ietf-sfc-ioam-nsh-06, 31 | |||
| July 2021, <https://www.ietf.org/archive/id/draft-ietf- | ||||
| sfc-ioam-nsh-06.txt>. | ||||
| Appendix A. Examples | Appendix A. Examples | |||
| This appendix is non-normative. | This appendix is non-normative. | |||
| tbd | tbd | |||
| Authors' Addresses | Authors' Addresses | |||
| Tianran Zhou | Tianran Zhou | |||
| Huawei | Huawei | |||
| 156 Beiqing Rd. | 156 Beiqing Rd. | |||
| Beijing 100095 | Beijing | |||
| 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 | |||
| Duesseldorf, Nordrhein-Westfalen 40549 | 40549 Duesseldorf | |||
| 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, Tamil Nadu 600113 | Chennai 600113 | |||
| Tamil Nadu | ||||
| India | India | |||
| Email: srihari@cisco.com | Email: srihari@cisco.com | |||
| End of changes. 177 change blocks. | ||||
| 595 lines changed or deleted | 624 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||