diff --git a/experimental/ietf-extracted-YANG-modules/iana-tls-profile@2022-10-10.yang b/experimental/ietf-extracted-YANG-modules/iana-tls-profile@2024-01-23.yang similarity index 99% rename from experimental/ietf-extracted-YANG-modules/iana-tls-profile@2022-10-10.yang rename to experimental/ietf-extracted-YANG-modules/iana-tls-profile@2024-01-23.yang index 16c0bf223..931b86a03 100644 --- a/experimental/ietf-extracted-YANG-modules/iana-tls-profile@2022-10-10.yang +++ b/experimental/ietf-extracted-YANG-modules/iana-tls-profile@2024-01-23.yang @@ -39,7 +39,7 @@ module iana-tls-profile { The latest version of this YANG module is available at ."; - revision 2022-10-10 { + revision 2024-01-23 { description "Initial revision"; reference @@ -53,6 +53,7 @@ module iana-tls-profile { "Extension type in the TLS ExtensionType Values registry as defined in Section 7 of RFC8447."; } + typedef supported-group { type uint16; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-acl-tls@2022-10-10.yang b/experimental/ietf-extracted-YANG-modules/ietf-acl-tls@2022-10-10.yang index 281ab11f0..d82860a08 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-acl-tls@2022-10-10.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-acl-tls@2022-10-10.yang @@ -45,7 +45,6 @@ module ietf-acl-tls { 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 RFC itself for full legal notices."; @@ -94,7 +93,6 @@ module ietf-acl-tls { "The networking device can support matching on (D)TLS parameters."; } - typedef spki-pin-set { type binary; description @@ -108,6 +106,7 @@ module ietf-acl-tls { "Distinguished Name of Certificate authority as discussed in Section 4.2.4 of RFC8446."; } + augment "/acl:acls/acl:acl/acl:aces/acl:ace/acl:matches" { if-feature "match-on-tls-dtls"; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ioam-integrity@2024-08-31.yang b/experimental/ietf-extracted-YANG-modules/ietf-ioam-integrity@2024-08-31.yang new file mode 100644 index 000000000..ceb960efb --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-ioam-integrity@2024-08-31.yang @@ -0,0 +1,245 @@ +module ietf-ioam-integrity { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-ioam-integrity"; + prefix "ioam-int"; + + import ietf-ioam { + prefix ioam; + reference + "RFC 9617: A YANG Data Model for In Situ Operations, + Administration, and Maintenance (IOAM)"; + } + + organization + "IETF IPPM (IP Performance Measurement) Working Group"; + + contact + "WG Web: + WG List: + Author: Tianran Zhou + + Author: Justin Iurman + "; + + description + "This YANG module specifies a vendor-independent data model for + In Situ Operations, Administration, and Maintenance (IOAM) + Integrity Protected Options. + + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', + 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, + they appear in all capitals, as shown here. + + Copyright (c) 2024 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 Revised BSD License set + forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC XXXX; see the + RFC itself for full legal notices."; + + revision 2024-08-31 { + description + "Initial revision."; + reference + "RFC XXXX: A YANG Data Model for In Situ Operations, + Administration, and Maintenance (IOAM) Integrity Protected + Options"; + } + + /* + * FEATURES + */ + + feature int-incremental-trace + { + description + "This feature indicates that the Integrity Protected + Incremental Trace-Option is supported."; + reference + "RFC YYYY: Integrity Protection of In Situ Operations, + Administration, and Maintenance (IOAM) Data Fields"; + } + + feature int-preallocated-trace + { + description + "This feature indicates that the Integrity Protected + Pre-allocated Trace-Option is supported."; + reference + "RFC YYYY: Integrity Protection of In Situ Operations, + Administration, and Maintenance (IOAM) Data Fields"; + } + + feature int-proof-of-transit + { + description + "This feature indicates that the Integrity Protected Proof of + Transit Option is supported."; + reference + "RFC YYYY: Integrity Protection of In Situ Operations, + Administration, and Maintenance (IOAM) Data Fields"; + } + feature int-edge-to-edge + { + description + "This feature indicates that the Integrity Protected + Edge-to-Edge Option is supported."; + reference + "RFC YYYY: Integrity Protection of In Situ Operations, + Administration, and Maintenance (IOAM) Data Fields"; + } + + /* + * IDENTITIES + */ + + identity method { + description + "Base identity to represent the Integrity Protection Method."; + } + + identity method-1 { + base method; + description + "The Integrity Protection Method 1 uses AES-GMAC with a 12-byte + Nonce and a 16-byte ICV."; + reference + "RFC YYYY: Integrity Protection of In Situ Operations, + Administration, and Maintenance (IOAM) Data Fields"; + } + + /* + * TYPE DEFINITIONS + */ + + typedef method-type { + type identityref { + base method; + } + description + "It specifies the Integrity Protection Method."; + } + + /* + * DATA NODES + */ + + augment "/ioam:ioam/ioam:profiles/ioam:profile" { + description + "This augmentation adds 4 profiles for the Integrity Protected + Options."; + + container int-incremental-tracing-profile { + if-feature "int-incremental-trace"; + presence + "Enables the Integrity Protected Incremental Trace-Option."; + description + "This container describes the profile for the Integrity + Protected Incremental Trace-Option."; + + uses ioam:ioam-incremental-tracing-profile; + + leaf int-method { + when "derived-from-or-self(../node-action, + 'ioam:action-encapsulate')"; + type method-type; + default "method-1"; + description + "This object indicates the Integrity Protection Method for + this profile."; + } + } + + container int-preallocated-tracing-profile { + if-feature "int-preallocated-trace"; + presence + "Enables the Integrity Protected Pre-allocated + Trace-Option."; + description + "This container describes the profile for the Integrity + Protected Pre-allocated Trace-Option."; + + uses ioam:ioam-preallocated-tracing-profile; + + leaf int-method { + when "derived-from-or-self(../node-action, + 'ioam:action-encapsulate')"; + type method-type; + default "method-1"; + description + "This object indicates the Integrity Protection Method for + this profile."; + } + } + + container int-pot-profile { + if-feature "int-proof-of-transit"; + presence + "Enables the Integrity Protected Proof of Transit Option."; + description + "This container describes the profile for the Integrity + Protected Proof of Transit Option."; + + leaf use-namespace { + type ioam:ioam-namespace; + default "ioam:default-namespace"; + description + "This object indicates the namespace used for the + POT types."; + } + + leaf pot-type { + type ioam:ioam-pot-type; + description + "The type of a particular POT variant that specifies + the POT data that is included."; + } + + leaf node-action { + type ioam:ioam-node-action; + default "ioam:action-transit"; + description + "This object indicates the action the node needs to + take, e.g., encapsulation."; + } + + leaf int-method { + when "derived-from-or-self(../node-action, + 'ioam:action-encapsulate')"; + type method-type; + default "method-1"; + description + "This object indicates the Integrity Protection Method for + this profile."; + } + } + + container int-e2e-profile { + if-feature "int-edge-to-edge"; + presence + "Enables the Integrity Protected Edge-to-Edge Option."; + description + "This container describes the profile for the Integrity + Protected Edge-to-Edge Option."; + + uses ioam:ioam-e2e-profile; + leaf int-method { + when "derived-from-or-self(../node-action, + 'ioam:action-encapsulate')"; + type method-type; + default "method-1"; + description + "This object indicates the Integrity Protection Method for + this profile."; + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-mud-tls@2022-10-10.yang b/experimental/ietf-extracted-YANG-modules/ietf-mud-tls@2022-10-10.yang index a5eb8d639..f4c887711 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-mud-tls@2022-10-10.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-mud-tls@2022-10-10.yang @@ -17,6 +17,7 @@ module ietf-mud-tls { Author: Konda, Tirumaleswar Reddy kondtir@gmail.com + "; description "Extension to a MUD module to indicate (D)TLS diff --git a/experimental/ietf-extracted-YANG-modules/ietf-multicast-model@2023-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-multicast-model@2023-03-05.yang index 8616584f8..339d3c30b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-multicast-model@2023-03-05.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-multicast-model@2023-03-05.yang @@ -201,8 +201,7 @@ module ietf-multicast-model { "Using EVPN as multicast overlay technology."; reference "RFC 7432: BGP MPLS-Based Ethernet VPN. - I-D.ietf-bess-evpn-bum-procedure-updates: - Updates on EVPN BUM Procedures. + RFC 9572: Updates on EVPN BUM Procedures. I-D.ietf-bier-evpn: EVPN BUM Using BIER."; } identity mvpn { @@ -328,12 +327,12 @@ module ietf-multicast-model { grouping general-multicast-key { description - "The general multicast keys. They are used to distinguish - different multicast service."; + "The general multicast keys. They are used to differentiate + multicast service."; leaf vpn-rd { type rt-types:route-distinguisher; description - "A Route Distinguisher used to distinguish + "A Route Distinguisher is used to differentiate routes from different MVPNs."; reference "RFC 8294: Common YANG Data Types for the Routing Area. @@ -414,7 +413,7 @@ module ietf-multicast-model { leaf sub-domain { type uint16; description - "The subdomain id that the multicast flow belongs to."; + "The subdomain ID that the multicast flow belongs to."; } leaf bitstringlength { type uint16; @@ -720,7 +719,7 @@ module ietf-multicast-model { used in SDN controlled completely situation, but it can be used in partial SDN controlled situation or non-SDN controlled situation. Different overlay - technologies can be choosed according to different + technologies can be chosen according to different deploy consideration."; leaf vni-type { @@ -751,11 +750,10 @@ module ietf-multicast-model { BIER. In MVPN, this is the address of ingress PE; in BIER, this is the BFR-prefix of ingress nodes. - Two or more ingress nodes may existed for the + Two or more ingress nodes may exist for the redundant ingress node protection."; } } - list egress-nodes { key "egress-node"; description @@ -804,7 +802,6 @@ module ietf-multicast-model { key "egress-node"; description "The egress nodes of multicast flow."; - leaf egress-node { type uint16; description @@ -821,9 +818,9 @@ module ietf-multicast-model { protocol is responsible for delivering multicast flows from ingress nodes to egress nodes with or without specific encapsulation. Different transport - technology can be choosed according to different + technology can be chosen according to different deploy consideration. Once a transport technology - is choosed, associated protocol should be triggered + is chosen, associated protocol should be triggered to run."; uses transport-tech; @@ -835,7 +832,7 @@ module ietf-multicast-model { need not be assigned in ordinary network since existed underlay protocol fits well, but it can be assigned in particular networks for better - controll. Once a underlay technology is choosed, + controll. Once an underlay technology is chosen, associated protocol should be triggered to run."; uses underlay-tech; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-network-slice-service@2024-07-29.yang b/experimental/ietf-extracted-YANG-modules/ietf-network-slice-service@2024-08-28.yang similarity index 97% rename from experimental/ietf-extracted-YANG-modules/ietf-network-slice-service@2024-07-29.yang rename to experimental/ietf-extracted-YANG-modules/ietf-network-slice-service@2024-08-28.yang index 3b241419b..5499cf3c5 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-network-slice-service@2024-07-29.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-network-slice-service@2024-08-28.yang @@ -92,7 +92,7 @@ module ietf-network-slice-service { This version of this YANG module is part of RFC AAAA; see the RFC itself for full legal notices."; - revision 2024-07-29 { + revision 2024-08-28 { description "Initial revision."; reference @@ -115,7 +115,7 @@ module ietf-network-slice-service { description "The Network Slice Service customer name tag type, e.g., adding tags with 'customer name' when multiple actual - customers use a same Network Slice Service."; + customers use the same Network Slice Service."; } identity service { @@ -346,7 +346,8 @@ module ietf-network-slice-service { base service-slo-metric-type; description "SLO two-way delay variation is the difference in the - round-trip delay between sequential packets between two SDPs."; + round-trip delay between sequential packets between two + SDPs."; reference "RFC 5481: Packet Delay Variation Applicability Statement"; } @@ -421,7 +422,6 @@ module ietf-network-slice-service { "Base identity for Network Slice Service traffic match type."; } - identity phy-interface { base service-match-type; description @@ -523,7 +523,7 @@ module ietf-network-slice-service { } description "The percentile is a value between 0 and 100 - to 3 decimal places, e.g., 10.000, 99.900 ,99.990, etc. + to 3 decimal places, e.g., 10.000, 99.900,99.990, etc. For example, for a given one-way delay measurement, if the percentile is set to 95.000 and the 95th percentile one-way delay is 2 milliseconds, then the 95 percent of @@ -582,7 +582,7 @@ module ietf-network-slice-service { seconds, milliseconds, microseconds, and nanoseconds; for bandwidth units, where the options are bps, Kbps, Mbps, Gbps; for the packet loss rate unit, - the options can be percentage."; + the options can be a percentage."; } leaf value-description { type string; @@ -756,7 +756,7 @@ module ietf-network-slice-service { "Grouping for the Slice Service QoS policy."; container incoming-qos-policy { description - "The QoS policy imposed on ingress direction of the traffic , + "The QoS policy imposed on ingress direction of the traffic, from the customer network or from another provider's network."; leaf qos-policy-name { @@ -967,20 +967,26 @@ module ietf-network-slice-service { description "The identifier of a match criteria."; } - leaf match-type { - type identityref { - base service-match-type; - } - mandatory true; - description - "Indicates the match type of the entry in the - list of the Slice Service match criteria."; - } - leaf-list value { - type string; + list match-type { + key "type"; description - "Provides a value for the Slice Service match - criteria, e.g., IP prefix and VLAN ID."; + "List of the Slice Service traffic match types."; + leaf type { + type identityref { + base service-match-type; + } + mandatory true; + description + "Indicates the match type of the entry in the + list of the Slice Service match criteria."; + } + leaf-list value { + type string; + description + "Provides a value for the Slice Service match + criteria, e.g., IP prefix, VLAN ID, or + ACL name."; + } } leaf target-connection-group-id { type leafref { @@ -1028,10 +1034,10 @@ module ietf-network-slice-service { type string; description "Indicates the reference to the remote endpoints of - the attachment circuits. This information can be used - for correlation purposes, such as identifying SAPs - of provider equipments when requesting a service with - CE based SDP attributes."; + the attachment circuits. This information can be + used for correlation purposes, such as identifying + SAPs of provider equipments when requesting + a service with CE based SDP attributes."; reference "RFC 9408: A YANG Network Data Model for Service Attachment Points (SAPs)"; @@ -1078,7 +1084,7 @@ module ietf-network-slice-service { leaf ac-svc-ref { type ac-svc:attachment-circuit-reference; description - "A reference to the AC service that have been + "A reference to the AC service that has been created before the slice creation."; reference "RFC CCCC: YANG Data Models for Bearers and diff --git a/experimental/ietf-extracted-YANG-modules/ietf-wdm-path-computation@2024-02-29.yang b/experimental/ietf-extracted-YANG-modules/ietf-wdm-path-computation@2024-02-29.yang index 95f1216d0..6287d49a4 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-wdm-path-computation@2024-02-29.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-wdm-path-computation@2024-02-29.yang @@ -139,7 +139,6 @@ module ietf-wdm-path-computation { uses wdm-tnl:path-transceiver-config; } - //??? augment "/te:tunnels-path-compute/te:input/te:path-compute-info/" + "tepc:path-request/tepc:optimizations/tepc:algorithm/" @@ -188,7 +187,6 @@ module ietf-wdm-path-computation { "The OMS element route hop type"; } } - augment "/te:tunnels-path-compute/te:input/te:path-compute-info/" + "tepc:path-request/tepc:explicit-route-objects/" + "tepc:route-object-include-exclude/tepc:type/" diff --git a/standard/iana/yang-parameters.xml b/standard/iana/yang-parameters.xml index d2439186e..ebe3347bc 100644 --- a/standard/iana/yang-parameters.xml +++ b/standard/iana/yang-parameters.xml @@ -4,7 +4,7 @@ YANG Parameters 2010-06-10 - 2024-08-02 + 2024-08-29 YANG Module Names @@ -879,15 +879,15 @@ and Subsequent Address Family Identi - + ietf-ioam N - + ietf-ioam@2024-08-27.yang urn:ietf:params:xml:ns:yang:ietf-ioam ioam - - 's module file will be posted upon the document's publication as an RFC. + + ietf-ip @@ -1649,6 +1649,16 @@ and Subsequent Address Family Identi + + ietf-rift + N + + urn:ietf:params:xml:ns:yang:ietf-rift + rift + + + 's module file will be posted upon the document's publication as an RFC. + ietf-rip N diff --git a/standard/ietf/RFC/ietf-ioam.yang b/standard/ietf/RFC/ietf-ioam.yang new file mode 120000 index 000000000..3bd8a7a41 --- /dev/null +++ b/standard/ietf/RFC/ietf-ioam.yang @@ -0,0 +1 @@ +ietf-ioam@2024-08-27.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-ioam@2024-08-27.yang b/standard/ietf/RFC/ietf-ioam@2024-08-27.yang new file mode 100644 index 000000000..13c8ca8fb --- /dev/null +++ b/standard/ietf/RFC/ietf-ioam@2024-08-27.yang @@ -0,0 +1,716 @@ +module ietf-ioam { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-ioam"; + prefix ioam; + + import ietf-access-control-list { + prefix acl; + reference + "RFC 8519: YANG Data Model for Network Access Control + Lists (ACLs)"; + } + import ietf-interfaces { + prefix if; + reference + "RFC 8343: A YANG Data Model for Interface Management"; + } + import ietf-lime-time-types { + prefix lime; + reference + "RFC 8532: Generic YANG Data Model for the Management of + Operations, Administration, and Maintenance (OAM) Protocols + That Use Connectionless Communications"; + } + + organization + "IETF IPPM (IP Performance Measurement) Working Group"; + contact + "WG Web: + WG List: + Editor: Tianran Zhou + + Author: Jim Guichard + + Author: Frank Brockners + + Author: Srihari Raghavan + "; + description + "This YANG module specifies a vendor-independent data model + for In Situ Operations, Administration, and Maintenance + (IOAM). + + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', + 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, + they appear in all capitals, as shown here. + + Copyright (c) 2024 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 Revised BSD License set + forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 9617; see the + RFC itself for full legal notices."; + + revision 2024-08-27 { + description + "Initial revision."; + reference + "RFC 9617: A YANG Data Model for In Situ Operations, + Administration, and Maintenance (IOAM)"; + } + + /* + * FEATURES + */ + + feature incremental-trace { + description + "This feature indicates that the Incremental Trace-Option is + supported."; + reference + "RFC 9197: Data Fields for In Situ Operations, + Administration, and Maintenance (IOAM)"; + } + + feature preallocated-trace { + description + "This feature indicates that the Pre-allocated Trace-Option + is supported."; + reference + "RFC 9197: Data Fields for In Situ Operations, + Administration, and Maintenance (IOAM)"; + } + + feature direct-export { + description + "This feature indicates that the Direct Export Option is + supported."; + reference + "RFC 9326: In Situ Operations, Administration, and + Maintenance (IOAM) Direct Exporting"; + } + + feature proof-of-transit { + description + "This feature indicates that the Proof of Transit Option is + supported."; + reference + "RFC 9197: Data Fields for In Situ Operations, + Administration, and Maintenance (IOAM)"; + } + + feature edge-to-edge { + description + "This feature indicates that the Edge-to-Edge Option is + supported."; + reference + "RFC 9197: Data Fields for In Situ Operations, + Administration, and Maintenance (IOAM)"; + } + + /* + * IDENTITIES + */ + + identity filter { + description + "Base identity to represent a filter. A filter is used to + specify the flow to apply the IOAM profile."; + } + + identity acl-filter { + base filter; + description + "Apply Access Control List (ACL) rules to specify the + flow."; + } + + identity protocol { + description + "Base identity to represent the carrier protocol. It is + used to indicate in what layer and protocol the IOAM data + is embedded."; + } + + identity ipv6 { + base protocol; + description + "The described IOAM data is embedded in IPv6."; + reference + "RFC 9486: IPv6 Options for In Situ Operations, + Administration, and Maintenance (IOAM)"; + } + + identity nsh { + base protocol; + description + "The described IOAM data is embedded in the Network Service + Header (NSH)."; + reference + "RFC 9452: Network Service Header (NSH) Encapsulation for + In Situ OAM (IOAM) Data"; + } + + identity node-action { + description + "Base identity to represent the node actions. It is used to + indicate what action the node will take."; + } + + identity action-encapsulate { + base node-action; + description + "This identity indicates that the node is used to + encapsulate the IOAM packet."; + } + + identity action-decapsulate { + base node-action; + description + "This identity indicates that the node is used to + decapsulate the IOAM packet."; + } + + identity action-transit { + base node-action; + description + "This identity indicates that the node is used to transit + the IOAM packet."; + } + + identity trace-type { + description + "Base identity to represent trace types."; + } + + identity trace-hop-lim-node-id { + base trace-type; + description + "This identity indicates the presence of 'Hop_Lim' and + 'node_id' in the node data."; + reference + "RFC 9197: Data Fields for In Situ Operations, + Administration, and Maintenance (IOAM)"; + } + + identity trace-if-id { + base trace-type; + description + "This identity indicates the presence of 'ingress_if_id' and + '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 { + base trace-type; + description + "This identity indicates the presence of timestamp seconds + in the node data."; + } + + identity trace-timestamp-fraction { + base trace-type; + description + "This identity indicates the presence of a timestamp + fraction in the node data."; + } + + identity trace-transit-delay { + base trace-type; + description + "This identity indicates the presence of transit delay in + the node data."; + } + + identity trace-namespace-data { + base trace-type; + description + "This identity indicates the presence of namespace-specific + data (short format) in the node data."; + } + + identity trace-queue-depth { + base trace-type; + description + "This identity indicates the presence of queue depth in the + node data."; + } + + identity trace-checksum-complement { + base trace-type; + description + "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 { + base trace-type; + description + "This identity indicates the presence of 'Hop_Lim' and + 'node_id' (wide format) in the node data."; + } + + identity trace-if-id-wide { + base trace-type; + description + "This identity indicates the presence of 'ingress_if_id' and + 'egress_if_id' (wide format) in the node data."; + } + + identity trace-namespace-data-wide { + base trace-type; + description + "This identity indicates the presence of + IOAM-namespace-specific data (wide format) in the + node data."; + } + + identity trace-buffer-occupancy { + base trace-type; + description + "This identity indicates the presence of buffer occupancy + in the node data."; + } + + identity trace-opaque-state-snapshot { + base trace-type; + description + "This identity indicates the presence of the variable-length + Opaque State Snapshot field."; + } + + identity pot-type { + description + "Base identity to represent Proof of Transit (POT) types."; + } + + identity pot-type-0 { + base pot-type; + description + "The IOAM field value for the POT type is 0, and POT data is + a 16-octet field to carry data associated with POT + procedures."; + } + + identity e2e-type { + description + "Base identity to represent edge-to-edge types."; + } + + identity e2e-seq-num-64 { + base e2e-type; + description + "This identity indicates the presence of a 64-bit + sequence number."; + } + + identity e2e-seq-num-32 { + base e2e-type; + description + "This identity indicates the presence of a 32-bit + sequence number."; + } + + identity e2e-timestamp-seconds { + base e2e-type; + description + "This identity indicates the presence of timestamp seconds + representing the time at which the packet entered the + IOAM domain."; + } + + identity e2e-timestamp-fraction { + base e2e-type; + description + "This identity indicates the presence of a timestamp + fraction representing the time at which the packet entered + the IOAM domain."; + } + + identity namespace { + description + "Base identity to represent the Namespace-ID."; + } + + identity default-namespace { + base namespace; + description + "The Namespace-ID value of 0x0000 is defined as the + Default-Namespace-ID and MUST be known to all the nodes + implementing IOAM."; + } + + /* + * TYPE DEFINITIONS + */ + + typedef ioam-filter-type { + type identityref { + base filter; + } + description + "This type specifies a known type of filter."; + } + + typedef ioam-protocol-type { + type identityref { + base protocol; + } + description + "This type specifies a known type of carrier protocol for + the IOAM data."; + } + + typedef ioam-node-action { + type identityref { + base node-action; + } + description + "This type specifies a known type of node action."; + } + + typedef ioam-trace-type { + type identityref { + base trace-type; + } + description + "This type specifies a known trace type."; + } + + typedef ioam-pot-type { + type identityref { + base pot-type; + } + description + "This type specifies a known POT type."; + } + + typedef ioam-e2e-type { + type identityref { + base e2e-type; + } + description + "This type specifies a known edge-to-edge type."; + } + + typedef ioam-namespace { + type identityref { + base namespace; + } + description + "This type specifies the supported namespace."; + } + + /* + * GROUP DEFINITIONS + */ + + grouping ioam-filter { + description + "A grouping for IOAM filter definitions."; + leaf filter-type { + type ioam-filter-type; + description + "Filter type."; + } + leaf ace-name { + when "derived-from-or-self(../filter-type, 'ioam:acl-filter')"; + type leafref { + path "/acl:acls/acl:acl/acl:aces/acl:ace/acl:name"; + } + description + "The Access Control Entry name is used to refer to an ACL + specification."; + } + } + + grouping encap-tracing { + description + "A grouping for the generic configuration for the + tracing profile."; + container trace-types { + description + "This container provides the list of trace types for + encapsulation."; + leaf use-namespace { + type ioam-namespace; + default "default-namespace"; + description + "This object indicates the namespace used for + encapsulation."; + } + leaf-list trace-type { + type ioam-trace-type; + description + "The trace type is only defined at the encapsulation + node."; + } + } + leaf max-length { + when "derived-from-or-self(../node-action, + 'ioam:action-encapsulate')"; + type uint32; + units "bytes"; + description + "This field specifies the maximum length of the node data + list in octets. 'max-length' is only defined at the + encapsulation node."; + } + } + + grouping ioam-incremental-tracing-profile { + description + "A grouping for the Incremental Tracing Profile."; + leaf node-action { + type ioam-node-action; + default "action-transit"; + description + "This object indicates the action the node needs to + take, e.g., encapsulation."; + } + uses encap-tracing { + when "derived-from-or-self(node-action, + 'ioam:action-encapsulate')"; + } + } + + grouping ioam-preallocated-tracing-profile { + description + "A grouping for the Pre-allocated Tracing Profile."; + leaf node-action { + type ioam-node-action; + default "action-transit"; + description + "This object indicates the action the node needs to + take, e.g., encapsulation."; + } + uses encap-tracing { + when "derived-from-or-self(node-action, + 'ioam:action-encapsulate')"; + } + } + + grouping ioam-direct-export-profile { + description + "A grouping for the Direct Export Profile."; + leaf node-action { + type ioam-node-action; + default "action-transit"; + description + "This object indicates the action the node needs to + take, e.g., encapsulation."; + } + uses encap-tracing { + when "derived-from-or-self(node-action, + 'ioam:action-encapsulate')"; + } + leaf flow-id { + when "derived-from-or-self(../node-action, + 'ioam:action-encapsulate')"; + type uint32; + description + "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 the Flow ID, yet the + probability of conflict 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."; + } + leaf enable-sequence-number { + when "derived-from-or-self(../node-action, + 'ioam:action-encapsulate')"; + type boolean; + default "false"; + description + "This boolean value indicates whether the sequence number + is used in the Direct Export Option's 32-bit flow + identifier. If this value is set to 'true', the sequence + number is used. It is turned off by default."; + } + } + + grouping ioam-e2e-profile { + description + "A grouping for the Edge-to-Edge Profile."; + leaf node-action { + type ioam-node-action; + default "action-transit"; + description + "This object indicates the action the node needs to + take, e.g., encapsulation."; + } + container e2e-types { + when "derived-from-or-self(../node-action, + 'ioam:action-encapsulate')"; + description + "This container provides the list of edge-to-edge types + for encapsulation."; + leaf use-namespace { + type ioam-namespace; + default "default-namespace"; + description + "This object indicates the namespace used for + encapsulation."; + } + leaf-list e2e-type { + type ioam-e2e-type; + description + "The edge-to-edge type is only defined at the + encapsulation node."; + } + } + } + + grouping ioam-admin-config { + description + "IOAM top-level administrative configuration."; + leaf enabled { + type boolean; + default "false"; + description + "This object is used to control the availability of + configuration. It MUST be set to 'true' before anything + in the /ioam/profiles/profile subtree can be edited. + If 'false', any configuration in place is not used."; + } + } + + /* + * DATA NODES + */ + + container ioam { + description + "IOAM top-level container."; + container info { + config false; + description + "Describes information, such as units or timestamp format, + that assists monitoring systems in the interpretation of + the IOAM data."; + leaf timestamp-type { + type identityref { + base lime:timestamp-type; + } + description + "Type of timestamp, such as Truncated PTP (Precision + Time Protocol) or NTP."; + } + list available-interface { + key "if-name"; + description + "A list of available interfaces that support IOAM."; + leaf if-name { + type if:interface-ref; + description + "This is a reference to the interface name."; + } + } + } + container admin-config { + description + "Contains all the administrative configurations related to + the IOAM functionalities and all the IOAM profiles."; + uses ioam-admin-config; + } + container profiles { + description + "Contains a list of IOAM profiles."; + list profile { + key "profile-name"; + description + "A list of IOAM profiles that are configured on the + node. There is no mandatory type of profile (e.g., + 'incremental-trace', 'preallocated-trace') in the list. + But at least one profile should be added."; + leaf profile-name { + type string { + length "1..300"; + } + description + "Unique identifier for each IOAM profile."; + } + container filter { + uses ioam-filter; + description + "The filter that is used to indicate the flow to apply + IOAM."; + } + leaf protocol-type { + type ioam-protocol-type; + description + "This object is used to indicate the carrier protocol + where IOAM is applied."; + } + container incremental-tracing-profile { + if-feature "incremental-trace"; + presence "Enables the Incremental Trace-Option."; + description + "This container describes the profile for the + Incremental Trace-Option."; + uses ioam-incremental-tracing-profile; + } + container preallocated-tracing-profile { + if-feature "preallocated-trace"; + presence "Enables the Pre-allocated Trace-Option."; + description + "This container describes the profile for the + Pre-allocated Trace-Option."; + uses ioam-preallocated-tracing-profile; + } + container direct-export-profile { + if-feature "direct-export"; + presence "Enables the Direct Export Option."; + description + "This container describes the profile for the + Direct Export Option."; + uses ioam-direct-export-profile; + } + container pot-profile { + if-feature "proof-of-transit"; + presence "Enables the Proof of Transit Option."; + description + "This container describes the profile for the + Proof of Transit Option."; + leaf use-namespace { + type ioam-namespace; + default "default-namespace"; + description + "This object indicates the namespace used for the + POT types."; + } + leaf pot-type { + type ioam-pot-type; + description + "The type of a particular POT variant that specifies + the POT data that is included."; + } + } + container e2e-profile { + if-feature "edge-to-edge"; + presence "Enables the Edge-to-Edge Option."; + description + "This container describes the profile for the + Edge-to-Edge Option."; + uses ioam-e2e-profile; + } + } + } + } +}