| rfc9197xml2.original.xml | rfc9197.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!-- This template is for creating an Internet Draft using xml2rfc, | <!DOCTYPE rfc [ | |||
| which is available here: http://xml.resource.org. --> | <!ENTITY nbsp " "> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <!ENTITY zwsp "​"> | |||
| <!-- One method to get references from the online citation libraries. | <!ENTITY nbhy "‑"> | |||
| There has to be one entity for each item to be referenced. | <!ENTITY wj "⁠"> | |||
| An alternate method (rfc include) is described in the references. --> | ||||
| <!ENTITY RFC7665 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.7665.xml"> | ||||
| <!ENTITY RFC8799 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.8799.xml"> | ||||
| <!ENTITY RFC2119 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.2119.xml"> | ||||
| <!ENTITY RFC8174 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.8174.xml"> | ||||
| <!ENTITY RFC7799 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.7799.xml"> | ||||
| <!ENTITY RFC6830 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.6830.xml"> | ||||
| <!ENTITY RFC7276 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.7276.xml"> | ||||
| <!ENTITY RFC7112 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.7112.xml"> | ||||
| <!ENTITY RFC6833 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.6833.xml"> | ||||
| <!ENTITY RFC2460 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.2460.xml"> | ||||
| <!ENTITY RFC791 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referenc | ||||
| e.RFC.0791.xml"> | ||||
| <!ENTITY RFC6564 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.6564.xml"> | ||||
| <!ENTITY RFC7820 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.7820.xml"> | ||||
| <!ENTITY RFC7821 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.7821.xml"> | ||||
| <!ENTITY RFC8126 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.8126.xml"> | ||||
| <!ENTITY RFC5905 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.5905.xml"> | ||||
| <!ENTITY RFC7384 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.7384.xml"> | ||||
| <!ENTITY RFC8300 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.8300.xml"> | ||||
| <!ENTITY RFC8877 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.8877.xml"> | ||||
| <!ENTITY RFC8899 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.8899.xml"> | ||||
| <!ENTITY RFC8926 SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/bibxml/referen | ||||
| ce.RFC.8926.xml"> | ||||
| <!ENTITY I-D.ietf-ippm-ioam-deployment SYSTEM "http://xml2rfc.tools.ietf.org/pub | ||||
| lic/rfc/bibxml-ids/reference.I-D.ietf-ippm-ioam-deployment.xml"> | ||||
| <!ENTITY I-D.ietf-ippm-ioam-data-integrity SYSTEM "http://xml2rfc.tools.ietf.org | ||||
| /public/rfc/bibxml-ids/reference.I-D.ietf-ippm-ioam-data-integrity.xml"> | ||||
| <!ENTITY I-D.ietf-spring-segment-routing SYSTEM "http://xml2rfc.tools.ietf.org/p | ||||
| ublic/rfc/bibxml-ids/reference.I-D.ietf-spring-segment-routing.xml"> | ||||
| <!ENTITY I-D.previdi-isis-segment-routing-extensions SYSTEM "http://xml2rfc.tool | ||||
| s.ietf.org/public/rfc/bibxml-ids/reference.I-D.previdi-isis-segment-routing-exte | ||||
| nsions.xml"> | ||||
| <!ENTITY I-D.ietf-ippm-6man-pdm-option SYSTEM "http://xml2rfc.tools.ietf.org/pub | ||||
| lic/rfc/bibxml-ids/reference.I-D.ietf-ippm-6man-pdm-option.xml"> | ||||
| <!ENTITY I-D.gont-v6ops-ipv6-ehs-in-real-world SYSTEM "http://xml2rfc.tools.ietf | ||||
| .org/public/rfc/bibxml-ids/reference.I-D.gont-v6ops-ipv6-ehs-in-real-world.xml"> | ||||
| <!ENTITY I-D.brockners-lisp-sr SYSTEM "http://xml2rfc.tools.ietf.org/public/rfc/ | ||||
| bibxml-ids/reference.I-D.brockners-lisp-sr.xml"> | ||||
| <!ENTITY I-D.ietf-6man-segment-routing-header SYSTEM "http://xml2rfc.tools.ietf. | ||||
| org/public/rfc/bibxml-ids/reference.I-D.ietf-6man-segment-routing-header.xml"> | ||||
| <!ENTITY I-D.ietf-nvo3-vxlan-gpe SYSTEM "http://xml2rfc.tools.ietf.org/public/rf | ||||
| c/bibxml-ids/reference.I-D.ietf-nvo3-vxlan-gpe.xml"> | ||||
| <!ENTITY I-D.lapukhov-dataplane-probe SYSTEM "http://xml2rfc.tools.ietf.org/publ | ||||
| ic/rfc/bibxml-ids/reference.I-D.lapukhov-dataplane-probe.xml"> | ||||
| <!ENTITY I-D.spiegel-ippm-ioam-rawexport SYSTEM "http://xml2rfc.tools.ietf.org/p | ||||
| ublic/rfc/bibxml-ids/reference.I-D.spiegel-ippm-ioam-rawexport.xml"> | ||||
| <!ENTITY AFI SYSTEM "http://www.iana.org/assignments/address-family-numbers/addr | ||||
| ess-family-numbers.xml"> | ||||
| ]> | ]> | |||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
| <!-- used by XSLT processors --> | ||||
| <!-- For a complete list and description of processing instructions (PIs), | ||||
| please see http://xml.resource.org/authoring/README.html. --> | ||||
| <!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds | ||||
| might want to use. | ||||
| (Here they are set differently than their defaults in xml2rfc v1.32) --> | ||||
| <?rfc strict="yes" ?> | ||||
| <!-- give errors regarding ID-nits and DTD validation --> | ||||
| <!-- control the table of contents (ToC) --> | ||||
| <?rfc toc="yes"?> | ||||
| <!-- generate a ToC --> | ||||
| <?rfc tocdepth="4"?> | ||||
| <!-- the number of levels of subsections in ToC. default: 3 --> | ||||
| <!-- control references --> | ||||
| <?rfc symrefs="yes"?> | ||||
| <!-- use symbolic references tags, i.e, [RFC2119] instead of [1] --> | ||||
| <?rfc sortrefs="yes" ?> | ||||
| <!-- sort the reference entries alphabetically --> | ||||
| <!-- control vertical white space | ||||
| (using these PIs as follows is recommended by the RFC Editor) --> | ||||
| <?rfc compact="yes" ?> | ||||
| <!-- do not start each main section on a new page --> | ||||
| <?rfc subcompact="no" ?> | ||||
| <!-- keep one blank line between list items --> | ||||
| <!-- end of list of popular I-D processing instructions --> | ||||
| <rfc category="std" docName="draft-ietf-ippm-ioam-data-17" ipr="trust200902"> | ||||
| <!-- ipr="full3978"--> | ||||
| <!-- category values: std, bcp, info, exp, and historic | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-ippm-ioam-da | |||
| ipr values: full3667, noModification3667, noDerivatives3667 | ta-17" number="9197" ipr="trust200902" obsoletes="" updates="" submissionType="I | |||
| you can add the attributes updates="NNNN" and obsoletes="NNNN" | ETF" category="std" consensus="true" xml:lang="en" tocInclude="true" tocDepth="4 | |||
| they will automatically be output with "(if approved)" --> | " symRefs="true" sortRefs="true" version="3"> | |||
| <!-- ***** FRONT MATTER ***** --> | <!-- xml2rfc v2v3 conversion 3.12.0 --> | |||
| <!-- ipr="full3978"--> | ||||
| <front> | <front> | |||
| <!-- The abbreviated title is used in the page header - it is only necessary | <title abbrev="In Situ OAM Data Fields">Data Fields for In Situ | |||
| if the | Operations, Administration, and Maintenance (IOAM)</title> | |||
| full title is longer than 39 characters --> | <seriesInfo name="RFC" value="9197"/> | |||
| <title abbrev="In-situ OAM Data Fields">Data Fields for In-situ | ||||
| OAM</title> | ||||
| <!-- add 'role="editor"' below for the editors if appropriate --> | ||||
| <!-- Another author who claims to be an editor --> | ||||
| <author fullname="Frank Brockners" initials="F." surname="Brockners" role="e ditor"> | <author fullname="Frank Brockners" initials="F." surname="Brockners" role="e ditor"> | |||
| <organization abbrev="Cisco">Cisco Systems, Inc.</organization> | <organization abbrev="Cisco">Cisco Systems, Inc.</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Hansaallee 249, 3rd Floor</street> | <street>Hansaallee 249</street> | |||
| <extaddr>3rd Floor</extaddr> | ||||
| <!-- Reorder these if your country does things differently --> | <city>Duesseldorf</city> | |||
| <extaddr>Nordhein-Westfalen</extaddr> | ||||
| <city>DUESSELDORF</city> | ||||
| <region>NORDRHEIN-WESTFALEN</region> | ||||
| <code>40549</code> | <code>40549</code> | |||
| <country>Germany</country> | <country>Germany</country> | |||
| </postal> | </postal> | |||
| <email>fbrockne@cisco.com</email> | <email>fbrockne@cisco.com</email> | |||
| <!-- uri and facsimile elements may also be added --> | ||||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Shwetha Bhandari" initials="S." surname="Bhandari" role="e ditor"> | <author fullname="Shwetha Bhandari" initials="S." surname="Bhandari" role="e ditor"> | |||
| <organization abbrev="Thoughtspot">Thoughtspot</organization> | <organization abbrev="Thoughtspot">Thoughtspot</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>3rd Floor, Indiqube Orion, 24th Main Rd, Garden Layout, HSR La | <extaddr>3rd Floor</extaddr> | |||
| yout</street> | <extaddr>Indiqube Orion</extaddr> | |||
| <city>Bangalore, KARNATAKA 560 102</city> | <extaddr>Garden Layout</extaddr> | |||
| <extaddr>HSR Layout</extaddr> | ||||
| <street>24th Main Rd</street> | ||||
| <city>Bangalore</city> | ||||
| <region>Karnataka</region> | ||||
| <code> 560 102</code> | ||||
| <country>India</country> | <country>India</country> | |||
| </postal> | </postal> | |||
| <email>shwetha.bhandari@thoughtspot.com</email> | <email>shwetha.bhandari@thoughtspot.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Tal Mizrahi" initials="T." surname="Mizrahi" role="editor" > | <author fullname="Tal Mizrahi" initials="T." surname="Mizrahi" role="editor" > | |||
| <organization abbrev="">Huawei</organization> | <organization>Huawei</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>8-2 Matam</street> | <street>8-2 Matam</street> | |||
| <city>Haifa</city> | <city>Haifa</city> | |||
| <code>3190501</code> | <code>3190501</code> | |||
| <country>Israel</country> | <country>Israel</country> | |||
| </postal> | </postal> | |||
| <email>tal.mizrahi.phd@gmail.com</email> | <email>tal.mizrahi.phd@gmail.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date month="May" year="2022"/> | ||||
| <date day="13" month="December" year="2021"/> | ||||
| <!-- If the month and year are both specified and are the current ones, xml2 | ||||
| rfc will fill | ||||
| in the current day for you. If only the current year is specified, xml2 | ||||
| rfc will fill | ||||
| in the current day and month for you. If the year is not the current one | ||||
| , it is | ||||
| necessary to specify at least a month (xml2rfc assumes day="1" if not sp | ||||
| ecified for the | ||||
| purpose of calculating the expiry date). With drafts it is normally suf | ||||
| ficient to | ||||
| specify just the year. --> | ||||
| <!-- Meta-data Declarations --> | ||||
| <area>tsv</area> | <area>tsv</area> | |||
| <workgroup>ippm</workgroup> | <workgroup>ippm</workgroup> | |||
| <!-- WG name at the upperleft corner of the doc, | ||||
| IETF is fine for individual submissions. | ||||
| If this element is not present, the default is "Network Working Group", | ||||
| which is used by the RFC Editor as a nod to the history of the IETF. -- | ||||
| > | ||||
| <keyword>inband</keyword> | <keyword>inband</keyword> | |||
| <keyword>Telemetry</keyword> | ||||
| <keyword>Telemetry, Tracing,</keyword> | <keyword>Tracing,</keyword> | |||
| <!-- Keywords will be incorporated into HTML output | ||||
| files in a meta tag but they have no effect on text or nroff | ||||
| output. If you submit your draft to the RFC Editor, the | ||||
| keywords will be used for the search engine. --> | ||||
| <abstract> | <abstract> | |||
| <t>In-situ Operations, Administration, and Maintenance (IOAM) records | <t>In situ Operations, Administration, and Maintenance (IOAM) | |||
| operational and telemetry information in the packet while the packet | collects operational and telemetry information in the packet | |||
| traverses a path in the network. This document | while the packet traverses a path between two points in the | |||
| discusses the data fields and associated data types for in-situ OAM. | network. | |||
| In-situ OAM data fields can be encapsulated into a variety of protocols | This document | |||
| such as NSH, Segment Routing, Geneve, or IPv6. | discusses the data fields and associated data types for IOAM. | |||
| In-situ OAM can be used to complement OAM mechanisms based on, | IOAM-Data-Fields can be encapsulated into a variety of | |||
| e.g., ICMP or other types of probe packets.</t> | protocols, such as Network Service Header (NSH), Segment | |||
| Routing, Generic Network Virtualization Encapsulation (Geneve), | ||||
| or IPv6. IOAM can be used to complement OAM mechanisms based | ||||
| on, e.g., ICMP or other types of probe packets.</t> | ||||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section title="Introduction" toc="default"> | <section toc="default" numbered="true"> | |||
| <t>This document defines data fields for "in-situ" Operations, | <name>Introduction</name> | |||
| Administration, and Maintenance (IOAM). In-situ OAM records OAM | <t>This document defines data fields for In situ Operations, | |||
| information within the packet while the packet traverses a particular | Administration, and Maintenance (IOAM). IOAM records OAM | |||
| network domain. The term "in-situ" refers to the fact that the OAM data | information within the packet while the packet traverses a | |||
| is added to the data packets rather than being sent within packets | particular network domain. The term "in situ" refers to the fact | |||
| specifically dedicated to OAM. IOAM is to complement mechanisms such as | that the OAM data is added to the data packets rather than being | |||
| Ping or Traceroute. In terms of "active" or "passive" OAM, "in-situ" OAM | sent within packets specifically dedicated to OAM. IOAM is used | |||
| can be considered a hybrid OAM type. "In-situ" mechanisms do not require | to complement mechanisms, such as Ping or Traceroute. In terms | |||
| extra packets to be sent. IOAM adds information to the already available | of "active" or "passive" OAM, IOAM can be considered a hybrid | |||
| data packets and therefore cannot be considered passive. In terms of the | OAM type. "In situ" mechanisms do not require extra packets to | |||
| classification given in <xref target="RFC7799"/>, IOAM could be portrayed | be sent. IOAM adds information to the already available data | |||
| as Hybrid Type I. IOAM mechanisms can be leveraged where mechanisms | packets and therefore cannot be considered passive. In terms of | |||
| using, e.g., ICMP do not apply or do not offer the desired results, such | the classification given in <xref target="RFC7799" | |||
| as proving that a certain traffic flow takes a pre-defined path, SLA | format="default"/>, IOAM could be portrayed as Hybrid Type | |||
| verification for the data traffic, detailed statistics on traffic | I. IOAM mechanisms can be leveraged where mechanisms using, | |||
| distribution paths in networks that distribute traffic across multiple | e.g., ICMP do not apply or do not offer the desired results, | |||
| paths, or scenarios in which probe traffic is potentially handled | such as proving that a certain traffic flow takes a predefined | |||
| differently from regular data traffic by the network devices.</t> | path, Service Level Agreement (SLA) verification for the data | |||
| traffic, detailed statistics on traffic distribution paths in | ||||
| networks that distribute traffic across multiple paths, or | ||||
| scenarios in which probe traffic is potentially handled | ||||
| differently from regular data traffic by the network | ||||
| devices.</t> | ||||
| <t> The term "in situ OAM" was originally motivated by the use | <t> The term "in situ OAM" was originally motivated by the use | |||
| of OAM related mechanisms that add information into a packet. This | of OAM-related mechanisms that add information into a packet. This | |||
| document uses IOAM as a term defining the IOAM technology. IOAM | document uses IOAM as a term defining the IOAM technology. IOAM | |||
| includes "in-situ" mechanisms, but also mechanisms that could trigger | includes "in situ" mechanisms but also mechanisms that could trigger | |||
| the creation of additional packets dedicated to OAM. | the creation of additional packets dedicated to OAM. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="Conventions" numbered="true" toc="default"> | ||||
| <section title="Contributors"> | <name>Conventions</name> | |||
| <t>This document was the collective effort of several authors. The text | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14 | |||
| and content were contributed by the editors and the co-authors listed | >REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", | |||
| below. The contact information of the co-authors appears at the end of | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED< | |||
| this document.</t> | /bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and | |||
| "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as descri | ||||
| <t><list style="symbols"> | bed in BCP 14 | |||
| <t>Carlos Pignataro</t> | ||||
| <t>Mickey Spiegel</t> | ||||
| <t>Barak Gafni</t> | ||||
| <t>Jennifer Lemon</t> | ||||
| <t>Hannes Gredler</t> | ||||
| <t>John Leddy</t> | ||||
| <t>Stephen Youell</t> | ||||
| <t>David Mozes</t> | ||||
| <t>Petr Lapukhov</t> | ||||
| <t>Remy Chang</t> | ||||
| <t>Daniel Bernier</t> | ||||
| </list></t> | ||||
| </section> | ||||
| <section anchor="Conventions" title="Conventions"> | ||||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
| "OPTIONAL" in this document are to be interpreted as described in BCP 14 | ||||
| <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="d efault"/> | <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="d efault"/> | |||
| when, and only when, they appear in all capitals, as shown here.</t> | when, and only when, they appear in all capitals, as shown here.</t> | |||
| <t>Abbreviations and definitions used in this document:</t> | <t>Abbreviations and definitions used in this document:</t> | |||
| <dl newline="false" spacing="normal" indent="15"> | ||||
| <t><list hangIndent="11" style="hanging"> | <dt>E2E:</dt> | |||
| <t hangText="E2E:">Edge to Edge</t> | <dd>Edge to Edge</dd> | |||
| <dt>Geneve:</dt> | ||||
| <t hangText="Geneve:">Generic Network Virtualization Encapsulation | <dd>Generic Network Virtualization Encapsulation | |||
| <xref target="RFC8926"/></t> | <xref target="RFC8926" format="default"/></dd> | |||
| <dt>IOAM:</dt> | ||||
| <t hangText="IOAM:">In-situ Operations, Administration, and | <dd>In situ Operations, Administration, and | |||
| Maintenance</t> | Maintenance</dd> | |||
| <dt>MTU:</dt> | ||||
| <t hangText="MTU:">Maximum Transmit Unit</t> | <dd>Maximum Transmission Unit</dd> | |||
| <dt>NSH:</dt> | ||||
| <t hangText="NSH:">Network Service Header <xref | <dd>Network Service Header <xref target="RFC8300" format="default"/></dd | |||
| target="RFC8300"/></t> | > | |||
| <dt>OAM:</dt> | ||||
| <t hangText="OAM:">Operations, Administration, and Maintenance</t> | <dd>Operations, Administration, and Maintenance</dd> | |||
| <dt>PMTU:</dt> | ||||
| <t hangText="PMTU:">Path MTU</t> | <dd>Path MTU</dd> | |||
| <dt>POT:</dt> | ||||
| <t hangText="POT:">Proof of Transit</t> | <dd>Proof of Transit</dd> | |||
| <dt>Short format:</dt> | ||||
| <t hangText="Short format:">"Short format" refers to | <dd>refers to | |||
| an IOAM-Data-Field which comprises 4 octets.</t> | an IOAM-Data-Field that comprises 4 octets</dd> | |||
| <dt>SID:</dt> | ||||
| <t hangText="SID:">Segment Identifier</t> | <dd>Segment Identifier</dd> | |||
| <dt>SR:</dt> | ||||
| <t hangText="SR:">Segment Routing</t> | <dd>Segment Routing</dd> | |||
| <dt>VXLAN-GPE:</dt> | ||||
| <t hangText="VXLAN-GPE:">Virtual eXtensible Local Area Network, | <dd>Virtual eXtensible Local Area Network, | |||
| Generic Protocol Extension <xref | Generic Protocol Extension <xref target="I-D.ietf-nvo3-vxlan-gpe" form | |||
| target="I-D.ietf-nvo3-vxlan-gpe"/></t> | at="default"/></dd> | |||
| <dt>Wide format:</dt> | ||||
| <t hangText="Wide format:">"Wide format" refers to | <dd>refers to | |||
| an IOAM-Data-Field which comprises 8 octets.</t> | an IOAM-Data-Field that comprises 8 octets</dd> | |||
| </list></t> | </dl> | |||
| </section> | </section> | |||
| <section anchor="IOAM_scope" numbered="true" toc="default"> | ||||
| <section title="Scope, Applicability, and Assumptions" anchor="IOAM_scope"> | <name>Scope, Applicability, and Assumptions</name> | |||
| <t>IOAM assumes a set of constraints as well as | <t>IOAM assumes a set of constraints as well as | |||
| guiding principles and concepts that go hand in hand with the definition | guiding principles and concepts that go hand in hand with the definition | |||
| of the IOAM data fields. These constraints, guiding principles, and | of the IOAM-Data-Fields. These constraints, guiding principles, and | |||
| concepts are described in this section. A discussion of how IOAM data | concepts are described in this section. A discussion of how IOAM-Data-Fiel | |||
| fields and the associated concepts are applied to an IOAM deployment | ds and the associated concepts are applied to an IOAM deployment | |||
| are out of scope for this document. Please refer to | are out of scope for this document. Please refer to | |||
| <xref target="I-D.ietf-ippm-ioam-deployment"/> for IOAM | <xref target="I-D.ietf-ippm-ioam-deployment" format="default"/> for IOAM | |||
| deployment considerations. | deployment considerations.</t> | |||
| <dl newline="true" spacing="normal"> | ||||
| </t> | <dt>Scope:</dt> | |||
| <dd>This document defines the data fields and associated data | ||||
| <t>Scope: This document defines the data fields and associated data | types for IOAM. The IOAM-Data-Fields can be encapsulated in | |||
| types for in-situ OAM. The in-situ OAM data fields can be encapsulated in | a variety of protocols, including NSH, Segment Routing, Geneve, and IPv6. | |||
| a variety of protocols, including NSH, Segment Routing, Geneve, and IPv6. | Specification details for these different protocols are outside | |||
| Specification details for these different protocols are outside | the scope of this document. It is expected that each such encapsulation | |||
| the scope of this document. It is expected that each such encapsulation | would be specified by an RFC and jointly designed by the working group | |||
| would be specified by an RFC, jointly designed by the working group | that develops or maintains the encapsulation protocol and the IETF IP Per | |||
| that develops or maintains the encapsulation protocol and the IETF IPPM | formance | |||
| working group.</t> | Measurement (IPPM) Working Group.</dd> | |||
| <dt>Domain (or scope) of in situ OAM deployment:</dt> | ||||
| <t>Deployment domain (or scope) of in-situ OAM deployment: IOAM is | <dd>IOAM is focused on "limited domains", as defined in <xref target="RFC | |||
| focused on "limited domains" as defined in <xref target="RFC8799"/>. | 8799" | |||
| For IOAM, a limited domain could for example be an enterprise campus | format="default"/>. | |||
| using physical connections between devices or an overlay network using vir | For IOAM, a limited domain could, for example, be an enterprise campus | |||
| tual | using physical connections between devices or an overlay network using vi | |||
| connections / tunnels for connectivity between said devices. | rtual | |||
| connections/tunnels for connectivity between said devices. | ||||
| A limited domain which uses IOAM may constitute one or multiple | ||||
| "IOAM-domains", each disambiguated through separate namespace identifiers. | ||||
| An IOAM-domain is bounded by its perimeter or edge. IOAM-domains | ||||
| may overlap inside the limited domain. | ||||
| Designers of protocol | ||||
| encapsulations for IOAM specify mechanisms to ensure that IOAM data | ||||
| stays within an IOAM-domain. In addition, the operator of such a domain | ||||
| is expected to put provisions in place to ensure that IOAM data does not | ||||
| leak beyond the edge of an IOAM-domain using, for example, packet | ||||
| filtering methods. The operator SHOULD consider the potential | ||||
| operational impact of IOAM to mechanisms such as ECMP processing (e.g., | ||||
| load-balancing schemes based on packet length could be impacted by the | ||||
| increased packet size due to IOAM), path MTU (i.e., ensure that the MTU | ||||
| of all links within a domain is sufficiently large to support the | ||||
| increased packet size due to IOAM) and ICMP message handling (i.e., in | ||||
| case of IPv6, IOAM support for ICMPv6 Echo Request/Reply is desired | ||||
| which would translate into ICMPv6 extensions to enable IOAM-Data-Fields | ||||
| to be copied from an Echo Request message to an Echo Reply message).</t> | ||||
| <t>IOAM control points: IOAM-Data-Fields are added to or removed from | ||||
| the user traffic by the devices which form the edge of a domain. | ||||
| Devices which form an IOAM-Domain can add, update or remove | ||||
| IOAM-Data-Fields. Edge devices of an IOAM-Domain can be hosts or network | ||||
| devices.</t> | ||||
| <t>Traffic-sets that IOAM is applied to: IOAM can be deployed on all or | ||||
| only on subsets of the user traffic. Using IOAM on a selected set | ||||
| of traffic (e.g., per interface, based on an access control list or flow | ||||
| specification defining a specific set of traffic, etc.) could be useful | ||||
| in deployments where the cost of processing IOAM-Data-Fields by | ||||
| encapsulating, transit, or decapsulating node(s) might be a concern from | ||||
| a performance or operational perspective. Thus limiting the amount of | ||||
| traffic IOAM is applied to could be beneficial in some deployments.</t> | ||||
| <t>Encapsulation independence: The definition of IOAM-Data-Fields is | ||||
| independent from the protocols the IOAM-Data-Fields are encapsulated | ||||
| into. IOAM-Data-Fields can be encapsulated into several encapsulating | ||||
| protocols.</t> | ||||
| <t>Layering: If several encapsulation protocols (e.g., in case of | A limited domain that uses IOAM may constitute one or multiple | |||
| tunneling) are stacked on top of each other, IOAM-Data-Fields could be | "IOAM-Domains", each disambiguated through separate namespace identifiers | |||
| present at multiple layers. The behavior follows the ships-in-the-night | . | |||
| model, i.e., IOAM-Data-Fields in one layer are independent from | An IOAM-Domain is bounded by its perimeter or edge. IOAM-Domains | |||
| IOAM-Data-Fields in another layer. Layering allows operators to | may overlap inside the limited domain. | |||
| instrument the protocol layer they want to measure. The different layers | ||||
| could, but do not have to, share the same IOAM encapsulation | ||||
| mechanisms.</t> | ||||
| <t>IOAM implementation: The definition of the IOAM-Data-Fields take the | Designers of protocol | |||
| specifics of devices with hardware data planes and software data planes | encapsulations for IOAM specify mechanisms to ensure that IOAM data | |||
| into account.</t> | stays within an IOAM-Domain. In addition, the operator of such a domain | |||
| is expected to put provisions in place to ensure that IOAM data does not | ||||
| leak beyond the edge of an IOAM-Domain using, for example, packet | ||||
| filtering methods. The operator <bcp14>SHOULD</bcp14> consider the potent | ||||
| ial | ||||
| operational impact of IOAM to mechanisms, such as ECMP processing (e.g., | ||||
| load-balancing schemes based on packet length could be impacted by the | ||||
| increased packet size due to IOAM), PMTU (i.e., ensure that the MTU | ||||
| of all links within a domain is sufficiently large to support the | ||||
| increased packet size due to IOAM), and ICMP message handling (i.e., in | ||||
| case of IPv6, IOAM support for ICMPv6 echo request/reply is desired, | ||||
| which would translate into ICMPv6 extensions to enable IOAM-Data-Fields | ||||
| to be copied from an echo request message to an echo reply message).</dd> | ||||
| <dt>IOAM control points:</dt> | ||||
| <dd>IOAM-Data-Fields are added to or removed from | ||||
| the user traffic by the devices that form the edge of a domain. | ||||
| Devices that form an IOAM-Domain can add, update, or remove | ||||
| IOAM-Data-Fields. Edge devices of an IOAM-Domain can be hosts or network | ||||
| devices.</dd> | ||||
| <dt>Traffic sets that IOAM is applied to:</dt> | ||||
| <dd>IOAM can be deployed on all or | ||||
| only on subsets of the user traffic. Using IOAM on a selected set | ||||
| of traffic (e.g., per interface, based on an access control list or flow | ||||
| specification defining a specific set of traffic, etc.) could be useful | ||||
| in deployments where the cost of processing IOAM-Data-Fields by | ||||
| encapsulating, transit, or decapsulating nodes might be a concern from | ||||
| a performance or operational perspective. Thus, limiting the amount of | ||||
| traffic IOAM is applied to could be beneficial in some deployments.</dd> | ||||
| <dt>Encapsulation independence:</dt> | ||||
| <dd>The definition of IOAM-Data-Fields is | ||||
| independent from the protocols the IOAM-Data-Fields are encapsulated | ||||
| into. IOAM-Data-Fields can be encapsulated into several encapsulating | ||||
| protocols.</dd> | ||||
| <dt>Layering:</dt> | ||||
| <dd>If several encapsulation protocols (e.g., in case of | ||||
| tunneling) are stacked on top of each other, IOAM-Data-Fields could be | ||||
| present at multiple layers. The behavior follows the "ships-in-the-night" | ||||
| model, i.e., IOAM-Data-Fields in one layer are independent from | ||||
| IOAM-Data-Fields in another layer. Layering allows operators to | ||||
| instrument the protocol layer they want to measure. The different layers | ||||
| could, but do not have to, share the same IOAM encapsulation | ||||
| mechanisms.</dd> | ||||
| <dt>IOAM implementation:</dt> | ||||
| <dd>The definition of the IOAM-Data-Fields takes the | ||||
| specifics of devices with hardware data planes and software data planes | ||||
| into account.</dd> | ||||
| </dl> | ||||
| </section> | </section> | |||
| <section anchor="IOAM_option_format" numbered="true" toc="default"> | ||||
| <section anchor="IOAM_option_format" | <name>IOAM Data-Fields, Types, and Nodes</name> | |||
| title="IOAM Data-Fields, Types, Nodes"> | ||||
| <t>This section details IOAM-related nomenclature and describes data | <t>This section details IOAM-related nomenclature and describes data | |||
| types such as IOAM-Data-Fields, IOAM-Types, IOAM-Namespaces as well as | types, such as IOAM-Data-Fields, IOAM-Types, IOAM-Namespaces, as well as | |||
| the different types of IOAM nodes.</t> | the different types of IOAM nodes.</t> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="IOAM Data-Fields and Option-Types"> | <name>IOAM Data-Fields and Option-Types</name> | |||
| <t>An IOAM-Data-Field is a set of bits with a defined format and | <t>An IOAM-Data-Field is a set of bits with a defined format and | |||
| meaning, which can be stored at a certain place in a packet for the | meaning, which can be stored at a certain place in a packet for the | |||
| purpose of IOAM.</t> | purpose of IOAM.</t> | |||
| <t>To accommodate the different uses of IOAM, IOAM-Data-Fields fall | <t>To accommodate the different uses of IOAM, IOAM-Data-Fields fall | |||
| into different categories. In IOAM, these categories are referred to as | into different categories. In IOAM, these categories are referred to as | |||
| IOAM-Option-Types. A common registry is maintained for | "IOAM-Option-Types". A common registry is maintained for | |||
| IOAM-Option-Types, see <xref target="IOAM-type-registry"/> for | IOAM-Option-Types (see <xref target="IOAM-type-registry" format="default | |||
| details. Corresponding to these IOAM-Option-Types, different | "/> for | |||
| details). Corresponding to these IOAM-Option-Types, different | ||||
| IOAM-Data-Fields are defined.</t> | IOAM-Data-Fields are defined.</t> | |||
| <t>This document defines four IOAM-Option-Types:</t> | ||||
| <t>This document defines four IOAM-Option-Types:<list style="symbols"> | <ul spacing="normal"> | |||
| <t>Pre-allocated Trace Option-Type</t> | <li>Pre-allocated Trace Option-Type</li> | |||
| <li>Incremental Trace Option-Type</li> | ||||
| <t>Incremental Trace Option-Type</t> | <li>POT Option-Type</li> | |||
| <li>E2E Option-Type</li> | ||||
| <t>Proof of Transit (POT) Option-Type</t> | </ul> | |||
| <t>Future IOAM-Option-Types can be allocated by IANA, as described in | ||||
| <t>Edge-to-Edge (E2E) Option-Type</t> | <xref target="IOAM-type-registry" format="default"/>.</t> | |||
| </list></t> | ||||
| <t>Future IOAM-Option-Types can be allocated by IANA, as describe | ||||
| d in | ||||
| <xref target="IOAM-type-registry"/>.</t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="IOAM-Domains and types of IOAM Nodes"> | <name>IOAM-Domains and Types of IOAM Nodes</name> | |||
| <t><xref target="IOAM_scope"/> already mentioned that IOAM is expected t | <t><xref target="IOAM_scope" format="default"/> already mentioned that I | |||
| o be deployed in a limited domain <xref target="RFC8799"/>. | OAM is expected to be deployed in a limited domain <xref target="RFC8799" format | |||
| ="default"/>. | ||||
| One or more IOAM-Option-Types are added to a packet upon entering an | One or more IOAM-Option-Types are added to a packet upon entering an | |||
| IOAM-Domain and are removed from the packet when exiting the domain. | IOAM-Domain and are removed from the packet when exiting the domain. | |||
| Within the IOAM-Domain, the IOAM-Data-Fields MAY be updated by network | Within the IOAM-Domain, the IOAM-Data-Fields <bcp14>MAY</bcp14> be updat ed by network | |||
| nodes that the packet traverses. An IOAM-Domain consists of "IOAM | nodes that the packet traverses. An IOAM-Domain consists of "IOAM | |||
| encapsulating nodes", "IOAM decapsulating nodes" and "IOAM transit | encapsulating nodes", "IOAM decapsulating nodes", and "IOAM transit | |||
| nodes". The role of a node (i.e., encapsulating, transit, | nodes". The role of a node (i.e., encapsulating, transit, and | |||
| decapsulating) is defined within an IOAM-Namespace (see below). A node | decapsulating) is defined within an IOAM-Namespace (see below). A node | |||
| can have different roles in different IOAM-Namespaces.</t> | can have different roles in different IOAM-Namespaces.</t> | |||
| <t>A device that adds at least one IOAM-Option-Type to the packet is | ||||
| <t>A device which adds at least one IOAM-Option-Type to the packet is | called an "IOAM encapsulating node", whereas a device that removes | |||
| called an "IOAM encapsulating node", whereas a device which removes | ||||
| an IOAM-Option-Type is referred to as an "IOAM decapsulating node". | an IOAM-Option-Type is referred to as an "IOAM decapsulating node". | |||
| Nodes within the domain which are aware of IOAM data and | Nodes within the domain that are aware of IOAM data and | |||
| read and/or write and/or process IOAM data | read, write, and/or process IOAM data | |||
| are called "IOAM transit nodes". IOAM | are called "IOAM transit nodes". IOAM | |||
| nodes which add or remove the IOAM-Data-Fields can also update the | nodes that add or remove the IOAM-Data-Fields can also update the | |||
| IOAM-Data-Fields at the same time. Or in other words, IOAM | IOAM-Data-Fields at the same time. Or, in other words, IOAM | |||
| encapsulating or decapsulating nodes can also serve as IOAM transit | encapsulating or decapsulating nodes can also serve as IOAM transit | |||
| nodes at the same time. Note that not every node in an IOAM-domain | nodes at the same time. Note that not every node in an IOAM-Domain | |||
| needs to be an IOAM transit node. For example, a deployment might | needs to be an IOAM transit node. For example, a deployment might | |||
| require that packets traverse a set of firewalls which support IOAM. | require that packets traverse a set of firewalls that support IOAM. | |||
| In that case, only the set of firewall nodes would be IOAM transit | In that case, only the set of firewall nodes would be IOAM transit | |||
| nodes rather than all nodes.</t> | nodes, rather than all nodes.</t> | |||
| <t>An IOAM encapsulating node incorporates one or more | ||||
| <t>An "IOAM encapsulating node" incorporates one or more | IOAM-Option-Types (from the list of IOAM-Types, see <xref target="IOAM-t | |||
| IOAM-Option-Types (from the list of IOAM-Types, see <xref | ype-registry" format="default"/>) into packets that IOAM is enabled for. | |||
| target="IOAM-type-registry"/>) into packets that IOAM is enabled for. | ||||
| If IOAM is enabled for a selected subset of the traffic, the IOAM | If IOAM is enabled for a selected subset of the traffic, the IOAM | |||
| encapsulating node is responsible for applying the IOAM functionality | encapsulating node is responsible for applying the IOAM functionality | |||
| to the selected subset.</t> | to the selected subset.</t> | |||
| <t>An IOAM transit node reads, writes, and/or processes | ||||
| <t>An "IOAM transit node" reads and/or writes and/or processes | ||||
| one or more of the IOAM-Data-Fields. | one or more of the IOAM-Data-Fields. | |||
| If both the Pre-allocated and the Incremental Trace Option-Types are | If both the Pre-allocated and the Incremental Trace Option-Types are | |||
| present in the packet, each IOAM transit node based on configuration and | present in the packet, each IOAM transit node, based on configuration an | |||
| available implementation of IOAM might populate IOAM trace data in | d | |||
| either Pre-allocated or Incremental Trace Option-Type but not both. | available implementation of IOAM, might populate IOAM trace data in | |||
| either a Pre-allocated or Incremental Trace Option-Type but not both. | ||||
| Note that not populating any of the Trace Option-Types is also valid | Note that not populating any of the Trace Option-Types is also valid | |||
| behavior for an IOAM transit node. | behavior for an IOAM transit node. | |||
| A transit node MUST ignore IOAM-Option-Types that it does not | A transit node <bcp14>MUST</bcp14> ignore IOAM-Option-Types that it does | |||
| understand. A transit node MUST NOT add new IOAM-Option-Types to a | not | |||
| packet, MUST NOT remove IOAM-Option-Types from a packet, and | understand. A transit node <bcp14>MUST NOT</bcp14> add new IOAM-Option-T | |||
| MUST NOT change the IOAM-Data-Fields of an IOAM Edge-to-Edge | ypes to a | |||
| packet, <bcp14>MUST NOT</bcp14> remove IOAM-Option-Types from a packet, | ||||
| and | ||||
| <bcp14>MUST NOT</bcp14> change the IOAM-Data-Fields of an IOAM Edge-to-E | ||||
| dge | ||||
| Option-Type.</t> | Option-Type.</t> | |||
| <t>An IOAM decapsulating node removes IOAM-Option-Type(s) from | ||||
| <t>An "IOAM decapsulating node" removes IOAM-Option-Type(s) from | ||||
| packets.</t> | packets.</t> | |||
| <t>The role of an IOAM encapsulating, IOAM transit, or | ||||
| <t>The role of an IOAM-encapsulating, IOAM-transit or | IOAM decapsulating node is always performed within a specific | |||
| IOAM-decapsulating node is always performed within a specific | IOAM-Namespace. This means that an IOAM node that is, e.g., an | |||
| IOAM-Namespace. This means that an IOAM node which is, e.g., an | IOAM decapsulating node for IOAM-Namespace "A" but not for | |||
| IOAM-decapsulating node for IOAM-Namespace "A" but not for | ||||
| IOAM-Namespace "B" will only remove the IOAM-Option-Types for | IOAM-Namespace "B" will only remove the IOAM-Option-Types for | |||
| IOAM-Namespace "A" from the packet. Note that this applies even | IOAM-Namespace "A" from the packet. Note that this applies even | |||
| for IOAM-Option-Types that the node does not understand, for | for IOAM-Option-Types that the node does not understand, for | |||
| example an IOAM-Option-Type other than the four described above, | example, an IOAM-Option-Type other than the four described above, | |||
| that is added in a future revision.</t> | which is added in a future revision.</t> | |||
| <t>IOAM-Namespaces allow for a namespace-specific definition and | <t>IOAM-Namespaces allow for a namespace-specific definition and | |||
| interpretation of IOAM-Data-Fields. An interface-id could for example | interpretation of IOAM-Data-Fields. An interface identifier could, for e xample, | |||
| point to a physical interface (e.g., to understand which physical | point to a physical interface (e.g., to understand which physical | |||
| interface of an aggregated link is used when receiving or transmitting | interface of an aggregated link is used when receiving or transmitting | |||
| a packet) whereas in another case it could refer to a logical | a packet), whereas, in another case, it could refer to a logical | |||
| interface (e.g., in case of tunnels). Please refer to <xref | interface (e.g., in case of tunnels). Please refer to <xref target="ioam | |||
| target="ioam_namespaces"/> for details on IOAM-Namespaces.</t> | _namespaces" format="default"/> for details on IOAM-Namespaces.</t> | |||
| </section> | </section> | |||
| <section anchor="ioam_namespaces" numbered="true" toc="default"> | ||||
| <section anchor="ioam_namespaces" title="IOAM-Namespaces"> | <name>IOAM-Namespaces</name> | |||
| <t>IOAM-Namespaces add further context to IOAM-Option-Types and | <t>IOAM-Namespaces add further context to IOAM-Option-Types and | |||
| associated IOAM-Data-Fields. The IOAM-Option-Types and associated | associated IOAM-Data-Fields. The IOAM-Option-Types and associated | |||
| IOAM-Data-Fields are interpreted as defined in this document, | IOAM-Data-Fields are interpreted as defined in this document, | |||
| regardless of the value of the IOAM-Namespace. However, | regardless of the value of the IOAM-Namespace. However, | |||
| IOAM-Namespaces provide a way to group nodes to | IOAM-Namespaces provide a way to group nodes to | |||
| support different deployment approaches | support different deployment approaches | |||
| of IOAM (see a few example use-cases below). IOAM-Namespaces also | of IOAM (see a few example use cases below). IOAM-Namespaces also | |||
| help to resolve potential issues which can occur due to IOAM-Data | help to resolve potential issues that can occur due to IOAM-Data- | |||
| -Fields not | Fields not | |||
| being globally unique (e.g., IOAM node identifiers do not have to be | being globally unique (e.g., IOAM node identifiers do not have to be | |||
| globally unique). IOAM-Data-Fields significance is always within a | globally unique). | |||
| The significance of IOAM-Data-Fields is always within a | ||||
| particular IOAM-Namespace. Given that IOAM-Data-Fields are always | particular IOAM-Namespace. Given that IOAM-Data-Fields are always | |||
| interpreted the context of a specific namespace, the namespace-id | interpreted as the context of a specific namespace, the Namespace-ID | |||
| field always needs to be carried along with the IOAM data-fields themsel ves.</t> | field always needs to be carried along with the IOAM data-fields themsel ves.</t> | |||
| <t>An IOAM-Namespace is identified by a 16-bit namespace identifier | <t>An IOAM-Namespace is identified by a 16-bit namespace identifier | |||
| (Namespace-ID). The IOAM-Namespace field is included in all the | (Namespace-ID). The IOAM-Namespace field is included in all the | |||
| IOAM-Option-Types defined in this document, and MUST be included | IOAM-Option-Types defined in this document and <bcp14>MUST</bcp14 > be included | |||
| in all future IOAM-Option-Types. The Namespace-ID value is divide d | in all future IOAM-Option-Types. The Namespace-ID value is divide d | |||
| into two sub-ranges:</t> | into two subranges:</t> | |||
| <ul spacing="normal"> | ||||
| <t><list style="symbols"> | <li>an operator-assigned range from 0x0001 to 0x7FFF and</li> | |||
| <t>An operator-assigned range from 0x0001 to 0x7FFF</t> | <li>an IANA-assigned range from 0x8000 to 0xFFFF.</li> | |||
| </ul> | ||||
| <t>An IANA-assigned range from 0x8000 to 0xFFFF</t> | <t>The IANA-assigned range is intended to allow future | |||
| </list>The IANA-assigned range is intended to allow future | ||||
| extensions to have new and interoperable IOAM functionality, while the | extensions to have new and interoperable IOAM functionality, while the | |||
| operator-assigned range is intended to be domain-specific, and managed | operator-assigned range is intended to be domain specific and managed | |||
| by the network operator. The Namespace-ID value of 0x0000 is the | by the network operator. The Namespace-ID value of 0x0000 is the | |||
| "Default-Namespace-ID". The Default-Namespace-ID indicates that n o | "Default-Namespace-ID". The Default-Namespace-ID indicates that n o | |||
| specific namespace is associated with the IOAM data fields in the | specific namespace is associated with the IOAM-Data-Fields in the | |||
| packet. The Default-Namespace-ID MUST be supported by all nodes | packet. The Default-Namespace-ID <bcp14>MUST</bcp14> be supported | |||
| implementing IOAM. A use-case for the Default-Namespace-ID are | by all nodes | |||
| deployments which do not leverage specific namespaces for some or | implementing IOAM. A use case for the Default-Namespace-ID are | |||
| all | deployments that do not leverage specific namespaces for some or | |||
| of their packets that carry IOAM data fields.</t> | all | |||
| of their packets that carry IOAM-Data-Fields.</t> | ||||
| <t>Namespace identifiers allow devices which are IOAM capable to | <t>Namespace identifiers allow devices that are IOAM capable to | |||
| determine:</t> | determine:</t> | |||
| <ul spacing="normal"> | ||||
| <t><list style="symbols"> | <li>whether one or more IOAM-Option-Types need to be processed by a de | |||
| <t>whether IOAM-Option-Type(s) need to be processed by a device: | vice. | |||
| If the Namespace-ID contained in a packet does not match any | If the Namespace-ID contained in a packet does not match any | |||
| Namespace-ID the node is configured to operate on, then the node | Namespace-ID the node is configured to operate on, then the node | |||
| MUST NOT change the contents of the IOAM-Data-Fields.</t> | <bcp14>MUST NOT</bcp14> change the contents of the IOAM-Data-Fields. | |||
| </li> | ||||
| <t>which IOAM-Option-Type needs to be processed/updated in case | <li>which IOAM-Option-Type needs to be processed/updated in case | |||
| there are multiple IOAM-Option-Types present in the packet. | there are multiple IOAM-Option-Types present in the packet. | |||
| Multiple IOAM-Option-Types can be present in a packet in case of | Multiple IOAM-Option-Types can be present in a packet in case of | |||
| overlapping IOAM-Domains or in case of a layered IOAM | overlapping IOAM-Domains or in case of a layered IOAM | |||
| deployment.</t> | deployment.</li> | |||
| <li>whether one or more IOAM-Option-Types have to be removed from the | ||||
| <t>whether IOAM-Option-Type(s) have to be removed from the packet, | packet, | |||
| e.g., at a domain edge or domain boundary.</t> | e.g., at a domain edge or domain boundary.</li> | |||
| </list></t> | </ul> | |||
| <t>IOAM-Namespaces support several different uses:</t> | <t>IOAM-Namespaces support several different uses:</t> | |||
| <ul spacing="normal"> | ||||
| <t><list style="symbols"> | <li>IOAM-Namespaces can be used by an operator to distinguish | |||
| <t>IOAM-Namespaces can be used by an operator to distinguish | different IOAM-Domains. Devices at edges of an IOAM-Domain | |||
| different IOAM-domains. Devices at edges of an IOAM-domain | ||||
| can filter | can filter | |||
| on Namespace-IDs to provide for proper IOAM-domain isolation.</t> | on Namespace-IDs to provide for proper IOAM-Domain isolation.</li> | |||
| <li>IOAM-Namespaces provide additional context for | ||||
| <t>IOAM-Namespaces provide additional context for IOAM-Data-Fields | IOAM-Data-Fields and, thus, can be used to ensure that | |||
| and thus can be used to ensure that IOAM-Data-Fields | IOAM-Data-Fields are unique and are interpreted properly by | |||
| are unique and | management stations or network controllers. The node | |||
| are interpreted properly by management stations or networ | identifier field (node_id, see below) does not need to be | |||
| k | unique in a deployment. This could be the case if an | |||
| controllers. The node identifier field (node_id, see | operator wishes to use different node identifiers for | |||
| below) does not need to be unique in a deployment. | different IOAM layers, even within the same device, or node | |||
| This could be the case if an operator wishes to use | identifiers might not be unique for other organizational | |||
| different node identifiers for different | reasons, such as after a merger of two formerly separated | |||
| IOAM layers, even within the same device or node identifi | organizations. The Namespace-ID can be used as a context | |||
| ers | identifier, such that the combination of node_id and | |||
| might not be unique for other organizational reasons, | Namespace-ID will always be unique.</li> | |||
| such as after a merger of two formerly | <li> | |||
| separated organizations. The Namespace-ID can be used as | ||||
| a context identifier, such that | ||||
| the combination of node_id and Namespace-ID will | ||||
| always be unique.</t> | ||||
| <t> | ||||
| Similarly, IOAM-Namespaces can be used to define how certain | Similarly, IOAM-Namespaces can be used to define how certain | |||
| IOAM-Data-Fields are interpreted: IOAM offers three different | IOAM-Data-Fields are interpreted; IOAM offers three different | |||
| timestamp format options. The Namespace-ID can be used to | timestamp format options. The Namespace-ID can be used to | |||
| determine the timestamp format. IOAM-Data-Fields (e.g., buffer | determine the timestamp format. IOAM-Data-Fields (e.g., buffer | |||
| occupancy) which do not have a unit associated are to be | occupancy) that do not have a unit associated are to be | |||
| interpreted within the context of a IOAM-Namespace.</t> | interpreted within the context of an IOAM-Namespace.</li> | |||
| <li>IOAM-Namespaces can be used to identify different sets of | ||||
| <t>IOAM-Namespaces can be used to identify different sets of | devices (e.g., different types of devices) in a deployment; if an | |||
| devices (e.g., different types of devices) in a deployment: If an | operator wants to insert different IOAM-Data-Fields based on the | |||
| operator desires to insert different IOAM-Data-Fields based on the | ||||
| device, the devices could be grouped into multiple | device, the devices could be grouped into multiple | |||
| IOAM-Namespaces. This could be due to the fact that the IOAM | IOAM-Namespaces. This could be due to the fact that the IOAM | |||
| feature set differs between different sets of devices, or it could | feature set differs between different sets of devices, or it could | |||
| be for reasons of optimized space usage in the packet header. It | be for reasons of optimized space usage in the packet header. It | |||
| could also stem from hardware or operational limitations on the | could also stem from hardware or operational limitations on the | |||
| size of the trace data that can be added and processed, preventing | size of the trace data that can be added and processed, preventing | |||
| collection of a full trace for a flow.</t> | collection of a full trace for a flow.</li> | |||
| <li>By assigning different IOAM | ||||
| <t>By assigning different IOAM | ||||
| Namespace-IDs to different sets of | Namespace-IDs to different sets of | |||
| nodes or network partitions and using a separate instance of | nodes or network partitions and using a separate instance of | |||
| an IOAM-Option-Type for each Namespace-ID, a full trace for a | an IOAM-Option-Type for each Namespace-ID, a full trace for a | |||
| flow could be collected and constructed via partial traces | flow could be collected and constructed via partial traces | |||
| from each IOAM-Option-Type in each of the packets in the flow. | from each IOAM-Option-Type in each of the packets in the flow. | |||
| Example: An operator could choose to group the devices of a | For example, an operator could choose to group the devices of a | |||
| domain into two IOAM-Namespaces, in a way that each | domain into two IOAM-Namespaces in a way that each | |||
| IOAM-Namespace is represented by one of two IOAM-Option-Types | IOAM-Namespace is represented by one of two IOAM-Option-Types | |||
| in the packet. Each node would record data only for the | in the packet. Each node would record data only for the | |||
| IOAM-Namespace that it belongs to, ignoring the other | IOAM-Namespace that it belongs to, ignoring the other | |||
| IOAM-Option-Type with a IOAM-Namespace to which it doesn't | IOAM-Option-Type with an IOAM-Namespace to which it doesn't | |||
| belong. To retrieve a full view of the deployment, the | belong. To retrieve a full view of the deployment, the | |||
| captured IOAM-Data-Fields of the two IOAM-Namespaces need to | captured IOAM-Data-Fields of the two IOAM-Namespaces need to | |||
| be correlated.</t> | be correlated.</li> | |||
| </ul> | ||||
| </list></t> | ||||
| </section> | </section> | |||
| <section anchor="IOAM_tracing_option" numbered="true" toc="default"> | ||||
| <section anchor="IOAM_tracing_option" title="IOAM Trace Option-Types"> | <name>IOAM Trace Option-Types</name> | |||
| <t> In a | <t> In a typical deployment, all nodes in an IOAM-Domain would | |||
| typical deployment, all nodes in an IOAM-Domain would participate in | participate in IOAM; thus, they would be IOAM transit nodes, IOAM | |||
| IOAM and thus be IOAM transit nodes, IOAM encapsulating or IOAM | encapsulating nodes, or IOAM decapsulating nodes. If not all | |||
| decapsulating nodes. If not all nodes within a domain support IOAM | nodes within a domain support IOAM functionality as defined in | |||
| functionality as defined in this document, IOAM tracing information | this document, IOAM tracing information (i.e., node data, see | |||
| (i.e., node data, see below) can only be collected on those nodes | below) can only be collected on those nodes that support IOAM | |||
| which support IOAM functionality as defined in this document. Nodes | functionality as defined in this document. Nodes that do not | |||
| which do not support IOAM functionality as defined in this document | support IOAM functionality as defined in this document will | |||
| will forward the packet without any changes to the IOAM-Data-Fields. | forward the packet without any changes to the | |||
| The maximum number of hops and the minimum path MTU of the IOAM-domain | IOAM-Data-Fields. The maximum number of hops and the minimum | |||
| is assumed to be known. An overflow indicator (O-bit) is defined | PMTU of the IOAM-Domain is assumed to be known. An | |||
| as one of the ways to deal with situations where the PMTU | overflow indicator (O-bit) is defined as one of the ways to | |||
| was underestimated, i.e., where the number of hops which | deal with situations where the PMTU was underestimated, i.e., | |||
| are IOAM capable exceeds the available space in the packet.</t> | where the number of hops that are IOAM capable exceeds the | |||
| available space in the packet.</t> | ||||
| <t>To optimize hardware and software implementations, IOAM tracing is | <t>To optimize hardware and software implementations, IOAM tracing is | |||
| defined as two separate options. A deployment can choose to configure | defined as two separate options. A deployment can choose to configure | |||
| and support one or both of the following options.</t> | and support one or both of the following options.</t> | |||
| <dl newline="true" spacing="normal"> | ||||
| <t><list style="hanging"> | <dt>Pre-allocated Trace-Option:</dt> | |||
| <t hangText="Pre-allocated Trace-Option:">This trace option is | <dd>This trace option is | |||
| defined as a container of node data fields (see below) with | defined as a container of node data fields (see below) with | |||
| pre-allocated space for each node to populate its information. | pre-allocated space for each node to populate its information. | |||
| This option is useful for implementations where it is efficient to | This option is useful for implementations where it is efficient to | |||
| allocate the space once and index into the array to populate the | allocate the space once and index into the array to populate the | |||
| data during transit (e.g., software forwarders often fall into | data during transit (e.g., software forwarders often fall into | |||
| this class). The IOAM encapsulating node allocates space for | this class). The IOAM encapsulating node allocates space for the | |||
| Pre-allocated Trace Option-Type in the packet and sets | Pre-allocated Trace Option-Type in the packet and sets | |||
| corresponding fields in this IOAM-Option-Type. The IOAM | corresponding fields in this IOAM-Option-Type. The IOAM | |||
| encapsulating node allocates an array which is used to store | encapsulating node allocates an array that is used to store | |||
| operational data retrieved from every node while the packet | operational data retrieved from every node while the packet | |||
| traverses the domain. IOAM transit nodes update the content of the | traverses the domain. IOAM transit nodes update the content of the | |||
| array, and possibly update the checksums of outer headers. A | array and possibly update the checksums of outer headers. A | |||
| pointer which is part of the IOAM trace data, points to the next | pointer that is part of the IOAM trace data points to the next | |||
| empty slot in the array. An IOAM transit node that updates the | empty slot in the array. An IOAM transit node that updates the | |||
| content of the pre-allocated option also updates the value of the | content of the Pre-allocated Trace-Option also updates the value of the | |||
| pointer, which specifies where the next IOAM transit node fills in | pointer, which specifies where the next IOAM transit node fills in | |||
| its data. The "node data list" array (see below) in the packet is | its data. The "node data list" array (see below) in the packet is | |||
| populated iteratively as the packet traverses the network, | populated iteratively as the packet traverses the network, | |||
| starting with the last entry of the array, i.e., "node data list | starting with the last entry of the array, i.e., "node data list | |||
| [n]" is the first entry to be populated, "node data list [n-1]" is | [n]" is the first entry to be populated, "node data list [n-1]" is | |||
| the second one, etc.</t> | the second one, etc.</dd> | |||
| <dt>Incremental Trace-Option:</dt> | ||||
| <t hangText="Incremental Trace-Option:">This trace option is | <dd>This trace option is | |||
| defined as a container of node data fields where each node | defined as a container of node data fields, where each node | |||
| allocates and pushes its node data immediately following the | allocates and pushes its node data immediately following the | |||
| option header. This type of trace recording is useful for some of | option header. This type of trace recording is useful for some of | |||
| the hardware implementations as it eliminates the need for the | the hardware implementations, as it eliminates the need for the | |||
| transit network elements to read the full array in the option and | transit network elements to read the full array in the option and | |||
| allows for arbitrarily long packets as the MTU allows. The IOAM | allows for as arbitrarily long packets as the MTU allows. The IOAM | |||
| encapsulating node allocates space for the Incremental Trace | encapsulating node allocates space for the Incremental Trace | |||
| Option-Type. Based on operational state and configuration, the | Option-Type. Based on the operational state and configuration, the | |||
| IOAM encapsulating node sets the fields in the Option-Type that | IOAM encapsulating node sets the fields in the Option-Type that | |||
| control what IOAM-Data-Fields have to be collected and how large | control what IOAM-Data-Fields have to be collected and how large | |||
| the node data list can grow. IOAM transit nodes push their node | the node data list can grow. IOAM transit nodes push their node | |||
| data to the node data list subject to any protocol constr aints of | data to the node data list subject to any protocol constr aints of | |||
| the encapsulating layer. They then decrease the remaining length | the encapsulating layer. They then decrease the remaining length | |||
| available to subsequent nodes and adjust the lengths and possibly | available to subsequent nodes and adjust the lengths and possibly | |||
| checksums in outer headers.</t> | checksums in outer headers.</dd> | |||
| </list></t> | </dl> | |||
| <t>IOAM encapsulating nodes and IOAM decapsulating nodes that support | ||||
| <t>IOAM encapsulating nodes and IOAM decapsulating nodes which support | tracing <bcp14>MUST</bcp14> support both Trace Option-Types. For IOAM tr | |||
| tracing MUST support both Trace-Option-Types. For IOAM transit nodes it | ansit nodes, it | |||
| is sufficient to support one of the Trace-Option-Types. | is sufficient to support one of the Trace Option-Types. | |||
| In the event that both options are utilized in a deployment | In the event that both options are utilized in a deployment | |||
| at the same time, the Incremental Trace-Option MUST be placed | at the same time, the Incremental Trace-Option <bcp14>MUST</bcp14> be pl | |||
| before the Pre-allocated Trace-Option. Deployments which mix devices | aced | |||
| before the Pre-allocated Trace-Option. Deployments that mix devices | ||||
| with either the Incremental Trace-Option or the Pre-allocated | with either the Incremental Trace-Option or the Pre-allocated | |||
| Trace-Option could result in both Option-Types being present in a | Trace-Option could result in both Option-Types being present in a | |||
| packet. Given that the operator knows which equipment is deployed in a | packet. Given that the operator knows which equipment is deployed in a | |||
| particular IOAM-domain, the operator will decide by means of | particular IOAM-Domain, the operator will decide by means of | |||
| configuration which type(s) of trace options will be used for a | configuration which type(s) of trace options will be used for a | |||
| particular domain.</t> | particular domain.</t> | |||
| <t>Every node data entry holds information for a particular IOAM | <t>Every node data entry holds information for a particular IOAM | |||
| transit node that is traversed by a packet. The IOAM decapsulating | transit node that is traversed by a packet. The IOAM decapsulating | |||
| node removes the IOAM-Option-Type(s) and processes and/or exports the | node removes the IOAM-Option-Types and processes and/or exports the | |||
| associated data. Like all IOAM-Data-Fields, the IOAM-Data-Fields of | associated data. Like all IOAM-Data-Fields, the IOAM-Data-Fields of | |||
| the IOAM-Trace-Option-Types are defined in the context of an | the IOAM Trace Option-Types are defined in the context of an | |||
| IOAM-Namespace.</t> | IOAM-Namespace.</t> | |||
| <t>IOAM tracing can collect the following types of information:</t> | <t>IOAM tracing can collect the following types of information:</t> | |||
| <ul spacing="normal"> | ||||
| <t><list style="symbols"> | <li>Identification of the IOAM node. An IOAM node identifier can | |||
| <t>Identification of the IOAM node. An IOAM node identifier can | ||||
| match to a device identifier or a particular control point or | match to a device identifier or a particular control point or | |||
| subsystem within a device.</t> | subsystem within a device.</li> | |||
| <li>Identification of the interface that a packet was received on, | ||||
| <t>Identification of the interface that a packet was received on, | i.e., ingress interface.</li> | |||
| i.e., ingress interface.</t> | <li>Identification of the interface that a packet was sent out on, | |||
| i.e., egress interface.</li> | ||||
| <t>Identification of the interface that a packet was sent out on, | <li>Time of day when the packet was processed by the node, as well | |||
| i.e., egress interface.</t> | ||||
| <t>Time of day when the packet was processed by the node as well | ||||
| as the transit delay. Different definitions of processing time are | as the transit delay. Different definitions of processing time are | |||
| feasible and expected, though it is important that all devices of | feasible and expected, though it is important that all devices of | |||
| an IOAM-domain follow the same definition.</t> | an IOAM-Domain follow the same definition.</li> | |||
| <li>Generic data, i.e., format-free information where syntax and seman | ||||
| <t>Generic data: Format-free information where syntax and semantic | tics | |||
| of the information is defined by the operator in a specific | of the information is defined by the operator in a specific | |||
| deployment. For a specific IOAM-Namespace, all IOAM nodes have to | deployment. For a specific IOAM-Namespace, all IOAM nodes have to | |||
| interpret the generic data the same way. Examples for generic IOAM | interpret the generic data the same way. Examples for generic IOAM | |||
| data include geo-location information (location of the node at the | data include geolocation information (location of the node at the | |||
| time the packet was processed), buffer queue fill level or cache | time the packet was processed), buffer queue fill level or cache | |||
| fill level at the time the packet was processed, or even a battery | fill level at the time the packet was processed, or even a battery-c | |||
| charge level.</t> | harge level.</li> | |||
| <li>Information to detect whether IOAM trace data was added at | ||||
| <t>Information to detect whether IOAM trace data was added at | ||||
| every hop or whether certain hops in the domain weren't IOAM | every hop or whether certain hops in the domain weren't IOAM | |||
| transit nodes.</t> | transit nodes.</li> | |||
| </list></t> | </ul> | |||
| <t>It should be noted that the semantics of some of the node data | ||||
| <t>It should be noted that the semantics of some of the node da | ||||
| ta | ||||
| fields that are defined below, such as the queue depth and buff er | fields that are defined below, such as the queue depth and buff er | |||
| occupancy, are implementation specific. This approach is intend ed | occupancy, are implementation specific. This approach is intend ed | |||
| to allow IOAM nodes with various different architectures.</t> | to allow IOAM nodes with various different architectures.</t> | |||
| <section anchor="TraceOptionDef" numbered="true" toc="default"> | ||||
| <section anchor="TraceOptionDef" | <name>Pre-allocated and Incremental Trace Option-Types</name> | |||
| title="Pre-allocated and Incremental Trace Option-Types"> | ||||
| <t>The IOAM Pre-allocated Trace-Option and the IOAM Incremental | <t>The IOAM Pre-allocated Trace-Option and the IOAM Incremental | |||
| Trace-Option have similar formats. Except where noted below, the | Trace-Option have similar formats. Except where noted below, the | |||
| internal formats and fields of the two trace options are identical. | internal formats and fields of the two trace options are identical. | |||
| Both Trace-Options consist of a fixed size "trace option header" and | Both trace options consist of a fixed-size "trace option header" and | |||
| a variable data space to store gathered data, the "node data list". | a variable data space to store gathered data, i.e., the "node data lis | |||
| An IOAM transit node (that is not an IOAM encapsulating node or IOAM | t". | |||
| decapsulating node) MUST NOT modify any of the fields in the fixed | An IOAM transit node (that is, not an IOAM encapsulating node or IOAM | |||
| size “trace option header”, other than | decapsulating node) <bcp14>MUST NOT</bcp14> modify any of the fields i | |||
| “flags” and “RemainingLen”, i.e., an IOAM | n the fixed-size "trace option header", other than | |||
| transit node MUST NOT modify the Namespace-ID, NodeLen, | Flags" and "RemainingLen", i.e., an IOAM | |||
| IOAM-Trace-Type, or Reserved fields.</t> | transit node <bcp14>MUST NOT</bcp14> modify the Namespace-ID, NodeLen, | |||
| IOAM Trace-Type, or Reserved fields.</t> | ||||
| <t><figure> | <t>The Pre-allocated and Incremental Trace-Option headers:</t> | |||
| <artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| Pre-allocated and incremental trace option headers: | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Namespace-ID |NodeLen | Flags | RemainingLen| | | Namespace-ID |NodeLen | Flags | RemainingLen| | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | IOAM-Trace-Type | Reserved | | | IOAM Trace-Type | Reserved | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ]]></artwork> | ||||
| The trace option data MUST be 4-octet aligned: | <t>The trace option data <bcp14>MUST</bcp14> be alligned by 4 octets:</ | |||
| t> | ||||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+ | |||
| | | | | | | | | |||
| | node data list [0] | | | | node data list [0] | | | |||
| | | | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ D | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ D | |||
| | | a | | | a | |||
| | node data list [1] | t | | node data list [1] | t | |||
| | | a | | | a | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ~ ... ~ S | ~ ... ~ S | |||
| skipping to change at line 745 ¶ | skipping to change at line 577 ¶ | |||
| ~ ... ~ S | ~ ... ~ S | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ p | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ p | |||
| | | a | | | a | |||
| | node data list [n-1] | c | | node data list [n-1] | c | |||
| | | e | | | e | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| | | | | | | | | |||
| | node data list [n] | | | | node data list [n] | | | |||
| | | | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+ | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> <list style="hanging"> | <dl newline="true" spacing="normal"> | |||
| <t hangText="Namespace-ID:">16-bit identifier of an | <dt>Namespace-ID:</dt> | |||
| <dd>16-bit identifier of an | ||||
| IOAM-Namespace. The Namespace-ID value of 0x0000 is defined as | IOAM-Namespace. The Namespace-ID value of 0x0000 is defined as | |||
| the "Default-Namespace-ID" (see <xref target="ioam_namespaces"/>) | the "Default-Namespace-ID" (see <xref target="ioam_namespaces" for | |||
| and MUST be known to all the nodes | mat="default"/>) | |||
| and <bcp14>MUST</bcp14> be known to all the nodes | ||||
| implementing IOAM. For any other Namespace-ID value that does | implementing IOAM. For any other Namespace-ID value that does | |||
| not match any Namespace-ID the node is configured to operate on, | not match any Namespace-ID the node is configured to operate on, | |||
| the node MUST NOT change the contents of the | the node <bcp14>MUST NOT</bcp14> change the contents of the | |||
| IOAM-Data-Fields.</t> | IOAM-Data-Fields.</dd> | |||
| <dt>NodeLen:</dt> | ||||
| <t hangText="NodeLen:">5-bit unsigned integer. This field | <dd> | |||
| <t>5-bit unsigned integer. This field | ||||
| specifies the length of data added by each node in multiples of | specifies the length of data added by each node in multiples of | |||
| 4-octets, excluding the length of the "Opaque State Snapshot" | 4 octets, excluding the length of the "Opaque State Snapshot" | |||
| field. <vspace blankLines="1"/>If IOAM-Trace-Type bit 22 is not | field. </t> | |||
| <t>If IOAM Trace-Type Bit 22 is not | ||||
| set, then NodeLen specifies the actual length added by each | set, then NodeLen specifies the actual length added by each | |||
| node. If IOAM-Trace-Type bit 22 is set, then the actual length | node. If IOAM Trace-Type Bit 22 is set, then the actual length | |||
| added by a node would be (NodeLen + length of the "Opaque State | added by a node would be (NodeLen + length of the "Opaque State | |||
| Snapshot" field) in 4 octet units. <vspace blankLines="1"/>For | Snapshot" field) in 4-octet units. </t> | |||
| example, if 3 IOAM-Trace-Type bits are set and none of them are | <t>For | |||
| in wide format, then NodeLen would be 3. If 3 IOAM-Trace-Type bits | example, if 3 IOAM Trace-Type bits are set and none of them are | |||
| are set | in wide format, then NodeLen would be 3. If 3 IOAM Trace-Type bits | |||
| and 2 of them are wide, then NodeLen would be 5. <vspace | are set | |||
| blankLines="1"/>An IOAM encapsulating node MUST set NodeLen. | and 2 of them are wide, then NodeLen would be 5. </t> | |||
| <vspace blankLines="1"/>A node receiving an IOAM Pre-allocated | <t>An IOAM encapsulating node <bcp14>MUST</bcp14> set NodeLen. | |||
| </t> | ||||
| <t>A node receiving an IOAM Pre-allocated | ||||
| or Incremental Trace-Option relies on the NodeLen value.</t> | or Incremental Trace-Option relies on the NodeLen value.</t> | |||
| </dd> | ||||
| <t anchor="TraceFlags" hangText="Flags">4-bit field. Flags are | <dt>Flags:</dt> | |||
| allocated by IANA, as specified in <xref | <dd anchor="TraceFlags"> | |||
| target="Flags-Registry-Sec"/>. This document allocates a single | <t>4-bit field. Flags are | |||
| flag as follows: <list style="hanging"> | allocated by IANA, as specified in <xref target="Flags-Registry-Se | |||
| <t hangText="Bit 0">"Overflow" (O-bit) (most significant | c" format="default"/>. This document allocates a single | |||
| bit). In case a network element is supposed to add node data t | flag as follows: </t> | |||
| o a packet, | <dl newline="true" spacing="normal"> | |||
| <dt>Bit 0:</dt> | ||||
| <dd>"Overflow" (O-bit) (most significant | ||||
| bit). In case a network element is supposed to add node data t | ||||
| o a packet | ||||
| but detects that there are not enough octets left to record th e node | but detects that there are not enough octets left to record th e node | |||
| data, the network element MUST NOT add any fields and MUST set | data, the network element <bcp14>MUST NOT</bcp14> add any fiel | |||
| the overflow "O-bit" to "1" in the IOAM-Trace-Option header. | ds and | |||
| <bcp14>MUST</bcp14> set | ||||
| the overflow "O-bit" to "1" in the IOAM Trace-Option header. | ||||
| This is useful for transit nodes to ignore further | This is useful for transit nodes to ignore further | |||
| processing of the option.</t> | processing of the option.</dd> | |||
| </list></t> | </dl> | |||
| </dd> | ||||
| <t hangText="RemainingLen:">7-bit unsigned integer. This field | <dt>RemainingLen:</dt> | |||
| specifies the data space in multiples of 4-octets remaining for | <dd>7-bit unsigned integer. This field specifies the data | |||
| recording the node data, before the node data list is considered | space in multiples of 4 octets remaining for recording the | |||
| to have overflowed. The sender MUST assign the initial value of | node data before the node data list is considered to have | |||
| the RemainingLen field. The sender MAY calculate the va | overflowed. The sender <bcp14>MUST</bcp14> assign the | |||
| lue of | initial value of the RemainingLen field. The sender | |||
| the RemainingLen field by computing the number of node | <bcp14>MAY</bcp14> calculate the value of the RemainingLen | |||
| data | field by computing the number of node data bytes allowed | |||
| bytes allowed before exceeding the path MTU (PMTU), giv | before exceeding the PMTU, given that the PMTU is known to | |||
| en that | the sender. Subsequent nodes can carry out a simple | |||
| the PMTU is known to the sender. Subsequent nodes can c | comparison between RemainingLen and NodeLen, along with | |||
| arry out | the length of the "Opaque State Snapshot", if applicable, | |||
| a simple comparison between RemainingLen and NodeLen, a | to determine whether or not data can be added by this | |||
| long with | node. When node data is added, the node | |||
| the length of the "Opaque State Snapshot" if applicable | <bcp14>MUST</bcp14> decrease RemainingLen by the amount of | |||
| , to | data added. In the Pre-allocated Trace-Option, | |||
| determine whether or not data can be added by this node | RemainingLen is used to derive the offset in data space to | |||
| . When | record the node data element. | |||
| node data is added, the node MUST decrease RemainingLen | ||||
| by the | ||||
| amount of data added. In the pre-allocated trace option | ||||
| , | ||||
| RemainingLen is used to derive the offset in data space to | ||||
| record the node data element. Specifically, the recording of the | ||||
| node data element would start from RemainingLen - NodeLen - | ||||
| sizeof(opaque snapshot) in 4 octet units. If RemainingLen in a | ||||
| pre-allocated trace option exceeds the length of the op | ||||
| tion, | ||||
| as specified in the lower layer header (which is not wi | ||||
| thin the | ||||
| scope of this document), then the node MUST NOT add any | ||||
| fields. | ||||
| </t> | ||||
| <t anchor="IOAMTraceType" hangText="IOAM-Trace-Type:">A 24-bit | Specifically, the recording | |||
| identifier which specifies which data types are used in this | of the node data element would start from RemainingLen - | |||
| NodeLen - size of (opaque snapshot) in 4-octet units. If | ||||
| RemainingLen in a Pre-allocated Trace-Option exceeds the | ||||
| length of the option, as specified in the lower-layer | ||||
| header (which is not within the scope of this document), | ||||
| then the node <bcp14>MUST NOT</bcp14> add any fields.</dd> | ||||
| <dt>IOAM Trace-Type:</dt> | ||||
| <dd anchor="IOAMTraceType"> | ||||
| <t>24-bit | ||||
| identifier that specifies which data types are used in this | ||||
| node data list.</t> | node data list.</t> | |||
| <t>The IOAM Trace-Type value is a bit field. The | ||||
| <t hangText=" ">The IOAM-Trace-Type value is a bit field. The | ||||
| following bits are defined in this document, with details on | following bits are defined in this document, with details on | |||
| each bit described in the <xref | each bit described in <xref target="trace-node-data-element" forma | |||
| target="trace-node-data-element"/>. The order of packing the | t="default"/>. The order of packing the | |||
| data fields in each node data element follows the bit order of | data fields in each node data element follows the bit order of | |||
| the IOAM-Trace-Type field, as follows:<list hangIndent="9" | the IOAM Trace-Type field as follows:</t> | |||
| style="hanging"> | <dl newline="false" spacing="normal" indent="10"> | |||
| <t hangText="Bit 0">(Most significant bit) When set, | <dt>Bit 0</dt> | |||
| indicates presence of Hop_Lim and node_id (short format) in | <dd>Most significant bit. When set, | |||
| the node data.</t> | indicates the presence of Hop_Lim and node_id (short format) i | |||
| n | ||||
| <t hangText="Bit 1">When set, indicates presence of | the node data.</dd> | |||
| <dt>Bit 1</dt> | ||||
| <dd>When set, indicates the presence of | ||||
| ingress_if_id and egress_if_id (short format) in the node | ingress_if_id and egress_if_id (short format) in the node | |||
| data.</t> | data.</dd> | |||
| <dt>Bit 2</dt> | ||||
| <t hangText="Bit 2">When set, indicates presence of | <dd>When set, indicates the presence of | |||
| timestamp seconds in the node data.</t> | timestamp seconds in the node data.</dd> | |||
| <dt>Bit 3</dt> | ||||
| <t hangText="Bit 3">When set, indicates presence of | <dd>When set, indicates the presence of | |||
| timestamp fraction in the node data.</t> | timestamp fraction in the node data.</dd> | |||
| <dt>Bit 4</dt> | ||||
| <t hangText="Bit 4">When set, indicates presence of transit | <dd>When set, indicates the presence of transit | |||
| delay in the node data.</t> | delay in the node data.</dd> | |||
| <dt>Bit 5</dt> | ||||
| <t hangText="Bit 5">When set, indicates presence of | <dd>When set, indicates the presence of | |||
| IOAM-Namespace specific data (short format) in the node | IOAM-Namespace-specific data in short format in the node | |||
| data.</t> | data.</dd> | |||
| <dt>Bit 6</dt> | ||||
| <t hangText="Bit 6">When set, indicates presence of queue | <dd>When set, indicates the presence of queue | |||
| depth in the node data.</t> | depth in the node data.</dd> | |||
| <dt>Bit 7</dt> | ||||
| <t hangText="Bit 7">When set, indicates presence of the | <dd>When set, indicates the presence of the | |||
| Checksum Complement node data.</t> | Checksum Complement node data.</dd> | |||
| <dt>Bit 8</dt> | ||||
| <t hangText="Bit 8">When set, indicates presence of Hop_Lim | <dd>When set, indicates the presence of Hop_Lim | |||
| and node_id in wide format in the node data.</t> | and node_id in wide format in the node data.</dd> | |||
| <dt>Bit 9</dt> | ||||
| <t hangText="Bit 9">When set, indicates presence of | <dd>When set, indicates the presence of | |||
| ingress_if_id and egress_if_id in wide format in the node | ingress_if_id and egress_if_id in wide format in the node | |||
| data.</t> | data.</dd> | |||
| <dt>Bit 10</dt> | ||||
| <t hangText="Bit 10">When set, indicates presence of | <dd>When set, indicates the presence of | |||
| IOAM-Namespace specific data in wide format in the node | IOAM-Namespace-specific data in wide format in the node | |||
| data.</t> | data.</dd> | |||
| <dt>Bit 11</dt> | ||||
| <t hangText="Bit 11">When set, indicates presence of buffer | <dd>When set, indicates the presence of buffer | |||
| occupancy in the node data.</t> | occupancy in the node data.</dd> | |||
| <dt>Bits 12-21</dt> | ||||
| <t hangText="Bit 12-21">Undefined. These values are available | <dd> | |||
| for future assignment in the IOAM Trace-Type Re | <t>Undefined. These values are available | |||
| gistry | for future assignment in the IOAM Trace-Type Registry | |||
| (<xref target="ioam-trace-type-registry"/>). Ev | (<xref target="ioam-trace-type-registry" format="default"/>). E | |||
| ery future | very | |||
| node data field corresponding to one of these b | future node data field corresponding to one of these bits | |||
| its MUST | <bcp14>MUST</bcp14> be 4 octets long. An IOAM encapsulating nod | |||
| be 4-octets long. An IOAM encapsulating node MU | e | |||
| ST set the | <bcp14>MUST</bcp14> set the | |||
| value of each undefined bit to 0. If an IOAM t | value of each undefined bit to 0. If an IOAM transit | |||
| ransit | node receives a packet with one or more of these bits set | |||
| node receives a packet with one or more of thes | to 1, it <bcp14>MUST</bcp14> either: </t> | |||
| e bits set | <ol spacing="normal" type="1"> | |||
| to 1, it MUST either: | <li>add corresponding node data filled with the reserved | |||
| <list style="numbers"> | value 0xFFFFFFFF after the node data fields for the | |||
| <t>Add corresponding node data filled with the reserved | IOAM Trace-Type bits defined above, such that the total | |||
| value 0xFFFFFFFF, after the node data fields for the | node data added by this node in units of 4 octets is | |||
| IOAM-Trace-Type bits defined above, such that the total | equal to NodeLen or</li> | |||
| node data added by this node in units of 4-octets is | <li>not add any node data fields to the packet, even for | |||
| equal to NodeLen, or</t> | the IOAM Trace-Type bits defined above.</li> | |||
| </ol> | ||||
| <t>Not add any node data fields to the packet, even for | </dd> | |||
| the IOAM-Trace-Type bits defined above.</t> | <dt>Bit 22</dt> | |||
| </list></t> | <dd>When set, indicates the presence of the | |||
| variable-length Opaque State Snapshot field.</dd> | ||||
| <t hangText="Bit 22">When set, indicates presence of | <dt>Bit 23</dt> | |||
| variable length Opaque State Snapshot field.</t> | <dd>Reserved; <bcp14>MUST</bcp14> be set to zero upon | |||
| transmission and be ignored upon receipt. This bit is | ||||
| <t hangText="Bit 23">Reserved: MUST be set to zero upon | ||||
| transmission and ignored upon receipt. This bit is | ||||
| reserved to allow for future extensions of the | reserved to allow for future extensions of the | |||
| IOAM-Trace-Type bit field.</t> | IOAM Trace-Type bit field.</dd> | |||
| </list></t> | </dl> | |||
| <t><xref target="trace-node-data-element" format="default"/> | ||||
| <t hangText=" "><xref target="trace-node-data-element"/> | ||||
| describes the IOAM-Data-Types and their formats. Within an | describes the IOAM-Data-Types and their formats. Within an | |||
| IOAM-Domain possible combinations of these bits making the | IOAM-Domain, possible combinations of these bits making the | |||
| IOAM-Trace-Type can be restricted by configuration knobs.</t> | IOAM Trace-Type can be restricted by configuration knobs.</t></dd> | |||
| <dt>Reserved:</dt> | ||||
| <t hangText="Reserved:">8-bits. An IOAM encapsulating node MUST | <dd>8 bits. An IOAM encapsulating node <bcp14>MUST</bcp14> | |||
| set the value to zero upon transmission. IOAM transit nodes MUST | set the value to zero upon transmission. IOAM transit nodes | |||
| ignore the received value.</t> | <bcp14>MUST</bcp14> ignore the received value.</dd> | |||
| <dt>Node data List [n]:</dt> | ||||
| <t hangText="Node data List [n]:">Variable-length field. This is | <dd>Variable-length field. This is | |||
| a list of node data elements where the content of each node data | a list of node data elements where the content of each node data | |||
| element is determined by the IOAM-Trace-Type. The order of | element is determined by the IOAM Trace-Type. The order of | |||
| packing the data fields in each node data element follows the | packing the data fields in each node data element follows the | |||
| bit order of the IOAM-Trace-Type field. Each node MUST prepend | bit order of the IOAM Trace-Type field. Each node <bcp14>MUST</bcp 14> prepend | |||
| its node data element in front of the node data elements that it | its node data element in front of the node data elements that it | |||
| received, such that the transmitted node data list begins with | received, such that the transmitted node data list begins with | |||
| this node's data element as the first populated element in the | this node's data element as the first populated element in the | |||
| list. The last node data element in this list is the node data | list. The last node data element in this list is the node data | |||
| of the first IOAM capable node in the path. Populating the node | of the first IOAM-capable node in the path. Populating the node | |||
| data list in this way ensures that the order of node data list | data list in this way ensures that the order of the node data list | |||
| is the same for incremental and pre-allocated trace options. In | is the same for Incremental and Pre-allocated Trace-Options. In | |||
| the pre-allocated trace option, the index contained in | the Pre-allocated Trace-Option, the index contained in | |||
| RemainingLen identifies the offset for current active node data | RemainingLen identifies the offset for current active node data | |||
| to be populated.</t> | to be populated.</dd> | |||
| </list></t> | </dl> | |||
| </section> | </section> | |||
| <section anchor="trace-node-data-element" numbered="true" toc="default"> | ||||
| <section anchor="trace-node-data-element" | <name>IOAM Node Data Fields and Associated Formats</name> | |||
| title="IOAM node data fields and associated formats"> | <t>All the IOAM-Data-Fields <bcp14>MUST</bcp14> be aligned by 4 octets | |||
| <t>All the IOAM-Data-Fields MUST be 4-octet aligned. If a node which | . If a | |||
| is supposed to update an IOAM-Data-Field is not capable of | node that is supposed to update an IOAM-Data-Field is not capable of | |||
| populating the value of a field set in the IOAM-Trace-Type, the | populating the value of a field set in the IOAM Trace-Type, the | |||
| field value MUST be set to 0xFFFFFFFF for 4-octet fields or | field value <bcp14>MUST</bcp14> be set to 0xFFFFFFFF for 4-octet field | |||
| s or | ||||
| 0xFFFFFFFFFFFFFFFF for 8-octet fields, indicating that the value is | 0xFFFFFFFFFFFFFFFF for 8-octet fields, indicating that the value is | |||
| not populated, except when explicitly specified in the field | not populated, except when explicitly specified in the field | |||
| description below.</t> | description below.</t> | |||
| <t>Some IOAM-Data-Fields defined below, such as interface | <t>Some IOAM-Data-Fields defined below, such as interface | |||
| identifiers or IOAM-Namespace specific data, are defined in both | identifiers or IOAM-Namespace-specific data, are defined in both | |||
| "short format" as well as "wide format". | "short format" and "wide format". | |||
| The use of "short format" or "wide format" is not mutually exclusive. | The use of "short format" or "wide format" is not mutually exclusive. | |||
| A deployment could choose to leverage both. For example, | A deployment could choose to leverage both. For example, | |||
| ingress_if_id_(short format) could be an identifier for the physical | ingress_if_id_(short format) could be an identifier for the physical | |||
| interface, whereas ingress_if_id_(wide format) could be an | interface, whereas ingress_if_id_(wide format) could be an | |||
| identifier for a logical sub-interface of that physical | identifier for a logical sub-interface of that physical | |||
| interface.</t> | interface.</t> | |||
| <t>Data fields and associated data types for each of the | <t>Data fields and associated data types for each of the | |||
| IOAM-Data-Fields are specified in the following sections. | IOAM-Data-Fields are specified in the following sections. | |||
| The definition of IOAM-Data-Fields focuses on the syntax | The definition of IOAM-Data-Fields focuses on the syntax | |||
| of the data-fields and avoids specifying the semantics | of the data fields and avoids specifying the semantics | |||
| where feasible. This is why no units are defined for | where feasible. This is why no units are defined for | |||
| data-fields like e.g., "buffer occupancy" or "queue depth". | data fields, e.g., like "buffer occupancy" or "queue depth". | |||
| With this approach, nodes can supply the | With this approach, nodes can supply the | |||
| information in their native format and are not required | information in their original format and are not required | |||
| to perform unit or format conversions. Systems that further | to perform unit or format conversions. Systems that further | |||
| process IOAM information, like e.g., a network management | process IOAM information, e.g., like a network management | |||
| system are assumed to also handle unit conversions as part | system, are assumed to also handle unit conversions as part | |||
| of their IOAM data-fields processing. The combination of a | of their IOAM-Data-Fields processing. The combination of a | |||
| particular data-field and the namespace-id provides for the context | particular data field and the Namespace-ID provides for the context | |||
| to interpret the provided data appropriately. | to interpret the provided data appropriately. | |||
| </t> | </t> | |||
| <section anchor="Hop_Lim" numbered="true" toc="default"> | ||||
| <section anchor="Hop_Lim" title="Hop_Lim and node_id short format"> | <name>Hop_Lim and node_id Short</name> | |||
| <t>The "Hop_Lim and node_id short format" field is a 4-octet field | <t>The "Hop_Lim and node_id short" field is a 4-octet field | |||
| that is defined as follows: <figure> | that is defined as follows: </t> | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Hop_Lim | node_id | | | Hop_Lim | node_id | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </figure><list style="hanging"> | ]]></artwork> | |||
| <t hangText="Hop_Lim:">1-octet unsigned integer. It is set to | <dl newline="true" spacing="normal"> | |||
| <dt>Hop_Lim:</dt> | ||||
| <dd>1-octet unsigned integer. It is set to | ||||
| the Hop Limit value in the packet at egress from the node that r ecords | the Hop Limit value in the packet at egress from the node that r ecords | |||
| this data. Hop Limit information is used to identify the | this data. Hop Limit information is used to identify the | |||
| location of the node in the communication path. This is copied | location of the node in the communication path. This is copied | |||
| from the lower layer, e.g., TTL value in IPv4 header or hop | from the lower layer, e.g., TTL value in IPv4 header or Hop | |||
| limit field from IPv6 header of the packet when the packet is | Limit field from IPv6 header of the packet when the packet is | |||
| ready for transmission. The semantics of the Hop_Lim field | ready for transmission. The semantics of the Hop_Lim field | |||
| depend on the lower layer protocol that IOAM is encapsulated | depend on the lower-layer protocol that IOAM is encapsulated | |||
| into, and therefore its specific semantics are outside the | into; therefore, its specific semantics are outside the | |||
| scope of this memo. The value of this field MUST be set to | scope of this memo. The value of this field <bcp14>MUST</bcp14> | |||
| 0xff when the lower level does not have a TTL/Hop limit | be set to | |||
| equivalent field.</t> | 0xff when the lower level does not have a field equivalent to TT | |||
| L / Hop Limit.</dd> | ||||
| <t hangText="node_id:">3-octet unsigned integer. Node | <dt>node_id:</dt> | |||
| <dd>3-octet unsigned integer. A node | ||||
| identifier field to uniquely identify a node within the | identifier field to uniquely identify a node within the | |||
| IOAM-Namespace and associated IOAM-Domain. The procedure to | IOAM-Namespace and associated IOAM-Domain. The procedure to | |||
| allocate, manage and map the node_ids is beyond the scope of | allocate, manage, and map the node_ids is beyond the scope of | |||
| this document. See | this document. See | |||
| <xref target="I-D.ietf-ippm-ioam-deployment"/> for | <xref target="I-D.ietf-ippm-ioam-deployment" format="default"/> | |||
| a discussion of deployment related aspects of the node_id. </t> | for | |||
| </list></t> | a discussion of deployment-related aspects of the node_id. </dd> | |||
| </dl> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="ingress_if_id and egress_if_id"> | <name>ingress_if_id and egress_if_id Short</name> | |||
| <t>The "ingress_if_id and egress_if_id" field is a 4-octet field | <t>The "ingress_if_id and egress_if_id" field is a 4-octet field | |||
| that is defined as follows: <figure> | that is defined as follows: </t> | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | ingress_if_id | egress_if_id | | | ingress_if_id | egress_if_id | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </figure><list style="hanging"> | ]]></artwork> | |||
| <t hangText="ingress_if_id:">2-octet unsigned integer. | <dl newline="true" spacing="normal"> | |||
| Interface identifier to record the ingress interface the | <dt>ingress_if_id:</dt> | |||
| packet was received on.</t> | <dd>2-octet unsigned integer. | |||
| An interface identifier to record the ingress interface the | ||||
| <t hangText="egress_if_id:">2-octet unsigned integer. | packet was received on.</dd> | |||
| Interface identifier to record the egress interface the packet | <dt>egress_if_id:</dt> | |||
| is forwarded out of.</t> | <dd>2-octet unsigned integer. | |||
| </list>Note that due to the fact that IOAM uses its own | An interface identifier to record the egress interface the packe | |||
| IOAM-Namespaces for IOAM-Data-Fields, data fields like interface | t | |||
| identifiers can be used in a flexible way to represent system | is forwarded out of.</dd> | |||
| </dl> | ||||
| <t>Note that due to the fact that IOAM uses its own | ||||
| IOAM-Namespaces for IOAM-Data-Fields, data fields, like interface | ||||
| identifiers, can be used in a flexible way to represent system | ||||
| resources that are associated with ingressing or egressing | resources that are associated with ingressing or egressing | |||
| packets, i.e., ingress_if_id could represent a physical interface, | packets, i.e., ingress_if_id could represent a physical interface, | |||
| a virtual or logical interface, or even a queue.</t> | a virtual or logical interface, or even a queue.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="timestamp seconds"> | <name>Timestamp Seconds</name> | |||
| <t>The "timestamp seconds" field is a 4-octet unsigned integer | <t>The "timestamp seconds" field is a 4-octet unsigned integer | |||
| field. It contains the absolute timestamp in seconds that specifies the time at | field. It contains the absolute timestamp in seconds that specifies the time at | |||
| which the packet was received by the node. This field has three | which the packet was received by the node. This field has three | |||
| possible formats; based on either PTP (see e.g., <xref target="RFC88 | possible formats, based on either the Precision Time Protocol (PTP) | |||
| 77"/>), | (see e.g., <xref target="RFC8877" format="default"/>), | |||
| NTP <xref target="RFC5905"/>, or POSIX <xref target="POSIX"/>. The | NTP <xref target="RFC5905" format="default"/>, or POSIX <xref target | |||
| three timestamp formats are specified in <xref | ="POSIX" format="default"/>. The | |||
| target="TimestampSec"/>. In all three cases, the Timestamp Seconds | three timestamp formats are specified in <xref target="TimestampSec" | |||
| format="default"/>. In all three cases, the timestamp seconds | ||||
| field contains the 32 most significant bits of the timestamp | field contains the 32 most significant bits of the timestamp | |||
| format that is specified in <xref target="TimestampSec"/>. If a | format that is specified in <xref target="TimestampSec" format="defa ult"/>. If a | |||
| node is not capable of populating this field, it assigns the value | node is not capable of populating this field, it assigns the value | |||
| 0xFFFFFFFF. Note that this is a legitimate value that is valid for | 0xFFFFFFFF. Note that this is a legitimate value that is valid for | |||
| 1 second in approximately 136 years; the analyzer has to correlate | 1 second in approximately 136 years; the analyzer has to correlate | |||
| several packets or compare the timestamp value to its own | several packets or compare the timestamp value to its own | |||
| time-of-day in order to detect the error indication.</t> | time of day in order to detect the error indication.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="timestamp fraction"> | <name>Timestamp Fraction</name> | |||
| <t>The "timestamp fraction" field is a 4-octet unsigned integer | <t>The "timestamp fraction" field is a 4-octet unsigned integer | |||
| field. Fraction specifies the fractional portion of the number of | field. Fraction specifies the fractional portion of the number of | |||
| seconds since the NTP epoch <xref target="RFC8877"/>. The field spec ifies the time at | seconds since the NTP epoch <xref target="RFC8877" format="default"/ >. The field specifies the time at | |||
| which the packet was received by the node. This field has three | which the packet was received by the node. This field has three | |||
| possible formats; based on either PTP (see e.g., <xref target="RFC88 | possible formats, based on either PTP (see e.g., <xref target="RFC88 | |||
| 77"/>), | 77" format="default"/>), | |||
| NTP <xref target="RFC5905"/>, or POSIX <xref target="POSIX"/>. The | NTP <xref target="RFC5905" format="default"/>, or POSIX <xref target | |||
| three timestamp formats are specified in <xref | ="POSIX" format="default"/>. The | |||
| target="TimestampSec"/>. In all three cases, the Timestamp | three timestamp formats are specified in <xref target="TimestampSec" | |||
| format="default"/>. In all three cases, the timestamp | ||||
| fraction field contains the 32 least significant bits of the | fraction field contains the 32 least significant bits of the | |||
| timestamp format that is specified in <xref | timestamp format that is specified in <xref target="TimestampSec" fo | |||
| target="TimestampSec"/>. If a node is not capable of populating | rmat="default"/>. If a node is not capable of populating | |||
| this field, it assigns the value 0xFFFFFFFF. Note that this is a | this field, it assigns the value 0xFFFFFFFF. Note that this is a | |||
| legitimate value in the NTP format, valid for approximately 233 | legitimate value in the NTP format, valid for approximately 233 | |||
| picoseconds in every second. If the NTP format is used the | picoseconds in every second. If the NTP format is used, the | |||
| analyzer has to correlate several packets in order to detect the | analyzer has to correlate several packets in order to detect the | |||
| error indication.</t> | error indication.</t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="transit delay"> | <name>Transit Delay</name> | |||
| <t>The "transit delay" field is a 4-octet unsigned integer in the | <t>The "transit delay" field is a 4-octet unsigned integer in the | |||
| range 0 to 2^31-1. It is the time in nanoseconds the packet spent | range 0 to 2<sup>31</sup>-1. It is the time in nanoseconds the packe t spent | |||
| in the transit node. This can serve as an indication of the | in the transit node. This can serve as an indication of the | |||
| queuing delay at the node. If the transit delay exceeds 2^31-1 | queuing delay at the node. If the transit delay exceeds 2<sup>31</su | |||
| nanoseconds then the top bit 'O' is set to indicate overflow and | p>-1 | |||
| nanoseconds, then the top bit 'O' is set to indicate overflow and | ||||
| value set to 0x80000000. When this field is part of the data field | value set to 0x80000000. When this field is part of the data field | |||
| but a node populating the field is not able to fill it, the field | but a node populating the field is not able to fill it, the field | |||
| position in the field MUST be filled with value 0xFFFFFFFF to mean | position in the field <bcp14>MUST</bcp14> be filled with value 0xFFF | |||
| not populated.<figure> | FFFFF to | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 | mean not populated.</t> | |||
| 3 4 5 6 7 8 9 0 1 | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |O| transit delay | | |O| transit delay | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </figure></t> | ]]></artwork> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="namespace specific data"> | <name>Namespace-Specific Data</name> | |||
| <t>The "namespace specific data" field is a 4-octet field which | <t>The "namespace-specific data" field is a 4-octet field that | |||
| can be used by the node to add IOAM-Namespace specific data. This | can be used by the node to add IOAM-Namespace-specific data. This | |||
| represents a "free-format" 4-octet bit field with its semantics | represents a "free-format" 4-octet bit field with its semantics | |||
| defined in the context of a specific IOAM-Namespace.<figure> | defined in the context of a specific IOAM-Namespace.</t> | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | namespace specific data | | | namespace-specific data | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </figure></t> | ]]></artwork> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="queue depth"> | <name>Queue Depth</name> | |||
| <t>The "queue depth" field is a 4-octet unsigned integer field. | <t>The "queue depth" field is a 4-octet unsigned integer field. | |||
| This field indicates the current length of the egress interface | This field indicates the current length of the egress interface | |||
| queue of the interface from where the packet is forwarded out. The | queue of the interface from where the packet is forwarded out. The | |||
| queue depth is expressed as the current amount of memory buffers | queue depth is expressed as the current amount of memory buffers | |||
| used by the queue (a packet could consume one or more memory | used by the queue (a packet could consume one or more memory | |||
| buffers, depending on its size). <figure> | buffers, depending on its size). </t> | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | queue depth | | | queue depth | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </figure></t> | ]]></artwork> | |||
| </section> | </section> | |||
| <section title="Checksum Complement"> | <section numbered="true" toc="default"> | |||
| <t>The "Checksum Complement" field is a 4-octet node data which | <name>Checksum Complement</name> | |||
| contains a 4-octet Checksum Complement field. The Checksum | <t>The "Checksum Complement" field is a 4-octet node data that | |||
| contains the Checksum Complement value. The Checksum | ||||
| Complement is useful when IOAM is transported over encapsulations | Complement is useful when IOAM is transported over encapsulations | |||
| that make use of a UDP transport, such as VXLAN-GPE or Geneve. | that make use of a UDP transport, such as VXLAN-GPE or Geneve. | |||
| Without the Checksum Complement, nodes adding IOAM node data | Without the Checksum Complement, nodes adding IOAM node data | |||
| update the UDP Checksum field following the recommendation of the | update the UDP Checksum field following the recommendation of the | |||
| encapsulation protocols. When the Checksum Complement is | encapsulation protocols. When the Checksum Complement is | |||
| present, an IOAM encapsulating node or IOAM transit node adding | present, an IOAM encapsulating node or IOAM transit node adding | |||
| node data MUST carry out one of the following two alternatives in | node data <bcp14>MUST</bcp14> carry out one of the following two alt | |||
| order to maintain the correctness of the UDP Checksum value: <list | ernatives | |||
| style="numbers"> | in order to maintain the correctness of the UDP Checksum value:</t> | |||
| <t>Recompute the UDP Checksum field.</t> | <ol spacing="normal" type="1"> | |||
| <li>recompute the UDP Checksum field or</li> | ||||
| <t>Use the Checksum Complement to make a checksum-neutral | <li>use the Checksum Complement to make a checksum-neutral | |||
| update in the UDP payload; the Checksum Complement is assigned | update in the UDP payload; the Checksum Complement is assigned | |||
| a value that complements the rest of the node data fields that | a value that complements the rest of the node data fields that | |||
| were added by the current node, causing the existing UDP | were added by the current node, causing the existing UDP | |||
| Checksum field to remain correct.</t> | Checksum field to remain correct.</li> | |||
| </list> IOAM decapsulating nodes MUST recompute the UDP Checksum | </ol> | |||
| <t> IOAM decapsulating nodes <bcp14>MUST</bcp14> recompute the UDP C | ||||
| hecksum | ||||
| field, since they do not know whether previous hops modified the | field, since they do not know whether previous hops modified the | |||
| UDP Checksum field or the Checksum Complement field. <vspace | UDP Checksum field or the Checksum Complement field.</t> | |||
| blankLines="1"/> Checksum Complement fields are used in a similar | <t> Checksum Complement fields are used in a similar manner in | |||
| manner in <xref target="RFC7820"/> and <xref target="RFC7821"/>. | <xref target="RFC7820" format="default"/> and <xref | |||
| <figure> | target="RFC7821" format="default"/>. </t> | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Checksum Complement | | | Checksum Complement | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </figure></t> | ]]></artwork> | |||
| </section> | </section> | |||
| <section title="Hop_Lim and node_id wide"> | <section numbered="true" toc="default"> | |||
| <name>Hop_Lim and node_id Wide</name> | ||||
| <t>The "Hop_Lim and node_id wide" field is an 8-octet field | <t>The "Hop_Lim and node_id wide" field is an 8-octet field | |||
| defined as follows: <figure> | defined as follows: </t> | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Hop_Lim | node_id ~ | | Hop_Lim | node_id ~ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ~ node_id (contd) | | ~ node_id (contd) | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </figure><list style="hanging"> | ]]></artwork> | |||
| <t hangText="Hop_Lim:">1-octet unsigned integer. See | <dl newline="true" spacing="normal"> | |||
| <xref target="Hop_Lim"/> for the definition of the field. | <dt>Hop_Lim:</dt> | |||
| </t> | <dd>1-octet unsigned integer. See <xref target="Hop_Lim" format="d | |||
| efault"/> | ||||
| <t hangText="node_id:">7-octet unsigned integer. Node | for the definition of the field.</dd> | |||
| <dt>node_id:</dt> | ||||
| <dd>7-octet unsigned integer. It is a node | ||||
| identifier field to uniquely identify a node within the | identifier field to uniquely identify a node within the | |||
| IOAM-Namespace and associated IOAM-Domain. The procedure to | IOAM-Namespace and associated IOAM-Domain. The procedure to | |||
| allocate, manage and map the node_ids is beyond the scope of | allocate, manage, and map the node_ids is beyond the scope of | |||
| this document.</t> | this document.</dd> | |||
| </list></t> | </dl> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="ingress_if_id and egress_if_id wide"> | <name>ingress_if_id and egress_if_id Wide</name> | |||
| <t>The "ingress_if_id and egress_if_id wide" field is an 8-octet | <t>The "ingress_if_id and egress_if_id wide" field is an 8-octet | |||
| field which is defined as follows: <figure> | field, which is defined as follows: </t> | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | ingress_if_id | | | ingress_if_id | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | egress_if_id | | | egress_if_id | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </figure><list style="hanging"> | ]]></artwork> | |||
| <t hangText="ingress_if_id:">4-octet unsigned integer. | <dl newline="true" spacing="normal"> | |||
| Interface identifier to record the ingress interface the | <dt>ingress_if_id:</dt> | |||
| packet was received on.</t> | <dd>4-octet unsigned integer. | |||
| It is an interface identifier to record the ingress interface th | ||||
| <t hangText="egress_if_id:">4-octet unsigned integer. | e | |||
| Interface identifier to record the egress interface the packet | packet was received on.</dd> | |||
| is forwarded out of.</t> | <dt>egress_if_id:</dt> | |||
| </list></t> | <dd>4-octet unsigned integer. | |||
| It is an interface identifier to record the egress interface the | ||||
| packet | ||||
| is forwarded out of.</dd> | ||||
| </dl> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="namespace specific data wide"> | <name>Namespace-Specific Data Wide</name> | |||
| <t>The "namespace specific data wide" field is an 8-octet field | <t>The "namespace-specific data wide" field is an 8-octet field | |||
| which can be used by the node to add IOAM-Namespace specific data. | that can be used by the node to add IOAM-Namespace-specific data. | |||
| This represents a "free-format" 8-octet bit field with its | This represents a "free-format" 8-octet bit field with its | |||
| semantics defined in the context of a specific | semantics defined in the context of a specific | |||
| IOAM-Namespace.<figure> | IOAM-Namespace.</t> | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | namespace specific data ~ | | namespace-specific data ~ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ~ namespace specific data (contd) | | ~ namespace-specific data (contd) | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="buffer occupancy"> | <name>Buffer Occupancy</name> | |||
| <t>The "buffer occupancy" field is a 4-octet unsigned integer | <t>The "buffer occupancy" field is a 4-octet unsigned integer | |||
| field. This field indicates the current status of the occupancy of | field. This field indicates the current status of the occupancy of | |||
| the common buffer pool used by a set of queues. The units of this | the common buffer pool used by a set of queues. The units of this | |||
| field are implementation specific. Hence, the units are | field are implementation specific. Hence, the units are | |||
| interpreted within the context of an IOAM-Namespace and/or | interpreted within the context of an IOAM-Namespace and/or | |||
| node-id if used. The authors acknowledge that in some operational | node identifier if used. The authors acknowledge that, in some opera | |||
| cases there is a need for the units to be consistent across a | tional | |||
| packet path through the network, hence it is recommended for | cases, there is a need for the units to be consistent across a | |||
| implementations to use standard units such as Bytes. <figure> | packet path through the network; hence, it is recommended for | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 | implementations to use standard units, such as bytes. </t> | |||
| 3 4 5 6 7 8 9 0 1 | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | buffer occupancy | | | buffer occupancy | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </figure></t> | ]]></artwork> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Opaque State Snapshot"> | <name>Opaque State Snapshot</name> | |||
| <t>The "Opaque State Snapshot" is a variable length field and | <t>The "Opaque State Snapshot" field is a variable-length field and | |||
| follows the fixed length IOAM-Data-Fields defined above. It allows | follows the fixed-length IOAM-Data-Fields defined above. It allows | |||
| the network element to store an arbitrary state in the node data | the network element to store an arbitrary state in the node data | |||
| field, without a pre-defined schema. The schema is to be defined | field without a predefined schema. The schema is to be defined | |||
| within the context of an IOAM-Namespace. The schema needs to be | within the context of an IOAM-Namespace. The schema needs to be | |||
| made known to the analyzer by some out-of-band mechanism. The | made known to the analyzer by some out-of-band mechanism. The | |||
| specification of this mechanism is beyond the scope of this | specification of this mechanism is beyond the scope of this | |||
| document. A 24-bit "Schema Id" field, interpreted within the | document. A 24-bit "Schema ID" field, interpreted within the | |||
| context of an IOAM-Namespace, indicates which particular schema is | context of an IOAM-Namespace, indicates which particular schema is | |||
| used, and has to be configured on the network element by the | used and has to be configured on the network element by the | |||
| operator.<figure> | operator.</t> | |||
| <artwork><![CDATA[ 0 1 2 | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Length | Schema ID | | | Length | Schema ID | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| | | | | | | |||
| | Opaque data | | | Opaque data | | |||
| ~ ~ | ~ ~ | |||
| . . | . . | |||
| . . | . . | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| > | ]]></artwork> | |||
| </figure><list style="hanging"> | <dl newline="true" spacing="normal"> | |||
| <t hangText="Length:">1-octet unsigned integer. It is the | <dt>Length:</dt> | |||
| length in multiples of 4-octets of the Opaque data field that | <dd>1-octet unsigned integer. It is the | |||
| follows Schema Id.</t> | length in multiples of 4 octets of the Opaque data field that | |||
| follows Schema ID.</dd> | ||||
| <t hangText="Schema ID:">3-octet unsigned integer identifying | <dt>Schema ID:</dt> | |||
| the schema of Opaque data.</t> | <dd>3-octet unsigned integer identifying | |||
| the schema of Opaque data.</dd> | ||||
| <t hangText="Opaque data:">Variable length field. This field | <dt>Opaque data:</dt> | |||
| <dd>Variable-length field. This field | ||||
| is interpreted as specified by the schema identified by the | is interpreted as specified by the schema identified by the | |||
| Schema ID.</t> | Schema ID.</dd> | |||
| </list>When this field is part of the data field but a node | </dl> | |||
| <t>When this field is part of the data field, but a node | ||||
| populating the field has no opaque state data to report, the | populating the field has no opaque state data to report, the | |||
| Length MUST be set to 0 and the Schema ID MUST be set to 0xFFFFFF | Length <bcp14>MUST</bcp14> be set to 0 and the Schema ID <bcp14>MUST | |||
| to mean no schema.</t> | </bcp14> | |||
| be set to 0xFFFFFF to mean no schema.</t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="trace-type-node-data" numbered="true" toc="default"> | ||||
| <section anchor="trace-type-node-data" | <name>Examples of IOAM Node Data</name> | |||
| title=" Examples of IOAM node data"> | ||||
| <t>The format used for the entries in a packet's "node data list" | <t>The format used for the entries in a packet's "node data list" | |||
| array can vary from packet to packet and deployment to deployment | array can vary from packet to packet and deployment to deployment. | |||
| ". | Some deployments | |||
| Some deployments | ||||
| might only be interested in recording the node identifiers, whereas | might only be interested in recording the node identifiers, whereas | |||
| others might be interested in recording node identifiers and | others might be interested in recording node identifiers and | |||
| timestamps. This section provides example entries of the "node data | timestamps. | |||
| list".</t> | This section provides example entries of the "node data | |||
| list" array.</t> | ||||
| <t><list style="hanging"> | <dl newline="false" spacing="normal"> | |||
| <t hangText="0xD40000:">IOAM-Trace-Type is 0xD40000 | <dt>0xD40000:</dt> | |||
| (0b110101000000000000000000) then the format of node data | <dd><t>If the IOAM Trace-Type is 0xD40000 (0b11010100000000000000000 | |||
| is:<figure> | 0), then | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 | the format of node data is:</t> | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| | Hop_Lim | node_id | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | Hop_Lim | node_id | | |||
| | ingress_if_id | egress_if_id | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | ingress_if_id | egress_if_id | | |||
| | timestamp fraction | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | timestamp fraction | | |||
| | namespace specific data | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | namespace-specific data | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| ]]></artwork> | ||||
| </figure></t> | ||||
| <t hangText="0xC00000:">IOAM-Trace-Type is 0xC00000 | ||||
| (0b110000000000000000000000) then the format is:<figure> | ||||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 | ||||
| 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Hop_Lim | node_id | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | ingress_if_id | egress_if_id | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </dd> | ||||
| <t hangText="0x900000:">IOAM-Trace-Type is 0x900000 | <dt>0xC00000:</dt> | |||
| (0b100100000000000000000000) then the format is: <figure> | <dd><t>If the IOAM Trace-Type is 0xC00000 (0b11000000000000000000000 | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 | 0), then | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 | the format is:</t> | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| | Hop_Lim | node_id | | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | timestamp fraction | | | Hop_Lim | node_id | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | ingress_if_id | egress_if_id | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </dd> | ||||
| <t hangText="0x840000:">IOAM-Trace-Type is 0x840000 | <dt>0x900000:</dt> | |||
| (0b100001000000000000000000) then the format is:<figure> | <dd><t>If the IOAM Trace-Type is 0x900000 (0b10010000000000000000000 | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 | 0), then | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 | the format is: </t> | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| | Hop_Lim | node_id | | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | namespace specific data | | | Hop_Lim | node_id | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | timestamp fraction | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| ]]></artwork> | ||||
| </dd> | ||||
| <dt>0x840000:</dt> | ||||
| <dd><t>If the IOAM Trace-Type is 0x840000 (0b10000100000000000000000 | ||||
| 0), then | ||||
| the format is:</t> | ||||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | Hop_Lim | node_id | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| | namespace-specific data | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </dd> | ||||
| <t hangText="0x940000:">IOAM-Trace-Type is 0x940000 | <dt>0x940000:</dt> | |||
| (0b100101000000000000000000) then the format is:<figure> | <dd><t>If the IOAM Trace-Type is 0x940000 (0b10010100000000000000000 | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 | 0), then | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 | the format is:</t> | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| | Hop_Lim | node_id | | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | timestamp fraction | | | Hop_Lim | node_id | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | namespace specific data | | | timestamp fraction | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | namespace-specific data | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </dd> | ||||
| <t hangText="0x308002:">IOAM-Trace-Type is 0x308002 | <dt>0x308002:</dt> | |||
| (0b001100001000000000000010) then the format is:<figure> | <dd><t>If the IOAM Trace-Type is 0x308002 (0b00110000100000000000001 | |||
| <artwork><![CDATA[ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 | 0), then | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 | the format is:</t> | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| | timestamp seconds | | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | timestamp fraction | | | timestamp seconds | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Hop_Lim | node_id | | | timestamp fraction | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | node_id(contd) | | | Hop_Lim | node_id | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Length | Schema Id | | | node_id(contd) | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | Length | Schema ID | | |||
| | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Opaque data | | | | | |||
| ~ ~ | | | | |||
| . . | | Opaque data | | |||
| . . | ~ ~ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | . . | |||
| . . | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| ]]></artwork> | ]]></artwork> | |||
| </figure></t> | -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </list></t> | </dd> | |||
| </dl> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="IOAM_proof_of_transit_option" numbered="true" toc="defaul | ||||
| t"> | ||||
| <name>IOAM Proof of Transit Option-Type</name> | ||||
| <t>The IOAM Proof of Transit Option-Type is used to support | ||||
| path or service function chain <xref target="RFC7665" | ||||
| format="default"/> verification use cases, i.e., prove that | ||||
| traffic transited a defined path. | ||||
| <section anchor="IOAM_proof_of_transit_option" | While the details on how the | |||
| title="IOAM Proof of Transit Option-Type"> | IOAM data for the Proof of Transit Option-Type is processed at IOAM | |||
| <t>IOAM Proof of Transit Option-Type is used to support path or service | encapsulating, decapsulating, and transit nodes are outside | |||
| function chain <xref target="RFC7665"/> verification use cases, i.e., | the scope of the document, Proof of Transit approaches share | |||
| prove that traffic transited a defined path. While details on how the | the need to uniquely identify a packet, as well as iteratively | |||
| IOAM data for the Proof-of-transit option is processed at IOAM | operate on a set of information that is handed from node to | |||
| encapsulating, decapsulating and transit nodes are outside the scope | node. Correspondingly, two pieces of information are added as | |||
| of the document, proof of transit approaches share the need to uniquely | IOAM-Data-Fields to the packet:</t> | |||
| identify a packet as well as iteratively operate on a set of | <dl newline="true" spacing="normal"> | |||
| information that is handed from node to node. Correspondingly, two | <dt>PktID:</dt> | |||
| pieces of information are added as IOAM-Data-Fields to the packet:</t> | <dd>unique identifier for the packet</dd> | |||
| <dt>Cumulative:</dt> | ||||
| <t><list style="symbols"> | <dd>information that is handed from node to node and | |||
| <t>PktID: Unique identifier for the packet.</t> | updated by every node according to a verification algorithm</dd> | |||
| </dl> | ||||
| <t>Cumulative: Information which is handed from node to node and | <t>The IOAM Proof of Transit Option-Type consist of a fixed-size | |||
| updated by every node according to a verification algorithm.</t> | "IOAM Proof of Transit Option header" and "IOAM Proof of Transit | |||
| </list>The IOAM Proof-of-Transit Option-Type consist of a fixed size | Option data fields":</t> | |||
| "IOAM proof of transit option header" and "IOAM proof of transit | <t>IOAM Proof of Transit Option header:</t> | |||
| option data fields":</t> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| <t><figure> | ||||
| <artwork><![CDATA[ | ||||
| IOAM proof of transit option header: | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Namespace-ID |IOAM POT Type | IOAM POT flags| | | Namespace-ID |IOAM POT-Type | IOAM POT flags| | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ]]></artwork> | ||||
| IOAM proof of transit Option-Type IOAM-Data-Fields MUST be | <t>IOAM Proof of Transit Option-Type IOAM-Data-Fields <bcp14>MUST</bcp14> | |||
| 4-octet aligned: | be | |||
| aligned by 4 octets:</t> | ||||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | POT Option data field determined by IOAM-POT-Type | | | POT Option data field determined by IOAM POT-Type | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure><list style="hanging"> | <dl newline="true" spacing="normal"> | |||
| <t hangText="Namespace-ID:">16-bit identifier of an | <dt>Namespace-ID:</dt> | |||
| <dd>16-bit identifier of an | ||||
| IOAM-Namespace. The Namespace-ID value of 0x0000 is defined as the | IOAM-Namespace. The Namespace-ID value of 0x0000 is defined as the | |||
| "Default-Namespace-ID" (see <xref target="ioam_namespaces"/>) | "Default-Namespace-ID" (see <xref target="ioam_namespaces" format="d | |||
| and MUST be known to all the nodes implementing | efault"/>) | |||
| and <bcp14>MUST</bcp14> be known to all the nodes impleme | ||||
| nting | ||||
| IOAM. For any other Namespace-ID value that does not match any | IOAM. For any other Namespace-ID value that does not match any | |||
| Namespace-ID the node is configured to operate on, the node MUST | Namespace-ID the node is configured to operate on, the node <bcp14>M | |||
| NOT change the contents of the IOAM-Data-Fields.</t> | UST | |||
| NOT</bcp14> change the contents of the IOAM-Data-Fields.</dd> | ||||
| <t hangText="IOAM POT Type:">8-bit identifier of a particular POT | <dt>IOAM POT-Type:</dt> | |||
| <dd> | ||||
| <t>8-bit identifier of a particular POT | ||||
| variant that specifies the POT data that is included. This | variant that specifies the POT data that is included. This | |||
| document defines POT Type 0:<list style="hanging"> | document defines IOAM POT-Type 0:</t> | |||
| <t hangText="0:">POT data is a 16 Octet field to carry | <dl newline="false" spacing="normal"> | |||
| data associated to POT procedures.</t> | <dt>0:</dt> | |||
| </list> | <dd>POT data is a 16-octet field to carry data associated to POT | |||
| If a node receives an IOAM POT Type value that it does not | procedures.</dd> | |||
| understand, the node MUST NOT change, add to, or remove | </dl> | |||
| the contents of the OAM-Data-Fields.</t> | <t> | |||
| If a node receives an IOAM POT-Type value that it does not | ||||
| <t hangText="IOAM POT flags:">8-bit. This document does not define | understand, the node <bcp14>MUST NOT</bcp14> change, add to, or remo | |||
| any flags. Bits 0-7 These bits are | ve | |||
| available for assignment, see <xref target="pot-flags-sec"/>. | the contents of the IOAM-Data-Fields.</t> | |||
| Bits which have not been assigned MUST be set to zero upon | </dd> | |||
| transmission and ignored upon receipt.</t> | <dt>IOAM POT flags:</dt> | |||
| <dd>8 bits. This document does not define any flags. Bits 0-7 are | ||||
| <t hangText="POT Option data:">Variable-length field. The type of | available for assignment (see <xref target="pot-flags-sec" format="def | |||
| which is determined by the IOAM-POT-Type.</t> | ault"/>). | |||
| </list></t> | Bits that have not been assigned <bcp14>MUST</bcp14> be set to zero up | |||
| on | ||||
| <section title="IOAM Proof of Transit Type 0"> | transmission and be ignored upon receipt.</dd> | |||
| <t><figure> | <dt>POT Option data:</dt> | |||
| <artwork><![CDATA[ | <dd>Variable-length field. The type of | |||
| IOAM proof of transit option of IOAM POT Type 0: | which is determined by the IOAM POT-Type.</dd> | |||
| </dl> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>IOAM Proof of Transit Type 0</name> | ||||
| <t>IOAM Proof of Transit Option of IOAM POT-Type 0:</t> | ||||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Namespace-ID |IOAM POT Type=0|R R R R R R R R| | | Namespace-ID |IOAM POT-Type=0|R R R R R R R R| | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+ | |||
| | PktID | | | | PktID | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ P | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ P | |||
| | PktID (contd) | O | | PktID (contd) | O | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ T | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ T | |||
| | Cumulative | | | | Cumulative | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | |||
| | Cumulative (contd) | | | | Cumulative (contd) | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+<-+ | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure><list style="hanging"> | <dl newline="true" spacing="normal"> | |||
| <t hangText="Namespace-ID:">16-bit identifier of an | <dt>Namespace-ID:</dt> | |||
| IOAM-Namespace (see <xref target="IOAM_proof_of_transit_option"/> | <dd>16-bit identifier of an | |||
| above).</t> | IOAM-Namespace (see <xref target="ioam_namespaces" format="default | |||
| "/> | ||||
| <t hangText="IOAM POT Type:">8-bit identifier of a particular | above).</dd> | |||
| <dt>IOAM POT-Type:</dt> | ||||
| <dd>8-bit identifier of a particular | ||||
| POT variant that specifies the POT data that is included | POT variant that specifies the POT data that is included | |||
| (see <xref target="IOAM_proof_of_transit_option"/> | (see <xref target="IOAM_proof_of_transit_option" format="default"/ | |||
| above). For this case here, IOAM POT Type is set to the value 0.</ | > | |||
| t> | above). For this case here, IOAM POT-Type is set to the value 0.</ | |||
| dd> | ||||
| <t hangText="Bit 0-7:">Undefined (see <xref target="IOAM_proof_of_ | <dt>Bit 0-7:</dt> | |||
| transit_option"/> | <dd>Undefined (see <xref target="IOAM_proof_of_transit_option" forma | |||
| above).</t> | t="default"/> | |||
| above).</dd> | ||||
| <t hangText="PktID:">64-bit packet identifier.</t> | <dt>PktID:</dt> | |||
| <dd>64-bit packet identifier.</dd> | ||||
| <t hangText="Cumulative:">64-bit Cumulative that is updated at | <dt>Cumulative:</dt> | |||
| <dd>64-bit Cumulative that is updated at | ||||
| specific nodes by processing per packet PktID field and | specific nodes by processing per packet PktID field and | |||
| configured parameters.</t> | configured parameters.</dd> | |||
| </list>Note: Larger or smaller sizes of "PktID" and "Cumulative" | </dl> | |||
| <aside><t>Note: Larger or smaller sizes of "PktID" and "Cumulative" | ||||
| data are feasible and could be required for certain deployments, | data are feasible and could be required for certain deployments, | |||
| e.g., in case of space constraints in the encapsulation protocols | e.g., in case of space constraints in the encapsulation protocols | |||
| used. Future documents could introduce different sizes of data for | used. Future documents could introduce different sizes of data for | |||
| "proof of transit".</t> | "Proof of Transit".</t></aside> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="IOAM_edge_to_edge_opt" numbered="true" toc="default"> | ||||
| <section anchor="IOAM_edge_to_edge_opt" | <name>IOAM Edge-to-Edge Option-Type</name> | |||
| title="IOAM Edge-to-Edge Option-Type"> | <t>The IOAM Edge-to-Edge Option-Type carries data that is added by | |||
| <t>The IOAM Edge-to-Edge Option-Type is to carry data that is added by | the IOAM encapsulating node and interpreted by the IOAM decapsulating | |||
| the IOAM encapsulating node and interpreted by IOAM decapsulating | node. The IOAM transit nodes <bcp14>MAY</bcp14> process the data but <bc | |||
| node. The IOAM transit nodes MAY process the data but MUST NOT modify | p14>MUST NOT</bcp14> modify | |||
| it.</t> | it.</t> | |||
| <t>The IOAM Edge-to-Edge Option-Type consist of a fixed-size "IOAM | ||||
| <t>The IOAM Edge-to-Edge Option-Type consist of a fixed size "IOAM | ||||
| Edge-to-Edge Option-Type header" and "IOAM Edge-to-Edge Option-Type | Edge-to-Edge Option-Type header" and "IOAM Edge-to-Edge Option-Type | |||
| data fields":</t> | data fields":</t> | |||
| <t>IOAM Edge-to-Edge Option-Type header:</t> | ||||
| <t><figure> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| IOAM Edge-to-Edge Option-Type header: | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Namespace-ID | IOAM-E2E-Type | | | Namespace-ID | IOAM E2E-Type | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ]]></artwork> | ||||
| IOAM Edge-to-Edge Option-Type IOAM-Data-Fields MUST | <t>The IOAM Edge-to-Edge Option-Type IOAM-Data-Fields <bcp14>MUST</bcp14> | |||
| be 4-octet aligned: | be aligned by 4 octets:</t> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | E2E Option data field determined by IOAM-E2E-Type | | | E2E Option data field determined by IOAM-E2E-Type | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure><list style="hanging"> | <dl newline="true" spacing="normal"> | |||
| <t hangText="Namespace-ID:">16-bit identifier of an | <dt>Namespace-ID:</dt> | |||
| <dd>16-bit identifier of an | ||||
| IOAM-Namespace. The Namespace-ID value of 0x0000 is defined as the | IOAM-Namespace. The Namespace-ID value of 0x0000 is defined as the | |||
| "Default-Namespace-ID" (see <xref target="ioam_namespaces"/>) | "Default-Namespace-ID" (see <xref target="ioam_namespaces" format="d | |||
| and MUST be known to all the nodes implementing | efault"/>) | |||
| and <bcp14>MUST</bcp14> be known to all the nodes impleme | ||||
| nting | ||||
| IOAM. For any other Namespace-ID value that does not match any | IOAM. For any other Namespace-ID value that does not match any | |||
| Namespace-ID the node is configured to operate on, then the node | Namespace-ID the node is configured to operate on, the node | |||
| MUST NOT change the contents of the IOAM-Data-Fields.</t> | <bcp14>MUST NOT</bcp14> change the contents of the IOAM-Data-Fields. | |||
| </dd> | ||||
| <t hangText="IOAM-E2E-Type:">A 16-bit identifier which specifies | <dt>IOAM-E2E-Type:</dt> | |||
| which data types are used in the E2E option data. The | <dd> | |||
| <t>16-bit identifier that specifies | ||||
| which data types are used in the E2E Option data. The | ||||
| IOAM-E2E-Type value is a bit field. The order of packing the E2E | IOAM-E2E-Type value is a bit field. The order of packing the E2E | |||
| option data field elements follows the bit order of the | Option data field elements follows the bit order of the | |||
| IOAM-E2E-Type field, as follows:<list hangIndent="9" | IOAM E2E-Type field as follows:</t> | |||
| style="hanging"> | <dl newline="false" spacing="normal" indent="9"> | |||
| <t hangText="Bit 0">(Most significant bit) When set indicates | <dt>Bit 0</dt> | |||
| <dd>Most significant bit. When set, it indicates the | ||||
| presence of a 64-bit sequence number added to a specific | presence of a 64-bit sequence number added to a specific | |||
| "packet group" which is used to detect packet loss, packet | "packet group" that is used to detect packet loss, packet | |||
| reordering, or packet duplication within the group. The | reordering, or packet duplication within the group. The | |||
| "packet group" is deployment dependent and defined at the IOAM | "packet group" is deployment dependent and defined at the IOAM | |||
| encapsulating node, e.g., by n-tuple based classification of | encapsulating node, e.g., by n-tuple-based classification of | |||
| packets. When this bit is set, "Bit 1" (for 32-bit sequence | packets. When this bit is set, "Bit 1" (for a 32-bit sequence | |||
| number, see below) MUST be zero.</t> | number, see below) <bcp14>MUST</bcp14> be zero.</dd> | |||
| <dt>Bit 1</dt> | ||||
| <t hangText="Bit 1">When set indicates presence of a 32-bit | <dd>When set, it indicates the presence of a 32-bit | |||
| sequence number added to a specific "packet group" which is | sequence number added to a specific "packet group" that is | |||
| used to detect packet loss, packet reordering, or packet | used to detect packet loss, packet reordering, or packet | |||
| duplication within that group. The "packet group" is | duplication within that group. The "packet group" is | |||
| deployment dependent and defined at the IOAM encapsulating | deployment dependent and defined at the IOAM encapsulating | |||
| node, e.g., by n-tuple based classification of packets. | node, e.g., by n-tuple-based classification of packets. | |||
| When this bit is set, "Bit 0" (for 64-bit sequence | When this bit is set, "Bit 0" (for a 64-bit sequence | |||
| number, see above) MUST be zero.</t> | number, see above) <bcp14>MUST</bcp14> be zero.</dd> | |||
| <dt>Bit 2</dt> | ||||
| <t hangText="Bit 2">When set indicates presence of timestamp | <dd>When set, it indicates the presence of timestamp | |||
| seconds, representing the time at which the packet entered the | seconds, representing the time at which the packet entered the | |||
| IOAM-domain. Within the IOAM encapsulating node, the time that | IOAM-Domain. Within the IOAM encapsulating node, the time that | |||
| the timestamp is retrieved can depend on the implementation. | the timestamp is retrieved can depend on the implementation. | |||
| Some possibilities are: 1) the time at which the packet was | Some possibilities are 1) the time at which the packet was | |||
| received by the node, 2) the time at which the packet was | received by the node, 2) the time at which the packet was | |||
| transmitted by the node, 3) when a tunnel encapsulation is | transmitted by the node, or 3) when a tunnel encapsulation is | |||
| used, the point at which the packet is encapsulated into the | used, the point at which the packet is encapsulated into the | |||
| tunnel. Each implementation has to document when the E2E | tunnel. Each implementation has to document when the E2E | |||
| timestamp that is going to be put in the packet is retrieved. | timestamp that is going to be put in the packet is retrieved. | |||
| This 4-octet field has three possible formats; based on either | This 4-octet field has three possible formats, based on either | |||
| PTP (see e.g., <xref target="RFC8877"/>), NTP <xref target="RFC5 | PTP (see e.g., <xref target="RFC8877" format="default"/>), NTP < | |||
| 905"/>, | xref | |||
| or POSIX <xref target="POSIX"/>. The three timestamp formats | target="RFC5905" format="default"/>, | |||
| are specified in <xref target="TimestampSec"/>. In all three | or POSIX <xref target="POSIX" format="default"/>. The three time | |||
| cases, the Timestamp Seconds field contains the 32 most | stamp | |||
| formats | ||||
| are specified in <xref target="TimestampSec" format="default"/>. | ||||
| In all | ||||
| three | ||||
| cases, the timestamp seconds field contains the 32 most | ||||
| significant bits of the timestamp format that is specified in | significant bits of the timestamp format that is specified in | |||
| <xref target="TimestampSec"/>. If a node is not capable of | <xref target="TimestampSec" format="default"/>. If a node is not capable of | |||
| populating this field, it assigns the value 0xFFFFFFFF. Note | populating this field, it assigns the value 0xFFFFFFFF. Note | |||
| that this is a legitimate value that is valid for 1 second in | that this is a legitimate value that is valid for 1 second in | |||
| approximately 136 years; the analyzer has to correlate several | approximately 136 years; the analyzer has to correlate several | |||
| packets or compare the timestamp value to its own time-of-day | packets or compare the timestamp value to its own time of day | |||
| in order to detect the error indication.</t> | in order to detect the error indication.</dd> | |||
| <dt>Bit 3</dt> | ||||
| <t hangText="Bit 3">When set indicates presence of timestamp | <dd>When set, it indicates the presence of timestamp | |||
| fraction, representing the time at which the packet entered | fraction, representing the time at which the packet entered | |||
| the IOAM-domain. This 4-octet field has three possible | the IOAM-Domain. This 4-octet field has three possible | |||
| formats; based on either PTP (see e.g., <xref target="RFC8877"/> | formats, based on either PTP (see e.g., <xref target="RFC8877" | |||
| ), NTP | format="default"/>), NTP | |||
| <xref target="RFC5905"/>, or POSIX <xref target="POSIX"/>. The | <xref target="RFC5905" format="default"/>, or POSIX <xref target | |||
| three timestamp formats are specified in <xref | ="POSIX" | |||
| target="TimestampSec"/>. In all three cases, the Timestamp | format="default"/>. The | |||
| three timestamp formats are specified in <xref target="Timestamp | ||||
| Sec" | ||||
| format="default"/>. In all three cases, the timestamp | ||||
| fraction field contains the 32 least significant bits of the | fraction field contains the 32 least significant bits of the | |||
| timestamp format that is specified in <xref | timestamp format that is specified in <xref target="TimestampSec | |||
| target="TimestampSec"/>. If a node is not capable of | " | |||
| format="default"/>. If a node is not capable of | ||||
| populating this field, it assigns the value 0xFFFFFFFF. Note | populating this field, it assigns the value 0xFFFFFFFF. Note | |||
| that this is a legitimate value in the NTP format, valid for | that this is a legitimate value in the NTP format, valid for | |||
| approximately 233 picoseconds in every second. If the NTP | approximately 233 picoseconds in every second. If the NTP | |||
| format is used the analyzer has to correlate several packets | format is used, the analyzer has to correlate several packets | |||
| in order to detect the error indication.</t> | in order to detect the error indication.</dd> | |||
| <dt>Bit 4-15</dt> | ||||
| <t hangText="Bit 4-15">Undefined. An IOAM encapsulating node | <dd>Undefined. An IOAM encapsulating node | |||
| MUST set the value of these bits to zero upon transmission and | <bcp14>MUST</bcp14> set the value of these bits to zero upon trans | |||
| ignore upon receipt.</t> | mission | |||
| </list></t> | and ignore them upon receipt.</dd> | |||
| </dl> | ||||
| <t hangText="E2E Option data:">Variable-length field. The type of | </dd> | |||
| which is determined by the IOAM-E2E-Type.</t> | <dt>E2E Option data:</dt> | |||
| </list></t> | <dd>Variable-length field. The type of | |||
| which is determined by the IOAM E2E-Type.</dd> | ||||
| </dl> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="TimestampSec" numbered="true" toc="default"> | ||||
| <section anchor="TimestampSec" title="Timestamp Formats"> | <name>Timestamp Formats</name> | |||
| <t>The IOAM-Data-Fields include a timestamp field which is represented | <t>The IOAM-Data-Fields include a timestamp field that is represented | |||
| in one of three possible timestamp formats. It is assumed that the | in one of three possible timestamp formats. It is assumed that the | |||
| management plane is responsible for determining which timestamp format | management plane is responsible for determining which timestamp format | |||
| is used.</t> | is used.</t> | |||
| <section anchor="PTPFromatSec" numbered="true" toc="default"> | ||||
| <section anchor="PTPFromatSec" title="PTP Truncated Timestamp Format"> | <name>PTP Truncated Timestamp Format</name> | |||
| <t>The Precision Time Protocol (PTP) uses | <t>The Precision Time Protocol (PTP) uses | |||
| an 80-bit timestamp format. The truncated timestamp format is a 64-bit | an 80-bit timestamp format. The truncated timestamp format is a 64-bit | |||
| field, which is the 64 least significant bits of the 80-bit PTP | field, which is the 64 least significant bits of the 80-bit PTP | |||
| timestamp. The PTP truncated format is specified in Section 4.3 of | timestamp. The PTP truncated format is specified in <xref target="RFC887 | |||
| <xref target="RFC8877"/>, and the details are | 7" section="4.3" sectionFormat="of" format="default"/>, and the details are | |||
| presented below for the sake of completeness.</t> | presented below for the sake of completeness.</t> | |||
| <figure align="center" anchor="PTPFormat" | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| title="PTP Truncated Timestamp Format"> | 0 1 2 3 | |||
| <artwork align="left"><![CDATA[ | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| 0 1 2 3 | | Seconds | | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | Nanoseconds | | |||
| | Seconds | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ]]></artwork> | |||
| | Nanoseconds | | ||||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| ]]></artwork> | ||||
| </figure> | ||||
| <t>Timestamp field format: <list hangIndent="10" style="empty"> | ||||
| <t>Seconds: specifies the integer portion of the number of seconds | ||||
| since the PTP epoch.</t> | ||||
| <t>+ Size: 32 bits.</t> | ||||
| <t>+ Units: seconds.</t> | ||||
| <t>Nanoseconds: specifies the fractional portion of the number of | ||||
| seconds since the PTP epoch.</t> | ||||
| <t>+ Size: 32 bits.</t> | ||||
| <t>+ Units: nanoseconds. The value of this field is in the range 0 | ||||
| to (10^9)-1.</t> | ||||
| </list></t> | ||||
| <t>Epoch: <list hangIndent="10" style="empty"> | ||||
| <t>PTP epoch. For details see e.g., <xref target="RFC8877"/>.</t> | ||||
| </list></t> | ||||
| <t>Resolution: <list hangIndent="10" style="empty"> | ||||
| <t>The resolution is 1 nanosecond.</t> | ||||
| </list></t> | ||||
| <t>Wraparound: <list hangIndent="10" style="empty"> | ||||
| <t>This time format wraps around every 2^32 seconds, which is | ||||
| roughly 136 years. The next wraparound will occur in the year | ||||
| 2106.</t> | ||||
| </list></t> | ||||
| <t>Synchronization Aspects: <list hangIndent="10" style="empty"> | <dl newline="true" spacing="normal"> | |||
| <t>It is assumed that nodes that run this protocol are | <dt>Timestamp field format:</dt> | |||
| synchronized among themselves. Nodes MAY be synchronized to a | <dd> | |||
| global reference time. Note that if PTP is used for synchronization, | <dl newline="false" spacing="normal"> | |||
| the timestamp | <dt>Seconds:</dt> | |||
| MAY be derived from the PTP-synchronized clock, allowing the | <dd><t>Specifies the integer portion of the number of seconds | |||
| timestamp to be measured with respect to the clock of an PTP | since the PTP epoch</t> | |||
| Grandmaster clock.</t> | <dl newline="false" spacing="normal"> | |||
| </list></t> | <dt>Size:</dt> | |||
| <dd>32 bits</dd> | ||||
| <dt>Units:</dt> | ||||
| <dd>seconds</dd> | ||||
| </dl></dd> | ||||
| <dt>Nanoseconds:</dt> | ||||
| <dd><t>Specifies the fractional portion of the number of | ||||
| seconds since the PTP epoch</t> | ||||
| <dl newline="false" spacing="normal"> | ||||
| <dt>Size:</dt> | ||||
| <dd>32 bits</dd> | ||||
| <dt>Units:</dt> | ||||
| <dd>nanoseconds. The value of this field is in the range 0 | ||||
| to (10<sup>9</sup>)-1.</dd> | ||||
| </dl></dd> | ||||
| </dl></dd> | ||||
| <dt>Epoch: </dt> | ||||
| <dd>PTP epoch. For details, see e.g., <xref target="RFC8877" | ||||
| format="default"/>.</dd> | ||||
| <dt>Resolution: </dt> | ||||
| <dd>The resolution is 1 nanosecond.</dd> | ||||
| <dt>Wraparound:</dt> | ||||
| <dd>This time format wraps around every 2<sup>32</sup> seconds, which is | ||||
| roughly 136 years. The next wraparound will occur in the year | ||||
| 2106.</dd> | ||||
| <dt>Synchronization Aspects: </dt> | ||||
| <dd>It is assumed that the nodes that run this protocol are | ||||
| synchronized among themselves. Nodes <bcp14>MAY</bcp14> be | ||||
| synchronized to a global reference time. Note that if PTP is | ||||
| used for synchronization, the timestamp <bcp14>MAY</bcp14> be | ||||
| derived from the PTP-synchronized clock, allowing the | ||||
| timestamp to be measured with respect to the clock of a PTP | ||||
| Grandmaster clock.</dd> | ||||
| </dl> | ||||
| </section> | </section> | |||
| <section anchor="NTPFormatSec" numbered="true" toc="default"> | ||||
| <section anchor="NTPFormatSec" title="NTP 64-bit Timestamp Format"> | <name>NTP 64-Bit Timestamp Format</name> | |||
| <t>The Network Time Protocol (NTP) <xref target="RFC5905"/> timestamp | <t>The Network Time Protocol (NTP) <xref target="RFC5905" format="defaul | |||
| format is 64 bits long. This specification uses the | t"/> | |||
| NTP timestamp format that is specified in Section 4.2.1 of | timestamp format is 64 bits long. This specification uses the | |||
| <xref target="RFC8877"/>, and the details are | NTP timestamp format that is specified in <xref target="RFC8877" section= | |||
| "4.2.1" sectionFormat="of" format="default"/>, and the details are | ||||
| presented below for the sake of completeness.</t> | presented below for the sake of completeness.</t> | |||
| <artwork align="left" name="" type="" alt=""><![CDATA[ | ||||
| <figure align="center" anchor="NTPFormat" | 0 1 2 3 | |||
| title="NTP [RFC5905] 64-bit Timestamp Format"> | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| <artwork align="left"><![CDATA[ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Seconds | | ||||
| 0 1 2 3 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | | Fraction | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Seconds | | ]]></artwork> | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | <dl newline="true" spacing="normal"> | |||
| | Fraction | | <dt>Timestamp field format: </dt> | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | <dd> | |||
| ]]></artwork> | <dl newline="false" spacing="normal"> | |||
| </figure> | <dt>Seconds:</dt> | |||
| <dd><t>specifies the integer portion of the number of seconds | ||||
| <t>Timestamp field format: <list hangIndent="10" style="empty"> | since the NTP epoch</t> | |||
| <t>Seconds: specifies the integer portion of the number of seconds | <dl newline="false" spacing="normal"> | |||
| since the NTP epoch.</t> | <dt>Size:</dt> | |||
| <dd>32 bits</dd> | ||||
| <t>+ Size: 32 bits.</t> | <dt>Units:</dt> | |||
| <dd>seconds</dd> | ||||
| <t>+ Units: seconds.</t> | </dl></dd> | |||
| <dt>Fraction:</dt> | ||||
| <t>Fraction: specifies the fractional portion of the number of | <dd><t>specifies the fractional portion of the number of | |||
| seconds since the NTP epoch.</t> | seconds since the NTP epoch</t> | |||
| <dl newline="false" spacing="normal"> | ||||
| <t>+ Size: 32 bits.</t> | <dt>Size:</dt> | |||
| <dd>32 bits</dd> | ||||
| <t>+ Units: the unit is 2^(-32) seconds, which is roughly equal to | <dt>Units:</dt> | |||
| 233 picoseconds.</t> | <dd>the unit is 2<sup>(-32)</sup> seconds, which is roughly equal t | |||
| </list></t> | o | |||
| 233 picoseconds.</dd> | ||||
| <t>Epoch: <list hangIndent="10" style="empty"> | </dl></dd> | |||
| <t>NTP Epoch. For details see <xref target="RFC5905"/>.</t> | </dl></dd> | |||
| </list></t> | <dt>Epoch: </dt> | |||
| <dd>NTP epoch. For details, see <xref target="RFC5905" format="default"/ | ||||
| <t>Resolution: <list hangIndent="10" style="empty"> | >.</dd> | |||
| <t>The resolution is 2^(-32) seconds.</t> | <dt>Resolution:</dt> | |||
| </list></t> | <dd>The resolution is 2<sup>(-32)</sup> seconds.</dd> | |||
| <dt>Wraparound:</dt> | ||||
| <t>Wraparound: <list hangIndent="10" style="empty"> | <dd>This time format wraps around every 2<sup>32</sup> seconds, which is | |||
| <t>This time format wraps around every 2^32 seconds, which is | ||||
| roughly 136 years. The next wraparound will occur in the year | roughly 136 years. The next wraparound will occur in the year | |||
| 2036.</t> | 2036.</dd> | |||
| </list></t> | <dt>Synchronization Aspects:</dt> | |||
| <dd>Nodes that use this timestamp format will typically be | ||||
| <t>Synchronization Aspects: <list hangIndent="10" style="empty"> | synchronized to UTC using NTP <xref target="RFC5905" format="default"/>. | |||
| <t>Nodes that use this timestamp format will typically be | Thus, the | |||
| synchronized to UTC using NTP <xref target="RFC5905"/>. Thus, the | timestamp <bcp14>MAY</bcp14> be derived from the NTP-synchronized clock, | |||
| timestamp MAY be derived from the NTP-synchronized clock, allowing | allowing | |||
| the timestamp to be measured with respect to the clock of an NTP | the timestamp to be measured with respect to the clock of an NTP | |||
| server.</t> | server.</dd> | |||
| </dl> | ||||
| </list></t> | ||||
| </section> | </section> | |||
| <section anchor="POSIXFormatSec" numbered="true" toc="default"> | ||||
| <section anchor="POSIXFormatSec" title="POSIX-based Timestamp Format"> | <name>POSIX-Based Timestamp Format</name> | |||
| <t>This timestamp format is based on the POSIX time format <xref | <t>This timestamp format is based on the POSIX time format <xref target= | |||
| target="POSIX"/>. The detailed specification of the timestamp format | "POSIX" format="default"/>. The detailed specification of the timestamp format | |||
| used in this document is presented below.</t> | used in this document is presented below.</t> | |||
| <artwork align="left" name="" type="" alt=""><![CDATA[ | ||||
| <figure align="center" anchor="POSIXFormat" | 0 1 2 3 | |||
| title="POSIX-based Timestamp Format"> | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| <artwork align="left"><![CDATA[ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Seconds | | ||||
| 0 1 2 3 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | | Microseconds | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Seconds | | ]]></artwork> | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | <dl newline="true" spacing="normal"> | |||
| | Microseconds | | <dt>Timestamp field format:</dt> | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | <dd> | |||
| ]]></artwork> | <dl newline="false" spacing="normal"> | |||
| </figure> | <dt>Seconds:</dt> | |||
| <dd><t>specifies the integer portion of the number of seconds | ||||
| <t>Timestamp field format: <list hangIndent="10" style="empty"> | since the POSIX epoch</t> | |||
| <t>Seconds: specifies the integer portion of the number of seconds | <dl newline="false" spacing="normal"> | |||
| since the POSIX epoch.</t> | <dt>Size:</dt> | |||
| <dd>32 bits</dd> | ||||
| <t>+ Size: 32 bits.</t> | <dt>Units:</dt> | |||
| <dd>seconds</dd> | ||||
| <t>+ Units: seconds.</t> | </dl></dd> | |||
| <dt>Microseconds:</dt> | ||||
| <t>Microseconds: specifies the fractional portion of the number of | <dd><t>specifies the fractional portion of the number of | |||
| seconds since the POSIX epoch.</t> | seconds since the POSIX epoch</t> | |||
| <dl newline="false" spacing="normal"> | ||||
| <t>+ Size: 32 bits.</t> | <dt>Size:</dt> | |||
| <dd>32 bits</dd> | ||||
| <t>+ Units: the unit is microseconds. The value of this field is | <dt>Units:</dt> | |||
| in the range 0 to (10^6)-1.</t> | <dd>the unit is microseconds. The value of this field is | |||
| </list></t> | in the range 0 to (10<sup>6</sup>)-1.</dd> | |||
| </dl></dd> | ||||
| <t>Epoch: <list hangIndent="10" style="empty"> | </dl></dd> | |||
| <t>POSIX epoch. For details, see <xref target="POSIX"/>, appendix A. | <dt>Epoch:</dt> | |||
| 4.16.</t> | <dd>POSIX epoch. For details, see <xref target="POSIX" format="defau | |||
| </list></t> | lt"/>, | |||
| Appendix A.4.16.</dd> | ||||
| <t>Resolution: <list hangIndent="10" style="empty"> | <dt>Resolution:</dt> | |||
| <t>The resolution is 1 microsecond.</t> | <dd>The resolution is 1 microsecond.</dd> | |||
| </list></t> | <dt>Wraparound: </dt> | |||
| <dd>This time format wraps around every 2<sup>32</sup> seconds, whic | ||||
| <t>Wraparound: <list hangIndent="10" style="empty"> | h is | |||
| <t>This time format wraps around every 2^32 seconds, which is | ||||
| roughly 136 years. The next wraparound will occur in the year | roughly 136 years. The next wraparound will occur in the year | |||
| 2106.</t> | 2106.</dd> | |||
| </list></t> | <dt>Synchronization Aspects: </dt> | |||
| <dd>It is assumed that nodes that use this timestamp format run the | ||||
| <t>Synchronization Aspects: <list hangIndent="10" style="empty"> | Linux operating system and hence use the POSIX time. In some | |||
| <t>It is assumed that nodes that use this timestamp format run the | cases, nodes <bcp14>MAY</bcp14> be synchronized to UTC using a synch | |||
| Linux operating system, and hence use the POSIX time. In some | ronization | |||
| cases nodes MAY be synchronized to UTC using a synchronization | ||||
| mechanism that is outside the scope of this document, such as NTP | mechanism that is outside the scope of this document, such as NTP | |||
| <xref target="RFC5905"/>. Thus, the timestamp MAY be derived from | <xref target="RFC5905" format="default"/>. Thus, the timestamp | |||
| <bcp14>MAY</bcp14> be derived from | ||||
| the NTP-synchronized clock, allowing the timestamp to be measured | the NTP-synchronized clock, allowing the timestamp to be measured | |||
| with respect to the clock of an NTP server.</t> | with respect to the clock of an NTP server.</dd> | |||
| </list></t> | </dl> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="export" numbered="true" toc="default"> | ||||
| <section anchor="export" title="IOAM Data Export"> | <name>IOAM Data Export</name> | |||
| <t>IOAM nodes collect information for packets traversing a domain that | <t>IOAM nodes collect information for packets traversing a domain that | |||
| supports IOAM. IOAM decapsulating nodes as well as IOAM transit nodes | supports IOAM. IOAM decapsulating nodes, as well as IOAM transit nodes, | |||
| can choose to retrieve IOAM information from the packet, process the | can choose to retrieve IOAM information from the packet, process the | |||
| information further and export the information using e.g., IPFIX. The | information further, and export the information using e.g., IP Flow Inform | |||
| mechanisms and associated data formats for exporting IOAM data is | ation Export | |||
| (IPFIX). The | ||||
| mechanisms and associated data formats for exporting IOAM data are | ||||
| outside the scope of this document.</t> | outside the scope of this document.</t> | |||
| <t>A way to perform raw data export of IOAM data | <t>A way to perform raw data export of IOAM data | |||
| using IPFIX is discussed in <xref | using IPFIX is discussed in <xref target="I-D.spiegel-ippm-ioam-rawexport" | |||
| target="I-D.spiegel-ippm-ioam-rawexport"/>.</t> | format="default"/>.</t> | |||
| </section> | </section> | |||
| <section anchor="IANA" numbered="true" toc="default"> | ||||
| <section anchor="IANA" title="IANA Considerations"> | <name>IANA Considerations</name> | |||
| <t>This document requests the following IANA Actions.</t> | <t>IANA has defined a registry group named | |||
| "In Situ OAM (IOAM)".</t> | ||||
| <t>IANA is requested to define a registry group named | <t>This group includes the following registries:</t> | |||
| "In-Situ OAM (IOAM) Protocol Parameters".</t> | <ul empty="true" spacing="normal"> | |||
| <li>IOAM Option-Type</li> | ||||
| <t>This group will include the following registries:</t> | <li>IOAM Trace-Type</li> | |||
| <li>IOAM Trace-Flags</li> | ||||
| <t><list style="empty"> | <li>IOAM POT-Type</li> | |||
| <t>IOAM Option-Type</t> | <li>IOAM POT-Flags</li> | |||
| <li>IOAM E2E-Type</li> | ||||
| <t>IOAM Trace-Type</t> | <li>IOAM Namespace-ID</li> | |||
| </ul> | ||||
| <t>IOAM Trace-Flags</t> | <t>The subsequent subsections detail the registries therein | |||
| contained.</t> | ||||
| <t>IOAM POT-Type</t> | <section anchor="IOAM-type-registry" numbered="true" toc="default"> | |||
| <name>IOAM Option-Type Registry</name> | ||||
| <t>IOAM POT-Flags</t> | <t>This registry defines 128 code points for the IOAM | |||
| Option-Type field for identifying IOAM-Option-Types, as | ||||
| <t>IOAM E2E-Type</t> | explained in <xref target="IOAM_option_format" | |||
| format="default"/>. The following code points are defined in | ||||
| <t>IOAM Namespace-ID</t> | this document:</t> | |||
| </list></t> | <dl newline="false" spacing="normal"> | |||
| <dt>0:</dt> | ||||
| <t>The subsequent sub-sections detail the registries herein | <dd>IOAM Pre-allocated Trace Option-Type</dd> | |||
| contained.</t> | <dt>1:</dt> | |||
| <dd>IOAM Incremental Trace Option-Type</dd> | ||||
| <section anchor="IOAM-type-registry" title="IOAM Option-Type Registry"> | <dt>2:</dt> | |||
| <t>This registry defines 128 code points for the IOAM Option-Type | <dd>IOAM POT Option-Type</dd> | |||
| field for identifying IOAM Option-Types as explained in <xref | <dt>3:</dt> | |||
| target="IOAM_option_format"/>. The following code points are defined | <dd>IOAM E2E Option-Type</dd> | |||
| in this draft:</t> | </dl> | |||
| <t>Code points 4-127 are available for assignment via the "IETF Review" | ||||
| <t><list style="hanging"> | process, | |||
| <t hangText="0">IOAM Pre-allocated Trace Option-Type</t> | as per <xref target="RFC8126" format="default"/>.</t> | |||
| <t>New registration requests <bcp14>MUST</bcp14> use the following templ | ||||
| <t hangText="1">IOAM Incremental Trace Option-Type</t> | ate:</t> | |||
| <dl newline="false" spacing="normal"> | ||||
| <t hangText="2">IOAM POT Option-Type</t> | <dt>Name:</dt> | |||
| <dd>name of the newly registered Option-Type</dd> | ||||
| <t hangText="3">IOAM E2E Option-Type</t> | <dt>Code point:</dt> | |||
| </list>4 - 127 are available for assignment via "IETF Review" process | <dd>desired value of the requested code point</dd> | |||
| as per <xref target="RFC8126"/>.</t> | <dt>Description:</dt> | |||
| <dd>brief description of the newly registered Option-Type</dd> | ||||
| <t>New registration requests MUST use the following template:</t> | <dt>Reference:</dt> | |||
| <dd>reference to the document that defines the new Option-Type</dd> | ||||
| <t><list style="hanging"> | </dl> | |||
| <t hangText="Name:">Name of the newly registered Option-Type.</t> | <t>The evaluation of a new registration request <bcp14>MUST</bcp14> also | |||
| include | ||||
| <t hangText="Code point:">Desired value of the requested code poi | checking whether the new IOAM-Option-Type includes an | |||
| nt.</t> | ||||
| <t hangText="Description:">Brief description of the newly registe | ||||
| red Option-Type.</t> | ||||
| <t hangText="Reference:">Reference to the document that defines t | ||||
| he new Option-Type.</t> | ||||
| </list></t> | ||||
| <t>The evaluation of a new registration request MUST also include | ||||
| checking whether the new IOAM Option-Type includes an | ||||
| IOAM-Namespace field and that the IOAM-Namespace field is the first | IOAM-Namespace field and that the IOAM-Namespace field is the first | |||
| field in the newly defined header of the new Option-Type.</t> | field in the newly defined header of the new Option-Type.</t> | |||
| </section> | </section> | |||
| <section anchor="ioam-trace-type-registry" numbered="true" toc="default"> | ||||
| <name>IOAM Trace-Type Registry</name> | ||||
| <t>This registry defines code points for each bit in the 24-bit | ||||
| IOAM Trace-Type field for the Pre-allocated Trace Option-Type and Increm | ||||
| ental | ||||
| Trace Option-Type defined in <xref target="IOAM_tracing_option" format=" | ||||
| default"/>. Bits 0-11 are defined in this document in | ||||
| <xref target="IOAMTraceType" format="none">Paragraph 5</xref> of <xref t | ||||
| arget="TraceOptionDef" format="default"/>:</t> | ||||
| <section anchor="ioam-trace-type-registry" title="IOAM Trace-Type Registry | <dl newline="false" spacing="normal"> | |||
| "> | <dt>Bit 0:</dt> | |||
| <t>This registry defines code point for each bit in the 24-bit | <dd>hop_Lim and node_id in short format</dd> | |||
| IOAM-Trace-Type field for Pre-allocated Trace-Option-Type and Incrementa | <dt>Bit 1:</dt> | |||
| l | <dd>ingress_if_id and egress_if_id in short | |||
| Trace-Option-Type defined in <xref target="IOAM_tracing_option"/>. The | format</dd> | |||
| meaning of Bits 0 - 11 is defined in this document in | <dt>Bit 2:</dt> | |||
| <xref target="IOAMTraceType"/> of <xref target="TraceOptionDef"/>:</t> | <dd>timestamp seconds</dd> | |||
| <dt>Bit 3:</dt> | ||||
| <t><list style="hanging"> | <dd>timestamp fraction</dd> | |||
| <t hangText="Bit 0">hop_Lim and node_id in short format</t> | <dt>Bit 4:</dt> | |||
| <dd>transit delay</dd> | ||||
| <t hangText="Bit 1">ingress_if_id and egress_if_id in short | <dt>Bit 5:</dt> | |||
| format</t> | <dd>namespace-specific data in short format</dd> | |||
| <dt>Bit 6:</dt> | ||||
| <t hangText="Bit 2">timestamp seconds</t> | <dd>queue depth</dd> | |||
| <dt>Bit 7:</dt> | ||||
| <t hangText="Bit 3">timestamp fraction</t> | <dd>checksum complement</dd> | |||
| <dt>Bit 8:</dt> | ||||
| <t hangText="Bit 4">transit delay</t> | <dd>hop_Lim and node_id in wide format</dd> | |||
| <dt>Bit 9:</dt> | ||||
| <t hangText="Bit 5">namespace specific data in short format</t> | <dd>ingress_if_id and egress_if_id in wide | |||
| format</dd> | ||||
| <t hangText="Bit 6">queue depth</t> | <dt>Bit 10:</dt> | |||
| <dd>namespace-specific data in wide format</dd> | ||||
| <t hangText="Bit 7">checksum complement</t> | <dt>Bit 11:</dt> | |||
| <dd>buffer occupancy</dd> | ||||
| <t hangText="Bit 8">hop_Lim and node_id in wide format</t> | <dt>Bit 22:</dt> | |||
| <dd>variable-length Opaque State Snapshot</dd> | ||||
| <t hangText="Bit 9">ingress_if_id and egress_if_id in wide | <dt>Bit 23:</dt> | |||
| format</t> | <dd>reserved</dd> | |||
| </dl> | ||||
| <t hangText="Bit 10">namespace specific data in wide format</t> | <t>Bits 12-21 are available for assignment | |||
| via the "IETF Review" process, as per <xref target="RFC8126" format="def | ||||
| <t hangText="Bit 11">buffer occupancy</t> | ault"/>.</t> | |||
| <t>New registration requests <bcp14>MUST</bcp14> use the following templ | ||||
| <t hangText="Bit 22">variable length Opaque State Snapshot</t> | ate:</t> | |||
| <dl newline="false" spacing="normal"> | ||||
| <t hangText="Bit 23">reserved</t> | <dt>Bit:</dt> | |||
| </list> The meaning for Bits 12 - 21 are available for assignment | <dd>desired bit to be allocated in the 24-bit | |||
| via "IETF Review" process as per <xref target="RFC8126"/>.</t> | IOAM Trace Option-Type field for the Pre-allocated Trace Option-Typ | |||
| e | ||||
| <t>New registration requests MUST use the following template:</t> | and Incremental Trace Option-Type</dd> | |||
| <dt>Description:</dt> | ||||
| <t><list style="hanging"> | <dd>brief description of the newly registered bit</dd> | |||
| <t hangText="Bit:">Desired bit to be allocated in the 24-bit | <dt>Reference:</dt> | |||
| IOAM Trace-Option-Type field for Pre-allocated Trace-Option-Type | <dd>reference to the document that defines the new bit</dd> | |||
| and Incremental Trace-Option-Type.</t> | </dl> | |||
| <t hangText="Description:">Brief description of the newly registe | ||||
| red bit.</t> | ||||
| <t hangText="Reference:">Reference to the document that defines t | ||||
| he new bit.</t> | ||||
| </list></t> | ||||
| </section> | </section> | |||
| <section anchor="Flags-Registry-Sec" numbered="true" toc="default"> | ||||
| <section anchor="Flags-Registry-Sec" title="IOAM Trace-Flags Registry"> | <name>IOAM Trace-Flags Registry</name> | |||
| <t>This registry defines code points for each bit in the 4 bit flags | <t>This registry defines code points for each bit in the 4-bit flags | |||
| for the Pre-allocated trace option and for the Incremental trace | for the Pre-allocated Trace-Option and Incremental Trace-Option defined | |||
| option defined in <xref target="IOAM_tracing_option"/>. The meaning of | in | |||
| <xref target="IOAM_tracing_option" format="default"/>. The | ||||
| meaning of | ||||
| Bit 0 (the most significant bit) for trace flags is defined in this | Bit 0 (the most significant bit) for trace flags is defined in this | |||
| document in <xref target="TraceFlags"/> of <xref | document in <xref target="TraceFlags" format="none">Paragraph 3</xref> o | |||
| target="TraceOptionDef"/>:</t> | f <xref | |||
| target="TraceOptionDef" format="default"/>:</t> | ||||
| <t><list style="hanging"> | <dl newline="false" spacing="normal"> | |||
| <t hangText="Bit 0">"Overflow" (O-bit)</t> | <dt>Bit 0:</dt> | |||
| </list>Bit 1 - 3 are available for assignment via "IETF Review" | <dd>"Overflow" (O-bit)</dd> | |||
| process as per <xref target="RFC8126"/>.</t> | </dl> | |||
| <t>Bits 1-3 are available for assignment via the "IETF Review" | ||||
| <t>New registration requests MUST use the following template:</t> | process, as per <xref target="RFC8126" format="default"/>.</t> | |||
| <t>New registration requests <bcp14>MUST</bcp14> use the following templ | ||||
| <t><list style="hanging"> | ate:</t> | |||
| <t hangText="Bit:">Desired bit to be allocated | <dl newline="false" spacing="normal"> | |||
| in the 8 bit flags field of the Pre-allocated | <dt>Bit:</dt> | |||
| Trace-Option-Type and for the Incremental Trace-Option-Ty | <dd>desired bit to be allocated | |||
| pe.</t> | in the 8-bit flags field of the Pre-allocated | |||
| Trace Option-Type and Incremental Trace Option-Type</dd> | ||||
| <t hangText="Description:">Brief description of the newly registe | <dt>Description:</dt> | |||
| red bit.</t> | <dd>brief description of the newly registered bit</dd> | |||
| <dt>Reference:</dt> | ||||
| <t hangText="Reference:">Reference to the document that defines t | <dd>reference to the document that defines the new bit</dd> | |||
| he new bit.</t> | </dl> | |||
| </list></t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="IOAM POT-Type Registry"> | <name>IOAM POT-Type Registry</name> | |||
| <t>This registry defines 256 code points to define IOAM POT Type for | <t>This registry defines 256 code points to define the IOAM POT-Type for | |||
| IOAM proof of transit option <xref | the | |||
| target="IOAM_proof_of_transit_option"/>. The code point value 0 is | IOAM Proof of Transit Option (<xref target="IOAM_proof_of_transit_option | |||
| " | ||||
| format="default"/>). The code point value 0 is | ||||
| defined in this document:</t> | defined in this document:</t> | |||
| <dl newline="false" spacing="normal"> | ||||
| <t><list style="hanging"> | <dt>0:</dt> | |||
| <t hangText="0:">16 Octet POT data</t> | <dd>16-Octet POT data</dd> | |||
| </list> 1 - 255 are available for assignment via "IETF Review" | </dl> | |||
| process as per <xref target="RFC8126"/>.</t> | <t>Code points 1-255 are available for assignment via the "IETF Review" | |||
| process, as per <xref target="RFC8126" format="default"/>.</t> | ||||
| <t>New registration requests MUST use the following template:</t> | <t>New registration requests <bcp14>MUST</bcp14> use the following templ | |||
| ate:</t> | ||||
| <t><list style="hanging"> | <dl newline="false" spacing="normal"> | |||
| <t hangText="Name:">Name of the newly registered POT-Type.</t> | <dt>Name:</dt> | |||
| <dd>name of the newly registered POT-Type</dd> | ||||
| <t hangText="Code point:">Desired value of the requested code poi | <dt>Code point:</dt> | |||
| nt.</t> | <dd>desired value of the requested code point</dd> | |||
| <dt>Description:</dt> | ||||
| <t hangText="Description:">Brief description of the newly registe | <dd>brief description of the newly registered POT-Type</dd> | |||
| red POT-Type.</t> | <dt>Reference:</dt> | |||
| <dd>reference to the document that defines the new POT-Type</dd> | ||||
| <t hangText="Reference:">Reference to the document that defines t | </dl> | |||
| he new POT-Type.</t> | ||||
| </list></t> | ||||
| </section> | </section> | |||
| <section anchor="pot-flags-sec" numbered="true" toc="default"> | ||||
| <section anchor="pot-flags-sec" title="IOAM POT-Flags Registry"> | <name>IOAM POT-Flags Registry</name> | |||
| <t>This registry defines code points for each bit in the 8 bit flags | <t>This registry defines code points for each bit in the 8-bit flags | |||
| for IOAM POT Option-Type defined in <xref | for the IOAM POT Option-Type defined in <xref target="IOAM_proof_of_tran | |||
| target="IOAM_proof_of_transit_option"/>. </t> | sit_option" | |||
| format="default"/>. </t> | ||||
| <t>The meaning for Bits 0 - 7 are available for assignment via | <t>Bits 0-7 are available for assignment via the | |||
| "IETF Review" process as per <xref target="RFC8126"/>.</t> | "IETF Review" process, as per <xref target="RFC8126" format="default"/>. | |||
| </t> | ||||
| <t>New registration requests MUST use the following template:</t> | <t>New registration requests <bcp14>MUST</bcp14> use the following templ | |||
| ate:</t> | ||||
| <t><list style="hanging"> | <dl newline="false" spacing="normal"> | |||
| <t hangText="Bit:">Desired bit to be allocated | <dt>Bit:</dt> | |||
| in the 8 bit flags field of the IOAM POT Option-Type.</t> | <dd>desired bit to be allocated | |||
| in the 8-bit flags field of the IOAM POT Option-Type</dd> | ||||
| <t hangText="Description:">Brief description of the newly registe | <dt>Description:</dt> | |||
| red bit.</t> | <dd>brief description of the newly registered bit</dd> | |||
| <dt>Reference:</dt> | ||||
| <t hangText="Reference:">Reference to the document that defines t | <dd>reference to the document that defines the new bit</dd> | |||
| he new bit.</t> | </dl> | |||
| </list></t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="IOAM E2E-Type Registry"> | <name>IOAM E2E-Type Registry</name> | |||
| <t>This registry defines code points for each bit in the 16 bit | <t>This registry defines code points for each bit in the 16-bit | |||
| IOAM-E2E-Type field for IOAM E2E option <xref | IOAM E2E-Type field for the IOAM E2E Option (<xref target="IOAM_edge_to_ | |||
| target="IOAM_edge_to_edge_opt"/>. The meaning of Bit 0 - 3 are defined | edge_opt" | |||
| format="default"/>). Bits 0-3 are defined | ||||
| in this document:</t> | in this document:</t> | |||
| <dl newline="false" spacing="normal"> | ||||
| <t><list style="hanging"> | <dt>Bit 0:</dt> | |||
| <t hangText="Bit 0">64-bit sequence number</t> | <dd>64-bit sequence number</dd> | |||
| <dt>Bit 1:</dt> | ||||
| <t hangText="Bit 1">32-bit sequence number</t> | <dd>32-bit sequence number</dd> | |||
| <dt>Bit 2:</dt> | ||||
| <t hangText="Bit 2">timestamp seconds</t> | <dd>timestamp seconds</dd> | |||
| <dt>Bit 3:</dt> | ||||
| <t hangText="Bit 3">timestamp fraction</t> | <dd>timestamp fraction</dd> | |||
| </list> The meaning of Bits 4 - 15 are available for assignment via | </dl> | |||
| "IETF Review" process as per <xref target="RFC8126"/>.</t> | <t>Bits 4-15 are available for assignment via the | |||
| "IETF Review" process, as per <xref target="RFC8126" format="default"/>. | ||||
| <t>New registration requests MUST use the following template:</t> | </t> | |||
| <t>New registration requests <bcp14>MUST</bcp14> use the following templ | ||||
| <t><list style="hanging"> | ate:</t> | |||
| <t hangText="Bit:">Desired bit to be allocated | <dl newline="false" spacing="normal"> | |||
| in the 16 bit IOAM-E2E-Type field.</t> | <dt>Bit:</dt> | |||
| <dd>desired bit to be allocated | ||||
| <t hangText="Description:">Brief description of the newly registe | in the 16-bit IOAM E2E-Type field</dd> | |||
| red bit.</t> | <dt>Description:</dt> | |||
| <dd>brief description of the newly registered bit</dd> | ||||
| <t hangText="Reference:">Reference to the document that defines t | <dt>Reference:</dt> | |||
| he new bit.</t> | <dd>reference to the document that defines the new bit</dd> | |||
| </list></t> | </dl> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="IOAM Namespace-ID Registry "> | <name>IOAM Namespace-ID Registry</name> | |||
| <t>IANA is requested to set up an "IOAM Namespace-ID Registry", | <t>IANA has set up the "IOAM Namespace-ID" registry that | |||
| containing 16-bit values and following the template for requests | contains 16-bit values and follows the template for requests | |||
| shown below. The meaning of 0x0000 is defined in this | shown below. The meaning of 0x0000 is defined in this | |||
| document. IANA is requested to reserve the values 0x0001 to 0x7FFF for | document. IANA has reserved the values 0x0001 to | |||
| private use (managed by operators), as specified in <xref | 0x7FFF for private use (managed by operators), as specified in | |||
| target="ioam_namespaces"/> of the current document. Registry entries | <xref target="ioam_namespaces" format="default"/> of this | |||
| for the values 0x8000 to 0xFFFF are to be assigned via the "Expert | document. Registry entries for the values 0x8000 to 0xFFFF are | |||
| Review" policy defined in <xref target="RFC8126"/>. | to be assigned via the "Expert Review" policy, as per <xref | |||
| </t> | target="RFC8126" format="default"/>. </t> | |||
| <t>Upon receiving a new allocation request, a designated | <t>Upon receiving a new allocation request, a designated | |||
| expert will perform the following:<list style="symbols"> | expert will perform the following:</t> | |||
| <t>Review whether the request is complete, i.e., the | <ul spacing="normal"> | |||
| registration template has been filled in. The expert | <li>Review whether the request is complete, i.e., the | |||
| will send incomplete requests back to the requestor.</t> | registration template has been filled in. The expert | |||
| will send incomplete requests back to the requester.</li> | ||||
| <t>Check whether the request is neither a duplicate of nor | <li>Check whether the request is neither a duplicate of nor | |||
| conflicting with either an already existing allocation | conflicting with either an already existing allocation | |||
| or a pending allocation. In case of duplicates or conflicts, | or a pending allocation. In case of duplicates or conflicts, | |||
| the expert will ask the requestor to update the allocation | the expert will ask the requester to update the allocation | |||
| request accordingly.</t> | request accordingly.</li> | |||
| <li>Solicit feedback from relevant working groups and communities to e | ||||
| <t>Solicit feedback from relevant working groups and communities to | nsure | |||
| ensure | that the new allocation request has been properly reviewed | |||
| that the new allocation request has been properly reviewed | and that rough consensus on the request exists. At a minimum, | |||
| and that rough consensus on the request exists. At a minimum, | the expert will solicit feedback from the IPPM Working Group | |||
| the expert will solicit feedback from the IPPM working group | by posting the request to the ippm@ietf.org | |||
| in the IETF by posting the request to the ippm@ietf.org | mailing list. The expert will allow for a 3-week review | |||
| mailing list. The expert will allow for a 3-week review | period on the mailing lists. | |||
| period on the mailing lists. | If the feedback received from the relevant working | |||
| If the feedback received from the relevant working | groups and communities within the review period | |||
| groups and communities within the review period | indicates rough consensus on the | |||
| indicates rough consensus on the | request, the expert will approve the request and ask IANA | |||
| request, the expert will approve the request and ask IANA | to allocate the new Namespace-ID. In case the expert | |||
| for allocating the new Namespace-ID. In case the expert | senses a lack of consensus from the feedback received, the | |||
| senses a lack of consensus from the feedback received, the | expert will ask the requester to engage with the corresponding | |||
| expert will ask the requestor to engage with the corresponding | working groups and communities to further review and refine | |||
| working groups and communities to further review and refine | the request.</li> | |||
| the request.</t> | </ul> | |||
| </list></t> | ||||
| <t> It is intended that any allocation will be accompanied | <t> It is intended that any allocation will be accompanied | |||
| by a published RFC. In order to allow for the allocation of code points | by a published RFC. In order to allow for the allocation of code points | |||
| prior to the RFC being approved for publication, the designated expert c an approve | prior to the RFC being approved for publication, the designated expert c an approve | |||
| allocations once it seems clear that an RFC will be published.</t | allocations once it seems clear that an RFC will be published.</t> | |||
| > | <dl newline="false" spacing="normal"> | |||
| <dt>0x0000:</dt> | ||||
| <t><list style="hanging"> | <dd>default namespace (known to all IOAM nodes)</dd> | |||
| <t hangText="0x0000:">default namespace (known to all IOAM nodes)</t | <dt>0x0001 - 0x7FFF:</dt> | |||
| > | <dd>reserved for private use</dd> | |||
| <dt>0x8000 - 0xFFFF:</dt> | ||||
| <t hangText="0x0001 - 0x7FFF:">reserved for private use</t> | <dd>unassigned</dd> | |||
| </dl> | ||||
| <t hangText="0x8000 - 0xFFFF:">unassigned</t> | <t>New registration requests <bcp14>MUST</bcp14> use the following templ | |||
| </list></t> | ate:</t> | |||
| <dl newline="false" spacing="normal"> | ||||
| <t>New registration requests MUST use the following template:</t> | <dt>Name:</dt> | |||
| <dd>name of the newly registered Namespace-ID</dd> | ||||
| <t><list style="hanging"> | <dt>Code point:</dt> | |||
| <t hangText="Name:">Name of the newly registered Namespace-ID.</t | <dd>desired value of the requested Namespace-ID</dd> | |||
| > | <dt>Description:</dt> | |||
| <dd>brief description of the newly | ||||
| <t hangText="Code point:">Desired value of the requested Namespac | registered Namespace-ID</dd> | |||
| e-ID.</t> | <dt>Reference:</dt> | |||
| <dd>reference to the document that | ||||
| <t hangText="Description:">Brief description of the newly | defines the new Namespace-ID</dd> | |||
| registered Namespace-ID.</t> | <dt>Status of the registration:</dt> | |||
| <dd>Status can be either | ||||
| <t hangText="Reference:">Reference to the document that | "permanent" or "provisional". Namespace-ID registrations following | |||
| defines the new Namespace-ID.</t> | a successful expert review will have the status "provisional". | |||
| Once the RFC that defines the new Namespace-ID is published, | ||||
| <t hangText="Status of the registration:"> Status can be either | the status is changed to "permanent".</dd> | |||
| "permanent" or "provisional". Namespace-ID registrations | </dl> | |||
| following | ||||
| a successful expert review will have the status "provisio | ||||
| nal". | ||||
| Once the RFC, which defines the new Namespace-ID is publi | ||||
| shed, | ||||
| the status is changed to "permanent".</t> | ||||
| </list></t> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Management and Deployment Considerations"> | <name>Management and Deployment Considerations</name> | |||
| <t>This document defines the structure and use of IOAM data fields. | <t>This document defines the structure and use of IOAM-Data-Fields. | |||
| This document does not define the encapsulation of IOAM data fields into | This document does not define the encapsulation of IOAM-Data-Fields into d | |||
| different protocols. | ifferent | |||
| Management and deployment aspects for IOAM have to be considered within t | protocols. Management and deployment aspects for IOAM have to be considere | |||
| he context of the | d within | |||
| protocol IOAM data fields are encapsulated into and as such, are out of s | the context of the protocol IOAM-Data-Fields are encapsulated into and, as | |||
| cope for this document. | such, are | |||
| For a discussion of IOAM deployment, please also refer to | out of scope for this document. For a discussion of IOAM deployment, pleas | |||
| <xref target="I-D.ietf-ippm-ioam-deployment"/>, which outlines a framewor | e also | |||
| k for IOAM deployment | refer to <xref target="I-D.ietf-ippm-ioam-deployment" format="default"/>, | |||
| and provides best current practices.</t> | which | |||
| outlines a framework for IOAM deployment and provides best current practic | ||||
| es.</t> | ||||
| </section> | </section> | |||
| <section anchor="Security" numbered="true" toc="default"> | ||||
| <section anchor="Security" title="Security Considerations"> | <name>Security Considerations</name> | |||
| <t>As discussed in <xref target="RFC7276"/>, a successful attack on an | <t>As discussed in <xref target="RFC7276" format="default"/>, a successful | |||
| OAM protocol in general, and specifically on IOAM, can prevent the | attack on | |||
| detection of failures or anomalies, or create a false illusion of | an OAM protocol in general, and specifically on IOAM, can prevent the | |||
| detection of failures or anomalies or create a false illusion of | ||||
| nonexistent ones. In particular, these threats are applicable by | nonexistent ones. In particular, these threats are applicable by | |||
| compromising the integrity of IOAM data, either by maliciously modifying | compromising the integrity of IOAM data, either by maliciously modifying | |||
| IOAM options in transit, or by injecting packets with maliciously | IOAM options in transit or by injecting packets with maliciously | |||
| generated IOAM options. All nodes in the path of a IOAM carrying | generated IOAM options. All nodes in the path of an IOAM-carrying | |||
| packet can perform such an attack. | packet can perform such an attack.</t> | |||
| </t> | <t>The Proof of Transit Option-Type (see <xref target="IOAM_proof_of_trans | |||
| it_option" | ||||
| <t>The Proof of Transit Option-Type (see <xref | format="default"/>) is used for verifying the path | |||
| target="IOAM_proof_of_transit_option"/>) is used for verifying the path | of data packets, i.e., proving that packets transited through a defined se | |||
| of data packets, i.e., proving that packets transited through a defined se | t of | |||
| t of nodes.</t> | nodes.</t> | |||
| <t>In case an attacker gains access to several nodes in a network | <t>In case an attacker gains access to several nodes in a network | |||
| and would be able to change the system software of these nodes, | and would be able to change the system software of these nodes, | |||
| IOAM data fields could be misused and repurposed for a use | IOAM-Data-Fields could be misused and repurposed for a use | |||
| different from what is specified in this document. | different from what is specified in this document. | |||
| One type of misuse is the implementation of a covert channel between | One type of misuse is the implementation of a covert channel between | |||
| network nodes. | network nodes.</t> | |||
| </t> | ||||
| <t>From a confidentiality perspective, although IOAM options are not expec ted to | <t>From a confidentiality perspective, although IOAM options are not expec ted to | |||
| contain user data, they can be used for network reconnaissance, allowing | contain user data, they can be used for network reconnaissance, allowing | |||
| attackers to collect information about network paths, performance, queue | attackers to collect information about network paths, performance, queue | |||
| states, buffer occupancy and other information. Moreover, if IOAM data | states, buffer occupancy, etc. Moreover, if IOAM data | |||
| leaks from the IOAM-domain it could enable reconnaissance beyond the scope | leaks from the IOAM-Domain, it could enable reconnaissance beyond the scop | |||
| of the IOAM-domain. One possible application of such reconnaissance is | e | |||
| of the IOAM-Domain. One possible application of such reconnaissance is | ||||
| to gauge the effectiveness of an ongoing attack, e.g., | to gauge the effectiveness of an ongoing attack, e.g., | |||
| if buffers and queues are overflowing. </t> | if buffers and queues are overflowing. </t> | |||
| <t>IOAM can be used as a means for implementing Denial-of-Service (DoS) | ||||
| <t>IOAM can be used as a means for implementing Denial of Service (DoS) | attacks or for amplifying them. For example, a malicious attacker can | |||
| attacks, or for amplifying them. For example, a malicious attacker can | ||||
| add an IOAM header to packets in order to consume the resources of | add an IOAM header to packets in order to consume the resources of | |||
| network devices that take part in IOAM or entities that receive, collect | network devices that take part in IOAM or entities that receive, collect, | |||
| or analyze the IOAM data. Another example is a packet length attack, in | or analyze the IOAM data. Another example is a packet length attack in | |||
| which an attacker pushes headers associated with IOAM Option-Types into | which an attacker pushes headers associated with IOAM-Option-Types into | |||
| data packets, causing these packets to be increased beyond the MTU size, | data packets, causing these packets to be increased beyond the MTU size, | |||
| resulting in fragmentation or in packet drops. In case POT is used, | resulting in fragmentation or in packet drops. In case POT is used, | |||
| an attacker could corrupt the POT data fields in the packet, resulting | an attacker could corrupt the POT data fields in the packet, resulting | |||
| in a verification failure of the POT data, even if the packet followed | in a verification failure of the POT data, even if the packet followed | |||
| the correct path.</t> | the correct path.</t> | |||
| <t>Since IOAM options can include timestamps, if network devices use | <t>Since IOAM options can include timestamps, if network devices use | |||
| synchronization protocols then any attack on the time protocol <xref | synchronization protocols, then any attack on the time protocol <xref | |||
| target="RFC7384"/> can compromise the integrity of the timestamp-related | target="RFC7384" format="default"/> can compromise the integrity of the | |||
| data fields.</t> | timestamp-related data fields.</t> | |||
| <t>At the management plane, attacks can be set up by misconfiguring | <t>At the management plane, attacks can be set up by misconfiguring | |||
| or by maliciously configuring IOAM-enabled nodes in a way that enables | or by maliciously configuring IOAM-enabled nodes in a way that enables | |||
| other attacks. IOAM configuration should only managed by | other attacks. IOAM configuration should only be managed by | |||
| authorized processes or users. </t> | authorized processes or users. </t> | |||
| <t>IETF protocols require features to ensure their security. While IOAM-Da | ||||
| <t>IETF protocols require features to ensure their security. While IOAM da | ta-Fields | |||
| ta fields don't represent a protocol by themselves, the IOAM data fields add to | don't represent a protocol by themselves, the IOAM-Data-Fields add to the | |||
| the protocol that the IOAM data fields are encapsulated into. Any specification | protocol | |||
| that defines how IOAM data fields carried in an encapsulating protocol MUST prov | that the IOAM-Data-Fields are encapsulated into. Any specification that de | |||
| ide for a mechanism for cryptographic integrity protection of the IOAM data fiel | fines how | |||
| ds. Cryptographic integrity protection could be either achieved through a mechan | IOAM-Data-Fields carried in an encapsulating protocol <bcp14>MUST</bcp14> | |||
| ism of the encapsulating protocol or it could incorporate the mechanisms specifi | provide | |||
| ed in <xref target="I-D.ietf-ippm-ioam-data-integrity"/>. </t> | for a mechanism for cryptographic integrity protection of the IOAM-Data-Fi | |||
| elds. | ||||
| Cryptographic integrity protection could be achieved through a mechanism o | ||||
| f | ||||
| the encapsulating protocol, or it could incorporate the mechanisms specifi | ||||
| ed in <xref | ||||
| target="I-D.ietf-ippm-ioam-data-integrity" format="default"/>. </t> | ||||
| <t>The current document does not define a specific IOAM encapsulation. | <t>The current document does not define a specific IOAM encapsulation. | |||
| It has to be noted that some IOAM encapsulation types can introduce | It has to be noted that some IOAM encapsulation types can introduce | |||
| specific security considerations. A specification that defines an IOAM | specific security considerations. A specification that defines an IOAM | |||
| encapsulation is expected to address the respective | encapsulation is expected to address the respective | |||
| encapsulation-specific security considerations.</t> | encapsulation-specific security considerations.</t> | |||
| <t>Notably, IOAM is expected to be deployed in limited domains, | <t>Notably, IOAM is expected to be deployed in limited domains, | |||
| thus confining the potential attack vectors to within | thus confining the potential attack vectors to within | |||
| the limited domain. A limited administrative domain provides the | the limited domain. A limited administrative domain provides the | |||
| operator with the means to select, monitor, and control the access of | operator with the means to select, monitor, and control the access of | |||
| all the network devices, making these devices trusted by the operator. | all the network devices, making these devices trusted by the operator. | |||
| Indeed, in order to limit the scope of threats mentioned above to within | Indeed, in order to limit the scope of threats mentioned above to within | |||
| the current limited domain the network operator is expected to enforce | the current limited domain, the network operator is expected to enforce | |||
| policies that prevent IOAM traffic from leaking outside of the IOAM | policies that prevent IOAM traffic from leaking outside of the IOAM-Domain | |||
| domain, and prevent IOAM data from outside the domain to be processed | and prevent IOAM data from outside the domain to be processed | |||
| and used within the domain.</t> | and used within the domain.</t> | |||
| <t>This document does not define the data contents of custom fields, | ||||
| <t>This document does not define the data contents of custom fields | like "Opaque State Snapshot" and "namespace-specific data" IOAM-Data-Field | |||
| like "Opaque State Snapshot" and "namespace specific data" IOAM | s. These custom data fields will have security | |||
| data fields. These custom data fields will have security | ||||
| considerations corresponding to their defined data contents | considerations corresponding to their defined data contents | |||
| that need to be described where those formats are defined.</t> | that need to be described where those formats are defined.</t> | |||
| <t>IOAM deployments that leverage both IOAM Trace Option-Types, i.e., | ||||
| <t>IOAM deployments which leverage both IOAM Trace Option-Types, i.e., | the Pre-allocated Trace Option-Type and Incremental Trace Option-Type, | |||
| the Pre-allocated Trace Option-Type and Incremental Trace Option-Type | ||||
| can suffer from incomplete visibility if the information gathered via | can suffer from incomplete visibility if the information gathered via | |||
| the two Trace Option-Types is not correlated and aggregated | the two Trace Option-Types is not correlated and aggregated | |||
| appropriately. If IOAM transit nodes leverage the IOAM data fields | appropriately. If IOAM transit nodes leverage the IOAM-Data-Fields | |||
| in the packet for further actions or insights, | in the packet for further actions or insights, | |||
| then IOAM transit nodes which only support one IOAM | then IOAM transit nodes that only support one IOAM | |||
| Trace Option-Type in an IOAM deployment which leverages both Trace | Trace Option-Type in an IOAM deployment that leverages both Trace | |||
| Option-Types, have limited visibility and thus can draw inappropriate | Option-Types have limited visibility and thus can draw inappropriate | |||
| conclusions or take wrong actions. | conclusions or take wrong actions.</t> | |||
| </t> | ||||
| <t>The security considerations of a system that deploys IOAM, much like | <t>The security considerations of a system that deploys IOAM, much like | |||
| any system, has to be reviewed on a per-deployment-scenario basis, based | any system, has to be reviewed on a per-deployment-scenario basis based | |||
| on a systems-specific threat analysis, which can lead to specific | on a systems-specific threat analysis, which can lead to specific | |||
| security solutions that are beyond the scope of the current document. | security solutions that are beyond the scope of the current document. | |||
| Specifically, in an IOAM deployment that is not confined to a single | Specifically, in an IOAM deployment that is not confined to a single | |||
| LAN, but spans multiple inter-connected sites (for example, using an | LAN but spans multiple inter-connected sites (for example, using an | |||
| overlay network), the inter-site links can be secured (e.g., by IPsec) | overlay network), the inter-site links can be secured (e.g., by IPsec) | |||
| in order to avoid external threats.</t> | in order to avoid external threats.</t> | |||
| <t>IOAM deployment considerations, including approaches to mitigate the ab ove | <t>IOAM deployment considerations, including approaches to mitigate the ab ove | |||
| discussed threads and potential attacks are outside the scope of th | discussed threads and potential attacks, are outside the scope of this | |||
| is | document. IOAM deployment considerations are discussed in | |||
| document. IOAM deployment considerations are discussed in | <xref target="I-D.ietf-ippm-ioam-deployment" format="default"/>.</t> | |||
| <xref target="I-D.ietf-ippm-ioam-deployment"/>. | ||||
| </t> | ||||
| </section> | ||||
| <section title="Acknowledgements"> | ||||
| <t>The authors would like to thank Eric Vyncke, Nalini Elkins, Srihari | ||||
| Raghavan, Ranganathan T S, Karthik Babu Harichandra Babu, Akshaya | ||||
| Nadahalli, LJ Wobker, Erik Nordmark, Vengada Prasad Govindan, Andrew | ||||
| Yourtchenko, Aviv Kfir, Tianran Zhou, Zhenbin (Robin) and Greg Mirsky for | ||||
| the | ||||
| comments and advice.</t> | ||||
| <t>This document leverages and builds on top of several concepts | ||||
| described in <xref target="I-D.kitamura-ipv6-record-route"/>. The | ||||
| authors would like to acknowledge the work done by the author Hiroshi | ||||
| Kitamura and people involved in writing it.</t> | ||||
| <t>The authors would like to gracefully acknowledge useful review and | ||||
| insightful comments received from Joe Clarke, Al Morton, Tom Herber | ||||
| t, | ||||
| Carlos Bernardos, Haoyu Song, Mickey Spiegel, Roman Danyliw, | ||||
| Benjamin Kaduk, Murray S. Kucherawy, Ian Swett, Martin Duke, | ||||
| Francesca Palombini, Lars Eggert, Alvaro Retana, Erik Kline, | ||||
| Robert Wilton, Zaheduzzaman Sarker, Dan Romascanu and Barak Gafni.< | ||||
| /t> | ||||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <!-- *****BACK MATTER ***** --> | ||||
| <back> | <back> | |||
| <!-- References split into informative and normative --> | ||||
| <!-- There are 2 ways to insert reference entries from the citation librarie | <displayreference target="I-D.kitamura-ipv6-record-route" to="IPV6-RECORD-ROUTE" | |||
| s: | /> | |||
| 1. define an ENTITY at the top, and use "ampersand character"RFC2629; here | <displayreference target="I-D.ietf-nvo3-vxlan-gpe" to="NVO3-VXLAN-GPE"/> | |||
| (as shown) | <displayreference target="I-D.spiegel-ippm-ioam-rawexport" to="IPPM-IOAM-RAWEXPO | |||
| 2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xm | RT"/> | |||
| l"?> here | <displayreference target="I-D.ietf-ippm-ioam-deployment" to="IPPM-IOAM-DEPLOYMEN | |||
| (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis. | T"/> | |||
| xml") | <displayreference target="I-D.ietf-ippm-ioam-data-integrity" to="IPPM-IOAM-DATA- | |||
| INTEGRITY"/> | ||||
| Both are cited textually in the same manner: by using xref elements. | ||||
| If you use the PI option, xml2rfc will, by default, try to find included fi | ||||
| les in the same | ||||
| directory as the including file. You can also define the XML_LIBRARY enviro | ||||
| nment variable | ||||
| with a value containing a set of directories to search. These can be eithe | ||||
| r in the local | ||||
| filing system or remote ones accessed by http (http://domain/dir/... ).--> | ||||
| <references title="Normative References"> | ||||
| &RFC2119; | ||||
| &RFC8174; | ||||
| &RFC5905; | ||||
| &RFC8126; | ||||
| <reference anchor="POSIX" | ||||
| target="https://standards.ieee.org/findstds/standard/1003.1-201 | ||||
| 7.html"> | ||||
| <front> | ||||
| <title>IEEE Std 1003.1-2017 (Revision of IEEE Std 1003.1-2017) - | ||||
| IEEE Standard for Information Technology - Portable Operating System | ||||
| Interface (POSIX(TM) Base Specifications, Issue 7)</title> | ||||
| <author> | ||||
| <organization>Institute of Electrical and Electronics | ||||
| Engineers</organization> | ||||
| </author> | ||||
| <date year="2017"/> | ||||
| </front> | ||||
| <seriesInfo name="" value="IEEE Std 1003.1-2017"/> | ||||
| </reference> | ||||
| </references> | ||||
| <references title="Informative References"> | ||||
| &RFC7665; | ||||
| &RFC7799; | ||||
| &RFC8877; | ||||
| &RFC7820; | ||||
| &RFC7821; | ||||
| &RFC7384; | ||||
| &RFC7276; | ||||
| <reference anchor="I-D.kitamura-ipv6-record-route"> | ||||
| <front> | ||||
| <title>Record Route for IPv6 (PR6) Hop-by-Hop Option | ||||
| Extension</title> | ||||
| <author fullname="Hiroshi Kitamura" initials="H" surname="Kitamura"/> | ||||
| <date month="November" year="2000"/> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" | ||||
| value="draft-kitamura-ipv6-record-route-00"/> | ||||
| <format target="https://tools.ietf.org/id/draft-kitamura-ipv6-record-rou | ||||
| te-00.txt" | ||||
| type="TXT"/> | ||||
| </reference> | ||||
| &RFC8300; | ||||
| &I-D.ietf-nvo3-vxlan-gpe; | ||||
| &RFC8926; | ||||
| &RFC8799; | <references> | |||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.2119.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8174.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.5905.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8126.xml"/> | ||||
| &I-D.spiegel-ippm-ioam-rawexport; | <reference anchor="POSIX" target="https://standards.ieee.org/ieee/1003.1 | |||
| /7101/"> | ||||
| <front> | ||||
| <title>IEEE/Open Group 1003.1-2017 - IEEE Standard for Information | ||||
| Technology--Portable Operating System | ||||
| Interface (POSIX(TM)) Base Specifications, Issue 7</title> | ||||
| <author> | ||||
| <organization>IEEE</organization> | ||||
| </author> | ||||
| <date year="2018" month="January"/> | ||||
| </front> | ||||
| <seriesInfo name="IEEE Std" value="1003.1-2017"/> | ||||
| </reference> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7665.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7799.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8877.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7820.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7821.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7384.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.7276.xml"/> | ||||
| <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | ||||
| .kitamura-ipv6-record-route.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8300.xml"/> | ||||
| &I-D.ietf-ippm-ioam-deployment; | <reference anchor="I-D.ietf-nvo3-vxlan-gpe"> | |||
| <front> | ||||
| <title>Generic Protocol Extension for VXLAN (VXLAN-GPE)</title> | ||||
| <author fullname="Fabio Maino" role="editor"> | ||||
| <organization>Cisco Systems</organization> | ||||
| </author> | ||||
| <author fullname="Larry Kreeger" role="editor"> | ||||
| <organization>Arrcus</organization> | ||||
| </author> | ||||
| <author fullname="Uri Elzur" role="editor"> | ||||
| <organization>Intel</organization> | ||||
| </author> | ||||
| <date month="September" day="22" year="2021"/> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-ietf-nvo3-vxlan-gpe-12"/> | ||||
| &I-D.ietf-ippm-ioam-data-integrity; | </reference> | |||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8926.xml"/> | ||||
| <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
| FC.8799.xml"/> | ||||
| <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | ||||
| .spiegel-ippm-ioam-rawexport.xml"/> | ||||
| <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | ||||
| .ietf-ippm-ioam-deployment.xml"/> | ||||
| <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | ||||
| .ietf-ippm-ioam-data-integrity.xml"/> | ||||
| </references> | ||||
| </references> | </references> | |||
| <section numbered="false" toc="default"> | ||||
| <name>Acknowledgements</name> | ||||
| <t>The authors would like to thank <contact fullname="Éric Vyncke"/>, <con | ||||
| tact | ||||
| fullname="Nalini Elkins"/>, <contact fullname="Srihari | ||||
| Raghavan"/>, <contact fullname="Ranganathan T S"/>, <contact fullname="Kar | ||||
| thik Babu | ||||
| Harichandra Babu"/>, <contact fullname="Akshaya | ||||
| Nadahalli"/>, <contact fullname="LJ Wobker"/>, <contact fullname="Erik Nor | ||||
| dmark"/>, | ||||
| <contact fullname="Vengada Prasad Govindan"/>, <contact fullname="Andrew | ||||
| Yourtchenko"/>, <contact fullname="Aviv Kfir"/>, <contact fullname="Tianra | ||||
| n Zhou"/>, | ||||
| <contact fullname="Zhenbin (Robin)"/>, and <contact fullname="Greg Mirsky" | ||||
| /> for the | ||||
| comments and advice.</t> | ||||
| <t>This document leverages and builds on top of several concepts | ||||
| described in <xref target="I-D.kitamura-ipv6-record-route" format="default | ||||
| "/>. The | ||||
| authors would like to acknowledge the work done by the author <contact | ||||
| fullname="Hiroshi Kitamura"/> and people involved in writing it.</t> | ||||
| <t>The authors would like to gracefully acknowledge useful review and | ||||
| insightful comments received from <contact fullname="Joe Clarke"/>, <conta | ||||
| ct | ||||
| fullname="Al Morton"/>, <contact fullname="Tom Herbert"/>, | ||||
| <contact fullname="Carlos J. Bernardos"/>, <contact fullname="Haoyu Song"/ | ||||
| >, | ||||
| <contact fullname="Mickey Spiegel"/>, <contact fullname="Roman Danyliw"/>, | ||||
| <contact fullname="Benjamin Kaduk"/>, <contact fullname="Murray S. Kuchera | ||||
| wy"/>, | ||||
| <contact fullname="Ian Swett"/>, <contact fullname="Martin Duke"/>, | ||||
| <contact fullname="Francesca Palombini"/>, <contact fullname="Lars Eggert" | ||||
| />, | ||||
| <contact fullname="Alvaro Retana"/>, <contact fullname="Erik Kline"/>, | ||||
| <contact fullname="Robert Wilton"/>, <contact fullname="Zaheduzzaman Sarke | ||||
| r"/>, | ||||
| <contact fullname="Dan Romascanu"/>, and <contact fullname="Barak Gafni"/> | ||||
| .</t> | ||||
| </section> | ||||
| <section numbered="no" title="Contributors' Addresses"> | <section numbered="false" toc="default"> | |||
| <t><figure> | <name>Contributors</name> | |||
| <artwork><![CDATA[ | <t>This document was the collective effort of several authors. The text | |||
| Carlos Pignataro | and content were contributed by the editors and the coauthors listed | |||
| Cisco Systems, Inc. | below.</t> | |||
| 7200-11 Kit Creek Road | <contact fullname="Carlos Pignataro"> | |||
| Research Triangle Park, NC 27709 | <organization>Cisco Systems, Inc.</organization> | |||
| United States | <address> | |||
| <postal> | ||||
| Email: cpignata@cisco.com | <street>7200-11 Kit Creek Road</street> | |||
| <extaddr>Research Triangle Park</extaddr> | ||||
| Mickey Spiegel | <region>NC</region> | |||
| Barefoot Networks, an Intel company | <code>27709</code> | |||
| 4750 Patrick Henry Drive | <country>United States of America</country> | |||
| Santa Clara, CA 95054 | </postal> | |||
| US | <email>cpignata@cisco.com</email> | |||
| </address> | ||||
| Email: mickey.spiegel@intel.com | </contact> | |||
| Barak Gafni | ||||
| Nvidia | ||||
| 350 Oakmead Parkway, Suite 100 | ||||
| Sunnyvale, CA 94085 | ||||
| U.S.A. | ||||
| Email: gbarak@nvidia.com | ||||
| Jennifer Lemon | ||||
| Broadcom | ||||
| 270 Innovation Drive | ||||
| San Jose, CA 95134 | ||||
| US | ||||
| Email: jennifer.lemon@broadcom.com | ||||
| Hannes Gredler | ||||
| RtBrick Inc. | ||||
| Email: hannes@rtbrick.com | ||||
| John Leddy | ||||
| United States | ||||
| Email: john@leddy.net | ||||
| Stephen Youell | ||||
| JP Morgan Chase | ||||
| 25 Bank Street | ||||
| London E14 5JP | ||||
| United Kingdom | ||||
| Email: stephen.youell@jpmorgan.com | ||||
| David Mozes | <contact fullname="Mickey Spiegel"> | |||
| <organization>Barefoot Networks, an Intel company</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>101 Innovation Drive</street> | ||||
| <city>San Jose</city> | ||||
| <region>CA</region> | ||||
| <code>95134-1941</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>mickey.spiegel@intel.com</email> | ||||
| </address> | ||||
| </contact> | ||||
| Email: mosesster@gmail.com | <contact fullname="Barak Gafni"> | |||
| <organization>Nvidia</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>350 Oakmead Parkway</street> | ||||
| <extaddr>Suite 100</extaddr> | ||||
| <city>Sunnyvale</city> | ||||
| <region>CA</region> | ||||
| <code>94085</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>gbarak@nvidia.com</email> | ||||
| </address> | ||||
| </contact> | ||||
| Petr Lapukhov | <contact fullname="Jennifer Lemon"> | |||
| <organization>Broadcom</organization> | ||||
| 1 Hacker Way | <address> | |||
| Menlo Park, CA 94025 | <postal> | |||
| US | <street>270 Innovation Drive</street> | |||
| <city>San Jose</city> | ||||
| <region>CA</region> | ||||
| <code>95134</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>jennifer.lemon@broadcom.com</email> | ||||
| </address> | ||||
| </contact> | ||||
| Email: petr@fb.com | <contact fullname="Hannes Gredler"> | |||
| <organization>RtBrick Inc.</organization> | ||||
| <address> | ||||
| <email>hannes@rtbrick.com</email> | ||||
| </address> | ||||
| </contact> | ||||
| Remy Chang | <contact fullname="John Leddy"> | |||
| Barefoot Networks | <address> | |||
| 4750 Patrick Henry Drive | <postal> | |||
| Santa Clara, CA 95054 | <country>United States of America</country> | |||
| US | </postal> | |||
| <email>john@leddy.net</email> | ||||
| </address> | ||||
| </contact> | ||||
| Email: remy@barefootnetworks.com | <contact fullname="Stephen Youell"> | |||
| <organization>JP Morgan Chase</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>25 Bank Street</street> | ||||
| <city>London</city> | ||||
| <code>E14 5JP</code> | ||||
| <country>United Kingdom</country> | ||||
| </postal> | ||||
| <email>stephen.youell@jpmorgan.com</email> | ||||
| </address> | ||||
| </contact> | ||||
| Daniel Bernier | <contact fullname="David Mozes"> | |||
| Bell Canada | <address> | |||
| Canada | <email>mosesster@gmail.com</email> | |||
| </address> | ||||
| </contact> | ||||
| Email: daniel.bernier@bell.ca | <contact fullname="Petr Lapukhov"> | |||
| <organization>Facebook</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>1 Hacker Way</street> | ||||
| <city>Menlo Park</city> | ||||
| <region>CA</region> | ||||
| <code>94025</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>petr@fb.com</email> | ||||
| </address> | ||||
| </contact> | ||||
| ]]></artwork> | <contact fullname="Remy Chang"> | |||
| </figure></t> | <organization>Barefoot Networks, an Intel company</organization> | |||
| <address> | ||||
| <postal> | ||||
| <street>101 Innovation Drive</street> | ||||
| <city>San Jose</city> | ||||
| <region>CA</region> | ||||
| <code>95134-1941</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>remy.chang@intel.com</email> | ||||
| </address> | ||||
| </contact> | ||||
| <contact fullname="Daniel Bernier"> | ||||
| <organization>Bell Canada</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <country>Canada</country> | ||||
| </postal> | ||||
| <email>daniel.bernier@bell.ca</email> | ||||
| </address> | ||||
| </contact> | ||||
| </section> | </section> | |||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 314 change blocks. | ||||
| 1988 lines changed or deleted | 1883 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||