ietf-ioam@2024-07-12.yang   ietf-ioam@2024-07-12.formatted.yang 
module ietf-ioam { module ietf-ioam {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-ioam"; namespace "urn:ietf:params:xml:ns:yang:ietf-ioam";
prefix "ioam"; prefix ioam;
import ietf-access-control-list { import ietf-access-control-list {
prefix "acl"; prefix acl;
reference reference
"RFC 8519: YANG Data Model for Network Access Control "RFC 8519: YANG Data Model for Network Access Control
Lists (ACLs)"; Lists (ACLs)";
} }
import ietf-interfaces { import ietf-interfaces {
prefix "if"; prefix if;
reference reference
"RFC 8343: A YANG Data Model for Interface Management"; "RFC 8343: A YANG Data Model for Interface Management";
} }
import ietf-lime-time-types { import ietf-lime-time-types {
prefix "lime"; prefix lime;
reference reference
"RFC 8532: Generic YANG Data Model for the Management of "RFC 8532: Generic YANG Data Model for the Management of
Operations, Administration, and Maintenance (OAM) Protocols Operations, Administration, and Maintenance (OAM) Protocols
That Use Connectionless Communications"; That Use Connectionless Communications";
} }
organization organization
"IETF IPPM (IP Performance Measurement) Working Group"; "IETF IPPM (IP Performance Measurement) Working Group";
contact contact
"WG Web: <https://datatracker.ietf.org/wg/ippm> "WG Web: <https://datatracker.ietf.org/wg/ippm>
WG List: <mailto:ippm@ietf.org> WG List: <mailto:ippm@ietf.org>
Editor: Tianran Zhou Editor: Tianran Zhou
<mailto:zhoutianran@huawei.com> <mailto:zhoutianran@huawei.com>
Editor: Jim Guichard Editor: Jim Guichard
<mailto:james.n.guichard@futurewei.com> <mailto:james.n.guichard@futurewei.com>
Editor: Frank Brockners Editor: Frank Brockners
<mailto:fbrockne@cisco.com> <mailto:fbrockne@cisco.com>
Editor: Srihari Raghavan Editor: Srihari Raghavan
skipping to change at line 74 skipping to change at line 70
RFC itself for full legal notices."; RFC itself for full legal notices.";
revision 2024-07-12 { revision 2024-07-12 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC 9617: A YANG Data Model for In Situ Operations, "RFC 9617: A YANG Data Model for In Situ Operations,
Administration, and Maintenance (IOAM)"; Administration, and Maintenance (IOAM)";
} }
/* /*
* FEATURES * FEATURES
*/ */
feature incremental-trace feature incremental-trace {
{
description description
"This feature indicates that the incremental tracing option "This feature indicates that the incremental tracing option
is supported."; is supported.";
reference reference
"RFC 9197: Data Fields for In Situ Operations, "RFC 9197: Data Fields for In Situ Operations,
Administration, and Maintenance (IOAM)"; Administration, and Maintenance (IOAM)";
} }
feature preallocated-trace feature preallocated-trace {
{
description description
"This feature indicates that the pre-allocated tracing "This feature indicates that the pre-allocated tracing
option is supported."; option is supported.";
reference reference
"RFC 9197: Data Fields for In Situ Operations, "RFC 9197: Data Fields for In Situ Operations,
Administration, and Maintenance (IOAM)"; Administration, and Maintenance (IOAM)";
} }
feature direct-export feature direct-export {
{
description description
"This feature indicates that the direct export option is "This feature indicates that the direct export option is
supported."; supported.";
reference reference
"RFC 9326: In Situ Operations, Administration, and "RFC 9326: In Situ Operations, Administration, and
Maintenance (IOAM) Direct Exporting"; Maintenance (IOAM) Direct Exporting";
} }
feature proof-of-transit feature proof-of-transit {
{
description description
"This feature indicates that the proof of transit option is "This feature indicates that the proof of transit option is
supported."; supported.";
reference reference
"RFC 9197: Data Fields for In Situ Operations, "RFC 9197: Data Fields for In Situ Operations,
Administration, and Maintenance (IOAM)"; Administration, and Maintenance (IOAM)";
} }
feature edge-to-edge feature edge-to-edge {
{
description description
"This feature indicates that the edge-to-edge option is "This feature indicates that the edge-to-edge option is
supported."; supported.";
reference reference
"RFC 9197: Data Fields for In Situ Operations, "RFC 9197: Data Fields for In Situ Operations,
Administration, and Maintenance (IOAM)"; Administration, and Maintenance (IOAM)";
} }
/* /*
* IDENTITIES * IDENTITIES
*/ */
identity filter { identity filter {
description description
"Base identity to represent a filter. A filter is used to "Base identity to represent a filter. A filter is used to
specify the flow to apply the IOAM profile."; specify the flow to apply the IOAM profile.";
} }
identity acl-filter { identity acl-filter {
base filter; base filter;
description description
"Apply Access Control List (ACL) rules to specify the "Apply Access Control List (ACL) rules to specify the
skipping to change at line 160 skipping to change at line 152
identity ipv6 { identity ipv6 {
base protocol; base protocol;
description description
"The described IOAM data is embedded in IPv6."; "The described IOAM data is embedded in IPv6.";
reference reference
"RFC 9486: IPv6 Options for In Situ Operations, "RFC 9486: IPv6 Options for In Situ Operations,
Administration, and Maintenance (IOAM)"; Administration, and Maintenance (IOAM)";
} }
identity nsh { identity nsh {
base protocol; base protocol;
description description
"The described IOAM data is embedded in the Network Service "The described IOAM data is embedded in the Network Service
Header (NSH)."; Header (NSH).";
reference reference
"RFC 9452: Network Service Header (NSH) Encapsulation for "RFC 9452: Network Service Header (NSH) Encapsulation for
In Situ OAM (IOAM) Data"; In Situ OAM (IOAM) Data";
} }
identity node-action { identity node-action {
skipping to change at line 229 skipping to change at line 221
Administration, and Maintenance (IOAM)"; Administration, and Maintenance (IOAM)";
} }
identity trace-timestamp-seconds { identity trace-timestamp-seconds {
base trace-type; base trace-type;
description description
"This identity indicates the presence of timestamp seconds "This identity indicates the presence of timestamp seconds
in the node data."; in the node data.";
} }
identity trace-timestamp-fraction { identity trace-timestamp-fraction {
base trace-type; base trace-type;
description description
"This identity indicates the presence of a timestamp "This identity indicates the presence of a timestamp
fraction in the node data."; fraction in the node data.";
} }
identity trace-transit-delay { identity trace-transit-delay {
base trace-type; base trace-type;
description description
"This identity indicates the presence of transit delay in "This identity indicates the presence of transit delay in
skipping to change at line 364 skipping to change at line 356
} }
identity default-namespace { identity default-namespace {
base namespace; base namespace;
description description
"The Namespace-ID value of 0x0000 is defined as the "The Namespace-ID value of 0x0000 is defined as the
Default-Namespace-ID and MUST be known to all the nodes Default-Namespace-ID and MUST be known to all the nodes
implementing IOAM."; implementing IOAM.";
} }
/* /*
* TYPE DEFINITIONS * TYPE DEFINITIONS
*/ */
typedef ioam-filter-type { typedef ioam-filter-type {
type identityref { type identityref {
base filter; base filter;
} }
description description
"This type specifies a known type of filter."; "This type specifies a known type of filter.";
} }
typedef ioam-protocol-type { typedef ioam-protocol-type {
type identityref { type identityref {
skipping to change at line 424 skipping to change at line 417
} }
typedef ioam-namespace { typedef ioam-namespace {
type identityref { type identityref {
base namespace; base namespace;
} }
description description
"This type specifies the supported namespace."; "This type specifies the supported namespace.";
} }
/* /*
* GROUP DEFINITIONS * GROUP DEFINITIONS
*/ */
grouping ioam-filter { grouping ioam-filter {
description description
"A grouping for IOAM filter definitions."; "A grouping for IOAM filter definitions.";
leaf filter-type { leaf filter-type {
type ioam-filter-type; type ioam-filter-type;
description description
"Filter type."; "Filter type.";
} }
leaf ace-name { leaf ace-name {
when "derived-from-or-self(../filter-type, 'ioam:acl-filter')"; when "derived-from-or-self(../filter-type, 'ioam:acl-filter')";
type leafref { type leafref {
path "/acl:acls/acl:acl/acl:aces/acl:ace/acl:name"; path "/acl:acls/acl:acl/acl:aces/acl:ace/acl:name";
} }
description description
"The Access Control Entry name is used to refer to an ACL "The Access Control Entry name is used to refer to an ACL
specification."; specification.";
} }
} }
skipping to change at line 453 skipping to change at line 444
description description
"The Access Control Entry name is used to refer to an ACL "The Access Control Entry name is used to refer to an ACL
specification."; specification.";
} }
} }
grouping encap-tracing { grouping encap-tracing {
description description
"A grouping for the generic configuration for the "A grouping for the generic configuration for the
tracing profile."; tracing profile.";
container trace-types { container trace-types {
description description
"This container provides the list of trace types for "This container provides the list of trace types for
encapsulation."; encapsulation.";
leaf use-namespace { leaf use-namespace {
type ioam-namespace; type ioam-namespace;
default default-namespace; default "default-namespace";
description description
"This object indicates the namespace used for "This object indicates the namespace used for
encapsulation."; encapsulation.";
} }
leaf-list trace-type { leaf-list trace-type {
type ioam-trace-type; type ioam-trace-type;
description description
"The trace type is only defined at the encapsulation "The trace type is only defined at the encapsulation
node."; node.";
} }
} }
leaf max-length { leaf max-length {
when "derived-from-or-self(../node-action, when "derived-from-or-self(../node-action,
'ioam:action-encapsulate')"; 'ioam:action-encapsulate')";
type uint32; type uint32;
units bytes; units "bytes";
description description
"This field specifies the maximum length of the node data "This field specifies the maximum length of the node data
list in octets. 'max-length' is only defined at the list in octets. 'max-length' is only defined at the
encapsulation node."; encapsulation node.";
} }
} }
grouping ioam-incremental-tracing-profile { grouping ioam-incremental-tracing-profile {
description description
"A grouping for the Incremental Tracing Profile."; "A grouping for the Incremental Tracing Profile.";
skipping to change at line 490 skipping to change at line 477
description description
"This field specifies the maximum length of the node data "This field specifies the maximum length of the node data
list in octets. 'max-length' is only defined at the list in octets. 'max-length' is only defined at the
encapsulation node."; encapsulation node.";
} }
} }
grouping ioam-incremental-tracing-profile { grouping ioam-incremental-tracing-profile {
description description
"A grouping for the Incremental Tracing Profile."; "A grouping for the Incremental Tracing Profile.";
leaf node-action { leaf node-action {
type ioam-node-action; type ioam-node-action;
default action-transit; default "action-transit";
description description
"This object indicates the action the node needs to "This object indicates the action the node needs to
take, e.g., encapsulation."; take, e.g., encapsulation.";
} }
uses encap-tracing { uses encap-tracing {
when "derived-from-or-self(node-action, when "derived-from-or-self(node-action,
'ioam:action-encapsulate')"; 'ioam:action-encapsulate')";
} }
} }
grouping ioam-preallocated-tracing-profile { grouping ioam-preallocated-tracing-profile {
description description
"A grouping for the Pre-allocated Tracing Profile."; "A grouping for the Pre-allocated Tracing Profile.";
leaf node-action { leaf node-action {
type ioam-node-action; type ioam-node-action;
default action-transit; default "action-transit";
description description
"This object indicates the action the node needs to "This object indicates the action the node needs to
take, e.g., encapsulation."; take, e.g., encapsulation.";
} }
uses encap-tracing { uses encap-tracing {
when "derived-from-or-self(node-action, when "derived-from-or-self(node-action,
'ioam:action-encapsulate')"; 'ioam:action-encapsulate')";
} }
} }
grouping ioam-direct-export-profile { grouping ioam-direct-export-profile {
description description
"A grouping for the Direct Export Profile."; "A grouping for the Direct Export Profile.";
leaf node-action { leaf node-action {
type ioam-node-action; type ioam-node-action;
default action-transit; default "action-transit";
description description
"This object indicates the action the node needs to "This object indicates the action the node needs to
take, e.g., encapsulation."; take, e.g., encapsulation.";
} }
uses encap-tracing { uses encap-tracing {
when "derived-from-or-self(node-action, when "derived-from-or-self(node-action,
'ioam:action-encapsulate')"; 'ioam:action-encapsulate')";
} }
leaf flow-id { leaf flow-id {
when "derived-from-or-self(../node-action, when "derived-from-or-self(../node-action,
'ioam:action-encapsulate')"; 'ioam:action-encapsulate')";
type uint32; type uint32;
description description
"A 32-bit flow identifier. The field is set at the "A 32-bit flow identifier. The field is set at the
encapsulating node. The Flow ID can be uniformly encapsulating node. The Flow ID can be uniformly
assigned by a central controller or algorithmically assigned by a central controller or algorithmically
generated by the encapsulating node. The latter approach generated by the encapsulating node. The latter approach
cannot guarantee the uniqueness of the Flow ID, yet the cannot guarantee the uniqueness of the Flow ID, yet the
probability of conflict is small due to the large Flow ID probability of conflict is small due to the large Flow ID
space. 'flow-id' is used to correlate the exported data space. 'flow-id' is used to correlate the exported data
of the same flow from multiple nodes and from multiple of the same flow from multiple nodes and from multiple
skipping to change at line 555 skipping to change at line 535
"A 32-bit flow identifier. The field is set at the "A 32-bit flow identifier. The field is set at the
encapsulating node. The Flow ID can be uniformly encapsulating node. The Flow ID can be uniformly
assigned by a central controller or algorithmically assigned by a central controller or algorithmically
generated by the encapsulating node. The latter approach generated by the encapsulating node. The latter approach
cannot guarantee the uniqueness of the Flow ID, yet the cannot guarantee the uniqueness of the Flow ID, yet the
probability of conflict is small due to the large Flow ID probability of conflict is small due to the large Flow ID
space. 'flow-id' is used to correlate the exported data space. 'flow-id' is used to correlate the exported data
of the same flow from multiple nodes and from multiple of the same flow from multiple nodes and from multiple
packets."; packets.";
} }
leaf enable-sequence-number { leaf enable-sequence-number {
when "derived-from-or-self(../node-action, when "derived-from-or-self(../node-action,
'ioam:action-encapsulate')"; 'ioam:action-encapsulate')";
type boolean; type boolean;
default false; default "false";
description description
"This boolean value indicates whether the sequence number "This boolean value indicates whether the sequence number
is used in the direct export option's 32-bit flow is used in the direct export option's 32-bit flow
identifier. If this value is set to 'true', the sequence identifier. If this value is set to 'true', the sequence
number is used. It is turned off by default."; number is used. It is turned off by default.";
} }
} }
grouping ioam-e2e-profile { grouping ioam-e2e-profile {
description description
skipping to change at line 572 skipping to change at line 551
"This boolean value indicates whether the sequence number "This boolean value indicates whether the sequence number
is used in the direct export option's 32-bit flow is used in the direct export option's 32-bit flow
identifier. If this value is set to 'true', the sequence identifier. If this value is set to 'true', the sequence
number is used. It is turned off by default."; number is used. It is turned off by default.";
} }
} }
grouping ioam-e2e-profile { grouping ioam-e2e-profile {
description description
"A grouping for the Edge-to-Edge Profile."; "A grouping for the Edge-to-Edge Profile.";
leaf node-action { leaf node-action {
type ioam-node-action; type ioam-node-action;
default action-transit; default "action-transit";
description description
"This object indicates the action the node needs to "This object indicates the action the node needs to
take, e.g., encapsulation."; take, e.g., encapsulation.";
} }
container e2e-types { container e2e-types {
when "derived-from-or-self(../node-action, when "derived-from-or-self(../node-action,
'ioam:action-encapsulate')"; 'ioam:action-encapsulate')";
description description
"This container provides the list of edge-to-edge types "This container provides the list of edge-to-edge types
for encapsulation."; for encapsulation.";
leaf use-namespace { leaf use-namespace {
type ioam-namespace; type ioam-namespace;
default default-namespace; default "default-namespace";
description description
"This object indicates the namespace used for "This object indicates the namespace used for
encapsulation."; encapsulation.";
} }
leaf-list e2e-type { leaf-list e2e-type {
type ioam-e2e-type; type ioam-e2e-type;
description description
"The edge-to-edge type is only defined at the "The edge-to-edge type is only defined at the
encapsulation node."; encapsulation node.";
} }
} }
} }
grouping ioam-admin-config { grouping ioam-admin-config {
skipping to change at line 609 skipping to change at line 583
description description
"The edge-to-edge type is only defined at the "The edge-to-edge type is only defined at the
encapsulation node."; encapsulation node.";
} }
} }
} }
grouping ioam-admin-config { grouping ioam-admin-config {
description description
"IOAM top-level administrative configuration."; "IOAM top-level administrative configuration.";
leaf enabled { leaf enabled {
type boolean; type boolean;
default false; default "false";
description description
"This object is used to control the availability of "This object is used to control the availability of
configuration. It MUST be set to 'true' before anything configuration. It MUST be set to 'true' before anything
in the /ioam/profiles/profile subtree can be edited. in the /ioam/profiles/profile subtree can be edited.
If 'false', any configuration in place is not used."; If 'false', any configuration in place is not used.";
} }
} }
/* /*
* DATA NODES * DATA NODES
*/ */
container ioam { container ioam {
description description
"IOAM top-level container."; "IOAM top-level container.";
container info { container info {
config false; config false;
description description
"Describes information, such as units or timestamp format, "Describes information, such as units or timestamp format,
that assists monitoring systems in the interpretation of that assists monitoring systems in the interpretation of
the IOAM data."; the IOAM data.";
leaf timestamp-type { leaf timestamp-type {
type identityref { type identityref {
base lime:timestamp-type; base lime:timestamp-type;
} }
description description
"Type of timestamp, such as Truncated PTP (Precision "Type of timestamp, such as Truncated PTP (Precision
Time Protocol) or NTP."; Time Protocol) or NTP.";
} }
list available-interface { list available-interface {
key "if-name"; key "if-name";
description description
"A list of available interfaces that support IOAM."; "A list of available interfaces that support IOAM.";
leaf if-name { leaf if-name {
type if:interface-ref; type if:interface-ref;
description description
"This is a reference to the interface name."; "This is a reference to the interface name.";
} }
} }
skipping to change at line 656 skipping to change at line 626
key "if-name"; key "if-name";
description description
"A list of available interfaces that support IOAM."; "A list of available interfaces that support IOAM.";
leaf if-name { leaf if-name {
type if:interface-ref; type if:interface-ref;
description description
"This is a reference to the interface name."; "This is a reference to the interface name.";
} }
} }
} }
container admin-config { container admin-config {
description description
"Contains all the administrative configurations related to "Contains all the administrative configurations related to
the IOAM functionalities and all the IOAM profiles."; the IOAM functionalities and all the IOAM profiles.";
uses ioam-admin-config; uses ioam-admin-config;
} }
container profiles { container profiles {
description description
"Contains a list of IOAM profiles."; "Contains a list of IOAM profiles.";
list profile { list profile {
key "profile-name"; key "profile-name";
description description
"A list of IOAM profiles that are configured on the "A list of IOAM profiles that are configured on the
node. There is no mandatory type of profile (e.g., node. There is no mandatory type of profile (e.g.,
'incremental-trace', 'preallocated-trace') in the list. 'incremental-trace', 'preallocated-trace') in the list.
But at least one profile should be added."; But at least one profile should be added.";
leaf profile-name { leaf profile-name {
type string{ type string {
length "1..300"; length "1..300";
} }
description description
"Unique identifier for each IOAM profile."; "Unique identifier for each IOAM profile.";
} }
container filter { container filter {
uses ioam-filter; uses ioam-filter;
description description
"The filter that is used to indicate the flow to apply "The filter that is used to indicate the flow to apply
IOAM."; IOAM.";
} }
leaf protocol-type { leaf protocol-type {
type ioam-protocol-type; type ioam-protocol-type;
description description
"This object is used to indicate the carrier protocol "This object is used to indicate the carrier protocol
where IOAM is applied."; where IOAM is applied.";
} }
container incremental-tracing-profile { container incremental-tracing-profile {
if-feature incremental-trace; if-feature "incremental-trace";
presence "Enables the incremental tracing option."; presence "Enables the incremental tracing option.";
description description
"This container describes the profile for the "This container describes the profile for the
incremental tracing option."; incremental tracing option.";
uses ioam-incremental-tracing-profile; uses ioam-incremental-tracing-profile;
} }
container preallocated-tracing-profile { container preallocated-tracing-profile {
if-feature preallocated-trace; if-feature "preallocated-trace";
presence "Enables the pre-allocated tracing option."; presence "Enables the pre-allocated tracing option.";
description description
"This container describes the profile for the "This container describes the profile for the
pre-allocated tracing option."; pre-allocated tracing option.";
uses ioam-preallocated-tracing-profile; uses ioam-preallocated-tracing-profile;
} }
container direct-export-profile { container direct-export-profile {
if-feature direct-export; if-feature "direct-export";
presence "Enables the direct export option."; presence "Enables the direct export option.";
description description
"This container describes the profile for the "This container describes the profile for the
direct export option."; direct export option.";
uses ioam-direct-export-profile; uses ioam-direct-export-profile;
} }
container pot-profile { container pot-profile {
if-feature proof-of-transit; if-feature "proof-of-transit";
presence "Enables the proof of transit (POT) option."; presence "Enables the proof of transit (POT) option.";
description description
"This container describes the profile for the "This container describes the profile for the
POT option."; POT option.";
leaf use-namespace { leaf use-namespace {
type ioam-namespace; type ioam-namespace;
default default-namespace; default "default-namespace";
description description
"This object indicates the namespace used for the "This object indicates the namespace used for the
POT types."; POT types.";
} }
leaf pot-type { leaf pot-type {
type ioam-pot-type; type ioam-pot-type;
description description
"The type of a particular POT variant that specifies "The type of a particular POT variant that specifies
the POT data that is included."; the POT data that is included.";
} }
} }
container e2e-profile { container e2e-profile {
if-feature edge-to-edge; if-feature "edge-to-edge";
presence "Enables the edge-to-edge option."; presence "Enables the edge-to-edge option.";
description description
"This container describes the profile for the "This container describes the profile for the
edge-to-edge option."; edge-to-edge option.";
uses ioam-e2e-profile; uses ioam-e2e-profile;
} }
} }
} }
} }
} }
 End of changes. 81 change blocks. 
97 lines changed or deleted 50 lines changed or added

This html diff was produced by rfcdiff 1.48.