rfc9617xml2.original.xml | rfc9617.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='UTF-8'?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | ||||
<?rfc toc="yes"?> | ||||
<?rfc tocompact="yes"?> | ||||
<?rfc tocdepth="3"?> | ||||
<?rfc tocindent="yes"?> | ||||
<?rfc symrefs="yes"?> | ||||
<?rfc sortrefs="yes"?> | ||||
<?rfc comments="yes"?> | ||||
<?rfc inline="yes"?> | ||||
<?rfc compact="yes"?> | ||||
<?rfc subcompact="no"?> | ||||
<rfc category="std" docName="draft-ietf-ippm-ioam-yang-13" ipr="trust200902"> | ||||
<front> | ||||
<title abbrev="YANG Model for IOAM">A YANG Data Model for In-Situ | ||||
OAM</title> | ||||
<author fullname="Tianran Zhou" initials="T." surname="Zhou, Ed."> | <!DOCTYPE rfc [ | |||
<organization>Huawei</organization> | <!ENTITY nbsp " "> | |||
<!ENTITY zwsp "​"> | ||||
<!ENTITY nbhy "‑"> | ||||
<!ENTITY wj "⁠"> | ||||
]> | ||||
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ie | ||||
tf-ippm-ioam-yang-13" number="9617" ipr="trust200902" obsoletes="" updates="" su | ||||
bmissionType="IETF" consensus="true" xml:lang="en" tocInclude="true" tocDepth="3 | ||||
" symRefs="true" sortRefs="true" version="3"> | ||||
<front> | ||||
<title abbrev="YANG Data Model for IOAM">A YANG Data Model for In Situ | ||||
Operations, Administration, and Maintenance (IOAM)</title> | ||||
<seriesInfo name="RFC" value="9617"/> | ||||
<author fullname="Tianran Zhou" initials="T." surname="Zhou" role="editor"> | ||||
<organization>Huawei</organization> | ||||
<address> | <address> | |||
<postal> | <postal> | |||
<street>156 Beiqing Rd.</street> | <street>156 Beiqing Rd.</street> | |||
<city>Beijing</city> | <city>Beijing</city> | |||
<code>100095</code> | <code>100095</code> | |||
<region/> | ||||
<country>China</country> | <country>China</country> | |||
</postal> | </postal> | |||
<email>zhoutianran@huawei.com</email> | <email>zhoutianran@huawei.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Jim Guichard" initials="J." surname="Guichard"> | <author fullname="Jim Guichard" initials="J." surname="Guichard"> | |||
<organization>Futurewei</organization> | <organization>Futurewei</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street/> | ||||
<city/> | ||||
<code/> | ||||
<region/> | ||||
<country>United States of America</country> | <country>United States of America</country> | |||
</postal> | </postal> | |||
<email>james.n.guichard@futurewei.com</email> | <email>james.n.guichard@futurewei.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Frank Brockners" initials="F." surname="Brockners"> | <author fullname="Frank Brockners" initials="F." surname="Brockners"> | |||
<organization>Cisco Systems</organization> | <organization>Cisco Systems</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Hansaallee 249, 3rd Floor</street> | <street>Hansaallee 249, 3rd Floor</street> | |||
<city>Düsseldorf, Nordrhein-Westfalen</city> | ||||
<city>Duesseldorf</city> | ||||
<region>Nordrhein-Westfalen</region> | ||||
<code>40549</code> | <code>40549</code> | |||
<country>Germany</country> | <country>Germany</country> | |||
</postal> | </postal> | |||
<phone/> | ||||
<facsimile/> | ||||
<email>fbrockne@cisco.com</email> | <email>fbrockne@cisco.com</email> | |||
<uri/> | ||||
</address> | </address> | |||
</author> | </author> | |||
<author fullname="Srihari Raghavan" initials="S." surname="Raghavan"> | <author fullname="Srihari Raghavan" initials="S." surname="Raghavan"> | |||
<organization>Cisco Systems</organization> | <organization>Cisco Systems</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>Tril Infopark Sez, Ramanujan IT City</street> | <street>Tril Infopark Sez, Ramanujan IT City</street> | |||
<street>Neville Block, 2nd floor, Old Mahabalipuram Road</street> | <street>Neville Block, 2nd floor, Old Mahabalipuram Road</street> | |||
<city>Chennai</city> | <city>Chennai</city> | |||
<region>Tamil Nadu</region> | <region>Tamil Nadu</region> | |||
<code>600113</code> | <code>600113</code> | |||
<country>India</country> | <country>India</country> | |||
</postal> | </postal> | |||
<phone/> | ||||
<facsimile/> | ||||
<email>srihari@cisco.com</email> | <email>srihari@cisco.com</email> | |||
<uri/> | ||||
</address> | </address> | |||
</author> | </author> | |||
<date month="August" year="2024"/> | ||||
<area>OPS</area> | ||||
<workgroup>ippm</workgroup> | ||||
<date day="01" month="March" year="2024"/> | <keyword>OAM</keyword> | |||
<keyword>Configuration</keyword> | ||||
<workgroup>IPPM</workgroup> | ||||
<abstract> | <abstract> | |||
<t>In-situ Operations, Administration, and Maintenance (IOAM) is an | <t>In situ Operations, Administration, and Maintenance (IOAM) is an | |||
example of an on-path hybrid measurement method. IOAM defines a method | example of an on-path hybrid measurement method. IOAM defines a method | |||
to produce operational and telemetry information that may be exported | for producing operational and telemetry information that may be exported | |||
using the in-band or out-of-band method. RFC9197 and RFC9326 discuss the | using the in-band or out-of-band method. RFCs 9197 and 9326 discuss the | |||
data fields and associated data types for IOAM. This document defines a | data fields and associated data types for IOAM. This document defines a | |||
YANG module for the configuration of IOAM functions.</t> | YANG module for the configuration of IOAM functions.</t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section title="Introduction"> | <section numbered="true" toc="default"> | |||
<t>In-situ Operations, Administration, and Maintenance (IOAM) is an | <name>Introduction</name> | |||
<t>In situ Operations, Administration, and Maintenance (IOAM) is an | ||||
example of an on-path hybrid measurement method. IOAM defines a method | example of an on-path hybrid measurement method. IOAM defines a method | |||
to produce operational and telemetry information that may be exported | for producing operational and telemetry information that may be exported | |||
using the in-band or out-of-band method. The data types and data formats | using the in-band or out-of-band method. The data types and data formats | |||
for IOAM data records have been defined in <xref target="RFC9197"/> and | for IOAM data records have been defined in <xref target="RFC9197" format=" | |||
<xref target="RFC9326"/>. The IOAM data can be embedded in many protocol | default"/> and | |||
encapsulations such as Network Services Header (NSH) and IPv6.</t> | <xref target="RFC9326" format="default"/>. The IOAM data can be embedded i | |||
n many protocol | ||||
encapsulations, such as the Network Service Header (NSH) <xref target="RFC | ||||
9452"/> and IPv6.</t> | ||||
<t>This document defines a data model for the configuration of IOAM | <t>This document defines a data model for the configuration of IOAM | |||
capabilities using the <xref target="RFC7950">YANG data modeling | capabilities using the <xref target="RFC7950" format="default">YANG data m | |||
language</xref>. This YANG model supports five IOAM options, which | odeling | |||
are:</t> | language</xref>. This YANG data model supports five IOAM options, which | |||
are as follows:</t> | ||||
<t><list style="symbols"> | <ul spacing="normal"> | |||
<t><xref target="RFC9197">Incremental Tracing Option </xref></t> | <li> | |||
<t><xref target="RFC9197" format="default">Incremental Trace-Option </ | ||||
<t><xref target="RFC9197">Pre-allocated Tracing Option</xref></t> | xref></t> | |||
</li> | ||||
<t><xref target="RFC9326">Direct Export Option</xref></t> | <li> | |||
<t><xref target="RFC9197" format="default">Pre-allocated Trace-Option< | ||||
<t><xref target="RFC9197">Proof of Transit (PoT) Option</xref></t> | /xref></t> | |||
</li> | ||||
<t><xref target="RFC9197">Edge-to-Edge Option</xref></t> | <li> | |||
</list></t> | <t><xref target="RFC9326" format="default">Direct Export Option</xref> | |||
</t> | ||||
</li> | ||||
<li> | ||||
<t><xref target="RFC9197" format="default">Proof of Transit (POT) Opti | ||||
on</xref></t> | ||||
</li> | ||||
<li> | ||||
<t><xref target="RFC9197" format="default">Edge-to-Edge Option</xref>< | ||||
/t> | ||||
</li> | ||||
</ul> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Conventions used in this document"> | <name>Conventions Used in This Document</name> | |||
<t>The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
"OPTIONAL" in this document are to be interpreted as described in BCP14, | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
<xref target="RFC2119"/>, <xref target="RFC8174"/> when, and only when, | "<bcp14>SHOULD NOT</bcp14>", | |||
they appear in all capitals, as shown here.</t> | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document | ||||
<t>The following terms are defined in <xref target="RFC7950"/> and are | are to be interpreted as described in BCP 14 | |||
used in this specification: <list style="symbols"> | <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only | |||
when, they appear in all capitals, as shown here.</t> | ||||
<t>The following terms are defined in <xref target="RFC7950" format="defau | ||||
lt"/> and are | ||||
used in this specification: </t> | ||||
<ul spacing="normal"> | ||||
<li> | ||||
<t>augment</t> | <t>augment</t> | |||
</li> | ||||
<li> | ||||
<t>data model</t> | <t>data model</t> | |||
</li> | ||||
<li> | ||||
<t>data node</t> | <t>data node</t> | |||
</list>The terminology for describing YANG data models is found in | </li> | |||
<xref target="RFC7950"/>.</t> | </ul> | |||
<t>The terminology for describing YANG data models is found in | ||||
<section anchor="tree-diagrams" title="Tree Diagrams"> | <xref target="RFC7950" format="default"/>.</t> | |||
<section anchor="tree-diagrams" numbered="true" toc="default"> | ||||
<name>Tree Diagrams</name> | ||||
<t>Tree diagrams used in this document follow the notation defined in | <t>Tree diagrams used in this document follow the notation defined in | |||
<xref target="RFC8340"/>.</t> | <xref target="RFC8340" format="default"/>.</t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Design of the IOAM YANG Data Model"> | <name>Design of the IOAM YANG Data Model</name> | |||
<t/> | <section numbered="true" toc="default"> | |||
<name>Overview</name> | ||||
<section title="Overview"> | <t>The IOAM model is organized as a list of profiles, as shown in the | |||
<t>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.</t> | corresponding IOAM information.</t> | |||
<sourcecode type="yangtree"><![CDATA[module: ietf-ioam | ||||
<t><figure> | +--rw ioam | |||
<artwork><![CDATA[module: ietf-ioam | +--ro info | |||
+--rw ioam | | +--ro timestamp-type? identityref | |||
+--ro info | | +--ro available-interface* [if-name] | |||
| +--ro timestamp-type? identityref | | +--ro if-name if:interface-ref | |||
| +--ro available-interface* [if-name] | +--rw admin-config | |||
| +--ro if-name if:interface-ref | | +--rw enabled? boolean | |||
+--rw admin-config | +--rw profiles | |||
| +--rw enabled? boolean | +--rw profile* [profile-name] | |||
+--rw profiles | +--rw profile-name string | |||
+--rw profile* [profile-name] | +--rw filter | |||
+--rw profile-name string | | +--rw filter-type? ioam-filter-type | |||
+--rw filter | | +--rw ace-name? -> /acl:acls/acl/aces/ace/name | |||
| +--rw filter-type? ioam-filter-type | +--rw protocol-type? ioam-protocol-type | |||
| +--rw ace-name? -> /acl:acls/acl/aces/ace/name | +--rw incremental-tracing-profile {incremental-trace}? | |||
+--rw protocol-type? ioam-protocol-type | | ... | |||
+--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}? | |||
| ... | ]]></sourcecode> | |||
+--rw e2e-profile {edge-to-edge}? | <t>The "info" parameter is a container for all the read-only information | |||
...]]></artwork> | that | |||
</figure></t> | ||||
<t>The "info" is a container for all the read-only information that | ||||
assists monitoring systems in the interpretation of the IOAM data.</t> | assists monitoring systems in the interpretation of the IOAM data.</t> | |||
<t>The "enabled" parameter is an administrative configuration. When it i | ||||
<t>The "enabled" is an administrative configuration. When it is set to | s set to | |||
true, IOAM configuration is enabled for the system. Meanwhile, the | "true", IOAM configuration is enabled for the system. Meanwhile, the | |||
IOAM data-plane functionality is enabled.</t> | IOAM data plane functionality is enabled.</t> | |||
<t>The "filter" parameter is used to identify a flow, where the IOAM pro | ||||
<t>The "filter" is used to identify a flow, where the IOAM profile can | file can | |||
apply. There may be multiple filter types. <xref | apply. There may be multiple filter types. <xref target="RFC8519" format | |||
target="RFC8519">ACL</xref> is a common way to specify a flow. Each | ="default">Access Control Lists (ACLs)</xref> provide a common way to specify a | |||
IOAM profile can associate with an ACE(Access Control Entry). IOAM | flow. Each | |||
actions MUST be driven by the accepted packets, when the matched ACE | IOAM profile can associate with an ACE (Access Control Entry). When the | |||
"forwarding" action is "accept".</t> | matched ACE "forwarding" action is "accept", IOAM actions <bcp14>MUST</bcp14> be | |||
driven by the accepted packets.</t> | ||||
<t>The IOAM data can be encapsulated into multiple protocols, e.g., | <t>The IOAM data can be encapsulated into multiple protocols, e.g., | |||
<xref target="RFC9486">IPv6</xref> and <xref | <xref target="RFC9486" format="default">IPv6</xref> and <xref target="RF | |||
target="RFC9452">NSH</xref>. The "protocol-type" is used to indicate | C9452" format="default">the NSH</xref>. The "protocol-type" parameter is used to | |||
where the IOAM is applied. For example, if the "protocol-type" is | indicate | |||
IPv6, the IOAM ingress node will encapsulate the associated flow with | where IOAM is applied. For example, if "protocol-type" is set to | |||
the <xref target="RFC9486">IPv6-IOAM</xref> format.</t> | "ipv6", the IOAM ingress node will encapsulate the associated flow | |||
according to <xref target="RFC9486" format="default"/>.</t> | ||||
<t>In this document, IOAM data includes five encapsulation types, | <t>In this document, IOAM data includes five encapsulation types, | |||
i.e., incremental tracing data, preallocated tracing data, direct | i.e., incremental tracing data, pre-allocated tracing data, direct | |||
export data, proof of transit data and end to end data. In practice, | export data, proof of transit data, and end-to-end data. In practice, | |||
multiple IOAM data types can be encapsulated into the same IOAM | multiple IOAM data types can be encapsulated into the same IOAM | |||
header. The "profile" contains a set of sub-profiles, each of which | header. The "profile" parameter contains a set of sub-profiles, each of which | |||
relates to one encapsulation type. The configured object may not | relates to one encapsulation type. The configured object may not | |||
support all the sub-profiles. The supported sub-profiles are indicated | support all the sub-profiles. The supported sub-profiles are indicated | |||
by 5 defined features, i.e., "incremental-trace", | by five defined features, i.e., "incremental-trace", | |||
"preallocated-trace", "direct-export", "proof-of-transit" and | "preallocated-trace", "direct-export", "proof-of-transit", and | |||
"edge-to-edge".</t> | "edge-to-edge".</t> | |||
<t>This document uses the <xref target="RFC8519" format="default">"ietf- | ||||
<t>This document uses the <xref target="RFC8519">Access Control List | access-control-list" YANG module</xref>, the <xref target="RFC8343" format="defa | |||
YANG module</xref>, the <xref target="RFC8343">Interfaces YANG | ult">"ietf-interfaces" YANG | |||
module</xref> and the <xref target="RFC8532">LIME Time Types YANG | module</xref>, and the <xref target="RFC8532" format="default">"ietf-lim | |||
module</xref>.</t> | e-time-types" YANG module</xref>.</t> | |||
<t>The YANG data model in this document conforms to the Network | ||||
<t>The YANG data model in this document conform to the Network | Management Datastore Architecture (NMDA) defined in <xref target="RFC834 | |||
Management Datastore Architecture (NMDA) defined in <xref | 2" format="default"/>.</t> | |||
target="RFC8342"/>.</t> | ||||
</section> | </section> | |||
<section numbered="true" toc="default" anchor="prealloc-tracing"> | ||||
<section title="Preallocated Tracing Profile"> | <name>Pre-allocated Tracing Profile</name> | |||
<t>The IOAM tracing data is expected to be collected at every node | <t>To ensure visibility into the entire path that a packet takes within | |||
that a packet traverses to ensure visibility into the entire path a | an IOAM domain, the IOAM tracing data is expected to be collected at every node | |||
packet takes within an IOAM domain. The preallocated tracing option | that a packet traverses. The Pre-allocated Trace-Option | |||
will create pre-allocated space for each node to populate its | will create pre-allocated space for each node to populate its | |||
information . The "preallocated-tracing-profile" contains the detailed | information. The "preallocated-tracing-profile" parameter contains the d | |||
information for the preallocated tracing data. The information | etailed | |||
information for the pre-allocated tracing data. This information | ||||
includes:</t> | includes:</t> | |||
<dl spacing="normal"> | ||||
<t><list style="symbols"> | <dt>node-action:</dt><dd>indicates the operation (e.g., encapsulate th | |||
<t>node-action: indicates the operation (e.g., encapsulate IOAM | e IOAM | |||
header, transit the IOAM data, or decapsulate IOAM header) applied | header, transit the IOAM data, or decapsulate the IOAM header) appli | |||
to the dedicated flow.</t> | ed | |||
to the dedicated flow.</dd> | ||||
<t>use-namespace: indicates the namespace used for the trace | <dt>use-namespace:</dt><dd>indicates the namespace used for the trace | |||
types.</t> | types.</dd> | |||
<dt>trace-type:</dt><dd>indicates the per-hop data to be captured by | ||||
<t>trace-type: indicates the per-hop data to be captured by the | IOAM-enabled nodes and included in the node data list.</dd> | |||
IOAM enabled nodes and included in the node data list.</t> | <dt>max-length:</dt><dd>specifies the maximum length of the node data | |||
list | ||||
<t>max-length: specifies the maximum length of the node data list | in octets. "max-length" is only defined at the encapsulation | |||
in octets. The max-length is only defined at the encapsulation | node.</dd> | |||
node.</t> | </dl> | |||
</list><figure align="center"> | <sourcecode type="yangtree"><![CDATA[+--rw preallocated-tracing-profile | |||
<artwork><![CDATA[+--rw preallocated-tracing-profile {preallocated-t | {preallocated-trace}? | |||
race}? | ||||
+--rw node-action? ioam-node-action | +--rw node-action? ioam-node-action | |||
+--rw trace-types | +--rw trace-types | |||
| +--rw use-namespace? ioam-namespace | | +--rw use-namespace? ioam-namespace | |||
| +--rw trace-type* ioam-trace-type | | +--rw trace-type* ioam-trace-type | |||
+--rw max-length? uint32]]></artwork> | +--rw max-length? uint32 | |||
</figure></t> | ]]></sourcecode> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Incremental Tracing Profile"> | <name>Incremental Tracing Profile</name> | |||
<t>The incremental tracing option contains a variable node data fields | <t>The Incremental Trace-Option contains a variable-length list of node | |||
data fields, | ||||
where each node allocates and pushes its node data immediately | where each node allocates and pushes its node data immediately | |||
following the option header. The "incremental-tracing-profile" | following the option header. The "incremental-tracing-profile" parameter | |||
contains the detailed information for the incremental tracing data. | contains the detailed information for the incremental tracing data. | |||
The detailed information is the same as the Preallocated Tracing | This information is the same as that for the Pre-allocated Tracing | |||
Profile.</t> | Profile; see <xref target="prealloc-tracing"/>.</t> | |||
<sourcecode type="yangtree"><![CDATA[+--rw incremental-tracing-profile { | ||||
<t><figure align="center"> | incremental-trace}? | |||
<artwork><![CDATA[+--rw incremental-tracing-profile {incremental-tra | ||||
ce}? | ||||
+--rw node-action? ioam-node-action | +--rw node-action? ioam-node-action | |||
+--rw trace-types | +--rw trace-types | |||
| +--rw use-namespace? ioam-namespace | | +--rw use-namespace? ioam-namespace | |||
| +--rw trace-type* ioam-trace-type | | +--rw trace-type* ioam-trace-type | |||
+--rw max-length? uint32]]></artwork> | +--rw max-length? uint32 | |||
</figure></t> | ]]></sourcecode> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Direct Export Profile"> | <name>Direct Export Profile</name> | |||
<t>The direct export option is used as a trigger for IOAM data to be | <t>The Direct Export Option is used as a trigger for IOAM data to be | |||
directly exported or locally aggregated without being pushed into | directly exported or locally aggregated without being pushed into | |||
in-flight data packets. The "direct-export-profile" contains the | in-flight data packets. The "direct-export-profile" parameter contains t | |||
detailed information for the direct export data. The detailed | he | |||
information is the same as the Preallocated Tracing Profile, but with | detailed information for the direct export data. This | |||
information is the same as that for the Pre-allocated Tracing Profile (< | ||||
xref target="prealloc-tracing"/>), but with | ||||
two more optional variables:</t> | two more optional variables:</t> | |||
<dl spacing="normal"> | ||||
<t><list style="symbols"> | <dt>flow-id:</dt><dd>used to correlate the exported data of the same | |||
<t>flow-id: is used to correlate the exported data of the same | flow from multiple nodes and from multiple packets.</dd> | |||
flow from multiple nodes and from multiple packets.</t> | <dt>enable-sequence-number:</dt><dd>indicates whether the sequence num | |||
ber | ||||
<t>enable-sequence-number: indicates whether the sequence number | is used in the Direct Export Option.</dd> | |||
is used in the direct export option.</t> | </dl> | |||
</list><figure> | <sourcecode type="yangtree"><![CDATA[+--rw direct-export-profile {direct | |||
<artwork><![CDATA[+--rw direct-export-profile {direct-export}? | -export}? | |||
+--rw node-action? ioam-node-action | +--rw node-action? ioam-node-action | |||
+--rw trace-types | +--rw trace-types | |||
| +--rw use-namespace? ioam-namespace | | +--rw use-namespace? ioam-namespace | |||
| +--rw trace-type* ioam-trace-type | | +--rw trace-type* ioam-trace-type | |||
+--rw flow-id? uint32 | +--rw flow-id? uint32 | |||
+--rw enable-sequence-number? boolean]]></artwork> | +--rw enable-sequence-number? boolean | |||
</figure></t> | ]]></sourcecode> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Proof of Transit Profile"> | <name>Proof of Transit Profile</name> | |||
<t>The IOAM Proof of Transit data is to support the path or service | <t>The IOAM proof of transit data is used to support the path or service | |||
function chain verification use cases. The "pot-profile" is intended | function chain verification use cases. The "pot-profile" parameter is in | |||
to contain the detailed information for the proof of transit data. | tended | |||
"use-namespace" indicates the namespace used for the POT types. | to contain the detailed information for the proof of transit data. The | |||
"pot-type" indicates a particular POT variant that specifies the POT | "use-namespace" parameter indicates the namespace used for the POT types | |||
data that is included. There may be several POT types, which have | . | |||
different configuration data. To align with <xref target="RFC9197"/>, | The "pot-type" parameter indicates a particular POT variant that specifi | |||
this document only defines IOAM POT type 0. User need to augment this | es the POT | |||
module for the configuration of a specifc POT type.</t> | data that is included. There may be several POT types, each having | |||
different configuration data. To align with <xref target="RFC9197" forma | ||||
<t><figure align="center"> | t="default"/>, | |||
<artwork><![CDATA[+--rw pot-profile {proof-of-transit}? | this document only defines IOAM POT type 0. Users need to augment this | |||
module for the configuration of a specific POT type.</t> | ||||
<sourcecode type="yangtree"><![CDATA[+--rw pot-profile {proof-of-transit | ||||
}? | ||||
+--rw use-namespace? ioam-namespace | +--rw use-namespace? ioam-namespace | |||
+--rw pot-type? ioam-pot-type]]></artwork> | +--rw pot-type? ioam-pot-type | |||
</figure></t> | ]]></sourcecode> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Edge-to-Edge Profile"> | <name>Edge-to-Edge Profile</name> | |||
<t>The IOAM edge-to-edge option is to carry data that is added by the | <t>The IOAM Edge-to-Edge Option is used to carry data that is added by t | |||
IOAM encapsulating node and interpreted by IOAM decapsulating node. | he | |||
The "e2e-profile" contains the detailed information for the | IOAM encapsulating node and interpreted by the IOAM decapsulating node. | |||
edge-to-edge data. The detailed information includes:</t> | The "e2e-profile" parameter contains the detailed information for the | |||
edge-to-edge data. This information includes:</t> | ||||
<t><list style="symbols"> | <dl spacing="normal"> | |||
<t>node-action is the same semantic as in Section 3.2.</t> | <dt>node-action:</dt><dd>the same semantic as that provided in <xref t | |||
arget="prealloc-tracing"/>.</dd> | ||||
<t>use-namespace: indicate the namespace used for the edge-to-edge | <dt>use-namespace:</dt><dd>indicates the namespace used for the edge-t | |||
types.</t> | o-edge | |||
types.</dd> | ||||
<t>e2e-type: indicates data to be carried from the ingress IOAM | <dt>e2e-type:</dt><dd>indicates data to be carried from the ingress IO | |||
node to the egress IOAM node.</t> | AM | |||
</list><figure align="center"> | node to the egress IOAM node.</dd> | |||
<artwork><![CDATA[+--rw e2e-profile {edge-to-edge}? | </dl> | |||
<sourcecode type="yangtree"><![CDATA[+--rw e2e-profile {edge-to-edge}? | ||||
+--rw node-action? ioam-node-action | +--rw node-action? ioam-node-action | |||
+--rw e2e-types | +--rw e2e-types | |||
+--rw use-namespace? ioam-namespace | +--rw use-namespace? ioam-namespace | |||
+--rw e2e-type* ioam-e2e-type]]></artwork> | +--rw e2e-type* ioam-e2e-type | |||
</figure></t> | ]]></sourcecode> | |||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<name>IOAM YANG Module</name> | ||||
<section title="IOAM YANG Module"> | <t>The "ietf-ioam" module defined in this document imports typedefs from <xref | |||
<t/> | target="RFC8519"/>, <xref target="RFC8343"/>, and <xref target="RFC8532"/>. Thi | |||
s document also references <xref target="RFC9197"/>, <xref target="RFC9326"/>, < | ||||
<t><figure> | xref target="RFC9486"/>, and <xref target="RFC9452"/>.</t> | |||
<artwork><![CDATA[<CODE BEGINS> file "ietf-ioam@2024-03-01.yang" | <sourcecode name="ietf-ioam@2024-07-12.yang" type="yang" markers="true"><! | |||
[CDATA[ | ||||
module ietf-ioam { | module ietf-ioam { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-ioam"; | namespace "urn:ietf:params:xml:ns:yang:ietf-ioam"; | |||
prefix "ioam"; | prefix ioam; | |||
import ietf-access-control-list { | import ietf-access-control-list { | |||
prefix "acl"; | prefix acl; | |||
reference | reference | |||
"RFC 8519: YANG Data Model for Network Access Control | "RFC 8519: YANG Data Model for Network Access Control | |||
Lists (ACLs)"; | Lists (ACLs)"; | |||
} | } | |||
import ietf-interfaces { | import ietf-interfaces { | |||
prefix "if"; | prefix if; | |||
reference | reference | |||
"RFC 8343: A YANG Data Model for Interface Management"; | "RFC 8343: A YANG Data Model for Interface Management"; | |||
} | } | |||
import ietf-lime-time-types { | import ietf-lime-time-types { | |||
prefix "lime"; | prefix lime; | |||
reference | reference | |||
"RFC 8532: Generic YANG Data Model for the Management of | "RFC 8532: Generic YANG Data Model for the Management of | |||
Operations, Administration, and Maintenance (OAM) Protocols | Operations, Administration, and Maintenance (OAM) Protocols | |||
That Use Connectionless Communications"; | That Use Connectionless Communications"; | |||
} | } | |||
organization | organization | |||
"IETF IPPM (IP Performance Metrics) Working Group"; | "IETF IPPM (IP Performance Measurement) Working Group"; | |||
contact | contact | |||
"WG Web: <https://datatracker.ietf.org/wg/ippm> | "WG Web: <https://datatracker.ietf.org/wg/ippm> | |||
WG List: <ippm@ietf.org> | WG List: <mailto:ippm@ietf.org> | |||
Editor: zhoutianran@huawei.com | Editor: Tianran Zhou | |||
Editor: james.n.guichard@futurewei.com | <mailto:zhoutianran@huawei.com> | |||
Editor: fbrockne@cisco.com | Author: Jim Guichard | |||
Editor: srihari@cisco.com"; | <mailto:james.n.guichard@futurewei.com> | |||
Author: Frank Brockners | ||||
<mailto:fbrockne@cisco.com> | ||||
Author: Srihari Raghavan | ||||
<mailto:srihari@cisco.com>"; | ||||
description | description | |||
"This YANG module specifies a vendor-independent data | "This YANG module specifies a vendor-independent data model | |||
model for the In Situ OAM (IOAM). | for In Situ Operations, Administration, and Maintenance | |||
(IOAM). | ||||
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |||
'MAY', and 'OPTIONAL' in this document are to be interpreted as | 'MAY', and 'OPTIONAL' in this document are to be interpreted as | |||
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |||
they appear in all capitals, as shown here. | they appear in all capitals, as shown here. | |||
Copyright (c) 2024 IETF Trust and the persons identified as | Copyright (c) 2024 IETF Trust and the persons identified as | |||
authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
Redistribution and use in source and binary forms, with or | Redistribution and use in source and binary forms, with or | |||
without modification, is permitted pursuant to, and subject to | without modification, is permitted pursuant to, and subject to | |||
the license terms contained in, the Revised BSD License set | the license terms contained in, the Revised BSD License set | |||
forth in Section 4.c of the IETF Trust's Legal Provisions | forth in Section 4.c of the IETF Trust's Legal Provisions | |||
Relating to IETF Documents | Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
This version of this YANG module is part of RFC XXXX | This version of this YANG module is part of RFC 9617; see the | |||
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself | RFC itself for full legal notices."; | |||
for full legal notices."; | ||||
revision 2024-03-01 { | revision 2024-07-12 { | |||
description "Initial revision."; | description | |||
reference "RFC XXXX: A YANG Data Model for In-Situ OAM"; | "Initial revision."; | |||
reference | ||||
"RFC 9617: A YANG Data Model for In Situ Operations, | ||||
Administration, and Maintenance (IOAM)"; | ||||
} | } | |||
/* | /* | |||
* FEATURES | * FEATURES | |||
*/ | */ | |||
feature incremental-trace | feature incremental-trace { | |||
{ | ||||
description | description | |||
"This feature indicated that the incremental tracing option is | "This feature indicates that the Incremental Trace-Option is | |||
supported."; | supported."; | |||
reference "RFC 9197: Data Fields for In-situ OAM"; | reference | |||
"RFC 9197: Data Fields for In Situ Operations, | ||||
Administration, and Maintenance (IOAM)"; | ||||
} | } | |||
feature preallocated-trace | feature preallocated-trace { | |||
{ | ||||
description | description | |||
"This feature indicated that the preallocated tracing option is | "This feature indicates that the Pre-allocated Trace-Option | |||
supported."; | is supported."; | |||
reference "RFC 9197: Data Fields for In-situ OAM"; | reference | |||
"RFC 9197: Data Fields for In Situ Operations, | ||||
Administration, and Maintenance (IOAM)"; | ||||
} | } | |||
feature direct-export | feature direct-export { | |||
{ | ||||
description | description | |||
"This feature indicated that the direct export option is | "This feature indicates that the Direct Export Option is | |||
supported."; | supported."; | |||
reference "RFC 9326: In-situ OAM Direct Exporting"; | reference | |||
"RFC 9326: In Situ Operations, Administration, and | ||||
Maintenance (IOAM) Direct Exporting"; | ||||
} | } | |||
feature proof-of-transit | feature proof-of-transit { | |||
{ | ||||
description | description | |||
"This feature indicated that the proof of transit option is | "This feature indicates that the Proof of Transit Option is | |||
supported"; | supported."; | |||
reference "RFC 9197: Data Fields for In-situ OAM"; | reference | |||
"RFC 9197: Data Fields for In Situ Operations, | ||||
Administration, and Maintenance (IOAM)"; | ||||
} | } | |||
feature edge-to-edge | feature edge-to-edge { | |||
{ | ||||
description | description | |||
"This feature indicated that the edge-to-edge option is | "This feature indicates that the Edge-to-Edge Option is | |||
supported."; | supported."; | |||
reference "RFC 9197: Data Fields for In-situ OAM"; | reference | |||
"RFC 9197: Data Fields for In Situ Operations, | ||||
Administration, and Maintenance (IOAM)"; | ||||
} | } | |||
/* | /* | |||
* IDENTITIES | * IDENTITIES | |||
*/ | */ | |||
identity filter { | identity filter { | |||
description | description | |||
"Base identity to represent a filter. A filter is used to | "Base identity to represent a filter. A filter is used to | |||
specify the flow to apply the IOAM profile. "; | specify the flow to apply the IOAM profile."; | |||
} | } | |||
identity acl-filter { | identity acl-filter { | |||
base filter; | base filter; | |||
description | description | |||
"Apply ACL rules to specify the flow."; | "Apply Access Control List (ACL) rules to specify the | |||
flow."; | ||||
} | } | |||
identity protocol { | identity protocol { | |||
description | description | |||
"Base identity to represent the carrier protocol. It's used to | "Base identity to represent the carrier protocol. It is | |||
indicate what layer and protocol the IOAM data is embedded."; | used to indicate in what layer and protocol the IOAM data | |||
is embedded."; | ||||
} | } | |||
identity ipv6 { | identity ipv6 { | |||
base protocol; | base protocol; | |||
description | description | |||
"The described IOAM data is embedded in IPv6 protocol."; | "The described IOAM data is embedded in IPv6."; | |||
reference | reference | |||
"RFC 9486: In-situ OAM IPv6 Options"; | "RFC 9486: IPv6 Options for In Situ Operations, | |||
Administration, and Maintenance (IOAM)"; | ||||
} | } | |||
identity nsh { | identity nsh { | |||
base protocol; | base protocol; | |||
description | description | |||
"The described IOAM data is embedded in NSH."; | "The described IOAM data is embedded in the Network Service | |||
Header (NSH)."; | ||||
reference | reference | |||
"RFC 9452: Network Service Header (NSH) | "RFC 9452: Network Service Header (NSH) Encapsulation for | |||
Encapsulation for In-situ OAM (IOAM) Data"; | In Situ OAM (IOAM) Data"; | |||
} | } | |||
identity node-action { | identity node-action { | |||
description | description | |||
"Base identity to represent the node actions. It's used to | "Base identity to represent the node actions. It is used to | |||
indicate what action the node will take."; | indicate what action the node will take."; | |||
} | } | |||
identity action-encapsulate { | identity action-encapsulate { | |||
base node-action; | base node-action; | |||
description | description | |||
"It indicates the node is to encapsulate the IOAM packet"; | "This identity indicates that the node is used to | |||
encapsulate the IOAM packet."; | ||||
} | } | |||
identity action-decapsulate { | identity action-decapsulate { | |||
base node-action; | base node-action; | |||
description | description | |||
"It indicates the node is to decapsulate the IOAM packet"; | "This identity indicates that the node is used to | |||
decapsulate the IOAM packet."; | ||||
} | } | |||
identity action-transit { | identity action-transit { | |||
base node-action; | base node-action; | |||
description | description | |||
"It indicates the node is to transit the IOAM packet"; | "This identity indicates that the node is used to transit | |||
the IOAM packet."; | ||||
} | } | |||
identity trace-type { | identity trace-type { | |||
description | description | |||
"Base identity to represent trace types."; | "Base identity to represent trace types."; | |||
} | } | |||
identity trace-hop-lim-node-id { | identity trace-hop-lim-node-id { | |||
base trace-type; | base trace-type; | |||
description | description | |||
"It indicates the presence of Hop_Lim and node_id in the | "This identity indicates the presence of 'Hop_Lim' and | |||
node data."; | 'node_id' in the node data."; | |||
reference | ||||
"RFC 9197: Data Fields for In Situ Operations, | ||||
Administration, and Maintenance (IOAM)"; | ||||
} | } | |||
identity trace-if-id { | identity trace-if-id { | |||
base trace-type; | base trace-type; | |||
description | description | |||
"It indicates presence of ingress_if_id and egress_if_id | "This identity indicates the presence of 'ingress_if_id' and | |||
(short format) in the node data."; | 'egress_if_id' (short format) in the node data."; | |||
reference | ||||
"RFC 9197: Data Fields for In Situ Operations, | ||||
Administration, and Maintenance (IOAM)"; | ||||
} | } | |||
identity trace-timestamp-seconds { | identity trace-timestamp-seconds { | |||
base trace-type; | base trace-type; | |||
description | description | |||
"It indicates presence of timestamp seconds in the node data."; | "This identity indicates the presence of timestamp seconds | |||
in the node data."; | ||||
} | } | |||
identity trace-timestamp-fraction { | identity trace-timestamp-fraction { | |||
base trace-type; | base trace-type; | |||
description | description | |||
"It indicates presence of timestamp fraction in the node | "This identity indicates the presence of a timestamp | |||
data."; | fraction in the node data."; | |||
} | } | |||
identity trace-transit-delay { | identity trace-transit-delay { | |||
base trace-type; | base trace-type; | |||
description | description | |||
"It indicates presence of transit delay in the node data."; | "This identity indicates the presence of transit delay in | |||
the node data."; | ||||
} | } | |||
identity trace-namespace-data { | identity trace-namespace-data { | |||
base trace-type; | base trace-type; | |||
description | description | |||
"It indicates presence of name space specific data (short | "This identity indicates the presence of namespace-specific | |||
format) in the node data."; | data (short format) in the node data."; | |||
} | } | |||
identity trace-queue-depth { | identity trace-queue-depth { | |||
base trace-type; | base trace-type; | |||
description | description | |||
"It indicates presence of queue depth in the node data."; | "This identity indicates the presence of queue depth in the | |||
node data."; | ||||
} | } | |||
identity trace-checksum-complement { | identity trace-checksum-complement { | |||
base trace-type; | base trace-type; | |||
description | description | |||
"It indicates presence of the Checksum Complement node data."; | "This identity indicates the presence of the Checksum | |||
Complement in the node data."; | ||||
reference | ||||
"RFC 9197: Data Fields for In Situ Operations, | ||||
Administration, and Maintenance (IOAM)"; | ||||
} | } | |||
identity trace-hop-lim-node-id-wide { | identity trace-hop-lim-node-id-wide { | |||
base trace-type; | base trace-type; | |||
description | description | |||
"It indicates presence of Hop_Lim and node_id in wide format | "This identity indicates the presence of 'Hop_Lim' and | |||
in the node data."; | 'node_id' (wide format) in the node data."; | |||
} | } | |||
identity trace-if-id-wide { | identity trace-if-id-wide { | |||
base trace-type; | base trace-type; | |||
description | description | |||
"It indicates presence of ingress_if_id and egress_if_id in | "This identity indicates the presence of 'ingress_if_id' and | |||
wide format in the node data."; | 'egress_if_id' (wide format) in the node data."; | |||
} | } | |||
identity trace-namespace-data-wide { | identity trace-namespace-data-wide { | |||
base trace-type; | base trace-type; | |||
description | description | |||
"It indicates presence of IOAM-Namespace specific data in wide | "This identity indicates the presence of | |||
format in the node data."; | IOAM-namespace-specific data (wide format) in the | |||
node data."; | ||||
} | } | |||
identity trace-buffer-occupancy { | identity trace-buffer-occupancy { | |||
base trace-type; | base trace-type; | |||
description | description | |||
"It indicates presence of buffer occupancy in the node data."; | "This identity indicates the presence of buffer occupancy | |||
in the node data."; | ||||
} | } | |||
identity trace-opaque-state-snapshot { | identity trace-opaque-state-snapshot { | |||
base trace-type; | base trace-type; | |||
description | description | |||
"It indicates presence of variable length Opaque State Snapshot | "This identity indicates the presence of the variable-length | |||
field."; | Opaque State Snapshot field."; | |||
} | } | |||
identity pot-type { | identity pot-type { | |||
description | description | |||
"Base identity to represent Proof of Transit (PoT) types."; | "Base identity to represent Proof of Transit (POT) types."; | |||
} | } | |||
identity pot-type-0 { | identity pot-type-0 { | |||
base pot-type; | base pot-type; | |||
description | description | |||
"The IOAM POT Type field value is 0, and POT data is a 16 | "The IOAM field value for the POT type is 0, and POT data is | |||
Octet field to carry data associated to POT procedures."; | a 16-octet field to carry data associated with POT | |||
procedures."; | ||||
} | } | |||
identity e2e-type { | identity e2e-type { | |||
description | description | |||
"Base identity to represent edge-to-edge types."; | "Base identity to represent edge-to-edge types."; | |||
} | } | |||
identity e2e-seq-num-64 { | identity e2e-seq-num-64 { | |||
base e2e-type; | base e2e-type; | |||
description | description | |||
"It indicates presence of a 64-bit sequence number."; | "This identity indicates the presence of a 64-bit | |||
sequence number."; | ||||
} | } | |||
identity e2e-seq-num-32 { | identity e2e-seq-num-32 { | |||
base e2e-type; | base e2e-type; | |||
description | description | |||
"It indicates the presence of a 32-bit sequence number."; | "This identity indicates the presence of a 32-bit | |||
sequence number."; | ||||
} | } | |||
identity e2e-timestamp-seconds { | identity e2e-timestamp-seconds { | |||
base e2e-type; | base e2e-type; | |||
description | description | |||
"It indicates the presence of timestamp seconds representing | "This identity indicates the presence of timestamp seconds | |||
the time at which the packet entered the IOAM-domain."; | representing the time at which the packet entered the | |||
IOAM domain."; | ||||
} | } | |||
identity e2e-timestamp-fraction { | identity e2e-timestamp-fraction { | |||
base e2e-type; | base e2e-type; | |||
description | description | |||
"It indicates the presence of timestamp fraction representing | "This identity indicates the presence of a timestamp | |||
the time at which the packet entered the IOAM-domain."; | fraction representing the time at which the packet entered | |||
the IOAM domain."; | ||||
} | } | |||
identity namespace { | identity namespace { | |||
description | description | |||
"Base identity to represent the Namespace-ID."; | "Base identity to represent the Namespace-ID."; | |||
} | } | |||
identity default-namespace { | identity default-namespace { | |||
base namespace; | base namespace; | |||
description | description | |||
"The Namespace-ID value of 0x0000 is defined as the | "The Namespace-ID value of 0x0000 is defined as the | |||
Default-Namespace-ID and MUST be known to all the nodes | Default-Namespace-ID and MUST be known to all the nodes | |||
implementing IOAM."; | implementing IOAM."; | |||
} | } | |||
/* | /* | |||
* TYPE DEFINITIONS | * TYPE DEFINITIONS | |||
*/ | */ | |||
typedef ioam-filter-type { | typedef ioam-filter-type { | |||
type identityref { | type identityref { | |||
base filter; | base filter; | |||
} | } | |||
description | description | |||
"It specifies a known type of filter."; | "This type specifies a known type of filter."; | |||
} | } | |||
typedef ioam-protocol-type { | typedef ioam-protocol-type { | |||
type identityref { | type identityref { | |||
base protocol; | base protocol; | |||
} | } | |||
description | description | |||
"It specifies a known type of carrier protocol for the IOAM | "This type specifies a known type of carrier protocol for | |||
data."; | the IOAM data."; | |||
} | } | |||
typedef ioam-node-action { | typedef ioam-node-action { | |||
type identityref { | type identityref { | |||
base node-action; | base node-action; | |||
} | } | |||
description | description | |||
"It specifies a known type of node action."; | "This type specifies a known type of node action."; | |||
} | } | |||
typedef ioam-trace-type { | typedef ioam-trace-type { | |||
type identityref { | type identityref { | |||
base trace-type; | base trace-type; | |||
} | } | |||
description | description | |||
"It specifies a known trace type."; | "This type specifies a known trace type."; | |||
} | } | |||
typedef ioam-pot-type { | typedef ioam-pot-type { | |||
type identityref { | type identityref { | |||
base pot-type; | base pot-type; | |||
} | } | |||
description | description | |||
"It specifies a known pot type."; | "This type specifies a known POT type."; | |||
} | } | |||
typedef ioam-e2e-type { | typedef ioam-e2e-type { | |||
type identityref { | type identityref { | |||
base e2e-type; | base e2e-type; | |||
} | } | |||
description | description | |||
"It specifies a known edge-to-edge type."; | "This type specifies a known edge-to-edge type."; | |||
} | } | |||
typedef ioam-namespace { | typedef ioam-namespace { | |||
type identityref { | type identityref { | |||
base namespace; | base namespace; | |||
} | } | |||
description | description | |||
"It specifies the supported namespace."; | "This type specifies the supported namespace."; | |||
} | } | |||
/* | /* | |||
* GROUP DEFINITIONS | * GROUP DEFINITIONS | |||
*/ | */ | |||
grouping ioam-filter { | grouping ioam-filter { | |||
description "A grouping for IOAM filter definition"; | description | |||
"A grouping for IOAM filter definitions."; | ||||
leaf filter-type { | leaf filter-type { | |||
type ioam-filter-type; | type ioam-filter-type; | |||
description "filter type"; | description | |||
"Filter type."; | ||||
} | } | |||
leaf ace-name { | leaf ace-name { | |||
when "derived-from-or-self(../filter-type, 'ioam:acl-filter')"; | when "derived-from-or-self(../filter-type, 'ioam:acl-filter')"; | |||
type leafref { | type leafref { | |||
path "/acl:acls/acl:acl/acl:aces/acl:ace/acl:name"; | path "/acl:acls/acl:acl/acl:aces/acl:ace/acl:name"; | |||
} | } | |||
description "The Access Control Entry name is used to | description | |||
refer to an ACL specification."; | "The Access Control Entry name is used to refer to an ACL | |||
specification."; | ||||
} | } | |||
} | } | |||
grouping encap-tracing { | grouping encap-tracing { | |||
description | description | |||
"A grouping for the generic configuration for | "A grouping for the generic configuration for the | |||
tracing profile."; | tracing profile."; | |||
container trace-types { | container trace-types { | |||
description | description | |||
"It indicates the list of trace types for encapsulation."; | "This container provides the list of trace types for | |||
encapsulation."; | ||||
leaf use-namespace { | leaf use-namespace { | |||
type ioam-namespace; | type ioam-namespace; | |||
default default-namespace; | default "default-namespace"; | |||
description | description | |||
"It indicates the name space used for encapsulation."; | "This object indicates the namespace used for | |||
encapsulation."; | ||||
} | } | |||
leaf-list trace-type { | leaf-list trace-type { | |||
type ioam-trace-type; | type ioam-trace-type; | |||
description | description | |||
"The trace type is only defined at the encapsulation | "The trace type is only defined at the encapsulation | |||
node."; | node."; | |||
} | } | |||
} | } | |||
leaf max-length { | leaf max-length { | |||
when "derived-from-or-self(../node-action, | when "derived-from-or-self(../node-action, | |||
'ioam:action-encapsulate')"; | 'ioam:action-encapsulate')"; | |||
type uint32; | type uint32; | |||
units bytes; | units "bytes"; | |||
description | description | |||
"This field specifies the maximum length of the node data | "This field specifies the maximum length of the node data | |||
list in octets. The max-length is only defined at the | list in octets. 'max-length' is only defined at the | |||
encapsulation node."; | encapsulation node."; | |||
} | } | |||
} | } | |||
grouping ioam-incremental-tracing-profile { | grouping ioam-incremental-tracing-profile { | |||
description | description | |||
"A grouping for incremental tracing profile."; | "A grouping for the Incremental Tracing Profile."; | |||
leaf node-action { | leaf node-action { | |||
type ioam-node-action; | type ioam-node-action; | |||
default action-transit; | default "action-transit"; | |||
description | description | |||
"This object indicates the action the node need to | "This object indicates the action the node needs to | |||
take, e.g. encapsulation."; | take, e.g., encapsulation."; | |||
} | } | |||
uses encap-tracing { | uses encap-tracing { | |||
when "derived-from-or-self(node-action, | when "derived-from-or-self(node-action, | |||
'ioam:action-encapsulate')"; | 'ioam:action-encapsulate')"; | |||
} | } | |||
} | } | |||
grouping ioam-preallocated-tracing-profile { | grouping ioam-preallocated-tracing-profile { | |||
description | description | |||
"A grouping for pre-allocated tracing profile."; | "A grouping for the Pre-allocated Tracing Profile."; | |||
leaf node-action { | leaf node-action { | |||
type ioam-node-action; | type ioam-node-action; | |||
default action-transit; | default "action-transit"; | |||
description | description | |||
"This object indicates the action the node need to | "This object indicates the action the node needs to | |||
take, e.g. encapsulation."; | take, e.g., encapsulation."; | |||
} | } | |||
uses encap-tracing { | uses encap-tracing { | |||
when "derived-from-or-self(node-action, | when "derived-from-or-self(node-action, | |||
'ioam:action-encapsulate')"; | 'ioam:action-encapsulate')"; | |||
} | } | |||
} | } | |||
grouping ioam-direct-export-profile { | grouping ioam-direct-export-profile { | |||
description | description | |||
"A grouping for direct export profile."; | "A grouping for the Direct Export Profile."; | |||
leaf node-action { | leaf node-action { | |||
type ioam-node-action; | type ioam-node-action; | |||
default action-transit; | default "action-transit"; | |||
description | description | |||
"This object indicates the action the node need to | "This object indicates the action the node needs to | |||
take, e.g. encapsulation."; | take, e.g., encapsulation."; | |||
} | } | |||
uses encap-tracing { | uses encap-tracing { | |||
when "derived-from-or-self(node-action, | when "derived-from-or-self(node-action, | |||
'ioam:action-encapsulate')"; | 'ioam:action-encapsulate')"; | |||
} | } | |||
leaf flow-id { | leaf flow-id { | |||
when "derived-from-or-self(../node-action, | when "derived-from-or-self(../node-action, | |||
'ioam:action-encapsulate')"; | 'ioam:action-encapsulate')"; | |||
type uint32; | type uint32; | |||
description | description | |||
"A 32-bit flow identifier. The field is set at the | "A 32-bit flow identifier. The field is set at the | |||
encapsulating node. The Flow ID can be uniformly assigned | encapsulating node. The Flow ID can be uniformly | |||
by a central controller or algorithmically generated by the | assigned by a central controller or algorithmically | |||
encapsulating node. The latter approach cannot guarantee | generated by the encapsulating node. The latter approach | |||
the uniqueness of Flow ID, yet the conflict probability is | cannot guarantee the uniqueness of the Flow ID, yet the | |||
small due to the large Flow ID space. flow-id is used to | probability of conflict is small due to the large Flow ID | |||
correlate the exported data of the same flow from multiple | space. 'flow-id' is used to correlate the exported data | |||
nodes and from multiple packets."; | of the same flow from multiple nodes and from multiple | |||
packets."; | ||||
} | } | |||
leaf enable-sequence-number { | leaf enable-sequence-number { | |||
when "derived-from-or-self(../node-action, | when "derived-from-or-self(../node-action, | |||
'ioam:action-encapsulate')"; | 'ioam:action-encapsulate')"; | |||
type boolean; | type boolean; | |||
default false; | default "false"; | |||
description | description | |||
"This boolean value indicates whether the sequence number is | "This boolean value indicates whether the sequence number | |||
used in the direct export option 32-bit flow identifier. If | is used in the Direct Export Option's 32-bit flow | |||
this value is true, the sequence number is used. By default, | identifier. If this value is set to 'true', the sequence | |||
it's turned off."; | number is used. It is turned off by default."; | |||
} | } | |||
} | } | |||
grouping ioam-e2e-profile { | grouping ioam-e2e-profile { | |||
description | description | |||
"A grouping for edge-to-edge profile."; | "A grouping for the Edge-to-Edge Profile."; | |||
leaf node-action { | leaf node-action { | |||
type ioam-node-action; | type ioam-node-action; | |||
default action-transit; | default "action-transit"; | |||
description | description | |||
"This object indicates the action the node need to | "This object indicates the action the node needs to | |||
take, e.g. encapsulation."; | take, e.g., encapsulation."; | |||
} | } | |||
container e2e-types { | container e2e-types { | |||
when "derived-from-or-self(../node-action, | when "derived-from-or-self(../node-action, | |||
'ioam:action-encapsulate')"; | 'ioam:action-encapsulate')"; | |||
description | description | |||
"It indicates the list of edge-to-edge types for | "This container provides the list of edge-to-edge types | |||
encapsulation."; | for encapsulation."; | |||
leaf use-namespace { | leaf use-namespace { | |||
type ioam-namespace; | type ioam-namespace; | |||
default default-namespace; | default "default-namespace"; | |||
description | description | |||
"It indicates the name space used for encapsulation."; | "This object indicates the namespace used for | |||
encapsulation."; | ||||
} | } | |||
leaf-list e2e-type { | leaf-list e2e-type { | |||
type ioam-e2e-type; | type ioam-e2e-type; | |||
description | description | |||
"The edge-to-edge type is only defined at the encapsulation | "The edge-to-edge type is only defined at the | |||
node."; | encapsulation node."; | |||
} | } | |||
} | } | |||
} | } | |||
grouping ioam-admin-config { | grouping ioam-admin-config { | |||
description | description | |||
"IOAM top-level administrative configuration."; | "IOAM top-level administrative configuration."; | |||
leaf enabled { | leaf enabled { | |||
type boolean; | type boolean; | |||
default false; | default "false"; | |||
description | description | |||
"This object is to control the availability of configuration. | "This object is used to control the availability of | |||
It MUST be true before anything in the | configuration. It MUST be set to 'true' before anything | |||
/ioam/profiles/profile subtree can be edited. | in the /ioam/profiles/profile subtree can be edited. | |||
If false, any configuration in place is not used."; | If 'false', any configuration in place is not used."; | |||
} | } | |||
} | } | |||
/* | /* | |||
* DATA NODES | * DATA NODES | |||
*/ | */ | |||
container ioam { | container ioam { | |||
description "IOAM top level container"; | description | |||
"IOAM top-level container."; | ||||
container info { | container info { | |||
config false; | config false; | |||
description | description | |||
"Describes information such as units or timestamp format that | "Describes information, such as units or timestamp format, | |||
assists monitoring systems in the interpretation of the IOAM | that assists monitoring systems in the interpretation of | |||
data."; | the IOAM data."; | |||
leaf timestamp-type { | leaf timestamp-type { | |||
type identityref { | type identityref { | |||
base lime:timestamp-type; | base lime:timestamp-type; | |||
} | } | |||
description | description | |||
"Type of timestamp, such as Truncated PTP or NTP."; | "Type of timestamp, such as Truncated PTP (Precision | |||
Time Protocol) or NTP."; | ||||
} | } | |||
list available-interface { | list available-interface { | |||
key "if-name"; | key "if-name"; | |||
description | description | |||
"A list of available interfaces that support IOAM."; | "A list of available interfaces that support IOAM."; | |||
leaf if-name { | leaf if-name { | |||
type if:interface-ref; | type if:interface-ref; | |||
description "This is a reference to the Interface name."; | description | |||
"This is a reference to the interface name."; | ||||
} | } | |||
} | } | |||
} | } | |||
container admin-config { | container admin-config { | |||
description | description | |||
"Contains all the administrative configurations related to | "Contains all the administrative configurations related to | |||
the IOAM functionalities and all the IOAM profiles."; | the IOAM functionalities and all the IOAM profiles."; | |||
uses ioam-admin-config; | uses ioam-admin-config; | |||
} | } | |||
container profiles { | container profiles { | |||
description | description | |||
"Contains a list of IOAM profiles."; | "Contains a list of IOAM profiles."; | |||
list profile { | list profile { | |||
key "profile-name"; | key "profile-name"; | |||
description | description | |||
"A list of IOAM profiles that configured on the node. | "A list of IOAM profiles that are configured on the | |||
There is no mandatory type of profile (e.g., | node. There is no mandatory type of profile (e.g., | |||
incremental-trace, preallocated-trace.) in the list. | 'incremental-trace', 'preallocated-trace') in the list. | |||
But at least one profile should be added."; | But at least one profile should be added."; | |||
leaf profile-name { | leaf profile-name { | |||
type string{ | type string { | |||
length "1..300"; | length "1..300"; | |||
} | } | |||
description | description | |||
"Unique identifier for each IOAM profile."; | "Unique identifier for each IOAM profile."; | |||
} | } | |||
container filter { | container filter { | |||
uses ioam-filter; | uses ioam-filter; | |||
description | description | |||
"The filter which is used to indicate the flow to apply | "The filter that is used to indicate the flow to apply | |||
IOAM."; | IOAM."; | |||
} | } | |||
leaf protocol-type { | leaf protocol-type { | |||
type ioam-protocol-type; | type ioam-protocol-type; | |||
description | description | |||
"This item is used to indicate the carrier protocol where | "This object is used to indicate the carrier protocol | |||
the IOAM is applied."; | where IOAM is applied."; | |||
} | } | |||
container incremental-tracing-profile { | container incremental-tracing-profile { | |||
if-feature incremental-trace; | if-feature "incremental-trace"; | |||
presence "Enables incremental tracing option."; | presence "Enables the Incremental Trace-Option."; | |||
description | description | |||
"It describes the profile for incremental tracing | "This container describes the profile for the | |||
option."; | Incremental Trace-Option."; | |||
uses ioam-incremental-tracing-profile; | uses ioam-incremental-tracing-profile; | |||
} | } | |||
container preallocated-tracing-profile { | container preallocated-tracing-profile { | |||
if-feature preallocated-trace; | if-feature "preallocated-trace"; | |||
presence "Enables preallocated tracing option."; | presence "Enables the Pre-allocated Trace-Option."; | |||
description | description | |||
"It describes the profile for preallocated tracing | "This container describes the profile for the | |||
option."; | Pre-allocated Trace-Option."; | |||
uses ioam-preallocated-tracing-profile; | uses ioam-preallocated-tracing-profile; | |||
} | } | |||
container direct-export-profile { | container direct-export-profile { | |||
if-feature direct-export; | if-feature "direct-export"; | |||
presence "Enables direct-export option."; | presence "Enables the Direct Export Option."; | |||
description | description | |||
"It describes the profile for direct-export option"; | "This container describes the profile for the | |||
Direct Export Option."; | ||||
uses ioam-direct-export-profile; | uses ioam-direct-export-profile; | |||
} | } | |||
container pot-profile { | container pot-profile { | |||
if-feature proof-of-transit; | if-feature "proof-of-transit"; | |||
presence "Enables Proof of Transit option."; | presence "Enables the Proof of Transit Option."; | |||
description | description | |||
"It describes the profile for PoT option."; | "This container describes the profile for the | |||
Proof of Transit Option."; | ||||
leaf use-namespace { | leaf use-namespace { | |||
type ioam-namespace; | type ioam-namespace; | |||
default default-namespace; | default "default-namespace"; | |||
description | description | |||
"It indicates the namespace used for the POT types."; | "This object indicates the namespace used for the | |||
POT types."; | ||||
} | } | |||
leaf pot-type { | leaf pot-type { | |||
type ioam-pot-type; | type ioam-pot-type; | |||
description | description | |||
"The type of a particular POT variant that specifies | "The type of a particular POT variant that specifies | |||
the POT data that is included."; | the POT data that is included."; | |||
} | } | |||
} | } | |||
container e2e-profile { | container e2e-profile { | |||
if-feature edge-to-edge; | if-feature "edge-to-edge"; | |||
presence "Enables edge-to-edge option."; | presence "Enables the Edge-to-Edge Option."; | |||
description | description | |||
"It describes the profile for edge-to-edge option."; | "This container describes the profile for the | |||
Edge-to-Edge Option."; | ||||
uses ioam-e2e-profile; | uses ioam-e2e-profile; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
<CODE ENDS>]]></artwork> | ]]></sourcecode> | |||
</figure></t> | ||||
<t/> | ||||
</section> | </section> | |||
<section anchor="Security" numbered="true" toc="default"> | ||||
<section anchor="Security" title="Security Considerations"> | <name>Security Considerations</name> | |||
<t>The YANG module specified in this document defines a schema for data | <t>The YANG module specified in this document defines a schema for data | |||
that is designed to be accessed via network management protocols such as | that is designed to be accessed via network management protocols such | |||
<xref target="RFC6241">NETCONF</xref> or <xref | as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>. | |||
target="RFC8040">RESTCONF</xref>. The lowest NETCONF layer is the secure | The lowest NETCONF layer is the secure transport layer, and the | |||
transport layer, and the mandatory-to-implement secure transport is | mandatory-to-implement secure transport is Secure Shell (SSH) | |||
<xref target="RFC6242">Secure Shell (SSH)</xref>. The lowest RESTCONF | <xref target="RFC6242"/>. The lowest RESTCONF layer is HTTPS, and the | |||
layer is HTTPS, and the mandatory-to-implement secure transport is <xref | mandatory-to-implement secure transport is TLS <xref target="RFC8446"/>.</t | |||
target="RFC8446">TLS</xref>.</t> | > | |||
<t>The Network Configuration Access Control Model (NACM) <xref target= | ||||
<t>The <xref target="RFC8341">Network Configuration Access Control Model | "RFC8341"/> | |||
(NACM)</xref> provides the means to restrict access for particular | provides the means to restrict access for particular NETCONF or RESTCONF us | |||
NETCONF or RESTCONF users to a preconfigured subset of all available | ers | |||
NETCONF or RESTCONF protocol operations and content.</t> | to a preconfigured subset of all available NETCONF or RESTCONF protocol | |||
operations and content.</t> | ||||
<t>There are a number of data nodes defined in this YANG module that are | <t>There are a number of data nodes defined in this YANG module that are | |||
writable/creatable/deletable (i.e., config true, which is the default). | writable/creatable/deletable (i.e., config true, which is the default). The | |||
These data nodes may be considered sensitive or vulnerable in some | se | |||
network environments. Write operations (e.g., edit-config) to these data | data nodes may be considered sensitive or vulnerable in some network | |||
nodes without proper protection can have a negative effect on network | environments. Write operations (e.g., edit-config) to these data nodes with | |||
operations. These are the subtrees and data nodes and their | out | |||
sensitivity/vulnerability:</t> | proper protection can have a negative effect on network operations. These a | |||
re | ||||
<t><list style="symbols"> | the subtrees and data nodes and their sensitivity/vulnerability:</t> | |||
<t>/ioam/admin-config: The items in the container above include the | <dl spacing="normal"> | |||
top level administrative configurations related to the IOAM | <dt>/ioam/admin-config:</dt><dd>The items in the "admin-config" containe | |||
r above include the | ||||
top-level administrative configurations related to the IOAM | ||||
functionalities and all the IOAM profiles. Unexpected changes to | functionalities and all the IOAM profiles. Unexpected changes to | |||
these items could lead to the IOAM function disruption and/or | these items could lead to disruption of IOAM functions and/or | |||
misbehavior of all the IOAM profiles.</t> | misbehaving IOAM profiles.</dd> | |||
</list></t> | <dt>/ioam/profiles/profile:</dt><dd>The entries in the "profile" list ab | |||
ove include the | ||||
<t><list style="symbols"> | ||||
<t>/ioam/profiles/profile: The entries in the list above include the | ||||
whole IOAM profile configurations. Unexpected changes to these | whole IOAM profile configurations. Unexpected changes to these | |||
entries could lead to the mistake of the IOAM behavior for the | entries could lead to incorrect IOAM behavior for the | |||
corresponding flows. Consequently, it will impact the performance | corresponding flows. Consequently, such changes would impact performan | |||
monitoring, data analytics, and the associated reaction to network | ce | |||
services.</t> | monitoring, data analytics, and associated interactions with network | |||
</list></t> | services.</dd> | |||
</dl> | ||||
<t>Some readable data nodes in these YANG modules may be considered | <t>Some of the readable data nodes in this YANG module may be considered | |||
sensitive or vulnerable in some network environments. It is thus | sensitive or vulnerable in some network environments. It is thus important | |||
important to control read access (e.g., via get, get-config, or | to | |||
notification) to these data nodes. These are the subtrees and data nodes | control read access (e.g., via get, get-config, or notification) to these d | |||
and their sensitivity/vulnerability:</t> | ata | |||
nodes. These are the subtrees and data nodes and their | ||||
<t><list style="symbols"> | sensitivity/vulnerability:</t> | |||
<t>/ioam/profiles/profile: The information contained in this subtree | <dl spacing="normal"> | |||
might give information about the services deployed for the | <dt>/ioam/profiles/profile:</dt><dd>The information contained in this su | |||
customers.For instance, a customer might be given access to monitor | btree | |||
their services status. In that example, the customer access should | might reveal information about the services deployed for | |||
customers. For instance, a customer might be given access to monitor | ||||
the status of their services. In this scenario, the customer's access | ||||
should | ||||
be restricted to nodes representing their services so as not to | be restricted to nodes representing their services so as not to | |||
divulge information about the underlying network structure or | divulge information about the underlying network structure or | |||
services.</t> | services.</dd> | |||
</list></t> | </dl> | |||
<t/> | ||||
</section> | ||||
<section anchor="IANA" title="IANA Considerations"> | ||||
<t>RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | ||||
actual RFC number (and remove this note).</t> | ||||
<t>IANA is requested to assign a new URI from the <xref | ||||
target="RFC3688">IETF XML Registry</xref>. The following URI is | ||||
suggested:</t> | ||||
<t><figure> | ||||
<artwork align="left"><![CDATA[ URI: urn:ietf:params:xml:ns:yan | ||||
g:ietf-ioam | ||||
Registrant Contact: The IESG. | ||||
XML: N/A; the requested URI is an XML namespace.]]></artwork> | ||||
</figure></t> | ||||
<t>This document also requests a new YANG module name in the <xref | ||||
target="RFC7950">YANG Module Names registry</xref> with the following | ||||
suggestion:</t> | ||||
<t><figure> | ||||
<artwork align="left"><![CDATA[ name: ietf-ioam | ||||
namespace: urn:ietf:params:xml:ns:yang:ietf-ioam | ||||
prefix: ioam | ||||
reference: RFC XXXX]]></artwork> | ||||
</figure></t> | ||||
</section> | </section> | |||
<section anchor="Acknowledgements" title="Acknowledgements"> | <section anchor="IANA" numbered="true" toc="default"> | |||
<t>For their valuable comments, discussions, and feedback, we wish to | <name>IANA Considerations</name> | |||
acknowledge Greg Mirsky, Reshad Rahman, Tom Petch, Mickey Spiegel, | <t>IANA has registered the following URI in the <xref target="RFC3688" for | |||
Thomas Graf, Alex Huang Feng and Justin Iurman.</t> | mat="default">"IETF XML Registry"</xref>:</t> | |||
<dl spacing="compact"> | ||||
<dt>URI:</dt><dd>urn:ietf:params:xml:ns:yang:ietf-ioam</dd> | ||||
<dt>Registrant Contact:</dt><dd>The IESG.</dd> | ||||
<dt>XML:</dt><dd>N/A; the requested URI is an XML namespace.</dd> | ||||
</dl> | ||||
<t>IANA has registered the following YANG module in the <xref target="RFC6 | ||||
020" format="default">"YANG Module Names" registry</xref>:</t> | ||||
<dl spacing="compact"> | ||||
<dt>Name:</dt><dd>ietf-ioam</dd> | ||||
<dt>Namespace:</dt><dd>urn:ietf:params:xml:ns:yang:ietf-ioam</dd> | ||||
<dt>Prefix:</dt><dd>ioam</dd> | ||||
<dt>Reference:</dt><dd>RFC 9617</dd> | ||||
</dl> | ||||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<references title="Normative References"> | <references> | |||
<?rfc include='reference.RFC.2119'?> | <name>Normative References</name> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.211 | ||||
<?rfc include='reference.RFC.8174'?> | 9.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.817 | ||||
<?rfc include='reference.RFC.7950'?> | 4.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.795 | ||||
<?rfc include='reference.RFC.8340'?> | 0.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.602 | ||||
<?rfc include='reference.RFC.8342'?> | 0.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.834 | ||||
<?rfc include='reference.RFC.3688'?> | 0.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.834 | ||||
<?rfc include='reference.RFC.6241'?> | 2.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.368 | ||||
<?rfc include='reference.RFC.8040'?> | 8.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.624 | ||||
<?rfc include='reference.RFC.6242'?> | 1.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.804 | ||||
<?rfc include='reference.RFC.8446'?> | 0.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.624 | ||||
<?rfc include='reference.RFC.8341'?> | 2.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.844 | ||||
<?rfc include='reference.RFC.8343'?> | 6.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.834 | ||||
<?rfc include='reference.RFC.8519'?> | 1.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.834 | ||||
<?rfc include='reference.RFC.8532'?> | 3.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.851 | ||||
<?rfc include='reference.RFC.9197'?> | 9.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.853 | ||||
<?rfc include='reference.RFC.9326'?> | 2.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.919 | ||||
<?rfc include='reference.RFC.9452'?> | 7.xml"/> | |||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.932 | ||||
6.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.945 | ||||
2.xml"/> | ||||
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.948 | ||||
6.xml"/> | ||||
<?rfc include='reference.RFC.9486'?> | <reference anchor="W3C.REC-xml11-20060816" target="https://www.w3.org/T | |||
R/2006/REC-xml11-20060816"> | ||||
<front> | ||||
<title>Extensible Markup Language (XML) 1.1 (Second Edition) </ti | ||||
tle> | ||||
<author initials="T." surname="Bray" fullname="Tim Bray"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="J." surname="Paoli" fullname="Jean Paoli"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="C. M." surname="Sperberg-McQueen" fullname="Mic | ||||
hael Sperberg-McQueen"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="E." surname="Maler" fullname="Eve Maler"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="F." surname="Yergeau" fullname="François Yergeau" | ||||
> | ||||
<organization/> | ||||
</author> | ||||
<author initials="J." surname="Cowan" fullname="John Cowan"> | ||||
<organization/> | ||||
</author> | ||||
<date month="August" year="2006"/> | ||||
</front> | ||||
<refcontent>W3C Consortium Recommendation REC-xml11-20060816</refcont | ||||
ent> | ||||
</reference> | ||||
</references> | </references> | |||
<section numbered="true" toc="default"> | ||||
<section title="An Example of Incremental Tracing Profile"> | <name>An Example of the Incremental Tracing Profile</name> | |||
<t>An example of incremental tracing profile is depicted in the | <t>An XML example (per <xref target="W3C.REC-xml11-20060816"/>) of the Inc | |||
remental Tracing Profile is depicted in the | ||||
following figure. This configuration is received by an IOAM ingress | following figure. This configuration is received by an IOAM ingress | |||
node. This node encapsulates the IOAM data in IPv6 Hop-by-Hop option | node. This node encapsulates the IOAM data in the IPv6 Hop-by-Hop option | |||
header. The trace type indicates that each on path node need to capture | header. The trace type indicates that each on-path node needs to capture | |||
the transit delay, and add to the IOAM node data list. The incremental | the transit delay and add the data to the IOAM node data list. The increme | |||
tracing data space is variable, however, the node data list must not | ntal | |||
tracing data space is variable; however, the node data list must not | ||||
exceed 512 bytes.</t> | exceed 512 bytes.</t> | |||
<sourcecode name="" type="xml"><![CDATA[<rpc xmlns="urn:ietf:params:xml:ns:netco | ||||
<t><figure> | nf:base:1.0" | |||
<artwork><![CDATA[<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | message-id="101"> | |||
message-id="101"> | ||||
<edit-config> | <edit-config> | |||
<target> | <target> | |||
<candidate/> | <candidate/> | |||
</target> | </target> | |||
<config> | <config> | |||
<ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | |||
<admin-config> | <admin-config> | |||
<enabled>true</enabled> | <enabled>true</enabled> | |||
</admin-config> | </admin-config> | |||
<profiles> | <profiles> | |||
skipping to change at line 1258 ¶ | skipping to change at line 1183 ¶ | |||
<use-namespace>default-namespace</use-namespace> | <use-namespace>default-namespace</use-namespace> | |||
<trace-type>trace-transit-delay</trace-type> | <trace-type>trace-transit-delay</trace-type> | |||
</trace-types> | </trace-types> | |||
<max-length>512</max-length> | <max-length>512</max-length> | |||
</incremental-tracing-profile> | </incremental-tracing-profile> | |||
</profile> | </profile> | |||
</profiles> | </profiles> | |||
</ioam> | </ioam> | |||
</config> | </config> | |||
</edit-config> | </edit-config> | |||
</rpc>]]></artwork> | </rpc> | |||
</figure></t> | ]]></sourcecode> | |||
<t/> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="An Example of Pre-allocated Tracing Profile"> | <name>An Example of the Pre-allocated Tracing Profile</name> | |||
<t>An example of pre-allocated tracing profile is depicted in the | <t>An example of the Pre-allocated Tracing Profile is depicted in the | |||
following figure. This configuration is received by an IOAM ingress | following figure. This configuration is received by an IOAM ingress | |||
node. This node firstly identifies the target flow by using ACL | node. This node first identifies the target flow by using the ACL | |||
"test-acl", and then encapsulates the IOAM data in the NSH header. The | parameter "test-acl" and then encapsulates the IOAM data in the NSH. The | |||
trace type indicates that each on path node need to capture the name | trace type indicates that each on-path node needs to capture the | |||
space specific data in the short format, and add to the IOAM node data | namespace-specific data in short format and add the data to the IOAM node | |||
list. This node preallocates the node data list in the packect with 512 | data | |||
list. This node pre-allocates the node data list in the packet with 512 | ||||
bytes.</t> | bytes.</t> | |||
<sourcecode name="" type="xml"><![CDATA[<rpc xmlns="urn:ietf:params:xml:ns:netco | ||||
<t><figure> | nf:base:1.0" | |||
<artwork><![CDATA[<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | message-id="101"> | |||
message-id="101"> | ||||
<edit-config> | <edit-config> | |||
<target> | <target> | |||
<candidate/> | <candidate/> | |||
</target> | </target> | |||
<config> | <config> | |||
<ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | |||
<admin-config> | <admin-config> | |||
<enabled>true</enabled> | <enabled>true</enabled> | |||
</admin-config> | </admin-config> | |||
<profiles> | <profiles> | |||
skipping to change at line 1306 ¶ | skipping to change at line 1228 ¶ | |||
<use-namespace>default-namespace</use-namespace> | <use-namespace>default-namespace</use-namespace> | |||
<trace-type>trace-namespace-data</trace-type> | <trace-type>trace-namespace-data</trace-type> | |||
</trace-types> | </trace-types> | |||
<max-length>512</max-length> | <max-length>512</max-length> | |||
</preallocated-tracing-profile> | </preallocated-tracing-profile> | |||
</profile> | </profile> | |||
</profiles> | </profiles> | |||
</ioam> | </ioam> | |||
</config> | </config> | |||
</edit-config> | </edit-config> | |||
</rpc>]]></artwork> | </rpc> | |||
</figure></t> | ]]></sourcecode> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="An Example of Direct Export Profile"> | <name>An Example of the Direct Export Profile</name> | |||
<t>An example of direct export profile is depicted in the following | <t>An example of the Direct Export Profile is depicted in the following | |||
figure. This configuration is received by an IOAM egress node. This node | figure. This configuration is received by an IOAM egress node. This node | |||
detects the IOAM direct export option in the IPv6 extension header, and | detects the IOAM Direct Export Option in the IPv6 extension header and | |||
removes the option to clean all the IOAM data.</t> | removes the option to clean all the IOAM data.</t> | |||
<sourcecode name="" type="xml"><![CDATA[<rpc xmlns="urn:ietf:params:xml:ns:netco | ||||
<t><figure> | nf:base:1.0" | |||
<artwork><![CDATA[<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | message-id="101"> | |||
message-id="101"> | ||||
<edit-config> | <edit-config> | |||
<target> | <target> | |||
<candidate/> | <candidate/> | |||
</target> | </target> | |||
<config> | <config> | |||
<ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | |||
<admin-config> | <admin-config> | |||
<enabled>true</enabled> | <enabled>true</enabled> | |||
</admin-config> | </admin-config> | |||
<profiles> | <profiles> | |||
skipping to change at line 1339 ¶ | skipping to change at line 1260 ¶ | |||
<profile-name>ietf-test-profile</profile-name> | <profile-name>ietf-test-profile</profile-name> | |||
<protocol-type>ipv6</protocol-type> | <protocol-type>ipv6</protocol-type> | |||
<direct-export-profile> | <direct-export-profile> | |||
<node-action>action-decapsulate</node-action> | <node-action>action-decapsulate</node-action> | |||
</direct-export-profile> | </direct-export-profile> | |||
</profile> | </profile> | |||
</profiles> | </profiles> | |||
</ioam> | </ioam> | |||
</config> | </config> | |||
</edit-config> | </edit-config> | |||
</rpc>]]></artwork> | </rpc> | |||
</figure></t> | ]]></sourcecode> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="An Example of Proof of Transit Profile"> | <name>An Example of the Proof of Transit Profile</name> | |||
<t>The following figure is a simple example of POT option. This | <t>A simple example of the Proof of Transit Profile is depicted in | |||
the following figure. This | ||||
configuration indicates the node to apply POT type 0 with IPv6 | configuration indicates the node to apply POT type 0 with IPv6 | |||
encapsulation.</t> | encapsulation.</t> | |||
<sourcecode name="" type="xml"><![CDATA[<rpc xmlns="urn:ietf:params:xml:ns:netco | ||||
<t><figure> | nf:base:1.0" | |||
<artwork><![CDATA[<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | message-id="101"> | |||
message-id="101"> | ||||
<edit-config> | <edit-config> | |||
<target> | <target> | |||
<candidate/> | <candidate/> | |||
</target> | </target> | |||
<config> | <config> | |||
<ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | |||
<admin-config> | <admin-config> | |||
<enabled>true</enabled> | <enabled>true</enabled> | |||
</admin-config> | </admin-config> | |||
<profiles> | <profiles> | |||
skipping to change at line 1371 ¶ | skipping to change at line 1292 ¶ | |||
<profile-name>ietf-test-profile</profile-name> | <profile-name>ietf-test-profile</profile-name> | |||
<protocol-type>ipv6</protocol-type> | <protocol-type>ipv6</protocol-type> | |||
<pot-profile> | <pot-profile> | |||
<pot-type>pot-type-0</pot-type> | <pot-type>pot-type-0</pot-type> | |||
</pot-profile> | </pot-profile> | |||
</profile> | </profile> | |||
</profiles> | </profiles> | |||
</ioam> | </ioam> | |||
</config> | </config> | |||
</edit-config> | </edit-config> | |||
</rpc>]]></artwork> | </rpc> | |||
</figure></t> | ]]></sourcecode> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="An Example of Edge-to-Edge Profile"> | <name>An Example of the Edge-to-Edge Profile</name> | |||
<t>The following figure shows an example of edge-to-edge option. This | <t>An example of the Edge-to-Edge Profile is depicted in the following fig | |||
ure. | ||||
This | ||||
configuration is received by an IOAM egress node. This node detects the | configuration is received by an IOAM egress node. This node detects the | |||
IOAM edge-to-edge option in the IPv6 extension header, and removes the | IOAM Edge-to-Edge Option in the IPv6 extension header and removes the | |||
option to clean all the IOAM data. As the IOAM egress node, it may | option to clean all the IOAM data. As the IOAM egress node, it may | |||
collect the edge-to-edge data and deliver to the data exporting | collect the edge-to-edge data and deliver it to the data-exporting | |||
process.</t> | process.</t> | |||
<sourcecode name="" type="xml"><![CDATA[<rpc xmlns="urn:ietf:params:xml:ns:netco | ||||
<t><figure> | nf:base:1.0" | |||
<artwork><![CDATA[<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" | message-id="101"> | |||
message-id="101"> | ||||
<edit-config> | <edit-config> | |||
<target> | <target> | |||
<candidate/> | <candidate/> | |||
</target> | </target> | |||
<config> | <config> | |||
<ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | <ioam xmlns="urn:ietf:params:xml:ns:yang:ietf-ioam"> | |||
<admin-config> | <admin-config> | |||
<enabled>true</enabled> | <enabled>true</enabled> | |||
</admin-config> | </admin-config> | |||
<profiles> | <profiles> | |||
skipping to change at line 1406 ¶ | skipping to change at line 1327 ¶ | |||
<profile-name>ietf-test-profile</profile-name> | <profile-name>ietf-test-profile</profile-name> | |||
<protocol-type>ipv6</protocol-type> | <protocol-type>ipv6</protocol-type> | |||
<e2e-profile> | <e2e-profile> | |||
<node-action>action-decapsulate</node-action> | <node-action>action-decapsulate</node-action> | |||
</e2e-profile> | </e2e-profile> | |||
</profile> | </profile> | |||
</profiles> | </profiles> | |||
</ioam> | </ioam> | |||
</config> | </config> | |||
</edit-config> | </edit-config> | |||
</rpc>]]></artwork> | </rpc> | |||
</figure></t> | ]]></sourcecode> | |||
</section> | ||||
<section anchor="Acknowledgements" numbered="false" toc="default"> | ||||
<name>Acknowledgements</name> | ||||
<t>For their valuable comments, discussions, and feedback, we wish to | ||||
acknowledge <contact fullname="Greg Mirsky"/>, <contact fullname="Reshad R | ||||
ahman"/>, <contact fullname="Tom Petch"/>, <contact fullname="Mickey Spiegel"/>, | ||||
<contact fullname="Thomas Graf"/>, <contact fullname="Alex Huang Feng"/>, | ||||
and <contact fullname="Justin Iurman"/>.</t> | ||||
</section> | </section> | |||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 246 change blocks. | ||||
701 lines changed or deleted | 720 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |