rfc8913xml2.original.xml   rfc8913.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 "&#160;">
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ <!ENTITY zwsp "&#8203;">
<!ENTITY RFC2119 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference. <!ENTITY nbhy "&#8209;">
RFC.2119.xml"> <!ENTITY wj "&#8288;">
<!ENTITY RFC3432 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.
RFC.3432.xml">
<!ENTITY RFC4086 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.
RFC.4086.xml">
<!ENTITY RFC4656 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.
RFC.4656.xml">
<!ENTITY RFC5357 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.
RFC.5357.xml">
<!ENTITY RFC6020 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.
RFC.6020.xml">
<!ENTITY RFC6038 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.
RFC.6038.xml">
<!ENTITY RFC6241 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.
RFC.6241.xml">
<!ENTITY RFC7426 PUBLIC "" "http://xml.resource.org/public/rfc/bibxml/reference.
RFC.7426.xml">
<!ENTITY IPPMREG SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-
D.draft-ietf-ippm-metric-registry-02.xml">
<!ENTITY RESTCONF SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I
-D.draft-ietf-netconf-restconf-04.xml">
<!ENTITY UNIFY SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.
draft-unify-nfvrg-challenges-00.xml">
<!ENTITY SP-DEVOPS SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.
I-D.draft-unify-nfvrg-devops-01.xml">
]> ]>
<rfc category="std" docName="draft-ietf-ippm-twamp-yang-13" ipr="trust200902"> <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std"
<?rfc toc="yes" ?> docName="draft-ietf-ippm-twamp-yang-13" number="8913" ipr="trust200902"
obsoletes="" updates="" submissionType="IETF" consensus="true" xml:lang="en
<?rfc symrefs="yes" ?> " tocInclude="true" symRefs="true" sortRefs="true" version="3">
<!-- xml2rfc v2v3 conversion 2.44.0 -->
<?rfc sortrefs="yes"?>
<?rfc iprnotified="no" ?>
<?rfc strict="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<?rfc comments="yes"?>
<?rfc inline="yes" ?>
<front> <front>
<title abbrev="TWAMP YANG Data Model">Two-Way Active Measurement Protocol <title abbrev="TWAMP YANG Data Model">Two-Way Active Measurement Protocol
(TWAMP) Data Model</title> (TWAMP) YANG Data Model</title>
<seriesInfo name="RFC" value="8913"/>
<author fullname="Ruth Civil" initials="R." surname="Civil"> <author fullname="Ruth Civil" initials="R." surname="Civil">
<organization>Ciena Corporation</organization> <organization>Ciena Corporation</organization>
<address> <address>
<postal> <postal>
<street>307 Legget Drive</street> <street>307 Legget Drive</street>
<city>Kanata</city> <city>Kanata</city>
<region>ON</region> <region>ON</region>
<code>K2K 3C8</code> <code>K2K 3C8</code>
<country>Canada</country> <country>Canada</country>
</postal> </postal>
<email>ruthcivil@gmail.com</email>
<email>gcivil@ciena.com</email>
<uri>www.ciena.com</uri> <uri>www.ciena.com</uri>
</address> </address>
</author> </author>
<author fullname="Al Morton" initials="A." surname="Morton"> <author fullname="Al Morton" initials="A." surname="Morton">
<organization>AT&amp;T Labs</organization> <organization>AT&amp;T Labs</organization>
<address> <address>
<postal> <postal>
<street>200 Laurel Avenue South</street> <street>200 Laurel Avenue South</street>
<city>Middletown</city>
<city>Middletown,</city>
<region>NJ</region> <region>NJ</region>
<code>07748</code> <code>07748</code>
<country>United States of America</country>
<country>USA</country>
</postal> </postal>
<phone>+1 732 420 1571</phone> <phone>+1 732 420 1571</phone>
<facsimile>+1 732 368 1192</facsimile>
<email>acmorton@att.com</email> <email>acmorton@att.com</email>
<uri/> <uri/>
</address> </address>
</author> </author>
<author fullname="Reshad Rahman" initials="R." surname="Rahman"> <author fullname="Reshad Rahman" initials="R." surname="Rahman">
<organization>Cisco Systems</organization> <organization></organization>
<address> <address>
<postal> <postal>
<street>2000 Innovation Drive</street> <street></street>
<city></city>
<city>Kanata</city> <region></region>
<code></code>
<region>ON</region>
<code>K2K 3E8</code>
<country>Canada</country> <country>Canada</country>
</postal> </postal>
<email>reshad@yahoo.com</email>
<email>rrahman@cisco.com</email>
</address> </address>
</author> </author>
<author fullname="Mahesh Jethanandani" initials="M." surname="Jethanandani">
<author fullname="Mahesh Jethanandani" initials="M."
surname="Jethanandani">
<organization>Xoriant Corporation</organization> <organization>Xoriant Corporation</organization>
<address> <address>
<postal> <postal>
<street>1248 Reamswood Drive</street> <street>1248 Reamwood Avenue</street>
<city>Sunnyvale</city> <city>Sunnyvale</city>
<region>CA</region> <region>CA</region>
<code>94089</code> <code>94089</code>
<country>United States of America</country>
<country>USA</country>
</postal> </postal>
<email>mjethanandani@gmail.com</email> <email>mjethanandani@gmail.com</email>
</address> </address>
</author> </author>
<author fullname="Kostas Pentikousis" initials="K." surname="Pentikousis" ro
<author fullname="Kostas Pentikousis" initials="K." role="editor" le="editor">
surname="Pentikousis"> <organization>Detecon</organization>
<organization>Travelping</organization>
<address> <address>
<postal> <postal>
<street>Siemensdamm 50</street> <street> Winterfeldtstrasse 21</street>
<code>10781</code>
<code>13629</code>
<city>Berlin</city> <city>Berlin</city>
<country>Germany</country> <country>Germany</country>
</postal> </postal>
<email>kostas.pentikousis@detecon.com</email>
<email>k.pentikousis@travelping.com</email>
</address> </address>
</author> </author>
<date month="November" year="2021"/>
<date day="2" month="July" year="2018"/>
<area>Transport</area>
<workgroup>IPPM WG</workgroup>
<abstract> <abstract>
<t>This document specifies a data model for client and server <t>This document specifies a data model for client and server
implementations of the Two-Way Active Measurement Protocol (TWAMP). The implementations of the Two-Way Active Measurement Protocol (TWAMP). This
document defines the TWAMP data model through Unified Modeling Language document defines the TWAMP data model through Unified Modeling Language
(UML) class diagrams and formally specifies it using a NDMA-compliant (UML) class diagrams and formally specifies it using the YANG data
YANG model.</t> modeling language (RFC 7950). The data model is compliant with the Networ
k Management Datastore Architecture
(NMDA).</t>
</abstract> </abstract>
</front> </front>
<middle> <middle>
<section title="Introduction"> <section numbered="true" toc="default">
<t>The <xref target="RFC5357">Two-Way Active Measurement Protocol <name>Introduction</name>
<t>The <xref target="RFC5357" format="default">Two-Way Active Measurement
Protocol
(TWAMP) </xref> is used to measure network performance parameters such (TWAMP) </xref> is used to measure network performance parameters such
as latency, bandwidth, and packet loss by sending probe packets and as latency, bandwidth, and packet loss by sending probe packets and
measuring their experience in the network. To date, TWAMP measuring their experience in the network. To date, TWAMP
implementations do not come with a standard management framework, and, implementations do not come with a standard management framework, and,
as such, implementers have no choice except to provide a proprietary as such, implementers have no choice except to provide a proprietary
mechanism. This document addresses this gap by defining the model using mechanism. This document addresses this gap by defining the model using
<xref target="UML">UML</xref> class diagrams, and formally specifying a Unified Modeling Language (UML) class diagrams <xref target="UML"
<xref target="RFC8342">NMDA-complaint</xref> TWAMP data model using format="default"></xref> and formally specifying a TWAMP data model
<xref target="RFC7950">YANG 1.1 </xref>.</t> that is compliant with the Network Management Datastore Architecture
(NMDA) <xref target="RFC8342" format="default"/>, using
<section anchor="motivation" title="Motivation"> <xref target="RFC7950" format="default">YANG 1.1 </xref>.</t>
<t>In current TWAMP deployments the lack of a standardized data model <section anchor="motivation" numbered="true" toc="default">
<name>Motivation</name>
<t>In current TWAMP deployments, the lack of a standardized data model
limits the flexibility to dynamically instantiate TWAMP-based limits the flexibility to dynamically instantiate TWAMP-based
measurements across equipment from different vendors. In large, measurements across equipment from different vendors. In large,
virtualized, and dynamically instantiated infrastructures where virtualized, and dynamically instantiated infrastructures where
network functions are placed according to orchestration algorithms, network functions are placed according to orchestration algorithms,
proprietary mechanisms for managing TWAMP measurements pose severe proprietary mechanisms for managing TWAMP measurements pose severe
limitations with respect to programmability.</t> limitations with respect to programmability.</t>
<t>Two major trends call for standardizing TWAMP management aspects. <t>Two major trends call for standardizing TWAMP management aspects.
First, it is expected that in the coming years large-scale and First, it is expected that in the coming years large-scale and
multi-vendor TWAMP deployments will become the norm. From an multi-vendor TWAMP deployments will become the norm. From an
operations perspective, using several vendor-specific TWAMP operations perspective, using several vendor-specific TWAMP
configuration mechanisms when one standard mechanism could provide an configuration mechanisms when one standard mechanism could provide an
alternative is expensive and inefficient. Second, the increasingly alternative is expensive and inefficient. Second, the increasingly
software-defined and virtualized nature of network infrastructures, software-defined and virtualized nature of network infrastructures,
based on dynamic service chains <xref target="NSC"/> and programmable based on dynamic service chains <xref target="NSC" format="default"/> an
control and management planes <xref target="RFC7426">Software-Defined d programmable
Networking (SDN): Layers and Architecture Terminology </xref> requires control and management planes <xref target="RFC7426" format="default"/>,
requires
a well-defined data model for TWAMP implementations. This document a well-defined data model for TWAMP implementations. This document
defines such a TWAMP data model and specifies it formally using the defines such a TWAMP data model and specifies it formally using the
<xref target="RFC7950">YANG 1.1 </xref> data modeling language.</t> <xref target="RFC7950" format="default">YANG 1.1 data modeling language<
/xref>.</t>
<t>Note to RFC Editor:</t>
<t>Please replace the date 2018-07-02 in Section 5.2 of the draft with
the date of publication of this draft as a RFC. Also, replace
reference to RFC XXXX, and draft-ietf-ippm-port-twamp-test with the
RFC numbers assigned to the drafts.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Terminology"> <name>Terminology</name>
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>",
"OPTIONAL" in this document are to be interpreted as described in "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>",
<xref target="RFC2119">BCP 14</xref> <xref target="RFC8174"/> when, "<bcp14>SHOULD NOT</bcp14>",
and only when, they appear in all capitals, as shown here.</t> "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document
are to be interpreted as described in BCP&nbsp;14
<xref target="RFC2119"/> <xref target="RFC8174"/> when, and only
when, they appear in all capitals, as shown here.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Document Organization"> <name>Document Organization</name>
<t>The rest of this document is organized as follows. <xref <t>The rest of this document is organized as follows. <xref target="scop
target="scope"/> presents the scope and applicability of this e" format="default"/> presents the scope and applicability of this
document. <xref target="structure"/> provides a high-level overview of document. <xref target="structure" format="default"/> provides a high-le
the TWAMP data model. <xref target="parameters"/> details the vel overview of
configuration parameters of the data model and <xref target="module"/> the TWAMP data model. <xref target="parameters" format="default"/> detai
specifies in YANG the TWAMP data model. <xref target="examples"/> ls the
lists illustrative examples which conform to the YANG data model configuration parameters of the data model, and <xref target="module" fo
specified in this document. <xref target="AuthExample"/> elaborates rmat="default"/>
specifies in YANG the TWAMP data model. <xref target="examples" format="
default"/>
lists illustrative examples that conform to the YANG data model
specified in this document. <xref target="AuthExample" format="default"/
> elaborates
these examples further.</t> these examples further.</t>
</section> </section>
</section> </section>
<section anchor="scope" numbered="true" toc="default">
<section anchor="scope" title="Scope, Model, and Applicability"> <name>Scope, Model, and Applicability</name>
<t>The purpose of this document is the specification of a <t>The purpose of this document is the specification of a
vendor-independent data model for TWAMP implementations.</t> vendor-independent data model for TWAMP implementations.</t>
<t><xref target="fig_scope" format="default"/> illustrates a redrawn versi
<t><xref target="fig:scope"/> illustrates a redrawn version of the TWAMP on of the TWAMP
logical model found in Section 1.2 of <xref target="RFC5357">TWAMP logical model found in <xref target="RFC5357" sectionFormat="of"
</xref>. The figure is annotated with pointers to the <xref section="1.2">TWAMP</xref>. The figure is annotated with pointers to the
target="UML">UML</xref> diagrams provided in this document and <xref target="UML" format="default">UML diagrams</xref> provided in this d
ocument and
associated with the data model of the four logical entities in a TWAMP associated with the data model of the four logical entities in a TWAMP
deployment, namely the TWAMP Control-Client, Server, Session-Sender and deployment, namely the TWAMP Control-Client, Server, Session-Sender, and
Session-Reflector. A <xref target="UML">UML</xref> Notation Guide is Session-Reflector. A UML Notation Guide is available in Section&nbsp;5
available in Section 5 of the said document.</t> of UML <xref target="UML"/>.</t>
<t>As per <xref target="RFC5357" format="default">TWAMP </xref>, unlabeled
<t>As per <xref target="RFC5357">TWAMP </xref>, unlabeled links in <xref links in <xref target="fig_scope" format="default"/> are left unspecified and m
target="fig:scope"/> are left unspecified and may be proprietary ay be proprietary
protocols.</t> protocols.</t>
<figure anchor="fig_scope">
<figure anchor="fig:scope" title="Annotated TWAMP logical model"> <name>Annotated TWAMP Logical Model</name>
<artwork><![CDATA[ <artwork name="" type="" align="left" alt=""><![CDATA[
[Fig. 3] [Fig. 4] (Figure 3) (Figure 4)
+----------------+ +--------+ +----------------+ +--------+
| Control-Client | <-- TWAMP-Control --> | Server | | Control-Client | <-- TWAMP-Control --> | Server |
+----------------+ +--------+ +----------------+ +--------+
^ ^ ^ ^
| | | |
V V V V
+----------------+ +-------------------+ +----------------+ +-------------------+
| Session-Sender | <-- TWAMP-Test --> | Session-Reflector | | Session-Sender | <-- TWAMP-Test --> | Session-Reflector |
+----------------+ +-------------------+ +----------------+ +-------------------+
[Fig. 5] [Fig. 6] (Figure 5) (Figure 6)]]></artwork>
]]></artwork>
</figure> </figure>
<t>As per <xref target="RFC5357">TWAMP </xref>, a TWAMP implementation <t>As per <xref target="RFC5357" format="default">TWAMP </xref>, a TWAMP i
may follow a simplified logical model, in which the same node acts both mplementation
as Control-Client and Session-Sender, while another node acts at the may follow a simplified logical model, in which the same node acts as both
same time as TWAMP Server and Session-Reflector. <xref Control-Client and Session-Sender, while another node acts at the
target="fig:scope2"/> illustrates this simplified logical model and same time as both TWAMP Server and Session-Reflector. <xref target="fig_sc
ope2" format="default"/> illustrates this simplified logical model and
indicates the interaction between the TWAMP configuration client and indicates the interaction between the TWAMP configuration client and
server using, for instance, <xref target="RFC6241">NETCONF </xref> or server using, for instance, <xref target="RFC6241" format="default">NETCON
<xref target="RFC8040">RESTCONF </xref>.</t> F </xref> or
<xref target="RFC8040" format="default">RESTCONF </xref>.</t>
<figure anchor="fig:scope2" title="Simplified TWAMP model and protocols"> <figure anchor="fig_scope2">
<artwork><![CDATA[ <name>Simplified TWAMP Model and Protocols</name>
o-------------------o o-------------------o <artwork name="" type="" align="left" alt=""><![CDATA[
| Config client | | Config client | o-------------------o o-------------------o
o-------------------o o-------------------o | Config client | | Config client |
|| || o-------------------o o-------------------o
NETCONF || RESTCONF NETCONF || RESTCONF || ||
|| || NETCONF || RESTCONF NETCONF || RESTCONF
o-------------------o o-------------------o || ||
| Config server | | Config server | o-------------------o o-------------------o
| [Fig. 3, 5] | | [Fig. 4, 6] | | Config server | | Config server |
+-------------------+ +-------------------+ | (Figures 3 and 5) | | (Figures 4 and 6) |
| Control-Client | <-- TWAMP-Control --> | Server | +-------------------+ +-------------------+
| | | | | Control-Client | <-- TWAMP-Control --> | Server |
| Session-Sender | <-- TWAMP-Test --> | Session-Reflector | | | | |
+-------------------+ +-------------------+ | Session-Sender | <-- TWAMP-Test --> | Session-Reflector |
]]></artwork> +-------------------+ +-------------------+]]></artwork>
</figure> </figure>
<t>The data model defined in this document is orthogonal to the specific <t>The data model defined in this document is orthogonal to the specific
protocol used between the Config client and Config server to communicate protocol used between the Config client and Config server to communicate
the TWAMP configuration parameters.</t> the TWAMP configuration parameters.</t>
<t>Operational actions such as how TWAMP-Test sessions are started and <t>Operational actions such as how TWAMP-Test sessions are started and
stopped, how performance measurement results are retrieved, or how stopped, how performance measurement results are retrieved, or how
stored results are cleared, and so on, are not addressed by the stored results are cleared, and so on, are not addressed by the
configuration model defined in this document. As noted above, such configuration model defined in this document. As noted above, such
operational actions are not part of the TWAMP specification <xref operational actions are not part of the TWAMP specification <xref target="
target="RFC5357">TWAMP </xref> and hence are out of scope of this RFC5357" format="default"></xref> and hence are out of scope for this
document. See also <xref target="OperationalCommands"/>. In addition, document. See also <xref target="OperationalCommands"
for operational state, current work in <xref format="default"/>. In addition,
target="I-D.ietf-ippm-metric-registry">Registry for Performance for operational state, the information provided in the Performance Metrics
Metrics</xref>, can be used to develop an independent model for the Registry <xref target="RFC8911"/> and
performance metrics that need to be captured and retrieved.</t> <xref target="PERF-METRICS"/> can be used to develop an independent model
for the
Performance Metrics that need to be captured and retrieved.</t>
</section> </section>
<section anchor="structure" numbered="true" toc="default">
<section anchor="structure" title="Data Model Overview"> <name>Data Model Overview</name>
<t>The TWAMP data model includes four categories of configuration <t>The TWAMP data model includes four categories of configuration
items.</t> items.</t>
<t>First, global configuration items relate to parameters that are set <t>First, global configuration items relate to parameters that are set
on a per device level. For example, the administrative status of the on a per-device level. For example, the administrative status of the
device with respect to whether it allows TWAMP sessions and, if so, in device with respect to whether it allows TWAMP sessions and, if so, in
what capacity (e.g. Control-Client, Server or both), is a typical what capacity (e.g., Control-Client, Server, or both) is a typical
instance of a global configuration item.</t> instance of a global configuration item.</t>
<t>A second category includes attributes that can be configured on a
<t>A second category includes attributes that can be configured on a per per&nbhy;TWAMP-Control-connection basis, such as the Server IP address.</t
TWAMP-Control connection basis, such as the Server IP address.</t> >
<t>A third category includes attributes related to
<t>A third category includes attributes related to per TWAMP-Test per-TWAMP-Test-session attributes -- for instance, setting different value
session attributes, for instance setting different values in the s in the
Differentiated Services Code Point (DSCP) field.</t> Differentiated Services Code Point (DSCP) field.</t>
<t>Finally, the data model includes attributes that relate to the <t>Finally, the data model includes attributes that relate to the
operational state of the TWAMP implementation.</t> operational state of the TWAMP implementation.</t>
<t>As the TWAMP data model is described in the remaining sections of <t>As the TWAMP data model is described in the remaining sections of
this document, readers should keep in mind the functional entity this document, readers should keep in mind the functional entity
grouping illustrated in <xref target="fig:scope"/>.</t> grouping illustrated in <xref target="fig_scope" format="default"/>.</t>
<section anchor="twamp-client" numbered="true" toc="default">
<section anchor="twamp-client" title="Control-Client"> <name>Control-Client</name>
<t>A TWAMP Control-Client has an administrative status field set at <t>A TWAMP Control-Client has an administrative status field set at
the device level that indicates whether the node is enabled to the device level that indicates whether the node is enabled to
function as such.</t> function as such.</t>
<t>Each TWAMP Control-Client is associated with zero or more <t>Each TWAMP Control-Client is associated with zero or more
TWAMP-Control connections. The main configuration parameters of each TWAMP&nbhy;Control connections. The main configuration parameters of eac
control connection are: <list style="symbols"> h
<t>A name which can be used to uniquely identify at the control connection are: </t>
<ul spacing="normal">
<li>A name that can be used to uniquely identify at the
Control-Client a particular control connection. This name is Control-Client a particular control connection. This name is
necessary for programmability reasons because at the time of necessary for programmability reasons because at the time of
creation of a TWAMP-Control connection not all IP and TCP port creation of a TWAMP-Control connection not all IP and TCP port
number information needed to uniquely identify the connection is number information needed to uniquely identify the connection is
available.</t> available.</li>
<li>The IP address of the interface the Control-Client will use for
<t>The IP address of the interface the Control-Client will use for connections.</li>
connections.</t> <li>The IP address of the remote TWAMP Server.</li>
<li>Authentication and encryption attributes such as KeyID, Token,
<t>The IP address of the remote TWAMP Server.</t> and the Control-Client Initialization Vector (Client-IV); see also
Section <xref target="RFC4656" sectionFormat="bare"
<t>Authentication and encryption attributes such as KeyID, Token section="3.1"/> of <xref target="RFC4656" format="default">"A One-wa
and the Client Initialization Vector (Client-IV); see also Section y
3.1 in <xref target="RFC4656">OWAMP </xref> and <xref Active Measurement Protocol (OWAMP)"</xref> and <xref target="RFC4086"
target="RFC4086">Randomness Requirements for Security </xref>.</t> format="default">"Randomness Requirements for Security"</xref>.</li>
</list></t> </ul>
<t>Each TWAMP-Control connection, in turn, is associated with zero or <t>Each TWAMP-Control connection, in turn, is associated with zero or
more TWAMP-Test sessions. For each test session, the following more TWAMP-Test sessions. For each test session, the following
configuration items should be noted: <list style="symbols"> configuration items should be noted: </t>
<t>The test session name uniquely identifies a particular test <ul spacing="normal">
<li>The test session name, which uniquely identifies a particular test
session at the Control-Client and Session-Sender. Similar to the session at the Control-Client and Session-Sender. Similar to the
control connections above, this unique test session name is needed control connections mentioned above, this unique test session name i s needed
because at the time of creation of a TWAMP-Test session, for because at the time of creation of a TWAMP-Test session, for
example, the source UDP port number is not known to uniquely example, the source UDP port number is not known to uniquely
identify the test session.</t> identify the test session.</li>
<li>The IP address and UDP port number of the Session-Sender on the
<t>The IP address and UDP port number of the Session-Sender on the path under test by TWAMP.</li>
path under test by TWAMP.</t> <li>The IP address and UDP port number of the Session-Reflector on
said path.</li>
<t>The IP address and UDP port number of the Session-Reflector on <li>Information pertaining to the test packet stream, such as the
said path.</t> test starting time; which Performance Metric is to be used, as
defined in <xref target="RFC8911" format="default">"Registry
<t>Information pertaining to the test packet stream, such as the for Performance Metrics"</xref>; or whether the test should be
test starting time, which performance metric is to be used, as repeated.</li>
defined in <xref target="I-D.ietf-ippm-metric-registry">Registry </ul>
for Performance Metrics </xref>, or whether the test should be
repeated.</t>
</list></t>
</section> </section>
<section anchor="twamp-server" numbered="true" toc="default">
<section anchor="twamp-server" title="Server"> <name>Server</name>
<t>Each TWAMP Server has an administrative status field set at the <t>Each TWAMP Server has an administrative status field set at the
device level to indicate whether the node is enabled to function as a device level to indicate whether the node is enabled to function as a
TWAMP Server.</t> TWAMP Server.</t>
<t>Each Server is associated with zero or more TWAMP-Control <t>Each Server is associated with zero or more TWAMP-Control
connections. Each control connection is uniquely identified by the connections. Each control connection is uniquely identified by the
4-tuple {Control-Client IP address, Control-Client TCP port number, 4-tuple {Control-Client IP address, Control-Client TCP port number,
Server IP address, Server TCP port}. Control connection configuration Server IP address, Server TCP port}. &nbsp;Control connection configurat ion
items on a TWAMP Server are read-only.</t> items on a TWAMP Server are read-only.</t>
</section> </section>
<section anchor="twampSender" numbered="true" toc="default">
<section anchor="twampSender" title="Session-Sender"> <name>Session-Sender</name>
<t>A TWAMP Session-Sender has an administrative status field set at <t>A TWAMP Session-Sender has an administrative status field set at
the device level that indicates whether the node is enabled to the device level that indicates whether the node is enabled to
function as such.</t> function as such.</t>
<t>There is one Session-Sender instance for each TWAMP-Test session <t>There is one Session-Sender instance for each TWAMP-Test session
that is initiated from the sending device. Primary configuration that is initiated from the sending device. Primary configuration
fields include: <list style="symbols"> fields include: </t>
<t>The test session name MUST be identical to the corresponding <ul spacing="normal">
test session name on the TWAMP Control-Client (<xref <li>The test session name, which <bcp14>MUST</bcp14> be identical to t
target="twamp-client"/>).</t> he corresponding
test session name on the TWAMP Control-Client (<xref target="twamp-c
<t>The control connection name, which along with the test session lient" format="default"/>).</li>
name uniquely identify the TWAMP Session-Sender instance.</t> <li>The control connection name, which, along with the test session
name, uniquely identifies the TWAMP Session-Sender instance.</li>
<t>Information pertaining to the test packet stream, such as, the <li>Information pertaining to the test packet stream, such as the
number of test packets and the packet distribution to be employed; number of test packets and the packet distribution to be employed;
see also <xref target="RFC3432">Network performance measurement see also <xref target="RFC3432" format="default">"Network performanc
with periodic streams </xref>.</t> e measurement
</list></t> with periodic streams"</xref>.</li>
</ul>
</section> </section>
<section anchor="twampReflector" numbered="true" toc="default">
<section anchor="twampReflector" title="Session-Reflector"> <name>Session-Reflector</name>
<t>Each TWAMP Session-Reflector has an administrative status field set <t>Each TWAMP Session-Reflector has an administrative status field set
at the device level to indicate whether the node is enabled to at the device level to indicate whether the node is enabled to
function as such.</t> function as such.</t>
<t>Each Session-Reflector is associated with zero or more TWAMP-Test <t>Each Session-Reflector is associated with zero or more TWAMP-Test
sessions. For each test session, the REFWAIT timeout parameter, which sessions. For each test session, the REFWAIT timeout parameter, which
determines whether to discontinue the session if no packets have been determines whether to discontinue the session if no packets have been
received (<xref target="RFC5357">TWAMP </xref>, Section 4.2), can be received (<xref target="RFC5357" sectionFormat="comma" section="4.2">TWA MP</xref>), can be
configured.</t> configured.</t>
<t>Read-only access to other data model parameters, such as the Sender <t>Read-only access to other data model parameters, such as the Sender
IP address, is foreseen. Each test session can be uniquely identified IP address, is foreseen. Each test session can be uniquely identified
by the 4-tuple mentioned in <xref target="twamp-server"/>.</t> by the 4-tuple mentioned in <xref target="twamp-server" format="default" />.</t>
</section> </section>
</section> </section>
<section anchor="parameters" numbered="true" toc="default">
<section anchor="parameters" title="Data Model Parameters"> <name>Data Model Parameters</name>
<t>This section defines the TWAMP data model using <xref <t>This section defines the TWAMP data model using UML <xref target="UML"/
target="UML">UML</xref> and introduces selected parameters associated > and introduces selected parameters associated
with the four TWAMP logical entities. The complete TWAMP data model with the four TWAMP logical entities. The complete TWAMP data model
specification is provided in the YANG module presented in <xref specification is provided in the YANG module presented in <xref target="ya
target="yangmodule"/>.</t> ngmodule" format="default"/>.</t>
<section anchor="clientConfig" numbered="true" toc="default">
<section anchor="clientConfig" title="Control-Client"> <name>Control-Client</name>
<t>The client container (see <xref target="fig:twamp-client"/>) holds <t>The client container (see <xref target="fig_twamp-client" format="def
ault"/>) holds
items that are related to the configuration of the TWAMP items that are related to the configuration of the TWAMP
Control-Client logical entity (recall <xref target="fig:scope"/>).</t> Control-Client logical entity (recall <xref target="fig_scope" format="d
efault"/>).</t>
<t>The client container includes an administrative configuration <t>The client container includes an administrative configuration
parameter (client/admin-state) that indicates whether the device is parameter (client/admin-state) that indicates whether the device is
allowed to initiate TWAMP-Control connections.</t> allowed to initiate TWAMP-Control connections.</t>
<figure anchor="fig_twamp-client">
<figure anchor="fig:twamp-client" <name>TWAMP Control-Client UML Class Diagram</name>
title="TWAMP Control-Client UML class diagram"> <artwork name="" type="" align="left" alt=""><![CDATA[
<artwork><![CDATA[ +-------------+
+-------------+ | client |
| client | +-------------+ 1..* +-----------------------+
+-------------+ 1..* +-----------------------+ | admin-state |<>----------------------| mode-preference-chain |
| admin-state |<>----------------------| mode-preference-chain | | | +-----------------------+
| | +-----------------------+ | | 1..* +------------+ | priority |
| | 1..* +------------+ | priority | | |<>-----| key-chain | | mode |
| |<>-----| key-chain | | mode | +-------------+ +------------+ +-----------------------+
+-------------+ +------------+ +-----------------------+ ^ | key-id |
^ | key-id | V | secret-key |
V | secret-key | | +------------+
| +------------+ | 0..*
| 0..* +------------------------+
+------------------------+ | ctrl-connection |
| ctrl-connection | +------------------------+
+------------------------+ | name |
| name | | client-ip |
| client-ip | | server-ip |
| server-ip | | server-tcp-port | 0..* +----------------------+
| server-tcp-port | 0..* +----------------------+ | control-packet-dscp |<>-------| test-session-request |
| control-packet-dscp |<>-------| test-session-request | | key-id | +----------------------+
| key-id | +----------------------+ | max-count | | name |
| max-count | | name | | client-tcp-port {ro} | | sender-ip |
| client-tcp-port {ro} | | sender-ip | | server-start-time {ro} | | sender-udp-port |
| server-start-time {ro} | | sender-udp-port | | state {ro} | | reflector-ip |
| state {ro} | | reflector-ip | | selected-mode {ro} | | reflector-udp-port |
| selected-mode {ro} | | reflector-udp-port | | token {ro} | | timeout |
| token {ro} | | timeout | | client-iv {ro} | | padding-length |
| client-iv {ro} | | padding-length | +------------------------+ | test-packet-dscp |
+------------------------+ | test-packet-dscp | | start-time |
| start-time | +-------------+ 1 | repeat |
+-------------+ 1 | repeat | | pm-reg-list |------<>| repeat-interval |
| pm-reg-list |------<>| repeat-interval | +-------------+ | state {ro} |
+-------------+ | state {ro} | | pm-index | | sid {ro} |
| pm-index | | sid {ro} | +-------------+ +----------------------+]]></artwork>
+-------------+ +----------------------+
]]></artwork>
</figure> </figure>
<t>The client container holds a list (mode-preference-chain) that
<t>The client container holds a list (mode-preference-chain) which specifies the mode values according to their preferred order of use by
specifies the Mode values according to their preferred order of use by
the operator of this Control-Client, including the authentication and the operator of this Control-Client, including the authentication and
encryption Modes. Specifically, mode-preference-chain lists the mode encryption modes. Specifically, mode-preference-chain lists the mode
and its corresponding priority, as a 16-bit unsigned integer. Values and its corresponding priority, expressed as a 16-bit unsigned integer.
Values
for the priority start with zero, the highest priority, and decreasing for the priority start with zero, the highest priority, and decreasing
priority value is indicated by every increase in value by one.</t> priority value is indicated by every increase in value by one.</t>
<t>Depending on the modes available in the Server Greeting, the
<t>Depending on the Modes available in the Server Greeting, the Control-Client <bcp14>MUST</bcp14> choose the highest-priority mode from
Control-Client MUST choose the highest priority Mode from the the
configured mode-preference-chain list.</t> configured mode-preference-chain list.</t>
<t>Note that the list of preferred modes may set multiple bit
<t>Note that the list of preferred Modes may set multiple bit
positions independently, such as when referring to the extended TWAMP positions independently, such as when referring to the extended TWAMP
features in <xref target="RFC5618">Mixed Security Mode for TWAMP features in <xref target="RFC5618" format="default">"Mixed Security
</xref>, <xref target="RFC5938">Individual Session Control Feature for Mode for the Two-Way Active Measurement Protocol (TWAMP)"</xref>,
TWAMP </xref>, <xref target="RFC6038">TWAMP Reflect Octets and <xref target="RFC5938" format="default">"Individual Session Control
Symmetrical Size Features </xref>, and <xref Feature for the Two-Way Active Measurement Protocol (TWAMP)"</xref>, <xr
target="RFC7717">IKEv2-Derived Shared Secret Key for OWAMP and TWAMP ef target="RFC6038" format="default">"Two-Way Active
</xref>. If the Control-Client cannot determine an acceptable Mode, or Measurement Protocol (TWAMP) Reflect Octets and Symmetrical Size Features"</xref
when the bit combinations do not make sense, e.g., both authenticated >, and <xref target="RFC7717"
and unauthenticated bit are set, it MUST respond with zero Mode bits format="default">"IKEv2-Derived Shared Secret Key for
set in the Set-up Response message, indicating it will not continue the One-Way Active Measurement Protocol (OWAMP) and
Two-Way Active Measurement Protocol (TWAMP)"</xref>. If the Control-Clie
nt cannot determine an acceptable mode, or
when the bit combinations do not make sense, e.g., authenticated
and unauthenticated bits are both set, it <bcp14>MUST</bcp14> respond wi
th zero Mode bits
set in the Set-Up-Response message, indicating that it will not continue
with the control connection.</t> with the control connection.</t>
<t>In addition, the client container holds a list named "key-chain",
<t>In addition, the client container holds a list named key-chain
which relates key-id with the respective secret-key. Both the Server which relates key-id with the respective secret-key. Both the Server
and the Control-Client use the same mappings from key-id to secret-key and the Control-Client use the same mappings from key-id to secret&nbhy;
(in <xref target="fig:twamp-client"/>); in order for this to work key
(in <xref target="fig_twamp-client" format="default"/>); in order for th
is to work
properly, key-id must be unique across all systems in the properly, key-id must be unique across all systems in the
administrative domain. The Server, being prepared to conduct sessions administrative domain. The Server, being prepared to conduct sessions
with more than one Control-Client, uses key-id to choose the with more than one Control-Client, uses key-id to choose the
appropriate secret-key; a Control-Client would typically have appropriate secret-key; a Control-Client would typically have
different secret keys for different Servers. The secret-key is the different secret keys for different Servers. The secret-key is the
shared secret, of type binary and the length SHOULD contain at least shared secret, of type "binary", and the length <bcp14>SHOULD</bcp14> co
128 bits of entropy. The key-id and secret-key encoding SHOULD follow ntain at least
Section 9.8 of <xref target="RFC7950">YANG </xref>. The derived key 128 bits of entropy. The key-id and secret-key encoding <bcp14>SHOULD</b
length (dkLen in <xref target="RFC8018">PKCS #5: Password-Based cp14> follow
Cryptography Specification Version 2.1 </xref>) MUST be 16 octets for <xref target="RFC7950" sectionFormat="of" section="9.8">YANG</xref>. The
the AES Session-key used for encryption and 32 octets for the derived key
HMAC-SHA1 Session-key used for authentication; see also Section 6.10 length (dkLen as defined in <xref target="RFC8018" format="default">"PKC
of <xref target="RFC4656">OWAMP </xref>.</t> S #5: Password-Based
Cryptography Specification Version 2.1"</xref>) <bcp14>MUST</bcp14> be 1
6 octets for
the AES Session-key used for encryption and 32&nbsp;octets for the
HMAC-SHA1 Session-key used for authentication; see also <xref target="RF
C4656" sectionFormat="of" section="6.10">OWAMP</xref>.</t>
<t>Each client container also holds a list of control connections, <t>Each client container also holds a list of control connections,
where each item in the list describes a TWAMP control connection where each item in the list describes a TWAMP-Control connection
initiated by this Control-Client. There SHALL be one ctrl-connection initiated by this Control-Client. There <bcp14>SHALL</bcp14> be one ctrl
-connection
per TWAMP-Control (TCP) connection that is to be initiated from this per TWAMP-Control (TCP) connection that is to be initiated from this
device.</t> device.</t>
<t>In turn, each ctrl-connection holds a test-session-request list. <t>In turn, each ctrl-connection holds a test-session-request list.
Each test-session-request holds information associated with the Each test-session-request holds information associated with the
Control-Client for this test session. This includes information Control-Client for this test session. This includes information
associated with the Request-TW-Session/Accept-Session message exchange associated with the Request-TW-Session/Accept-Session message exchange
(see Section 3.5 of <xref target="RFC5357">TWAMP </xref>).</t> (see <xref target="RFC5357" sectionFormat="of" section="3.5">TWAMP</xref
>).</t>
<t>There SHALL be one instance of test-session-request for each <t>There <bcp14>SHALL</bcp14> be one instance of test-session-request fo
TWAMP-Test session that is to be negotiated by this TWAMP-Control r each
TWAMP&nbhy;Test session that is to be negotiated by this TWAMP-Control
connection via a Request-TW-Session/Accept-Session exchange.</t> connection via a Request-TW-Session/Accept-Session exchange.</t>
<t>The Control-Client is also responsible for scheduling TWAMP-Test <t>The Control-Client is also responsible for scheduling TWAMP-Test
sessions, therefore test-session-request holds information related to sessions; therefore, test-session-request holds information related to
these actions (e.g. pm-index, repeat-interval).</t> these actions (e.g., pm-index, repeat-interval).</t>
</section> </section>
<section anchor="serverConfig" numbered="true" toc="default">
<section anchor="serverConfig" title="Server"> <name>Server</name>
<t>The server container (see <xref target="fig:twamp-server"/>) holds <t>The server container (see <xref target="fig_twamp-server" format="def
ault"/>) holds
items that are related to the configuration of the TWAMP Server items that are related to the configuration of the TWAMP Server
logical entity (recall <xref target="fig:scope"/>).</t> logical entity (recall <xref target="fig_scope" format="default"/>).</t>
<t>The server container includes an administrative configuration <t>The server container includes an administrative configuration
parameter (server/admin-state) that indicates whether the device is parameter (server/admin-state) that indicates whether the device is
allowed to receive TWAMP-Control connections.</t> allowed to receive TWAMP-Control connections.</t>
<t>A device operating in the Server Role cannot configure attributes
<t>A device operating in the Server role cannot configure attributes on a per-TWAMP-Control-connection basis, as it has no foreknowledge of
on a per TWAMP-Control connection basis, as it has no foreknowledge of
the incoming TWAMP-Control connections to be received. Consequently, the incoming TWAMP-Control connections to be received. Consequently,
any parameter that the Server might want to apply to an incoming any parameter that the Server might want to apply to an incoming
control connection must be configured at the overall Server level and control connection must be configured at the overall Server level and
applied to all incoming TWAMP-Control connections.</t> applied to all incoming TWAMP-Control connections.</t>
<figure anchor="fig_twamp-server">
<figure anchor="fig:twamp-server" <name>TWAMP Server UML Class Diagram</name>
title="TWAMP Server UML class diagram"> <artwork name="" type="" align="left" alt=""><![CDATA[
<artwork><![CDATA[ +---------------------+
+---------------------+ | server |
| server | +---------------------+
+---------------------+ | admin-state | 1..* +------------+
| admin-state | 1..* +------------+ | server-tcp-port |<>------| key-chain |
| server-tcp-port |<>------| key-chain | | servwait | +------------+
| servwait | +------------+ | control-packet-dscp | | key-id |
| control-packet-dscp | | key-id | | count | | secret-key |
| count | | secret-key | | max-count | +------------+
| max-count | +------------+ | modes |
| modes | | | 0..* +--------------------------+
| | 0..* +--------------------------+ | |<>------| ctrl-connection |
| |<>------| ctrl-connection | +---------------------+ +--------------------------+
+---------------------+ +--------------------------+ | client-ip {ro} |
| client-ip {ro} | | client-tcp-port {ro} |
| client-tcp-port {ro} | | server-ip {ro} |
| server-ip {ro} | | server-tcp-port {ro} |
| server-tcp-port {ro} | | state {ro} |
| state {ro} | | control-packet-dscp {ro} |
| control-packet-dscp {ro} | | selected-mode {ro} |
| selected-mode {ro} | | key-id {ro} |
| key-id {ro} | | count {ro} |
| count {ro} | | max-count {ro} |
| max-count {ro} | | salt {ro} |
| salt {ro} | | server-iv {ro} |
| server-iv {ro} | | challenge {ro} |
| challenge {ro} | +--------------------------+]]></artwork>
+--------------------------+
]]></artwork>
</figure> </figure>
<t>Each server container holds a list named "key-chain", which relates
<t>Each server container holds a list named key-chain which relates key-id with the respective secret-key. As mentioned in <xref target="cli
key-id with the respective secret-key. As mentioned in <xref entConfig" format="default"/>, both the Server and the Control-Client use
target="clientConfig"/>, both the Server and the Control-Client use the same mapping from key&nbhy;id to the shared secret-key; in order for
the same mapping from key-id to shared secret-key; in order for this this
to work properly, key-id must be unique across all the systems in the to work properly, key-id must be unique across all the systems in the
administrative domain. The Server, being prepared to conduct sessions administrative domain. The Server, being prepared to conduct sessions
with more than one Control-Client, uses key-id to choose the with more than one Control-Client, uses key-id to choose the
appropriate secret-key; a Control-Client would typically have appropriate secret-key; a Control-Client would typically have
different secret keys for different Servers. The key-id tells the different secret keys for different Servers. &nbsp;key-id tells the
Server which shared secret-key the Control-Client wishes to use for Server which shared secret-key the Control-Client wishes to use for
authentication or encryption.</t> authentication or encryption.</t>
<t>Each incoming control connection active on the Server is <t>Each incoming control connection active on the Server is
represented by a ctrl-connection. There SHALL be one ctrl-connection represented by a ctrl-connection. There <bcp14>SHALL</bcp14> be one ctrl -connection
per incoming TWAMP-Control (TCP) connection that is received and per incoming TWAMP-Control (TCP) connection that is received and
active on the Server. Each ctrl-connection can be uniquely identified active on the Server. Each ctrl-connection can be uniquely identified
by the 4-tuple {client-ip, client-tcp-port, server-ip, by the 4-tuple {client-ip, client-tcp-port, server-ip,
server-tcp-port}. All items in the ctrl-connection list are server-tcp-port}. &nbsp;All items in the ctrl-connection list are
read-only.</t> read-only.</t>
</section> </section>
<section anchor="senderConfig" numbered="true" toc="default">
<section anchor="senderConfig" title="Session-Sender"> <name>Session-Sender</name>
<t>The session-sender container, illustrated in <xref <t>The session-sender container, illustrated in <xref target="fig_twampS
target="fig:twampSenders"/>, holds items that are related to the enders" format="default"/>, holds items that are related to the
configuration of the TWAMP Session-Sender logical entity.</t> configuration of the TWAMP Session-Sender logical entity.</t>
<t>The session-sender container includes an administrative parameter <t>The session-sender container includes an administrative parameter
(session-sender/admin-state) that controls whether the device is (session-sender/admin-state) that controls whether the device is
allowed to initiate TWAMP-Test sessions.</t> allowed to initiate TWAMP-Test sessions.</t>
<figure anchor="fig_twampSenders">
<figure anchor="fig:twampSenders" <name>TWAMP Session-Sender UML Class Diagram</name>
title="TWAMP Session-Sender UML class diagram"> <artwork name="" type="" align="left" alt=""><![CDATA[
<artwork><![CDATA[ +----------------+
+----------------+ | session-sender |
| session-sender | +----------------+ 0..* +---------------------------+
+----------------+ 0..* +---------------------------+ | admin-state |<>-----| test-session |
| admin-state |<>-----| test-session | +----------------+ +---------------------------+
+----------------+ +---------------------------+ | name |
| name | | ctrl-connection-name {ro} |
| ctrl-connection-name {ro} | | fill-mode |
| fill-mode | | number-of-packets |
| number-of-packets | | state {ro} |
| state {ro} | | sent-packets {ro} |
| sent-packets {ro} | | rcv-packets {ro} |
| rcv-packets {ro} | | last-sent-seq {ro} |
| last-sent-seq {ro} | | last-rcv-seq {ro} |
| last-rcv-seq {ro} | +---------------------------+
+---------------------------+ ^
^ V
V | 1
| 1 +---------------------+
+---------------------+ | packet-distribution |
| packet-distribution | +---------------------+
+---------------------+ | periodic / poisson |
| periodic / poisson | +---------------------+
+---------------------+ | |
| | +-------------------+ |
+-------------------+ | | periodic-interval | |
| periodic-interval | | +-------------------+ |
+-------------------+ | |
| +--------------+
+--------------+ | lambda |
| lambda | | max-interval |
| max-interval | +--------------+]]></artwork>
+--------------+
]]></artwork>
</figure> </figure>
<t>Each TWAMP-Test session initiated by the Session-Sender will be <t>Each TWAMP-Test session initiated by the Session-Sender will be
represented by an instance of a test-session object. There SHALL be represented by an instance of a test-session object. There <bcp14>SHALL< /bcp14> be
one instance of test-session for each TWAMP-Test session for which one instance of test-session for each TWAMP-Test session for which
packets are being sent.</t> packets are being sent.</t>
</section> </section>
<section anchor="reflectorConfig" numbered="true" toc="default">
<section anchor="reflectorConfig" title="Session-Reflector"> <name>Session-Reflector</name>
<t>The session-reflector container, illustrated in <xref <t>The session-reflector container, illustrated in <xref target="fig_twa
target="fig:twampReflector"/>, holds items that are related to the mpReflector" format="default"/>, holds items that are related to the
configuration of the TWAMP Session-Reflector logical entity.</t> configuration of the TWAMP Session-Reflector logical entity.</t>
<t>The session-reflector container includes an administrative <t>The session-reflector container includes an administrative
parameter (session-reflector/admin-state) that controls whether the parameter (session-reflector/admin-state) that controls whether the
device is allowed to respond to incoming TWAMP-Test sessions.</t> device is allowed to respond to incoming TWAMP-Test sessions.</t>
<t>A device operating in the Session-Reflector Role cannot configure
<t>A device operating in the Session-Reflector role cannot configure
attributes on a per-session basis, as it has no foreknowledge of what attributes on a per-session basis, as it has no foreknowledge of what
incoming sessions it will receive. As such, any parameter that the incoming sessions it will receive. As such, any parameter that the
Session-Reflector might want to apply to an incoming TWAMP-Test Session-Reflector might want to apply to an incoming TWAMP-Test
session must be configured at the overall Session-Reflector level and session must be configured at the overall Session-Reflector level and
are applied to all incoming sessions.</t> applied to all incoming sessions.</t>
<figure anchor="fig_twampReflector">
<figure anchor="fig:twampReflector" <name>TWAMP Session-Reflector UML Class Diagram</name>
title="TWAMP Session-Reflector UML class diagram"> <artwork name="" type="" align="left" alt=""><![CDATA[
<artwork><![CDATA[ +-------------------+
+-------------------+ | session-reflector |
| session-reflector | +-------------------+
+-------------------+ | admin-state |
| admin-state | | refwait |
| refwait | +-------------------+
+-------------------+ ^
^ V
V |
| | 0..*
| 0..* +----------------------------------------+
+----------------------------------------+ | test-session |
| test-session | +----------------------------------------+
+----------------------------------------+ | sid {ro} |
| sid {ro} | | sender-ip {ro} |
| sender-ip {ro} | | sender-udp-port {ro} |
| sender-udp-port {ro} | | reflector-ip {ro} |
| reflector-ip {ro} | | reflector-udp-port {ro} |
| reflector-udp-port {ro} | | parent-connection-client-ip {ro} |
| parent-connection-client-ip {ro} | | parent-connection-client-tcp-port {ro} |
| parent-connection-client-tcp-port {ro} | | parent-connection-server-ip {ro} |
| parent-connection-server-ip {ro} | | parent-connection-server-tcp-port {ro} |
| parent-connection-server-tcp-port {ro} | | test-packet-dscp {ro} |
| test-packet-dscp {ro} | | sent-packets {ro} |
| sent-packets {ro} | | rcv-packets {ro} |
| rcv-packets {ro} | | last-sent-seq {ro} |
| last-sent-seq {ro} | | last-rcv-seq {ro} |
| last-rcv-seq {ro} | +----------------------------------------+]]></artwork>
+----------------------------------------+
]]></artwork>
</figure> </figure>
<t>Each incoming TWAMP-Test session that is active on the <t>Each incoming TWAMP-Test session that is active on the
Session-Reflector SHALL be represented by an instance of a Session-Reflector <bcp14>SHALL</bcp14> be represented by an instance of a
test-session object. All items in the test-session object are test-session object. All items in the test-session object are
read-only.</t> read-only.</t>
<t>Instances of test-session are indexed by a Session Identifier
<t>Instances of test-session are indexed by a session identifier (SID) (the sid parameter). This SID value is auto-allocated by the TWAMP
(sid). This value is auto-allocated by the TWAMP Server as test Server as test
session requests are received, and communicated back to the session requests are received and is communicated back to the
Control-Client in the SID field of the Accept-Session message; see Control-Client in the SID field of the Accept-Session message; see
Section 4.3 of <xref target="RFC6038">TWAMP Reflect Octets and Section <xref target="RFC6038" sectionFormat="bare" section="4.3"/> of
Symmetrical Size Features </xref>.</t> <xref target="RFC6038">"Two-Way
Active Measurement Protocol (TWAMP) Reflect Octets and Symmetrical
Size Features"</xref>.</t>
<t>When attempting to retrieve operational data for active test <t>When attempting to retrieve operational data for active test
sessions from a Session-Reflector device, the user will not know what sessions from a Session-Reflector device, the user will not know what
sessions are currently active on that device, or what SIDs have been sessions are currently active on that device or what SIDs have been
auto-allocated for these test sessions. If the user has network access auto&nbhy;allocated for these test sessions. If the user has network acc
ess
to the Control-Client device, then it is possible to read the data for to the Control-Client device, then it is possible to read the data for
this session under client/ctrl-connection/test-session-request/sid and this session under client/ctrl-connection/test-session-request/sid and
obtain the SID (see <xref target="fig:twamp-client"/>). The user may obtain the SID (see <xref target="fig_twamp-client" format="default"/>). The user may
then use this SID value as an index to retrieve an individual then use this SID value as an index to retrieve an individual
session-reflector/test-session instance on the Session-Reflector session-reflector/test-session instance on the Session-Reflector
device.</t> device.</t>
<t>If the user has no network access to the Control-Client device, <t>If the user has no network access to the Control-Client device,
then the only option is to retrieve all test-session instances from then the only option is to retrieve all test-session instances from
the Session-Reflector device, and then pick out specific test-session the Session-Reflector device and then pick out specific test-session
instances of interest to the user. This could be problematic if a instances of interest to the user. This could be problematic if a
large number of test sessions are currently active on that device.</t> large number of test sessions are currently active on that device.</t>
<t>Each Session-Reflector TWAMP-Test session contains the following <t>Each Session-Reflector TWAMP-Test session contains the following
4-tuple: {parent-connection-client-ip, 4-tuple: {parent-connection-client-ip,
parent-connection-client-tcp-port, parent-connection-server-ip, parent-connection-client-tcp-port, parent-connection-server-ip,
parent-connection-server-tcp-port}. This 4-tuple MUST correspond to parent-connection-server-tcp-port}. &nbsp;This 4-tuple <bcp14>MUST</bcp1 4> correspond to
the equivalent 4-tuple {client-ip, client-tcp-port, server-ip, the equivalent 4-tuple {client-ip, client-tcp-port, server-ip,
server-tcp-port} in server/ctrl-connection. This 4-tuple allows the server-tcp-port} in server&wj;/ctrl-connection. This 4-tuple allows the
user to trace back from the TWAMP-Test session to the (parent) user to trace back from the TWAMP-Test session to the (parent)
TWAMP-Control connection that negotiated this test session.</t> TWAMP-Control connection that negotiated this test session.</t>
</section> </section>
</section> </section>
<section anchor="module" numbered="true" toc="default">
<section anchor="module" title="Data Model"> <name>Data Model</name>
<t>This section formally specifies the TWAMP data model using YANG.</t> <t>This section formally specifies the TWAMP data model using YANG.</t>
<section anchor="yangtree" numbered="true" toc="default">
<section anchor="yangtree" title="YANG Tree Diagram"> <name>YANG Tree Diagram</name>
<t>This section presents a simplified graphical representation of the <t>This section presents a simplified graphical representation of the
TWAMP data model using a YANG tree diagram. Readers should keep in TWAMP data model using a YANG tree diagram. Readers should keep in
mind that the limit of 72 characters per line forces us to introduce mind that the limit of 72 characters per line forces us to introduce
artificial line breaks in some tree diagram nodes. Tree diagrams used artificial line breaks in some tree diagram nodes. Tree diagrams used
in this document follow the notation defined in <xref in this document follow the notation defined in <xref target="RFC8340"
target="RFC8340">YANG Tree Diagrams</xref>.</t> format="default">"YANG Tree Diagrams"</xref>.</t>
<figure anchor="fig:yangtree" title="YANG Tree Diagram."> <t>Please note that the backslash ('\') character near the end of the
<artwork><![CDATA[ diagram is used for formatting purposes only
(i.e., "reflector&nbhy;udp&nbhy;port]" should be treated as part of
the same line as "[sender&nbhy;ip&nbsp;sender&nbhy;udp&nbhy;port&nbsp;re
flector&nbhy;ip").</t>
<figure anchor="fig_yangtree">
<name>YANG Tree Diagram</name>
<sourcecode type="yangtree"><![CDATA[
module: ietf-twamp module: ietf-twamp
+--rw twamp +--rw twamp
+--rw client {control-client}? +--rw client {control-client}?
| +--rw admin-state? boolean | +--rw admin-state? boolean
| +--rw mode-preference-chain* [priority] | +--rw mode-preference-chain* [priority]
| | +--rw priority uint16 | | +--rw priority uint16
| | +--rw mode? twamp-modes | | +--rw mode? twamp-modes
| +--rw key-chain* [key-id] | +--rw key-chain* [key-id]
| | +--rw key-id string | | +--rw key-id string
| | +--rw secret-key? binary | | +--rw secret-key? binary
| +--rw ctrl-connection* [name] | +--rw ctrl-connection* [name]
| +--rw name string | +--rw name string
| +--rw client-ip? inet:ip-address | +--rw client-ip? inet:ip-address
| +--rw server-ip inet:ip-address | +--rw server-ip inet:ip-address
| +--rw server-tcp-port? inet:port-number | +--rw server-tcp-port? inet:port-number
| +--rw control-packet-dscp? inet:dscp | +--rw control-packet-dscp? inet:dscp
| +--rw key-id? string | +--rw key-id? string
| +--rw max-count-exponent? uint8 | +--rw max-count-exponent? uint8
| +--ro client-tcp-port? inet:port-number | +--ro client-tcp-port? inet:port-number
| +--ro server-start-time? uint64 | +--ro server-start-time? uint64
| +--ro repeat-count? uint64 | +--ro repeat-count? uint64
| +--ro state? | +--ro state?
| | control-client-connection-state | | control-client-connection-state
| +--ro selected-mode? twamp-modes | +--ro selected-mode? twamp-modes
| +--ro token? binary | +--ro token? binary
| +--ro client-iv? binary | +--ro client-iv? binary
| +--rw test-session-request* [name] | +--rw test-session-request* [name]
| +--rw name string | +--rw name string
| +--rw sender-ip? inet:ip-address | +--rw sender-ip? inet:ip-address
| +--rw sender-udp-port? union | +--rw sender-udp-port? union
| +--rw reflector-ip inet:ip-address | +--rw reflector-ip inet:ip-address
| +--rw reflector-udp-port? inet:port-number | +--rw reflector-udp-port? inet:port-number
| +--rw timeout? uint64 | +--rw timeout? uint64
| +--rw padding-length? uint32 | +--rw padding-length? uint32
| +--rw test-packet-dscp? inet:dscp | +--rw test-packet-dscp? inet:dscp
| +--rw start-time? uint64 | +--rw start-time? uint64
| +--rw repeat? uint32 | +--rw repeat? uint32
| +--rw repeat-interval? uint32 | +--rw repeat-interval? uint32
| +--rw pm-reg-list* [pm-index] | +--rw pm-reg-list* [pm-index]
| | +--rw pm-index uint16 | | +--rw pm-index uint16
| +--ro state? test-session-state | +--ro state? test-session-state
| +--ro sid? string | +--ro sid? string
+--rw server {server}? +--rw server {server}?
| +--rw admin-state? boolean | +--rw admin-state? boolean
| +--rw server-tcp-port? inet:port-number | +--rw server-tcp-port? inet:port-number
| +--rw servwait? uint32 | +--rw servwait? uint32
| +--rw control-packet-dscp? inet:dscp | +--rw control-packet-dscp? inet:dscp
| +--rw count? uint8 | +--rw count? uint8
| +--rw max-count-exponent? uint8 | +--rw max-count-exponent? uint8
| +--rw modes? twamp-modes | +--rw modes? twamp-modes
| +--rw key-chain* [key-id] | +--rw key-chain* [key-id]
| | +--rw key-id string | | +--rw key-id string
| | +--rw secret-key? binary | | +--rw secret-key? binary
| +--ro ctrl-connection* | +--ro ctrl-connection*
| [client-ip client-tcp-port server-ip server-tcp-port] | [client-ip client-tcp-port server-ip server-tcp-port]
| +--ro client-ip inet:ip-address | +--ro client-ip inet:ip-address
| +--ro client-tcp-port inet:port-number | +--ro client-tcp-port inet:port-number
| +--ro server-ip inet:ip-address | +--ro server-ip inet:ip-address
| +--ro server-tcp-port inet:port-number | +--ro server-tcp-port inet:port-number
| +--ro state? server-ctrl-connection-state | +--ro state? server-ctrl-connection-state
| +--ro control-packet-dscp? inet:dscp | +--ro control-packet-dscp? inet:dscp
| +--ro selected-mode? twamp-modes | +--ro selected-mode? twamp-modes
| +--ro key-id? string | +--ro key-id? string
| +--ro count? uint8 | +--ro count? uint8
| +--ro max-count-exponent? uint8 | +--ro max-count-exponent? uint8
| +--ro salt? binary | +--ro salt? binary
| +--ro server-iv? binary | +--ro server-iv? binary
| +--ro challenge? binary | +--ro challenge? binary
+--rw session-sender {session-sender}? +--rw session-sender {session-sender}?
| +--rw admin-state? boolean | +--rw admin-state? boolean
| +--rw test-session* [name] | +--rw test-session* [name]
| +--rw name string | +--rw name string
| +--ro ctrl-connection-name? string | +--ro ctrl-connection-name? string
| +--rw fill-mode? padding-fill-mode | +--rw fill-mode? padding-fill-mode
| +--rw number-of-packets uint32 | +--rw number-of-packets uint32
| +--rw (packet-distribution)? | +--rw (packet-distribution)?
| | +--:(periodic) | | +--:(periodic)
| | | +--rw periodic-interval decimal64 | | | +--rw periodic-interval decimal64
| | +--:(poisson) | | +--:(poisson)
| | +--rw lambda decimal64 | | +--rw lambda decimal64
| | +--rw max-interval? decimal64 | | +--rw max-interval? decimal64
| +--ro state? sender-session-state | +--ro state? sender-session-state
| +--ro sent-packets? uint32 | +--ro sent-packets? uint32
| +--ro rcv-packets? uint32 | +--ro rcv-packets? uint32
| +--ro last-sent-seq? uint32 | +--ro last-sent-seq? uint32
| +--ro last-rcv-seq? uint32 | +--ro last-rcv-seq? uint32
+--rw session-reflector {session-reflector}? +--rw session-reflector {session-reflector}?
+--rw admin-state? boolean +--rw admin-state? boolean
+--rw refwait? uint32 +--rw refwait? uint32
+--ro test-session* +--ro test-session*
[sender-ip sender-udp-port reflector-ip reflector-udp [sender-ip sender-udp-port reflector-ip \
-port] reflector-udp-port]
+--ro sid? string +--ro sid? string
+--ro sender-ip inet:ip-address +--ro sender-ip inet:ip-address
+--ro sender-udp-port +--ro sender-udp-port
| dynamic-port-number | dynamic-port-number
+--ro reflector-ip inet:ip-address +--ro reflector-ip inet:ip-address
+--ro reflector-udp-port inet:port-numbe +--ro reflector-udp-port inet:port-number
r +--ro parent-connection-client-ip? inet:ip-address
+--ro parent-connection-client-ip? inet:ip-address +--ro parent-connection-client-tcp-port? inet:port-number
+--ro parent-connection-client-tcp-port? inet:port-numbe +--ro parent-connection-server-ip? inet:ip-address
r +--ro parent-connection-server-tcp-port? inet:port-number
+--ro parent-connection-server-ip? inet:ip-address +--ro test-packet-dscp? inet:dscp
+--ro parent-connection-server-tcp-port? inet:port-numbe +--ro sent-packets? uint32
r +--ro rcv-packets? uint32
+--ro test-packet-dscp? inet:dscp +--ro last-sent-seq? uint32
+--ro sent-packets? uint32 +--ro last-rcv-seq? uint32]]></sourcecode>
+--ro rcv-packets? uint32
+--ro last-sent-seq? uint32
+--ro last-rcv-seq? uint32
]]></artwork>
</figure> </figure>
</section>
<section anchor="yangmodule" title="YANG Module"> </section>
<section anchor="yangmodule" numbered="true" toc="default">
<name>YANG Module</name>
<t>This section presents the YANG module for the TWAMP data model <t>This section presents the YANG module for the TWAMP data model
defined in this document. The module imports definitions from <xref defined in this document. The module imports definitions from <xref
target="RFC6991">Common YANG Data Types</xref>, and references <xref target="RFC6991" format="default">"Common YANG Data Types"</xref> and
target="RFC5905">NTPv4 Specification</xref>, <xref references <xref target="RFC2330" format="default">"Framework for IP Per
target="RFC2330">Framework for IP Performance Metrics</xref>, <xref formance
target="RFC4086">Randomness Requirements for Security</xref>, <xref Metrics"</xref>,
target="RFC4656">OWAMP</xref>, <xref target="RFC5357">TWAMP</xref>, <xref target="RFC3432">"Network performance measurement with periodic
<xref target="RFC5618">More Features for TWAMP</xref>, <xref streams"</xref>, <xref target="RFC4656"
target="RFC5938">Individual Session Control Feature</xref>, <xref format="default">"A One-way Active Measurement Protocol
target="RFC6038">TWAMP Reflect Octets and Symmetrical Size (OWAMP)"</xref>, <xref target="RFC5357" format="default">"A Two-Way
Features</xref>, <xref target="RFC7312">Advances Stream and Sampling Active Measurement Protocol (TWAMP)"</xref>,
Framework</xref>, <xref target="RFC7717">IKEv2-Derived Shared Secret <xref target="RFC5618" format="default">"Mixed Security Mode for the
Key for OWAMP and TWAMP</xref>, and <xref Two-Way Active Measurement Protocol (TWAMP)"</xref>,
target="I-D.ietf-ippm-port-twamp-test">OWAMP and TWAMP Well-Known Port <xref target="RFC5905" format="default">"Network Time
Assignments</xref>.</t> Protocol Version 4: Protocol and Algorithms Specification"</xref>,
<xref
target="RFC5938" format="default">"Individual Session Control Feature
for the Two-Way Active Measurement Protocol (TWAMP)"</xref>, <xref target="RFC6
038"
format="default">"Two-Way Active Measurement Protocol (TWAMP) Reflect
Octets and Symmetrical Size Features"</xref>, <xref target="RFC7312" for
mat="default">"Advanced
Stream and Sampling Framework for IP Performance Metrics
(IPPM)"</xref>, <xref target="RFC7717" format="default">"IKEv2-Derived
Shared Secret Key for the One-Way Active Measurement Protocol (OWAMP) an
d Two-Way Active Measurement Protocol (TWAMP)"</xref>, <xref target="RFC8545"
format="default">"Well-Known Port Assignments for the One-Way Active
Measurement Protocol (OWAMP) and the Two-Way Active Measurement
Protocol (TWAMP)"</xref>, and <xref target="RFC8911">"Registry for
Performance Metrics"</xref>.</t>
<figure> <!-- The following text in this section is DNE. During the
<artwork><![CDATA[ verification step, made a couple updates where appropriate.
<CODE BEGINS> file "ietf-twamp@2018-07-02.yang" AQed a mismatch; fixed the 'If an attacking system ...'
text per author during AUTH48.
* As per Section 6 of RFC 4656,
in 'authenticated mode, the timestamp is in the clear
and is not protected cryptographically in any way,
while the rest of the message has the same protection
as in encrypted mode. This mode allows one to trade off
cryptographic protection against accuracy of
timestamps.'";
* 'makes it impossible to alter
timestamps undetectably' [Section 6 of RFC 4656] *Fixed; it's Sec. 1
* As per
Section 3.1 of RFC 4656, KeyID is 'a UTF-8 string, up to
80 octets in length' and is used to select which 'shared
shared secret the [Control-Client] wishes to use to
authenticate or encrypt'.";
* if it 'receives a
Server-Greeting message with Count greater that [sic] its
maximum configured value', as per Section 6 of RFC 5357.
Further, note that according to Section 6 of RFC 5357:
'If an attacking system sets the maximum value in
Count (2**32), then the system under attack would stall
for a significant period of time while it attempts to
generate keys.
TWAMP-compliant systems SHOULD have a configuration
control to limit the maximum count value. The default
max-count-exponent value SHOULD be 15 which corresponds
to a maximum value of 2**15 or 32768.'
Not quoted in original, but I found that the paragraph that follows
"As per RFC 4656:" was verbatim text, so added the single quotes.
**Note:** The hyphen in "pseudo-random number source" has to be
kept, because it's DNE text.
Another DNE item that needed slight adjustment and single quotes
added (after verification): "According to Section 3.1 of RFC 5357" -->
<sourcecode name="ietf-twamp@2021-11-17.yang" type="yang" markers="true"
>
<![CDATA[
module ietf-twamp { module ietf-twamp {
yang-version 1.1; yang-version 1.1;
namespace urn:ietf:params:xml:ns:yang:ietf-twamp; namespace "urn:ietf:params:xml:ns:yang:ietf-twamp";
prefix ietf-twamp; prefix ietf-twamp;
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
reference reference
"RFC 6991: Common YANG Types."; "RFC 6991: Common YANG Data Types";
} }
organization organization
"IETF IPPM (IP Performance Metrics) Working Group"; "IETF IPPM (IP Performance Metrics) Working Group";
contact contact
"WG Web: http://tools.ietf.org/wg/ippm/ "WG Web: <https://datatracker.ietf.org/wg/ippm/documents/>
WG List: ippm@ietf.org WG List: <mailto:ippm@ietf.org>
Editor: Ruth Civil Editor: Ruth Civil
gcivil@ciena.com <mailto:ruthcivil@gmail.com>
Editor: Al Morton Editor: Al Morton
acmorton@att.com <mailto:acmorton@att.com>
Editor: Reshad Rehman
rrahman@cisco.com Editor: Reshad Rahman
<mailto:reshad@yahoo.com>
Editor: Mahesh Jethanandani Editor: Mahesh Jethanandani
mjethanandani@gmail.com <mailto:mjethanandani@gmail.com>
Editor: Kostas Pentikousis
k.pentikousis@travelping.com";
Editor: Kostas Pentikousis
<mailto:kostas.pentikousis@detecon.com>";
description description
"This YANG module specifies a vendor-independent data "This YANG module specifies a vendor-independent data
model for the Two-Way Active Measurement Protocol (TWAMP). model for the Two-Way Active Measurement Protocol (TWAMP).
The data model covers four TWAMP logical entities, namely, The data model defines four TWAMP logical entities, namely
Control-Client, Server, Session-Sender, and Session-Reflector, Control-Client, Server, Session-Sender, and Session-Reflector,
as illustrated in the annotated TWAMP logical model (Fig. 1 as illustrated in the annotated TWAMP logical model (Figure 1
of RFC XXXX). of RFC 8913).
This YANG module uses features to indicate which of the four This YANG module uses features to indicate which of the four
logical entities are supported by a TWAMP implementation. logical entities are supported by a TWAMP implementation.
Copyright (c) 2018 IETF Trust and the persons identified as The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
the document authors. All rights reserved. NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
'MAY', and 'OPTIONAL' in this document are to be interpreted as
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
they appear in all capitals, as shown here.
Copyright (c) 2021 IETF Trust and the persons identified as
authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject without modification, is permitted pursuant to, and subject to
to the license terms contained in, the Simplified BSD the license terms contained in, the Simplified BSD License set
License set forth in Section 4.c of the IETF Trust's Legal forth in Section 4.c of the IETF Trust's Legal Provisions
Provisions Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see This version of this YANG module is part of RFC 8913; see the
the RFC itself for full legal notices."; RFC itself for full legal notices.";
revision 2018-07-02 { revision 2021-11-17 {
description description
"Initial Revision. "Initial revision.
Covers RFC 5357, RFC 5618, RFC 5938, RFC 6038, RFC 7717, and
draft-ietf-ippm-metric-registry";
References RFC 5357, RFC 5618, RFC 5938, RFC 6038, RFC 7717,
and RFC 8911.";
reference reference
"RFC XXXX: TWAMP YANG Data Model."; "RFC 8913: Two-Way Active Measurement Protocol (TWAMP) YANG
Data Model";
} }
/* /*
* Typedefs * Typedefs
*/ */
typedef twamp-modes { typedef twamp-modes {
type bits { type bits {
bit unauthenticated { bit unauthenticated {
position 0; position 0;
description description
"Unauthenticated mode, in which no encryption or "Unauthenticated mode, in which no encryption or
authentication is applied in TWAMP-Control and authentication is applied in TWAMP-Control and
TWAMP-Test. KeyID, Token, and Client-IV are not used in TWAMP-Test. KeyID, Token, and Client-IV are not used in
the Set-Up-Response message. See Section 3.1 of the Set-Up-Response message. See Section 3.1 of
RFC 4656."; RFC 4656.";
reference reference
"RFC 4656: A One-way Active Measurement Protocol "RFC 4656: A One-way Active Measurement Protocol (OWAMP),
(OWAMP)"; Section 3.1";
} }
bit authenticated { bit authenticated {
position 1; position 1;
description description
"Authenticated mode, in which the Control-Client and "Authenticated mode, in which the Control-Client and
Server possess a shared secret thus prohibiting Server possess a shared secret, thus prohibiting
'theft of service'. As per Section 6 of RFC 4656, 'theft of service'. As per Section 6 of RFC 4656,
in 'authenticated mode, the timestamp is in the clear in 'authenticated mode, the timestamp is in the clear
and is not protected cryptographically in any way, and is not protected cryptographically in any way,
while the rest of the message has the same protection while the rest of the message has the same protection
as in encrypted mode. This mode allows one to trade off as in encrypted mode. This mode allows one to trade off
cryptographic protection against accuracy of cryptographic protection against accuracy of
timestamps.'"; timestamps.'";
reference reference
"RFC 4656: A One-way Active Measurement Protocol "RFC 4656: A One-way Active Measurement Protocol (OWAMP),
(OWAMP)"; Section 6";
} }
bit encrypted { bit encrypted {
position 2; position 2;
description description
"Encrypted mode 'makes it impossible to alter "Encrypted mode 'makes it impossible to alter
timestamps undetectably' [Section 6 of RFC 4656]. timestamps undetectably' (Section 1 of RFC 4656).
See also Section 4 of RFC 7717."; See also Section 4 of RFC 7717.";
reference reference
"RFC 4656: A One-way Active Measurement Protocol "RFC 4656: A One-way Active Measurement Protocol (OWAMP),
(OWAMP)"; Section 6
RFC 7717: IKEv2-Derived Shared Secret Key for the One-Way
Active Measurement Protocol (OWAMP) and Two-Way Active
Measurement Protocol (TWAMP), Section 4";
} }
bit unauth-test-encrpyt-control { bit unauth-test-encrypt-control {
position 3; position 3;
description description
"When using the Mixed Security Mode, the TWAMP-Test "When using the mixed security mode, the TWAMP-Test
protocol follows the Unauthenticated mode and the protocol operates in unauthenticated mode and the
TWAMP-Control protocol the Encrypted mode."; TWAMP-Control protocol operates in encrypted mode.";
reference reference
"RFC 5618: Mixed Security Mode for the Two-Way Active "RFC 5618: Mixed Security Mode for the Two-Way Active
Measurement Protocol (TWAMP)"; Measurement Protocol (TWAMP)";
} }
bit individual-session-control { bit individual-session-control {
position 4; position 4;
description description
"This mode enables individual test sessions using "This mode enables individual test sessions using
Session Identifiers."; Session Identifiers.";
reference reference
skipping to change at line 1062 skipping to change at line 1002
description description
"This mode indicates support for the symmetrical size "This mode indicates support for the symmetrical size
sender test packet format."; sender test packet format.";
reference reference
"RFC 6038: Two-Way Active Measurement Protocol (TWAMP) "RFC 6038: Two-Way Active Measurement Protocol (TWAMP)
Reflect Octets and Symmetrical Size Features"; Reflect Octets and Symmetrical Size Features";
} }
bit IKEv2Derived { bit IKEv2Derived {
position 7; position 7;
description description
"In this mode the the shared key is derived "In this mode, the shared key is derived
from an IKEv2 security association (SA)."; from an Internet Key Exchange Protocol Version 2 (IKEv2)
security association (SA).";
reference reference
"RFC 7717: IKEv2-Derived Shared Secret Key for "RFC 7717: IKEv2-Derived Shared Secret Key for
the One-Way Active Measurement Protocol (OWAMP) the One-Way Active Measurement Protocol (OWAMP)
and Two-Way Active Measurement Protocol (TWAMP)"; and Two-Way Active Measurement Protocol (TWAMP)";
} }
} }
description description
"Specifies the configurable TWAMP-Modes supported during a "Specifies the configurable TWAMP-Modes supported during a
TWAMP-Control Connection setup between a Control-Client TWAMP-Control connection setup between a Control-Client
and a Server. Section 7 of RFC 7717 summarizes the and a Server. Section 7 of RFC 7717 summarizes the
TWAMP-Modes registry and points to their formal 'TWAMP-Modes' Registry and points to their
specification."; formal specification.";
} }
typedef control-client-connection-state { typedef control-client-connection-state {
type enumeration { type enumeration {
enum active { enum active {
description description
"Indicates an active TWAMP-Control connection to "Indicates an active TWAMP-Control connection to the
Server."; Server.";
} }
enum idle { enum idle {
description description
"Indicates an idle TWAMP-Control connection to Server."; "Indicates an idle TWAMP-Control connection to the
Server.";
} }
} }
description description
"Indicates the Control-Client TWAMP-Control connection "Indicates the Control-Client TWAMP-Control connection
state."; state.";
} }
typedef test-session-state { typedef test-session-state {
type enumeration { type enumeration {
enum accepted { enum accepted {
skipping to change at line 1148 skipping to change at line 1090
typedef server-ctrl-connection-state { typedef server-ctrl-connection-state {
type enumeration { type enumeration {
enum active { enum active {
description description
"Indicates an active TWAMP-Control connection "Indicates an active TWAMP-Control connection
to the Control-Client."; to the Control-Client.";
} }
enum servwait { enum servwait {
description description
"Indicates that the TWAMP-Control connection to the "Indicates that the TWAMP-Control connection to the
Control-Client is in SERVWAIT as per the definition of Control-Client is in SERVWAIT as per the definition in
Section 3.1 of RFC 5357."; Section 3.1 of RFC 5357.";
reference
"RFC 5357: A Two-Way Active Measurement Protocol (TWAMP),
Section 3.1";
} }
} }
description description
"Indicates the Server TWAMP-Control connection state."; "Indicates the Server TWAMP-Control connection state.";
} }
typedef sender-session-state { typedef sender-session-state {
type enumeration { type enumeration {
enum active { enum active {
description description
skipping to change at line 1179 skipping to change at line 1124
} }
typedef padding-fill-mode { typedef padding-fill-mode {
type enumeration { type enumeration {
enum zero { enum zero {
description description
"TWAMP-Test packets are padded with all zeros."; "TWAMP-Test packets are padded with all zeros.";
} }
enum random { enum random {
description description
"TWAMP-Test packets are padded with pseudo-random "TWAMP-Test packets are padded with pseudorandom
numbers."; numbers.";
} }
} }
description description
"Indicates what type of packet padding is used in the "Indicates what type of packet padding is used in the
TWAMP-Test packets."; TWAMP-Test packets.";
} }
typedef dynamic-port-number { typedef dynamic-port-number {
type inet:port-number { type inet:port-number {
range 49152..65535; range "49152..65535";
} }
description "Dynamic range for port numbers."; description
"Dynamic range for port numbers.";
} }
/* /*
* Features * Features
*/ */
feature control-client { feature control-client {
description description
"Indicates that the device supports configuration of the "Indicates that the device supports configuration of the
TWAMP Control-Client logical entity."; TWAMP Control-Client logical entity.";
skipping to change at line 1229 skipping to change at line 1175
"Indicates that the device supports configuration of the "Indicates that the device supports configuration of the
TWAMP Session-Reflector logical entity."; TWAMP Session-Reflector logical entity.";
} }
/* /*
* Reusable node groups * Reusable node groups
*/ */
grouping key-management { grouping key-management {
list key-chain { list key-chain {
key key-id; key "key-id";
leaf key-id { leaf key-id {
type string { type string {
length 1..80; length "1..80";
} }
description description
"KeyID used for a TWAMP-Control connection. As per "KeyID used for a TWAMP-Control connection. As per
Section 3.1 of RFC 4656, KeyID is 'a UTF-8 string, up to Section 3.1 of RFC 4656, KeyID is 'a UTF-8 string, up to
80 octets in length' and is used to select which 'shared 80 octets in length' and is used to select which 'shared
shared secret the [Control-Client] wishes to use to secret the client' (Control-Client) 'wishes to use to
authenticate or encrypt'."; authenticate or encrypt'.";
} }
leaf secret-key { leaf secret-key {
type binary; type binary;
description
"The secret key corresponding to the KeyID for this
TWAMP-Control connection.";
}
description description
"Relates KeyIDs with their respective secret keys "The secret key corresponding to the KeyID for this
in a TWAMP-Control connection."; TWAMP-Control connection.";
}
description
"Relates KeyIDs with their respective secret keys
in a TWAMP-Control connection.";
} }
description description
"Used by the Control-Client and Server for TWAMP-Control "Used by the Control-Client and Server for TWAMP-Control
key management."; key management.";
} }
grouping maintenance-statistics { grouping maintenance-statistics {
leaf sent-packets { leaf sent-packets {
type uint32; type uint32;
config false; config false;
description description
"Indicates the number of packets sent."; "Indicates the number of packets sent.";
} }
leaf rcv-packets { leaf rcv-packets {
type uint32; type uint32;
config false; config false;
description description
"Indicates the number of packets received."; "Indicates the number of packets received.";
} }
leaf last-sent-seq { leaf last-sent-seq {
type uint32; type uint32;
config false; config false;
description description
"Indicates the last sent sequence number."; "Indicates the last sent sequence number.";
} }
leaf last-rcv-seq { leaf last-rcv-seq {
type uint32; type uint32;
config false; config false;
description description
"Indicates the last received sequence number."; "Indicates the last received sequence number.";
} }
description description
"Used for TWAMP-Test maintenance statistics."; "Used for TWAMP-Test maintenance statistics.";
} }
grouping count { grouping count {
leaf count { leaf count {
type uint8 { type uint8 {
range "10..31"; range "10..31";
} }
default 15; default "15";
description description
"Parameter communicated to the Control-Client as part of "Parameter communicated to the Control-Client as part of
the Server Greeting message and used for deriving a key the Server Greeting message and used for deriving a key
from a shared secret as per Section 3.1 of RFC 4656: from a shared secret as per Section 3.1 of RFC 4656:
MUST be a power of 2 and at least 1024. It is configured MUST be a power of 2 and at least 1024. It is configured
by providing said power. For example, configuring 20 here by providing said power. For example, configuring 20 here
means count 2^20 = 1048576. The default is 15, means count 2^20 = 1048576. The default is 15,
meaning 2^15 = 32768."; meaning 2^15 = 32768.";
} }
description description
"Reusable data structure for count, which is used both in the "Reusable data structure for count, which is used in both the
Server and the Control-Client."; Server and the Control-Client.";
} }
grouping max-count-exponent { grouping max-count-exponent {
leaf max-count-exponent { leaf max-count-exponent {
type uint8 { type uint8 {
range 10..31; range "10..31";
} }
default 20; default "20";
description description
"This parameter limits the maximum Count value, which MUST "This parameter limits the maximum Count value, which MUST
be a power of 2 and at least 1024 as per RFC 5357. It is be a power of 2 and at least 1024 as per RFC 5357. It is
configured by providing said power. For example, configured by providing said power. For example,
configuring 10 here means max count 2^10 = 1024. configuring 10 here means max count 2^10 = 1024.
The default is 20, meaning 2^20 = 1048576. The default is 20, meaning 2^20 = 1048576.
A TWAMP Server uses this configured value in the A TWAMP Server uses this configured value in the
Server-Greeting message sent to the Control-Client. Server Greeting message sent to the Control-Client.
A TWAMP Control-Client uses this configured value to A TWAMP Control-Client uses this configured value to
prevent denial-of-service (DOS) attacks by closing the prevent denial-of-service (DoS) attacks by closing the
control connection to the Server if it 'receives a control connection to the Server if it 'receives a
Server-Greeting message with Count greater that its Server-Greeting message with Count greater that [sic] its
maximum configured value', as per Section 6 of RFC 5357. maximum configured value', as per Section 6 of RFC 5357.
Further, note that according to Section 6 of RFC 5357: Further, note that according to Section 6 of RFC 5357:
'If an attacking system sets the maximum value in 'If an attacking system set the maximum value in Count
Count (2**32), then the system under attack would stall (2**32), then the system under attack would stall for a
for a significant period of time while it attempts to significant period of time while it attempts to generate
generate keys. keys. Therefore, TWAMP-compliant systems SHOULD have a
configuration control to limit the maximum Count value.
The default maximum Count value SHOULD be 32768.'
TWAMP-compliant systems SHOULD have a configuration In the case of this document, the default max-count-exponent
control to limit the maximum count value. The default value SHOULD be 15, which corresponds to a maximum value of
max-count-exponent value SHOULD be 15 which corresponds 2**15 or 32768.
to a maximum value of 2**15 or 32768.'
RFC 5357 does not qualify 'significant period' in terms of RFC 5357 does not qualify 'significant period' in terms of
time, but it is clear that this depends on the processing time, but it is clear that this depends on the processing
capacity available and operators need to pay attention to capacity available, and operators need to pay attention to
this security consideration."; this security consideration.";
} }
description description
"Reusable data structure for max-count which is used both at "Reusable data structure for max-count that is used in both
the Control-Client and the Server containers."; the client (Control-Client) container and the server
container.";
} }
/* /*
* Configuration data nodes * Configuration data nodes
*/ */
container twamp { container twamp {
description description
"TWAMP logical entity configuration grouping of four models "TWAMP logical entity configuration grouping of four models
which correspond to the four TWAMP logical entities that correspond to the four TWAMP logical entities
Control-Client, Server, Session-Sender, and Session-Reflector Control-Client, Server, Session-Sender, and Session-Reflector
as illustrated in Fig. 1 of RFC XXXX."; as illustrated in Figure 1 of RFC 8913.";
container client { container client {
if-feature control-client; if-feature "control-client";
description description
"Configuration of the TWAMP Control-Client logical "Configuration of the TWAMP Control-Client logical entity.";
entity.";
leaf admin-state { leaf admin-state {
type boolean; type boolean;
default true; default "true";
description description
"Indicates whether the device is allowed to operate as a "Indicates whether the device is allowed to operate as a
TWAMP Control-Client."; TWAMP Control-Client.";
} }
list mode-preference-chain { list mode-preference-chain {
key priority; key "priority";
unique mode; unique "mode";
leaf priority { leaf priority {
type uint16; type uint16;
description description
"Indicates the Control-Client Mode preference priority "Indicates the Control-Client mode preference priority,
expressed as a 16-bit unsigned integer. Values for the expressed as a 16-bit unsigned integer. Values for the
priority start with zero, the highest priority, and priority start with zero, the highest priority, and
decreasing priority value is indicated by every increase decreasing priority value is indicated by every increase
in value by one."; in value by one.";
} }
leaf mode { leaf mode {
type twamp-modes; type twamp-modes;
description description
"The supported TWAMP Mode matching the corresponding "The supported TWAMP-Modes matching the corresponding
priority."; priority.";
} }
description description
"Indicates the Control-Client preferred order of use of "Indicates the Control-Client preferred order of use of
the supported TWAMP Modes. the supported TWAMP-Modes.
Depending on the Modes available in the TWAMP Server Depending on the modes available in the TWAMP Server
Greeting message (see Fig. 2 of RFC 7717), the Greeting message (see Figure 2 of RFC 7717), the
Control-Client MUST choose the highest priority Control-Client MUST choose the highest-priority
Mode from the configured mode-preference-chain list."; mode from the configured mode-preference-chain list.";
} }
uses key-management; uses key-management;
list ctrl-connection { list ctrl-connection {
key name; key "name";
description description
"List of TWAMP Control-Client control connections. "List of TWAMP Control-Client control connections.
Each item in the list describes a control connection Each item in the list describes a control connection
that will be initiated by this Control-Client"; that will be initiated by this Control-Client.";
leaf name { leaf name {
type string; type string;
description description
"A unique name used as a key to identify this "A unique name used as a key to identify this
individual TWAMP-Control connection on the individual TWAMP-Control connection on the
Control-Client device."; Control-Client device.";
} }
leaf client-ip { leaf client-ip {
type inet:ip-address; type inet:ip-address;
description description
"The IP address of the local Control-Client device, "The IP address of the local Control-Client device,
to be placed in the source IP address field of the to be placed in the source IP address field of the
IP header in TWAMP-Control (TCP) packets belonging IP header in TWAMP-Control (TCP) packets belonging
to this control connection. If not configured, the to this control connection. If not configured, the
device SHALL choose its own source IP address."; device SHALL choose its own source IP address.";
} }
leaf server-ip { leaf server-ip {
type inet:ip-address; type inet:ip-address;
mandatory true; mandatory true;
description description
"The IP address of the remote Server device, which the "The IP address of the remote Server device to which
TWAMP-Control connection will be initiated to."; the TWAMP-Control connection will be initiated.";
} }
leaf server-tcp-port { leaf server-tcp-port {
type inet:port-number; type inet:port-number;
default 862; default "862";
description description
"This parameter defines the TCP port number that is "This parameter defines the TCP port number that is
to be used by this outgoing TWAMP-Control connection. to be used by this outgoing TWAMP-Control connection.
Typically, this is the well-known TWAMP-Control Typically, this is the well-known TWAMP-Control
port number (862) as per RFC 5357 However, there are port number (862) as per RFC 5357. However, there are
known realizations of TWAMP in the field that were known realizations of TWAMP in the field that were
implemented before this well-known port number was implemented before this well-known port number was
allocated. These early implementations allowed the allocated. These early implementations allowed the
port number to be configured. This parameter is port number to be configured. This parameter is
therefore provided for backward compatibility therefore provided for backward-compatibility
reasons."; reasons.";
} }
leaf control-packet-dscp { leaf control-packet-dscp {
type inet:dscp; type inet:dscp;
default 0; default "0";
description description
"The DSCP value to be placed in the IP header of "The Differentiated Services Code Point (DSCP) value
TWAMP-Control (TCP) packets generated by this to be placed in the IP header of TWAMP-Control (TCP)
Control-Client."; packets generated by this Control-Client.";
} }
leaf key-id { leaf key-id {
type string { type string {
length 1..80; length "1..80";
} }
description description
"Indicates the KeyID value selected for this "Indicates the KeyID value selected for this
TWAMP-Control connection."; TWAMP-Control connection.";
} }
uses max-count-exponent; uses max-count-exponent;
leaf client-tcp-port { leaf client-tcp-port {
type inet:port-number; type inet:port-number;
config false; config false;
description description
"Indicates the source TCP port number used in the "Indicates the source TCP port number used in the
TWAMP-Control packets belonging to this control TWAMP-Control packets belonging to this control
connection."; connection.";
} }
leaf server-start-time { leaf server-start-time {
type uint64; type uint64;
config false; config false;
description description
"Indicates the Start-Time advertised by the Server in "Indicates the Start-Time advertised by the Server in
the Server-Start message (RFC 4656, Section 3.1), the Server-Start message (RFC 4656, Section 3.1),
representing the time when the current representing the time when the current
instantiation of the Server started operating. instantiation of the Server started operating.
The timestamp format follows RFC 5905 The timestamp format follows RFC 5905, according to
according to Section 4.1.2 of RFC 4656."; Section 4.1.2 of RFC 4656.";
reference reference
"RFC 4656: OWAMP, Section 3.1 and 4.1.2, "RFC 4656: A One-way Active Measurement Protocol (OWAMP),
RFC 5905: NTPv4 Specification."; Sections 3.1 and 4.1.2
RFC 5905: Network Time Protocol Version 4: Protocol and
Algorithms Specification";
} }
leaf repeat-count { leaf repeat-count {
type uint64; type uint64;
config false; config false;
description description
"Indicates how many times the test session has been "Indicates how many times the test session has been
repeated. When a test is running, this value will be repeated. When a test is running, this value will be
greater than 0. If the repeat parameter is non-zero, greater than 0. If the repeat parameter is non-zero,
this value is smaller than or equal to the repeat this value is smaller than or equal to the repeat
parameter."; parameter.";
} }
leaf state { leaf state {
type control-client-connection-state; type control-client-connection-state;
config false; config false;
description description
"Indicates the current state of the TWAMP-Control "Indicates the current TWAMP-Control connection state.";
connection state.";
} }
leaf selected-mode { leaf selected-mode {
type twamp-modes; type twamp-modes;
config false; config false;
description description
"The TWAMP Mode that the Control-Client has chosen for "The TWAMP-Modes that the Control-Client has chosen for
this control connection as set in the Mode field of this control connection as set in the Mode field of
the Set-Up-Response message"; the Set-Up-Response message.";
reference reference
"RFC 4656, Section 3.1."; "RFC 4656: A One-way Active Measurement Protocol (OWAMP),
Section 3.1";
} }
leaf token { leaf token {
type binary { type binary {
length 64; length "64";
} }
config false; config false;
description description
"This parameter holds the 64 octets containing the "This parameter holds the 64 octets containing the
concatenation of a 16-octet Challenge, a 16-octet AES concatenation of a 16-octet Challenge, a 16-octet AES
Session-key used for encryption, and a 32-octet Session-key used for encryption, and a 32-octet
HMAC-SHA1 Session-key used for authentication; see HMAC-SHA1 Session-key used for authentication; see
also the last paragraph of Section 6 in RFC 4656. also the last paragraph of Section 6.10 of RFC 4656.
If the Mode defined in RFC 7717 is selected If the mode defined in RFC 7717 is selected
(selected-mode), Token is limited to 16 octets."; (selected-mode), Token is limited to 16 octets.";
reference reference
"RFC 4086: Randomness Requirements for Security "RFC 4656: A One-way Active Measurement Protocol (OWAMP),
Section 6.10
RFC 7717: IKEv2-Derived Shared Secret Key for the RFC 7717: IKEv2-Derived Shared Secret Key for the
One-Way Active Measurement Protocol (OWAMP) and One-Way Active Measurement Protocol (OWAMP) and
Two-Way Active Measurement Protocol (TWAMP)"; Two-Way Active Measurement Protocol (TWAMP)";
} }
leaf client-iv { leaf client-iv {
type binary { type binary {
length 16; length "16";
} }
config false; config false;
description description
"Indicates the Control-Client Initialization Vector "Indicates the Control-Client Initialization Vector
(Client-IV), that is generated randomly by the (Client-IV), which is generated randomly by the
Control-Client. As per RFC 4656: Control-Client. As per RFC 4656:
Client-IV merely needs to be unique (i.e., it MUST 'Client-IV merely needs to be unique (i.e., it MUST
never be repeated for different sessions using the never be repeated for different sessions using the
same secret key; a simple way to achieve that without same secret key; a simple way to achieve that without
the use of cumbersome state is to generate the the use of cumbersome state is to generate the
Client-IV values using a cryptographically secure Client-IV values using a cryptographically secure
pseudo-random number source. pseudo-random number source.'
If the Mode defined in RFC 7717 is selected If the mode defined in RFC 7717 is selected
(selected-mode), Client-IV is limited to 12 octets."; (selected-mode), Client-IV is limited to 12 octets.";
reference reference
"RFC 4656: A One-way Active Measurement Protocol "RFC 4656: A One-way Active Measurement Protocol (OWAMP)
(OWAMP).
RFC 7717: IKEv2-Derived Shared Secret Key for the RFC 7717: IKEv2-Derived Shared Secret Key for the
One-Way Active Measurement Protocol (OWAMP) and One-Way Active Measurement Protocol (OWAMP) and
Two-Way Active Measurement Protocol (TWAMP)"; Two-Way Active Measurement Protocol (TWAMP)";
} }
list test-session-request { list test-session-request {
key name; key "name";
description description
"Information associated with the Control-Client "Information associated with the Control-Client
for this test session"; for this test session.";
leaf name { leaf name {
type string; type string;
description description
"A unique name to be used for identification of "A unique name to be used for identification of
this TWAMP-Test session on the Control-Client."; this TWAMP-Test session on the Control-Client.";
} }
leaf sender-ip { leaf sender-ip {
type inet:ip-address; type inet:ip-address;
description description
"The IP address of the Session-Sender device, "The IP address of the Session-Sender device,
which is to be placed in the source IP address which is to be placed in the source IP address
field of the IP header in TWAMP-Test (UDP) packets field of the IP header in TWAMP-Test (UDP) packets
belonging to this test session. This value will be belonging to this test session. This value will be
used to populate the sender address field of the used to populate the Sender Address field of the
Request-TW-Session message. Request-TW-Session message.
If not configured, the device SHALL choose its own If not configured, the device SHALL choose its own
source IP address."; source IP address.";
} }
leaf sender-udp-port { leaf sender-udp-port {
type union { type union {
type dynamic-port-number; type dynamic-port-number;
type enumeration { type enumeration {
enum autoallocate { enum autoallocate {
description description
"Indicates that the Contol-Client will "Indicates that the Control-Client will
auto-allocate the TWAMP-Test (UDP) port number auto-allocate the TWAMP-Test (UDP) port number
from the dynamic port range."; from the dynamic port range.";
} }
} }
} }
default autoallocate; default "autoallocate";
description description
"The UDP port number that is to be used by "The UDP port number that is to be used by
the Session-Sender for this TWAMP-Test session. the Session-Sender for this TWAMP-Test session.
The number is restricted to the dynamic port range. The number is restricted to the dynamic port range.
By default the Control-Client SHALL auto-allocate a By default, the Control-Client SHALL auto-allocate a
UDP port number for this TWAMP-Test session. UDP port number for this TWAMP-Test session.
The configured (or auto-allocated) value is The configured (or auto-allocated) value is
advertised in the Sender Port field of the advertised in the Sender Port field of the
Request-TW-session message (see Section 3.5 of Request-TW-Session message (see Section 3.5 of
RFC 5357). Note that in the scenario where a device RFC 5357). Note that in the scenario where a device
auto-allocates a UDP port number for a session, and auto-allocates a UDP port number for a session and
the repeat parameter for that session indicates that the repeat parameter for that session indicates that
it should be repeated, the device is free to it should be repeated, the device is free to
auto-allocate a different UDP port number when it auto-allocate a different UDP port number when it
negotiates the next (repeated) iteration of this negotiates the next (repeated) iteration of this
session."; session.";
} }
leaf reflector-ip { leaf reflector-ip {
type inet:ip-address; type inet:ip-address;
mandatory true; mandatory true;
description description
"The IP address belonging to the remote "The IP address belonging to the remote
Session-Reflector device to which the TWAMP-Test Session-Reflector device to which the TWAMP-Test
session will be initiated. This value will be session will be initiated. This value will be
used to populate the receiver address field of used to populate the Receiver Address field of
the Request-TW-Session message."; the Request-TW-Session message.";
} }
leaf reflector-udp-port { leaf reflector-udp-port {
type inet:port-number { type inet:port-number {
range "862 | 49152..65535"; range "862 | 49152..65535";
} }
description description
"This parameter defines the UDP port number that "This parameter defines the UDP port number that
will be used by the Session-Reflector for will be used by the Session-Reflector for
this TWAMP-Test session. The default number is this TWAMP-Test session. The default number is
within the dynamic port range and is to be placed within the dynamic port range and is to be placed
in the Receiver Port field of the Request-TW-Session in the Receiver Port field of the Request-TW-Session
message. The well-known port (862) MAY be message. The well-known port (862) MAY be used.";
used.";
reference reference
"draft-ietf-ippm-port-twamp-test: OWAMP and TWAMP "RFC 8545: Well-Known Port Assignments for the One-Way
Well-Known Port Assignments."; Active Measurement Protocol (OWAMP) and the Two-Way
Active Measurement Protocol (TWAMP)";
} }
leaf timeout { leaf timeout {
type uint64; type uint64;
units seconds; units "seconds";
default 2; default "2";
description description
"The length of time (in seconds) that the "The length of time (in seconds) that the
Session-Reflector should continue to respond to Session-Reflector should continue to respond to
packets belonging to this TWAMP-Test session after packets belonging to this TWAMP-Test session after
a Stop-Sessions TWAMP-Control message has been a Stop-Sessions TWAMP-Control message has been
received. received.
This value will be placed in the Timeout field of This value will be placed in the Timeout field of
the Request-TW-Session message."; the Request-TW-Session message.";
reference reference
"RFC 5357: TWAMP, Section 3.5."; "RFC 5357: A Two-Way Active Measurement Protocol
(TWAMP), Section 3.5";
} }
leaf padding-length { leaf padding-length {
type uint32 { type uint32 {
range 64..4096; range "64..4096";
} }
description description
"The number of padding bytes to be added to the "The number of padding bytes to be added to the
TWAMP-Test (UDP) packets generated by the TWAMP-Test (UDP) packets generated by the
Session-Sender. Session-Sender.
This value will be placed in the Padding Length This value will be placed in the Padding Length
field of the Request-TW-Session message."; field of the Request-TW-Session message.";
reference reference
"RFC 4656, Section 3.5."; "RFC 4656: A One-way Active Measurement Protocol
(OWAMP), Section 3.5";
} }
leaf test-packet-dscp { leaf test-packet-dscp {
type inet:dscp; type inet:dscp;
default 0; default "0";
description description
"The DSCP value to be placed in the IP header "The DSCP value to be placed in the IP header
of TWAMP-Test packets generated by the of TWAMP-Test packets generated by the
Session-Sender, and in the UDP header of the Session-Sender and in the UDP header of the
TWAMP-Test response packets generated by the TWAMP-Test response packets generated by the
Session-Reflector for this test session. Session-Reflector for this test session.
This value will be placed in the Type-P Descriptor This value will be placed in the Type-P Descriptor
field of the Request-TW-Session message"; field of the Request-TW-Session message.";
reference reference
"RFC 5357."; "RFC 5357: A Two-Way Active Measurement Protocol
(TWAMP)";
} }
leaf start-time { leaf start-time {
type uint64; type uint64;
default 0; default "0";
description description
"Time when the session is to be started "Time when the session is to be started
(but not before the TWAMP Start-Sessions command (but not before the TWAMP Start-Sessions command
is issued; see Section 3.4 of RFC 5357). is issued; see Section 3.4 of RFC 5357).
The start-time value is placed in the Start Time The start-time value is placed in the Start Time
field of the Request-TW-Session message. field of the Request-TW-Session message.
The timestamp format follows RFC 5905 as per The timestamp format follows RFC 5905 as per
Section 3.5 of RFC 4656. Section 3.5 of RFC 4656.
skipping to change at line 1732 skipping to change at line 1652
The start-time value is placed in the Start Time The start-time value is placed in the Start Time
field of the Request-TW-Session message. field of the Request-TW-Session message.
The timestamp format follows RFC 5905 as per The timestamp format follows RFC 5905 as per
Section 3.5 of RFC 4656. Section 3.5 of RFC 4656.
The default value of 0 indicates that the session The default value of 0 indicates that the session
will be started as soon as the Start-Sessions will be started as soon as the Start-Sessions
message is received."; message is received.";
} }
leaf repeat { leaf repeat {
type uint32 { type uint32 {
range 0..4294967295; range "0..4294967295";
} }
default 0; default "0";
description description
"This value determines if the TWAMP-Test session must "This value determines if the TWAMP-Test session must
be repeated. When a test session has completed, the be repeated. When a test session has completed, the
repeat parameter is checked. repeat parameter is checked.
The default value of 0 indicates that the session The default value of 0 indicates that the session
MUST NOT be repeated. MUST NOT be repeated.
If the repeat value is 1 through 4,294,967,294 If the repeat value is 1 through 4,294,967,294,
then the test session SHALL be repeated using the then the test session SHALL be repeated using the
information in repeat-interval parameter, and the information in the repeat-interval parameter, and the
parent TWAMP-Control connection for this test parent TWAMP-Control connection for this test
session is restarted to negotiate a new instance session is restarted to negotiate a new instance
of this TWAMP-Test session. of this TWAMP-Test session.
A value of 4,294,967,295 indicates that the test A value of 4,294,967,295 indicates that the test
session SHALL be repeated *forever* using the session SHALL be repeated *forever* using the
information in repeat-interval parameter, and SHALL information in the repeat-interval parameter and
NOT decrement the value."; SHALL NOT decrement the value.";
} }
leaf repeat-interval {
leaf repeat-interval {
when "../repeat!='0'" { when "../repeat!='0'" {
description description
"This parameter determines the timing of repeated "This parameter determines the timing of repeated
TWAMP-Test sessions when repeat is more than 0. TWAMP-Test sessions when repeat is more than 0.
When the value of repeat-interval is 0, the When the value of repeat-interval is 0, the
negotiation of a new test session SHALL begin negotiation of a new test session SHALL begin
immediately after the previous test session immediately after the previous test session
completes. Otherwise, the Control-Client will completes. Otherwise, the Control-Client will
wait for the number of seconds specified in the wait for the number of seconds specified in the
repeat-interval parameter before negotiating the repeat-interval parameter before negotiating the
new instance of this TWAMP-Test session."; new instance of this TWAMP-Test session.";
} }
type uint32; type uint32;
units seconds; units "seconds";
default 0; default "0";
description description
"Repeat interval (in seconds)."; "Repeat interval (in seconds).";
} }
list pm-reg-list { list pm-reg-list {
key pm-index; key "pm-index";
leaf pm-index { leaf pm-index {
type uint16; type uint16;
description description
"Numerical index value of a Registered Metric "Numerical index value of a Registered Metric in
in the Performance Metric Registry the Performance Metrics Registry (see RFC 8911).
(see ietf-ippm-metric-registry). Output statistics Output statistics are specified in the
are specified in the corresponding Registry corresponding Registry Entry.";
entry.";
} }
description description
"A list of one or more Performance Metric Registry "A list of one or more Performance Metrics Registry
Index values, which communicate packet stream Index values, which communicate packet stream
characteristics along with one or more metrics characteristics along with one or more metrics
to be measured. to be measured.
All members of the pm-reg-list MUST have the same All members of the pm-reg-list MUST have the same
stream characteristics, such that they combine stream characteristics, such that they combine
to specify all metrics that shall be measured on to specify all metrics that shall be measured on
a single stream."; a single stream.";
reference reference
"ietf-ippm-metric-registry: Registry for "RFC 8911: Registry for Performance Metrics";
Performance Metrics";
} }
leaf state { leaf state {
type test-session-state; type test-session-state;
config false; config false;
description description
"Indicates the TWAMP-Test session state, accepted or "Indicates the TWAMP-Test session state -- an accepted
indication of an error."; request or an indication of an error.";
reference reference
"Section 3.5 of RFC 5357."; "RFC 5357: A Two-Way Active Measurement Protocol
(TWAMP), Section 3.5";
} }
leaf sid { leaf sid {
type string; type string;
config false; config false;
description description
"The SID allocated by the Server for this TWAMP-Test "The Session Identifier (SID) allocated by the Server
session, and communicated back to the Control-Client for this TWAMP-Test session and communicated back to
in the SID field of the Accept-Session message"; the Control-Client in the SID field of the
Accept-Session message.";
reference reference
"Section 4.3 of RFC 6038."; "RFC 6038: Two-Way Active Measurement Protocol (TWAMP)
Reflect Octets and Symmetrical Size
Features, Section 4.3";
} }
} }
} }
} }
container server { container server {
if-feature server; if-feature "server";
description description
"Configuration of the TWAMP Server logical entity."; "Configuration of the TWAMP Server logical entity.";
leaf admin-state { leaf admin-state {
type boolean; type boolean;
default true; default "true";
description description
"Indicates whether the device is allowed to operate "Indicates whether the device is allowed to operate
as a TWAMP Server."; as a TWAMP Server.";
} }
leaf server-tcp-port { leaf server-tcp-port {
type inet:port-number; type inet:port-number;
default 862; default "862";
description description
"This parameter defines the well known TCP port number "This parameter defines the well-known TCP port number
that is used by TWAMP-Control. The Server will listen that is used by TWAMP-Control. The Server will listen
on this port number for incoming TWAMP-Control on this port number for incoming TWAMP-Control
connections. Although this is defined as a fixed value connections. Although this is defined as a fixed value
(862) in RFC 5357, there are several realizations of (862) in RFC 5357, there are several realizations of
TWAMP in the field that were implemented before this TWAMP in the field that were implemented before this
well-known port number was allocated. These early well-known port number was allocated. These early
implementations allowed the port number to be implementations allowed the port number to be
configured. This parameter is therefore provided for configured. This parameter is therefore provided for
backward compatibility reasons."; backward-compatibility reasons.";
} }
leaf servwait { leaf servwait {
type uint32 { type uint32 {
range 1..604800; range "1..604800";
} }
units seconds; units "seconds";
default 900; default "900";
description description
"TWAMP-Control (TCP) session timeout, in seconds. "TWAMP-Control (TCP) session timeout, in seconds.
According to Section 3.1 of RFC 5357, According to Section 3.1 of RFC 5357:
Server MAY discontinue any established control 'The Server MAY discontinue any established control
connection when no packet associated with that connection when no packet associated with that
connection has been received within SERVWAIT seconds."; connection has been received within SERVWAIT seconds.'";
} }
leaf control-packet-dscp { leaf control-packet-dscp {
type inet:dscp; type inet:dscp;
description description
"The DSCP value to be placed in the IP header of "The DSCP value to be placed in the IP header of
TWAMP-Control (TCP) packets generated by the Server. TWAMP-Control (TCP) packets generated by the Server.
Section 3.1 of RFC 5357 specifies that the server Section 3.1 of RFC 5357 specifies that the Server
SHOULD use the DSCP value from the Control-Clients SHOULD use the DSCP value from the Control-Client's
TCP SYN. However, for practical purposes TWAMP will TCP SYN. However, for practical purposes, TWAMP will
typically be implemented using a general purpose TCP typically be implemented using a general-purpose TCP
stack provided by the underlying operating system, stack provided by the underlying operating system,
and such a stack may not provide this information to the and such a stack may not provide this information to the
user. Consequently, it is not always possible to user. Consequently, it is not always possible to
implement the behavior described in RFC 5357 in an implement the behavior described in RFC 5357 in an
OS-portable version of TWAMP. OS-portable version of TWAMP.
The default behavior if this item is not set is to use The default behavior if this item is not set is to use
the DSCP value from the Control-Clients TCP SYN."; the DSCP value from the Control-Client's TCP SYN.";
reference reference
"Section 3.1 of RFC 5357."; "RFC 5357: A Two-Way Active Measurement Protocol (TWAMP),
Section 3.1";
} }
uses count; uses count;
uses max-count-exponent; uses max-count-exponent;
leaf modes { leaf modes {
type twamp-modes; type twamp-modes;
description description
"The bit mask of TWAMP Modes this Server instance "The bit mask of TWAMP-Modes this Server instance is
is willing to support; see IANA TWAMP Modes Registry."; willing to support; see the IANA 'TWAMP-Modes' Registry.";
} }
uses key-management; uses key-management;
list ctrl-connection { list ctrl-connection {
key "client-ip client-tcp-port server-ip server-tcp-port"; key "client-ip client-tcp-port server-ip server-tcp-port";
config false; config false;
description description
"List of all incoming TWAMP-Control (TCP) connections."; "List of all incoming TWAMP-Control (TCP) connections.";
leaf client-ip { leaf client-ip {
type inet:ip-address; type inet:ip-address;
description description
"The IP address on the remote Control-Client device, "The IP address on the remote Control-Client device,
which is the source IP address used in the which is the source IP address used in the
TWAMP-Control (TCP) packets belonging to this control TWAMP-Control (TCP) packets belonging to this control
connection."; connection.";
} }
leaf client-tcp-port { leaf client-tcp-port {
type inet:port-number; type inet:port-number;
description description
"The source TCP port number used in the TWAMP-Control "The source TCP port number used in the TWAMP-Control
(TCP) packets belonging to this control connection."; (TCP) packets belonging to this control connection.";
} }
leaf server-ip { leaf server-ip {
type inet:ip-address; type inet:ip-address;
description description
"The IP address of the local Server device, which is "The IP address of the local Server device, which is
the destination IP address used in the the destination IP address used in the
TWAMP-Control (TCP) packets belonging to this control TWAMP-Control (TCP) packets belonging to this control
connection."; connection.";
} }
leaf server-tcp-port { leaf server-tcp-port {
type inet:port-number; type inet:port-number;
description description
"The destination TCP port number used in the "The destination TCP port number used in the
TWAMP-Control (TCP) packets belonging to this TWAMP-Control (TCP) packets belonging to this
control connection. This will usually be the control connection. This will usually be the
same value as the server-tcp-port configured same value as the server-tcp-port configured
under twamp/server. However, in the event that under twamp/server. However, in the event that
the user re-configured server/server-tcp-port the user reconfigured server/server-tcp-port
after this control connection was initiated, this after this control connection was initiated, this
value will indicate the server-tcp-port that is value will indicate the server-tcp-port that is
actually in use for this control connection."; actually in use for this control connection.";
} }
leaf state { leaf state {
type server-ctrl-connection-state; type server-ctrl-connection-state;
description description
"Indicates the Server TWAMP-Control connection state."; "Indicates the Server TWAMP-Control connection state.";
} }
leaf control-packet-dscp { leaf control-packet-dscp {
type inet:dscp; type inet:dscp;
description description
"The DSCP value used in the IP header of the "The DSCP value used in the IP header of the
TWAMP-Control (TCP) packets sent by the Server TWAMP-Control (TCP) packets sent by the Server
for this control connection. This will usually for this control connection. This will usually
be the same value as is configured in the be the same value as is configured in the
control-packet-dscp parameter under the twamp/server control-packet-dscp parameter under the twamp/server
container. However, in the event that the user container. However, in the event that the user
re-configures server/dscp after this control reconfigures server/dscp after this control
connection is already in progress, this read-only connection is already in progress, this read-only
value will show the actual dscp value in use by this value will show the actual DSCP value in use by this
TWAMP-Control connection."; TWAMP-Control connection.";
} }
leaf selected-mode { leaf selected-mode {
type twamp-modes; type twamp-modes;
description description
"The Mode that was chosen for this TWAMP-Control "The mode that was chosen for this TWAMP-Control
connection as set in the Mode field of the connection as set in the Mode field of the
Set-Up-Response message."; Set-Up-Response message.";
} }
leaf key-id { leaf key-id {
type string { type string {
length 1..80; length "1..80";
} }
description description
"The KeyID value that is in use by this TWAMP-Control "The KeyID value that is in use by this TWAMP-Control
connection as selected by Control-Client."; connection as selected by the Control-Client.";
} }
uses count { uses count {
description description
"The count value that is in use by this TWAMP-Control "The Count value that is in use by this TWAMP-Control
connection. This will usually be the same value connection. This will usually be the same value
as is configured under twamp/server. However, in the as is configured under twamp/server. However, in the
event that the user re-configured server/count event that the user reconfigures server/count
after this control connection is already in progress, after this control connection is already in progress,
this read-only value will show the actual count that this read-only value will show the actual count that
is in use for this TWAMP-Control connection."; is in use for this TWAMP-Control connection.";
} }
uses max-count-exponent { uses max-count-exponent {
description description
"This read-only value indicates the actual max-count in "This read-only value indicates the actual max-count in
use for this control connection. Usually this would be use for this control connection. Usually, this would be
the same value as configured under twamp/server."; the same value as is configured under twamp/server.";
} }
leaf salt { leaf salt {
type binary { type binary {
length 16; length "16";
} }
description description
"A parameter used in deriving a key from a "A parameter used in deriving a key from a
shared secret as described in Section 3.1 of RFC 4656. shared secret, as described in Section 3.1 of RFC 4656.
It is communicated to the Control-Client as part of It is communicated to the Control-Client as part of
the Server Greeting message."; the Server Greeting message.";
} }
leaf server-iv { leaf server-iv {
type binary { type binary {
length 16; length "16";
} }
description description
"The Server Initialization Vector "The Server Initialization Vector (Server-IV)
(IV) generated randomly by the Server."; generated randomly by the Server.";
} }
leaf challenge { leaf challenge {
type binary { type binary {
length 16; length "16";
} }
description description
"A random sequence of octets generated by the Server. "A random sequence of octets generated by the Server.
As described in client/token, Challenge is used As described in client/token, a Challenge is used
by the Control-Client to prove possession of a by the Control-Client to prove possession of a
shared secret."; shared secret.";
} }
} }
} }
container session-sender { container session-sender {
if-feature session-sender; if-feature "session-sender";
description description
"Configuration of the TWAMP Session-Sender logical entity"; "Configuration of the TWAMP Session-Sender logical entity.";
leaf admin-state { leaf admin-state {
type boolean; type boolean;
default true; default "true";
description description
"Indicates whether the device is allowed to operate "Indicates whether the device is allowed to operate
as a TWAMP Session-Sender."; as a TWAMP Session-Sender.";
} }
list test-session {
list test-session{ key "name";
key name;
description description
"List of TWAMP Session-Sender test sessions."; "List of TWAMP Session-Sender test sessions.";
leaf name { leaf name {
type string; type string;
description description
"A unique name for this TWAMP-Test session to be used "A unique name for this TWAMP-Test session to be used
for identifying this test session by the for identifying this test session by the
Session-Sender logical entity."; Session-Sender logical entity.";
} }
leaf ctrl-connection-name { leaf ctrl-connection-name {
type string; type string;
config false; config false;
description description
"The name of the parent TWAMP-Control connection that "The name of the parent TWAMP-Control connection that
is responsible for negotiating this TWAMP-Test is responsible for negotiating this TWAMP-Test
session."; session.";
} }
leaf fill-mode { leaf fill-mode {
type padding-fill-mode; type padding-fill-mode;
default zero; default "zero";
description description
"Indicates whether the padding added to the "Indicates whether the padding added to the
TWAMP-Test (UDP) packets will contain pseudo-random TWAMP-Test (UDP) packets (1) will contain pseudorandom
numbers, or whether it should consist of all zeroes, numbers or (2) should consist of all zeros, as per
as per Section 4.2.1 of RFC 5357."; Section 4.2.1 of RFC 5357.";
} }
leaf number-of-packets { leaf number-of-packets {
type uint32; type uint32;
mandatory true; mandatory true;
description description
"The overall number of TWAMP-Test (UDP) packets to be "The overall number of TWAMP-Test (UDP) packets to be
transmitted by the Session-Sender for this test transmitted by the Session-Sender for this test
session."; session.";
} }
choice packet-distribution { choice packet-distribution {
description description
"Indicates the distribution to be used for transmitting "Indicates the distribution to be used for transmitting
the TWAMP-Test (UDP) packets."; the TWAMP-Test (UDP) packets.";
case periodic { case periodic {
leaf periodic-interval { leaf periodic-interval {
type decimal64 { type decimal64 {
fraction-digits 5; fraction-digits 5;
} }
units seconds; units "seconds";
mandatory true; mandatory true;
description description
"Indicates the time to wait (in seconds) between "Indicates the time to wait (in seconds) between
the first bits of TWAMP-Test (UDP) packet the first bits of TWAMP-Test (UDP) packet
transmissions for this test session."; transmissions for this test session.";
reference reference
"RFC 3432: Network performance measurement "RFC 3432: Network performance measurement with
with periodic streams"; periodic streams";
} }
} }
case poisson { case poisson {
leaf lambda { leaf lambda {
type decimal64 { type decimal64 {
fraction-digits 5; fraction-digits 5;
} }
units seconds; units "seconds";
mandatory true; mandatory true;
description description
"Indicates the average time interval (in seconds) "Indicates the average time interval (in seconds)
between packets in the Poisson distribution. between packets in the Poisson distribution.
The packet is calculated using the reciprocal of The packet is calculated using the reciprocal of
lambda and the TWAMP-Test packet size (which lambda and the TWAMP-Test packet size (which
depends on the selected Mode and the packet depends on the selected mode and the packet
padding)."; padding).";
reference reference
"RFC 2330: Framework for IP Performance Metrics"; "RFC 2330: Framework for IP Performance Metrics";
} }
leaf max-interval { leaf max-interval {
type decimal64 { type decimal64 {
fraction-digits 5; fraction-digits 5;
} }
units seconds; units "seconds";
description description
"Indicates the maximum time (in seconds) "Indicates the maximum time (in seconds)
between packet transmissions."; between packet transmissions.";
reference reference
"RFC 7312: Advanced Stream and Sampling Framework "RFC 7312: Advanced Stream and Sampling Framework
for IP Performance Metrics (IPPM)"; for IP Performance Metrics (IPPM)";
} }
} }
} }
leaf state { leaf state {
type sender-session-state; type sender-session-state;
config false; config false;
description description
"Indicates the Session-Sender test session state."; "Indicates the Session-Sender test session state.";
} }
uses maintenance-statistics; uses maintenance-statistics;
} }
} }
container session-reflector { container session-reflector {
if-feature session-reflector; if-feature "session-reflector";
description description
"Configuration of the TWAMP Session-Reflector logical "Configuration of the TWAMP Session-Reflector logical
entity"; entity.";
leaf admin-state { leaf admin-state {
type boolean; type boolean;
default true; default "true";
description description
"Indicates whether the device is allowed to operate "Indicates whether the device is allowed to operate
as a TWAMP Session-Reflector."; as a TWAMP Session-Reflector.";
} }
leaf refwait { leaf refwait {
type uint32 { type uint32 {
range 1..604800; range "1..604800";
} }
units seconds; units "seconds";
default 900; default "900";
description description
"The Session-Reflector MAY discontinue any session that "The Session-Reflector MAY discontinue any session that
has been started when no packet associated with that has been started when no packet associated with that
session has been received for REFWAIT seconds. As per session has been received for REFWAIT seconds. As per
Section 3.1 of RFC 5357, this timeout allows a Section 3.1 of RFC 5357, this timeout allows a
Session-Reflector to free up resources in case of Session-Reflector to free up resources in case of
failure."; failure.";
} }
list test-session { list test-session {
key key "sender-ip sender-udp-port
"sender-ip sender-udp-port reflector-ip reflector-udp-port";
reflector-ip reflector-udp-port";
config false; config false;
description description
"TWAMP Session-Reflectortest sessions."; "TWAMP Session-Reflector test sessions.";
leaf sid { leaf sid {
type string; type string;
description description
"An auto-allocated identifier for this TWAMP-Test "An auto-allocated identifier for this TWAMP-Test
session that is unique within the context of this session that is unique within the context of this
Server/Session-Reflector device only. This value Server/Session-Reflector device only. This value
is communicated to the Control-Client that is communicated to the Control-Client that
requested the test session in the SID field of the requested the test session in the SID field of the
Accept-Session message."; Accept-Session message.";
} }
leaf sender-ip { leaf sender-ip {
type inet:ip-address; type inet:ip-address;
description description
"The IP address on the remote device, which is the "The IP address on the remote device, which is the
source IP address used in the TWAMP-Test (UDP) packets source IP address used in the TWAMP-Test (UDP) packets
belonging to this test session."; belonging to this test session.";
} }
leaf sender-udp-port { leaf sender-udp-port {
type dynamic-port-number; type dynamic-port-number;
description description
"The source UDP port used in the TWAMP-Test packets "The source UDP port used in the TWAMP-Test packets
belonging to this test session."; belonging to this test session.";
} }
leaf reflector-ip { leaf reflector-ip {
type inet:ip-address; type inet:ip-address;
description description
"The IP address of the local Session-Reflector "The IP address of the local Session-Reflector
device, which is the destination IP address used device, which is the destination IP address used
in the TWAMP-Test (UDP) packets belonging to this test in the TWAMP-Test (UDP) packets belonging to this test
session."; session.";
} }
leaf reflector-udp-port { leaf reflector-udp-port {
type inet:port-number { type inet:port-number {
range "862 | 49152..65535"; range "862 | 49152..65535";
} }
description description
"The destination UDP port number used in the "The destination UDP port number used in the
TWAMP-Test (UDP) test packets belonging to this TWAMP-Test (UDP) test packets belonging to this
test session."; test session.";
} }
leaf parent-connection-client-ip { leaf parent-connection-client-ip {
type inet:ip-address; type inet:ip-address;
description description
"The IP address on the Control-Client device, which "The IP address on the Control-Client device, which
is the source IP address used in the TWAMP-Control is the source IP address used in the TWAMP-Control
(TCP) packets belonging to the parent control (TCP) packets belonging to the parent control
connection that negotiated this test session."; connection that negotiated this test session.";
} }
leaf parent-connection-client-tcp-port { leaf parent-connection-client-tcp-port {
type inet:port-number; type inet:port-number;
description description
"The source TCP port number used in the TWAMP-Control "The source TCP port number used in the TWAMP-Control
(TCP) packets belonging to the parent control (TCP) packets belonging to the parent control
connection that negotiated this test session."; connection that negotiated this test session.";
} }
leaf parent-connection-server-ip { leaf parent-connection-server-ip {
type inet:ip-address; type inet:ip-address;
description description
"The IP address of the Server device, which is the "The IP address of the Server device, which is the
destination IP address used in the TWAMP-Control destination IP address used in the TWAMP-Control
(TCP) packets belonging to the parent control (TCP) packets belonging to the parent control
connection that negotiated this test session."; connection that negotiated this test session.";
} }
leaf parent-connection-server-tcp-port { leaf parent-connection-server-tcp-port {
type inet:port-number; type inet:port-number;
description description
"The destination TCP port number used in the "The destination TCP port number used in the
TWAMP-Control (TCP) packets belonging to the parent TWAMP-Control (TCP) packets belonging to the parent
control connection that negotiated this test control connection that negotiated this test
session."; session.";
} }
leaf test-packet-dscp { leaf test-packet-dscp {
type inet:dscp; type inet:dscp;
description description
"The DSCP value present in the IP header of "The DSCP value present in the IP header of
TWAMP-Test (UDP) packets belonging to this session."; TWAMP-Test (UDP) packets belonging to this session.";
} }
uses maintenance-statistics; uses maintenance-statistics;
} }
} }
} }
} }]]></sourcecode>
<CODE ENDS>
]]></artwork>
</figure>
</section> </section>
</section> </section>
<section anchor="examples" numbered="true" toc="default">
<name>Data Model Examples</name>
<t>This section presents simple but complete examples of configuring
all four entities in <xref target="fig_scope" format="default"/>, based on
the YANG
module specified in <xref target="module" format="default"/>. The
examples are illustrative
in nature but aim to be self-contained, i.e., were they to be executed in
a real TWAMP implementation, they would lead to correctly configured test
sessions. For completeness, examples are provided for both IPv4 and
IPv6. The examples are shown using XML
<xref target="W3C.REC-xml-20081126"/>.</t>
<section anchor="examples" title="Data Model Examples"> <t>More elaborate examples, which also include authentication
<t>This section presents a simple but complete example of configuring parameters, are provided in <xref target="AuthExample" format="default"/>.
all four entities in <xref target="fig:scope"/>, based on the YANG </t>
module specified in <xref target="module"/>. The example is illustrative <section anchor="ExampleCC" numbered="true" toc="default">
in nature, but aims to be self-contained, i.e. were it to be executed in <name>Control-Client</name>
a real TWAMP implementation it would lead to a correctly configured test <t><xref target="fig_ExampleCC" format="default"/> shows a configuration
session. For completeness, examples are provided for both IPv4 and example for a
IPv6.</t>
<t>A more elaborated example, which also includes authentication
parameters, is provided in <xref target="AuthExample"/>.</t>
<section anchor="ExampleCC" title="Control-Client">
<t><xref target="fig:ExampleCC"/> shows a configuration example for a
Control-Client with client/admin-state enabled. In a real Control-Client with client/admin-state enabled. In a real
implementation following <xref target="fig:scope2"/> this would permit implementation following <xref target="fig_scope2" format="default"/>, t his would permit
the initiation of TWAMP-Control connections and TWAMP-Test the initiation of TWAMP-Control connections and TWAMP-Test
sessions.</t> sessions.</t>
<figure anchor="fig_ExampleCC">
<figure anchor="fig:ExampleCC" <name>XML Instance Enabling Control-Client Operation</name>
title="XML instance enabling Control-Client operation."> <sourcecode type="xml"><![CDATA[
<artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<client> <client>
<admin-state>true</admin-state> <admin-state>true</admin-state>
</client> </client>
</twamp> </twamp>
</config> </config>]]></sourcecode>
]]></artwork>
</figure> </figure>
<t>The following example shows a Control-Client with two instances of <t>The following example shows a Control-Client with two instances of
client/ctrl-connection, one called "RouterA" and another called client/ctrl-connection -- one called "RouterA" and another called
"RouterB". Each TWAMP-Control connection is to a different Server. The "RouterB". Each TWAMP-Control connection is to a different Server. The
control connection named "RouterA" has two test session requests. The control connection named "RouterA" has two test session requests. The
TWAMP-Control connection named "RouterB" has no TWAMP-Test session TWAMP-Control connection named "RouterB" has no TWAMP-Test session
requests.</t> requests.</t>
<sourcecode type="xml"><![CDATA[
<figure>
<artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<client> <client>
<admin-state>true</admin-state> <admin-state>true</admin-state>
<ctrl-connection> <ctrl-connection>
<name>RouterA</name> <name>RouterA</name>
<client-ip>203.0.113.1</client-ip> <client-ip>203.0.113.1</client-ip>
<server-ip>203.0.113.2</server-ip> <server-ip>203.0.113.2</server-ip>
<test-session-request> <test-session-request>
skipping to change at line 2370 skipping to change at line 2234
<start-time>0</start-time> <start-time>0</start-time>
</test-session-request> </test-session-request>
</ctrl-connection> </ctrl-connection>
<ctrl-connection> <ctrl-connection>
<name>RouterB</name> <name>RouterB</name>
<client-ip>203.0.113.1</client-ip> <client-ip>203.0.113.1</client-ip>
<server-ip>203.0.113.3</server-ip> <server-ip>203.0.113.3</server-ip>
</ctrl-connection> </ctrl-connection>
</client> </client>
</twamp> </twamp>
</config> </config>]]></sourcecode>
<sourcecode type="xml"><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<client> <client>
<admin-state>true</admin-state> <admin-state>true</admin-state>
<ctrl-connection> <ctrl-connection>
<name>RouterA</name> <name>RouterA</name>
<client-ip>2001:DB8:203:0:113::1</client-ip> <client-ip>2001:db8:203:0:113::1</client-ip>
<server-ip>2001:DB8:203:0:113::2</server-ip> <server-ip>2001:db8:203:0:113::2</server-ip>
<test-session-request> <test-session-request>
<name>Test1</name> <name>Test1</name>
<sender-ip>2001:DB8:203:1:113::3</sender-ip> <sender-ip>2001:db8:203:1:113::3</sender-ip>
<sender-udp-port>54000</sender-udp-port> <sender-udp-port>54000</sender-udp-port>
<reflector-ip>2001:DB8:203:1:113::4</reflector-ip> <reflector-ip>2001:db8:203:1:113::4</reflector-ip>
<reflector-udp-port>55000</reflector-udp-port> <reflector-udp-port>55000</reflector-udp-port>
<start-time>0</start-time> <start-time>0</start-time>
</test-session-request> </test-session-request>
<test-session-request> <test-session-request>
<name>Test2</name> <name>Test2</name>
<sender-ip>2001:DB8:203:0:113::1</sender-ip> <sender-ip>2001:db8:203:0:113::1</sender-ip>
<sender-udp-port>54001</sender-udp-port> <sender-udp-port>54001</sender-udp-port>
<reflector-ip>2001:DB8:203:0:113::2</reflector-ip> <reflector-ip>2001:db8:203:0:113::2</reflector-ip>
<reflector-udp-port>55001</reflector-udp-port> <reflector-udp-port>55001</reflector-udp-port>
<start-time>0</start-time> <start-time>0</start-time>
</test-session-request> </test-session-request>
</ctrl-connection> </ctrl-connection>
<ctrl-connection> <ctrl-connection>
<name>RouterB</name> <name>RouterB</name>
<client-ip>2001:DB8:203:0:113::1</client-ip> <client-ip>2001:db8:203:0:113::1</client-ip>
<server-ip>2001:DB8:203:0:113::3</server-ip> <server-ip>2001:db8:203:0:113::3</server-ip>
</ctrl-connection> </ctrl-connection>
</client> </client>
</twamp> </twamp>
</config> </config>]]></sourcecode>
]]></artwork>
</figure>
</section> </section>
<section anchor="ExampleS" numbered="true" toc="default">
<section anchor="ExampleS" title="Server"> <name>Server</name>
<t><xref target="fig:ExampleS"/> shows a configuration example for a <t><xref target="fig_ExampleS" format="default"/> shows a configuration
Server with server/admin-state enabled, which permits a device example for a
following <xref target="fig:scope2"/> to respond to TWAMP-Control Server with server&wj;/admin-state enabled, which permits a device
following <xref target="fig_scope2" format="default"/> to respond to TWA
MP-Control
connections and TWAMP-Test sessions.</t> connections and TWAMP-Test sessions.</t>
<figure anchor="fig_ExampleS">
<figure anchor="fig:ExampleS" <name>XML Instance Enabling Server Operation</name>
title="XML instance enabling Server operation."> <sourcecode type="xml"><![CDATA[
<artwork align="left"><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<server> <server>
<admin-state>true</admin-state> <admin-state>true</admin-state>
</server> </server>
</twamp> </twamp>
</config> </config>]]></sourcecode>
]]></artwork>
</figure> </figure>
<t>The following example presents a Server with the TWAMP-Control <t>The following example presents a Server with the TWAMP-Control
connection corresponding to the control connection name connection corresponding to the control connection name
(client/ctrl-connection/name) "RouterA" presented in <xref (client&wj;/ctrl&nbhy;connection/name) "RouterA" presented in <xref targ
target="ExampleCC"/>.</t> et="ExampleCC" format="default"/>.</t>
<sourcecode type="xml"><![CDATA[
<figure>
<artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<server> <server>
<admin-state>true</admin-state> <admin-state>true</admin-state>
<ctrl-connection> <ctrl-connection>
<client-ip>203.0.113.1</client-ip> <client-ip>203.0.113.1</client-ip>
<client-tcp-port>16341</client-tcp-port> <client-tcp-port>16341</client-tcp-port>
<server-ip>203.0.113.2</server-ip> <server-ip>203.0.113.2</server-ip>
<server-tcp-port>862</server-tcp-port> <server-tcp-port>862</server-tcp-port>
<state>active</state> <state>active</state>
</ctrl-connection> </ctrl-connection>
</server> </server>
</twamp> </twamp>
</data> </data>]]></sourcecode>
<sourcecode type="xml"><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<server> <server>
<admin-state>true</admin-state> <admin-state>true</admin-state>
<ctrl-connection> <ctrl-connection>
<client-ip>2001:DB8:203:0:113::1</client-ip> <client-ip>2001:db8:203:0:113::1</client-ip>
<client-tcp-port>16341</client-tcp-port> <client-tcp-port>16341</client-tcp-port>
<server-ip>2001:DB8:203:0:113::2</server-ip> <server-ip>2001:db8:203:0:113::2</server-ip>
<server-tcp-port>862</server-tcp-port> <server-tcp-port>862</server-tcp-port>
<state>active</state> <state>active</state>
</ctrl-connection> </ctrl-connection>
</server> </server>
</twamp> </twamp>
</data> </data>]]></sourcecode>
]]></artwork>
</figure>
</section> </section>
<section anchor="ExampleSS" numbered="true" toc="default">
<section anchor="ExampleSS" title="Session-Sender"> <name>Session-Sender</name>
<t><xref target="fig:ExampleSS"/> shows a configuration example for a <t><xref target="fig_ExampleSS" format="default"/> shows a configuration
example for a
Session-Sender with session-sender/admin-state enabled, which permits Session-Sender with session-sender/admin-state enabled, which permits
a device following <xref target="fig:scope2"/> to initiate TWAMP-Test a device following <xref target="fig_scope2" format="default"/> to initi ate TWAMP-Test
sessions.</t> sessions.</t>
<figure anchor="fig_ExampleSS">
<figure anchor="fig:ExampleSS" <name>XML Instance Enabling Session-Sender Operation</name>
title="XML instance enabling Session-Sender operation."> <sourcecode type="xml"><![CDATA[
<artwork align="left"><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<session-sender> <session-sender>
<admin-state>true</admin-state> <admin-state>true</admin-state>
</session-sender> </session-sender>
</twamp> </twamp>
</config> </config>]]></sourcecode>
]]></artwork>
</figure> </figure>
<t>The following configuration example shows a Session-Sender with the <t>The following configuration example shows a Session-Sender with the
two TWAMP-Test sessions presented in <xref target="ExampleCC"/>.</t> two TWAMP-Test sessions presented in <xref target="ExampleCC" format="de
fault"/>.</t>
<figure> <sourcecode type="xml"><![CDATA[
<artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<session-sender> <session-sender>
<admin-state>true</admin-state> <admin-state>true</admin-state>
<test-session> <test-session>
<name>Test1</name> <name>Test1</name>
<ctrl-connection-name>RouterA</ctrl-connection-name> <ctrl-connection-name>RouterA</ctrl-connection-name>
<number-of-packets>900</number-of-packets> <number-of-packets>900</number-of-packets>
<periodic-interval>1</periodic-interval> <periodic-interval>1</periodic-interval>
</test-session> </test-session>
<test-session> <test-session>
<name>Test2</name> <name>Test2</name>
<ctrl-connection-name>RouterA</ctrl-connection-name> <ctrl-connection-name>RouterA</ctrl-connection-name>
<number-of-packets>900</number-of-packets> <number-of-packets>900</number-of-packets>
<lambda>1</lambda> <lambda>1</lambda>
<max-interval>2</max-interval> <max-interval>2</max-interval>
</test-session> </test-session>
</session-sender> </session-sender>
</twamp> </twamp>
</data> </data>]]></sourcecode>
]]></artwork>
</figure>
</section> </section>
<section anchor="ExampleSR" numbered="true" toc="default">
<section anchor="ExampleSR" title="Session-Reflector"> <name>Session-Reflector</name>
<t>This configuration example shows a Session-Reflector with <t>This configuration example shows a Session-Reflector with
session-reflector/admin-state enabled, which permits a device session&nbhy;reflector/admin-state enabled, which permits a device
following <xref target="fig:scope2"/> to respond to TWAMP-Test following <xref target="fig_scope2" format="default"/> to respond to TWA
MP-Test
sessions.</t> sessions.</t>
<figure anchor="fig_ExampleSR">
<figure anchor="fig:ExampleSR" <name>XML Instance Enabling Session-Reflector Operation</name>
title="XML instance enabling Session-Reflector operation."> <sourcecode type="xml"><![CDATA[
<artwork align="left"><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<session-reflector> <session-reflector>
<admin-state>true</admin-state> <admin-state>true</admin-state>
</session-reflector> </session-reflector>
</twamp> </twamp>
</config> </config>]]></sourcecode>
]]></artwork>
</figure> </figure>
<t>The following example shows the two Session-Reflector TWAMP-Test <t>The following example shows the two Session-Reflector TWAMP-Test
sessions corresponding to the test sessions presented in <xref sessions corresponding to the test sessions presented in <xref
target="ExampleSS"/>.</t> target="ExampleSS" format="default"/>.</t>
<figure> <aside><t>Note: '\' line wrapping is for formatting only.</t></aside>
<artwork><![CDATA[
[note: '\' line wrapping is for formatting only]
<sourcecode type="xml"><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<session-reflector> <session-reflector>
<admin-state>true</admin-state> <admin-state>true</admin-state>
<test-session> <test-session>
<sender-ip>203.0.113.3</sender-ip> <sender-ip>203.0.113.3</sender-ip>
<sender-udp-port>54000</sender-udp-port> <sender-udp-port>54000</sender-udp-port>
<reflector-ip>203.0.113.4</reflector-ip> <reflector-ip>203.0.113.4</reflector-ip>
<reflector-udp-port>50001</reflector-udp-port> <reflector-udp-port>50001</reflector-udp-port>
skipping to change at line 2601 skipping to change at line 2440
server-ip> server-ip>
<parent-connection-server-tcp-port>862</parent-connection-se\ <parent-connection-server-tcp-port>862</parent-connection-se\
rver-tcp-port> rver-tcp-port>
<sent-packets>21</sent-packets> <sent-packets>21</sent-packets>
<rcv-packets>21</rcv-packets> <rcv-packets>21</rcv-packets>
<last-sent-seq>20</last-sent-seq> <last-sent-seq>20</last-sent-seq>
<last-rcv-seq>20</last-rcv-seq> <last-rcv-seq>20</last-rcv-seq>
</test-session> </test-session>
</session-reflector> </session-reflector>
</twamp> </twamp>
</data> </data>]]></sourcecode>
[note: '\' line wrapping is for formatting only] <aside><t>Note: '\' line wrapping is for formatting only.</t></aside>
<sourcecode type="xml"><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<session-reflector> <session-reflector>
<admin-state>true</admin-state> <admin-state>true</admin-state>
<test-session> <test-session>
<sender-ip>203.0.113.3</sender-ip> <sender-ip>203.0.113.3</sender-ip>
<sender-udp-port>54000</sender-udp-port> <sender-udp-port>54000</sender-udp-port>
<reflector-ip>203.0.113.4</reflector-ip> <reflector-ip>203.0.113.4</reflector-ip>
<reflector-udp-port>54001</reflector-udp-port> <reflector-udp-port>54001</reflector-udp-port>
skipping to change at line 2650 skipping to change at line 2490
server-ip> server-ip>
<parent-connection-server-tcp-port>862</parent-connection-se\ <parent-connection-server-tcp-port>862</parent-connection-se\
rver-tcp-port> rver-tcp-port>
<sent-packets>21</sent-packets> <sent-packets>21</sent-packets>
<rcv-packets>21</rcv-packets> <rcv-packets>21</rcv-packets>
<last-sent-seq>20</last-sent-seq> <last-sent-seq>20</last-sent-seq>
<last-rcv-seq>20</last-rcv-seq> <last-rcv-seq>20</last-rcv-seq>
</test-session> </test-session>
</session-reflector> </session-reflector>
</twamp> </twamp>
</data> </data>]]></sourcecode>
]]></artwork>
</figure>
</section> </section>
</section> </section>
<section anchor="security" numbered="true" toc="default">
<section anchor="security" title="Security Considerations"> <name>Security Considerations</name>
<t>Virtually all existing measurement systems using <xref <t>Virtually all existing measurement systems using <xref target="RFC5357"
target="RFC5357">TWAMP</xref> are administered by the same network format="default">TWAMP</xref> are administered by the same network
operator. Attacks on the measurement infrastructure could be launched by operator. For example, attacks on the measurement infrastructure could be
third-parties to commandeer the packet generation capability, corrupt launched by
the measurements, or other examples of nefarious acts.</t> third parties to commandeer the packet generation capability, corrupt
the measurements, or perform other nefarious acts.</t>
<t>The YANG module specified in <xref target="module"/> of this document <!-- Begin YANG security DNE text (Para.s 1, 2, and 3. -->
<t>The YANG module specified in this document
defines a schema for data that is designed to be accessed via network defines a schema for data that is designed to be accessed via network
management protocols such as <xref target="RFC6241">NETCONF</xref> or management protocols such as <xref target="RFC6241" format="default">NETCO
<xref target="RFC8040">RESTCONF</xref>. The lowest <xref NF</xref> or
target="RFC6241">NETCONF</xref> layer is the secure transport layer, and <xref target="RFC8040" format="default">RESTCONF</xref>. The lowest
the mandatory-to-implement secure transport is <xref NETCONF layer is the secure transport layer, and
target="RFC6242">Secure Shell (SSH)</xref>. The lowest RESTCONF layer is the mandatory-to-implement secure transport is <xref target="RFC6242" form
at="default">Secure Shell (SSH)</xref>. The lowest RESTCONF layer is
HTTPS, and the mandatory-to-implement secure transport is <xref HTTPS, and the mandatory-to-implement secure transport is <xref
target="RFC5246">TLS</xref>.</t> target="RFC8446" format="default">TLS</xref>.</t>
<t>The <xref target="RFC8341">NETCONF Access Control Module <t>The <xref target="RFC8341" format="default">Network Configuration
(NACM)</xref> provides the means to restrict access for particular Access Control Model (NACM)</xref> provides the means to restrict access f
or particular
NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF users to a preconfigured subset of all available
NETCONF or RESTCONF protocol operations and content.</t> NETCONF or RESTCONF protocol operations and content.</t>
<t>There are a number of nodes defined in this YANG module which are <t>There are a number of data nodes defined in this YANG module that are
writeable. These data nodes may be considered sensitive and vulnerable writable/creatable/deletable (i.e., config true, which is the default).
to attacks in some network environments. Ability to write into these These data nodes may be considered sensitive or vulnerable in some network
nodes without proper protection can have a negative effect on the environments. Write operations (e.g., edit-config) to these data nodes
devices that support this feature.</t> without proper protection can have a negative effect on network
operations. These are the subtrees and data nodes and their
<t>If written, the 'admin-state' node can cause unintended test sessions sensitivity/vulnerability:</t>
to be created. If the node 'number-of-packets' that dictates how many <!-- End YANG security DNE text (Para.s 1, 2, and 3. -->
packets are sent in any particular test session is written with a large
value, it can cause a test session to run longer than expected. Nodes
that are particularly vulnerable include several timeout values put in
the protocol to protect against sessions that are not active but are
consuming resources. These are the REFWAIT timeout parameter which
determine whether to discontinue the session if no packets are received,
and nodes 'count' and 'max-count-exponent&rsquo; which can cause a long
time to be spent on PBKDF2 iterations. In addition, 'dscp&rsquo; node
marked with different DSCP markings, can cause the test traffic on the
network to be skewed, and the result manipulated. Finally, nodes within
'mode-preference-chain' which specify the 'mode' and 'priority' values
and indicate the preferred order of use by an operator, can be
manipulated to send unauthenticated or non-encrypted traffic, enabling a
MITM attack. Limiting access to these nodes will limit the ability to
launch an attack in network environments.</t>
<t>The &lsquo;token&rsquo; node defined in the model, containing a
concatenation of a Challenge, AES Session-key used for encryption, and
HMAC-SHA1 Session-key used for authentication, is sensitive from a
privacy perspective, and can be used to disrupt a test session. The
ability to read the field should be limited to the administrator of the
test network.</t>
</section>
<section anchor="iana" title="IANA Considerations">
<t>This document registers a URI in the <xref target="RFC3688">IETF XML
registry </xref>. Following the format in <xref target="RFC3688">IETF
XML Registry </xref>, the following registration is requested to be
made.</t>
<t>URI: urn:ietf:params:xml:ns:yang:ietf-twamp</t>
<t>Registrant Contact: The IESG.</t>
<t>XML: N/A, the requested URI is an XML namespace.</t>
<t>This document registers a YANG module in the YANG Module Names
registry <xref target="RFC6020">YANG </xref>.</t>
<t>name: ietf-twamp</t>
<t>namespace: urn:ietf:params:xml:ns:yang:ietf-twamp</t>
<t>prefix: twamp</t>
<t>reference: RFC XXXX</t>
</section>
<section anchor="acks" title="Acknowledgements"> <ul spacing="normal">
<t>We thank Fred Baker, Kevin D'Souza, Gregory Mirsky, Brian Trammell, <li>If written, the 'admin-state' node can cause unintended test sessions
Robert Sherman, and Marius Georgescu for their thorough and constructive to be created.</li>
reviews, comments and text suggestions.</t> <li>If the node 'number-of-packets', which dictates how many packets are
sent in any particular test session, is written with a large value, it
can cause a test session to run longer than expected.</li>
<li>Nodes that are particularly vulnerable include several timeout values
put in the protocol to protect against sessions that are not active but
are consuming resources. These are the REFWAIT timeout parameter, which
determines whether to discontinue the session if no packets are received;
and the nodes 'count' and 'max-count-exponent', which can cause a long
time to be spent on Password-Based Key Derivation Function 2 (PBKDF2)
iterations.</li>
<li>In addition, a 'dscp' node marked with different DSCP markings can
cause the test traffic on the network to be skewed and the result
manipulated.</li>
<li>Finally, nodes within 'mode-preference-chain', which specifies the
'mode' and 'priority' values and indicates the preferred order of use by
an operator, can be manipulated to send unauthenticated or non-encrypted
traffic, enabling an on-path attack.</li>
<li>Limiting access to these nodes will limit the ability to launch an
attack in network environments.</li>
</ul>
<t>Haoxing Shen contributed to the definition of the YANG module in <!-- Begin YANG security DNE text (Para. 4). -->
<xref target="module"/>.</t> <t>Some of the readable data nodes in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus
important to control read access (e.g., via get, get-config, or
notification) to these data nodes. This is the subtree and data node
and its sensitivity/vulnerability:</t>
<!-- End YANG security DNE text (Para. 4). -->
<t>Jan Lindblad and Ladislav Lhokta did thorough reviews of the YANG <ul spacing="normal">
module and the examples in <xref target="AuthExample"/>.</t> <li>The 'token' node defined in the model, containing a concatenation of a
Challenge, an AES Session-key used for encryption, and an HMAC-SHA1
Session-key used for authentication, is sensitive from a privacy
perspective and can be used to disrupt a test session. The ability to read
the field should be limited to the administrator of the test network.</li>
</ul>
<t>Kostas Pentikousis was partially supported by FP7 UNIFY <t>The TWAMP YANG data model does not define RPC operations, as detailed in
(http://fp7-unify.eu), a research project partially funded by the <xref target="OperationalCommands"/>, and defers the definition of NETCONF
European Community under the Seventh Framework Program (grant agreement RPC operations to each implementation. These RPC operations, when defined,
no. 619609). The views expressed here are those of the authors only. The may be considered sensitive or vulnerable in some network environments.
European Commission is not liable for any use that may be made of the It is thus important to control access to these operations.</t>
information in this document.</t>
</section> </section>
<section anchor="iana" numbered="true" toc="default">
<section anchor="contributors" title="Contributors"> <name>IANA Considerations</name>
<t>Lianshu Zheng.</t> <t>IANA has registered the following URI in the <xref target="RFC3688" for
mat="default">"IETF XML
Registry"</xref>.</t>
<dl newline="false" spacing="compact">
<dt>URI:</dt><dd>urn:ietf:params:xml:ns:yang:ietf-twamp</dd>
<dt>Registrant Contact:</dt><dd>The IESG.</dd>
<dt>XML:</dt><dd>N/A; the requested URI is an XML namespace.</dd>
</dl>
<t>IANA has registered the following YANG module in the
<xref target="RFC6020" format="default">"YANG Module Names" registry</xref
>.</t>
<dl newline="false" spacing="compact">
<dt>Name:</dt><dd>ietf-twamp</dd>
<dt>Namespace:</dt><dd>urn:ietf:params:xml:ns:yang:ietf-twamp</dd>
<dt>Prefix:</dt><dd>twamp</dd>
<dt>Reference:</dt><dd>RFC 8913</dd>
</dl>
</section> </section>
</middle> </middle>
<back> <back>
<references title="Normative References"> <references>
<?rfc include='reference.RFC.2119'?> <name>References</name>
<references>
<?rfc include='reference.RFC.3432'?> <name>Normative References</name>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.
<?rfc include='reference.RFC.3688'?> xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3432.
<?rfc include='reference.RFC.4086'?> xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3688.
<?rfc include='reference.RFC.4656'?> xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4086.
<?rfc include='reference.RFC.5357'?> xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4656.
<?rfc include='reference.RFC.5905'?> xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8446.
<?rfc include='reference.RFC.6020'?> xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5357.
<?rfc include='reference.RFC.6038'?> xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5905.
<?rfc include='reference.RFC.6991'?> xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6020.
<?rfc include='reference.RFC.7717'?> xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6038.
<?rfc include='reference.RFC.7950'?> xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6241.
<?rfc include='reference.RFC.8174'?> xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6242.
<?rfc include='reference.I-D.ietf-ippm-port-twamp-test'?> xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6991.
<?rfc include='reference.I-D.ietf-ippm-metric-registry'?> xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7717.
<reference anchor="UML"> xml"/>
<front> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7950.
<title>Information technology - Open Distributed Processing - xml"/>
Unified Modeling Language</title> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8040.
xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.
xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8341.
xml"/>
<author> <!-- draft-ietf-ippm-port-twamp-test (RFC 8545) -->
<organization>ISO/IEC</organization> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8545.
</author> xml"/>
<date month="April" year="2005"/> <!-- draft-ietf-ippm-metric-registry (RFC 8911) -->
</front> <reference anchor="RFC8911" target="https://www.rfc-editor.org/info/rfc8
911">
<front>
<title>Registry for Performance Metrics</title>
<author fullname="Marcelo Bagnulo" initials="M." surname="Bagnulo">
<organization/>
</author>
<author fullname="Benoit Claise" initials="B." surname="Claise">
<organization/>
</author>
<author fullname="Phil Eardley" initials="P." surname="Eardley">
<organization/>
</author>
<author fullname="Al Morton" initials="A." surname="Morton">
<organization/>
</author>
<author fullname="Aamer Akhter" initials="A." surname="Akhter">
<organization/>
</author>
<date month="November" year="2021"/>
</front>
<seriesInfo name="RFC" value="8911"/>
<seriesInfo name="DOI" value="10.17487/RFC8911"/>
</reference> </reference>
</references>
<references title="Informative References">
<?rfc include='reference.RFC.2330'?>
<?rfc include='reference.RFC.5246'?>
<?rfc include='reference.RFC.5618'?>
<?rfc include='reference.RFC.5938'?>
<?rfc include='reference.RFC.6241'?>
<?rfc include='reference.RFC.6242'?>
<?rfc include='reference.RFC.7312'?>
<?rfc include='reference.RFC.7426'?>
<?rfc include='reference.RFC.8018'?>
<?rfc include='reference.RFC.8040'?>
<?rfc include='reference.RFC.8340'?>
<?rfc include='reference.RFC.8341'?>
<?rfc include='reference.RFC.8342'?>
<reference anchor="NSC"> <reference anchor="UML">
<front> <front>
<title>Research directions in network service chaining</title> <title>Information technology - Open Distributed Processing -
Unified Modeling Language (UML) Version 1.4.2</title>
<author> <author>
<organization>John, W., Pentikousis, K., et al.</organization> <organization>ISO/IEC</organization>
</author> </author>
<date month="April" year="2005"/>
<date month="November" year="2013"/> </front>
</front> <seriesInfo name="ISO/IEC" value="19501:2005"/>
<seriesInfo name="OMG-UML" value="VER 1.3"/>
</reference>
<seriesInfo name="Proc. SDN for Future Networks and Services (SDN4FNS), <reference anchor='W3C.REC-xml-20081126'
Trento, Italy" target='https://www.w3.org/TR/2008/REC-xml-20081126'>
value="IEEE"/> <front>
</reference> <title>Extensible Markup Language (XML) 1.0 (Fifth Edition)</title>
<author initials='T.' surname='Bray' fullname='Tim Bray'>
<organization />
</author>
<author initials='J.' surname='Paoli' fullname='Jean Paoli'>
<organization />
</author>
<author initials='M.' surname='Sperberg-McQueen' fullname='Michael Sperberg
-McQueen'>
<organization />
</author>
<author initials='E.' surname='Maler' fullname='Eve Maler'>
<organization />
</author>
<author initials='F.' surname='Yergeau' fullname='Francois Yergeau'>
<organization />
</author>
<date month='November' year='2008' />
</front>
<seriesInfo name="World Wide Web Consortium Recommendation" value="REC-xml-
20081126"/>
</reference>
</references> </references>
<references>
<name>Informative References</name>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2330.
xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5618.
xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5938.
xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7312.
xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7426.
xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8018.
xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8340.
xml"/>
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8342.
xml"/>
<section anchor="AuthExample" title="Detailed Data Model Examples"> <reference anchor="NSC">
<t>This appendix extends the example presented in <xref <front>
target="examples"/> by configuring more fields such as authentication <title>Research directions in network service chaining</title>
parameters, DSCP values and so on.</t> <author fullname="Wolfgang John" initials="W." surname="John">
<organization/>
</author>
<author fullname="Konstantinos Pentikousis" initials="K." surname="P
entikousis">
<organization/>
</author>
<author fullname="George Agapiou" initials="G." surname="Agapiou">
<organization/>
</author>
<author fullname="Eduardo Jacob" initials="E." surname="Jacob">
<organization/>
</author>
<author fullname="Mario Kind" initials="M." surname="Kind">
<organization/>
</author>
<author fullname="Antonio Manzalini" initials="A." surname="Manzalin
i">
<organization/>
</author>
<author fullname="Fulvio Risso" initials="F." surname="Risso">
<organization/>
</author>
<author fullname="Dimitri Staessens" initials="D." surname="Staessen
s">
<organization/>
</author>
<author fullname="Rebecca Steinert" initials="R." surname="Steinert"
>
<organization/>
</author>
<author fullname="Catalin Meirosu" initials="C." surname="Meirosu">
<organization/>
</author>
<date month="November" year="2013"/>
</front>
<seriesInfo name="DOI" value="10.1109/SDN4FNS.2013.6702549"/>
<refcontent>2013 IEEE SDN for Future Networks and Services
(SDN4FNS), Trento, Italy</refcontent>
</reference>
<reference anchor="PERF-METRICS"
target="https://www.iana.org/assignments/performance-metrics">
<front>
<title>Performance Metrics</title>
<author><organization>IANA</organization></author>
<date/>
</front>
</reference>
</references>
</references>
<section anchor="AuthExample" numbered="true" toc="default">
<name>Detailed Data Model Examples</name>
<t>This appendix extends the examples presented in <xref target="examples"
format="default"/> by configuring more fields, such as authentication
parameters, DSCP values, and so on.</t>
<section title="Control-Client"> <section numbered="true" toc="default">
<figure> <name>Control-Client</name>
<artwork><![CDATA[ <sourcecode type="xml"><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<client> <client>
<admin-state>true</admin-state> <admin-state>true</admin-state>
<mode-preference-chain> <mode-preference-chain>
<priority>0</priority> <priority>0</priority>
<mode>authenticated</mode> <mode>authenticated</mode>
</mode-preference-chain> </mode-preference-chain>
<mode-preference-chain> <mode-preference-chain>
skipping to change at line 2904 skipping to change at line 2793
<sender-ip>203.0.113.1</sender-ip> <sender-ip>203.0.113.1</sender-ip>
<sender-udp-port>54001</sender-udp-port> <sender-udp-port>54001</sender-udp-port>
<reflector-ip>203.0.113.2</reflector-ip> <reflector-ip>203.0.113.2</reflector-ip>
<reflector-udp-port>55001</reflector-udp-port> <reflector-udp-port>55001</reflector-udp-port>
<padding-length>128</padding-length> <padding-length>128</padding-length>
<start-time>0</start-time> <start-time>0</start-time>
</test-session-request> </test-session-request>
</ctrl-connection> </ctrl-connection>
</client> </client>
</twamp> </twamp>
</data> </data>]]></sourcecode>
<sourcecode type="xml"><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<client> <client>
<admin-state>true</admin-state> <admin-state>true</admin-state>
<mode-preference-chain> <mode-preference-chain>
<priority>0</priority> <priority>0</priority>
<mode>authenticated</mode> <mode>authenticated</mode>
</mode-preference-chain> </mode-preference-chain>
<mode-preference-chain> <mode-preference-chain>
skipping to change at line 2929 skipping to change at line 2819
<key-chain> <key-chain>
<key-id>KeyClient1ToRouterA</key-id> <key-id>KeyClient1ToRouterA</key-id>
<secret-key>c2VjcmV0MQ==</secret-key> <secret-key>c2VjcmV0MQ==</secret-key>
</key-chain> </key-chain>
<key-chain> <key-chain>
<key-id>KeyForRouterB</key-id> <key-id>KeyForRouterB</key-id>
<secret-key>c2VjcmV0Mg0K</secret-key> <secret-key>c2VjcmV0Mg0K</secret-key>
</key-chain> </key-chain>
<ctrl-connection> <ctrl-connection>
<name>RouterA</name> <name>RouterA</name>
<client-ip>2001:DB8:203:0:113::1</client-ip> <client-ip>2001:db8:203:0:113::1</client-ip>
<server-ip>2001:DB8:203:0:113::2</server-ip> <server-ip>2001:db8:203:0:113::2</server-ip>
<control-packet-dscp>32</control-packet-dscp> <control-packet-dscp>32</control-packet-dscp>
<key-id>KeyClient1ToRouterA</key-id> <key-id>KeyClient1ToRouterA</key-id>
<test-session-request> <test-session-request>
<name>Test1</name> <name>Test1</name>
<sender-ip>2001:DB8:10:1:1::1</sender-ip> <sender-ip>2001:db8:10:1:1::1</sender-ip>
<sender-udp-port>54000</sender-udp-port> <sender-udp-port>54000</sender-udp-port>
<reflector-ip>2001:DB8:10:1:1::2</reflector-ip> <reflector-ip>2001:db8:10:1:1::2</reflector-ip>
<reflector-udp-port>55000</reflector-udp-port> <reflector-udp-port>55000</reflector-udp-port>
<padding-length>64</padding-length> <padding-length>64</padding-length>
<start-time>0</start-time> <start-time>0</start-time>
</test-session-request> </test-session-request>
<test-session-request> <test-session-request>
<name>Test2</name> <name>Test2</name>
<sender-ip>2001:DB8:203:0:113::1</sender-ip> <sender-ip>2001:db8:203:0:113::1</sender-ip>
<sender-udp-port>54001</sender-udp-port> <sender-udp-port>54001</sender-udp-port>
<reflector-ip>2001:DB8:203:0:113::2</reflector-ip> <reflector-ip>2001:db8:203:0:113::2</reflector-ip>
<reflector-udp-port>55001</reflector-udp-port> <reflector-udp-port>55001</reflector-udp-port>
<padding-length>128</padding-length> <padding-length>128</padding-length>
<start-time>0</start-time> <start-time>0</start-time>
</test-session-request> </test-session-request>
</ctrl-connection> </ctrl-connection>
</client> </client>
</twamp> </twamp>
</data> </data>]]></sourcecode>
]]></artwork>
</figure>
</section> </section>
<section numbered="true" toc="default">
<section title="Server"> <name>Server</name>
<figure> <sourcecode type="xml"><![CDATA[
<artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<server> <server>
<admin-state>true</admin-state> <admin-state>true</admin-state>
<servwait>1800</servwait> <servwait>1800</servwait>
<control-packet-dscp>32</control-packet-dscp> <control-packet-dscp>32</control-packet-dscp>
<modes>authenticated unauthenticated</modes> <modes>authenticated unauthenticated</modes>
<count>15</count> <count>15</count>
<key-chain> <key-chain>
skipping to change at line 2992 skipping to change at line 2878
<client-tcp-port>16341</client-tcp-port> <client-tcp-port>16341</client-tcp-port>
<server-ip>203.0.113.2</server-ip> <server-ip>203.0.113.2</server-ip>
<server-tcp-port>862</server-tcp-port> <server-tcp-port>862</server-tcp-port>
<control-packet-dscp>32</control-packet-dscp> <control-packet-dscp>32</control-packet-dscp>
<selected-mode>unauthenticated</selected-mode> <selected-mode>unauthenticated</selected-mode>
<key-id>KeyClient1ToRouterA</key-id> <key-id>KeyClient1ToRouterA</key-id>
<count>15</count> <count>15</count>
</ctrl-connection> </ctrl-connection>
</server> </server>
</twamp> </twamp>
</data> </data>]]></sourcecode>
<sourcecode type="xml"><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<server> <server>
<admin-state>true</admin-state> <admin-state>true</admin-state>
<servwait>1800</servwait> <servwait>1800</servwait>
<control-packet-dscp>32</control-packet-dscp> <control-packet-dscp>32</control-packet-dscp>
<modes>authenticated unauthenticated</modes> <modes>authenticated unauthenticated</modes>
<count>15</count> <count>15</count>
<key-chain> <key-chain>
<key-id>KeyClient1ToRouterA</key-id> <key-id>KeyClient1ToRouterA</key-id>
<secret-key>c2VjcmV0MQ==</secret-key> <secret-key>c2VjcmV0MQ==</secret-key>
</key-chain> </key-chain>
<key-chain> <key-chain>
<key-id>KeyClient10ToRouterA</key-id> <key-id>KeyClient10ToRouterA</key-id>
<secret-key>c2VjcmV0MTANCg==</secret-key> <secret-key>c2VjcmV0MTANCg==</secret-key>
</key-chain> </key-chain>
<ctrl-connection> <ctrl-connection>
<client-ip>2001:DB8:203:0:113::1</client-ip> <client-ip>2001:db8:203:0:113::1</client-ip>
<client-tcp-port>16341</client-tcp-port> <client-tcp-port>16341</client-tcp-port>
<server-ip>2001:DB8:203:0:113::2</server-ip> <server-ip>2001:db8:203:0:113::2</server-ip>
<server-tcp-port>862</server-tcp-port> <server-tcp-port>862</server-tcp-port>
<control-packet-dscp>32</control-packet-dscp> <control-packet-dscp>32</control-packet-dscp>
<selected-mode>unauthenticated</selected-mode> <selected-mode>unauthenticated</selected-mode>
<key-id>KeyClient1ToRouterA</key-id> <key-id>KeyClient1ToRouterA</key-id>
<count>15</count> <count>15</count>
</ctrl-connection> </ctrl-connection>
</server> </server>
</twamp> </twamp>
</data> </data>]]></sourcecode>
]]></artwork>
</figure>
</section> </section>
<section numbered="true" toc="default">
<section title="Session-Sender"> <name>Session-Sender</name>
<figure> <sourcecode type="xml"><![CDATA[
<artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<session-sender> <session-sender>
<admin-state>true</admin-state> <admin-state>true</admin-state>
<test-session> <test-session>
<name>Test1</name> <name>Test1</name>
<ctrl-connection-name>RouterA</ctrl-connection-name> <ctrl-connection-name>RouterA</ctrl-connection-name>
<fill-mode>zero</fill-mode> <fill-mode>zero</fill-mode>
<number-of-packets>900</number-of-packets> <number-of-packets>900</number-of-packets>
skipping to change at line 3062 skipping to change at line 2944
<number-of-packets>900</number-of-packets> <number-of-packets>900</number-of-packets>
<lambda>1</lambda> <lambda>1</lambda>
<max-interval>2</max-interval> <max-interval>2</max-interval>
<sent-packets>21</sent-packets> <sent-packets>21</sent-packets>
<rcv-packets>21</rcv-packets> <rcv-packets>21</rcv-packets>
<last-sent-seq>20</last-sent-seq> <last-sent-seq>20</last-sent-seq>
<last-rcv-seq>20</last-rcv-seq> <last-rcv-seq>20</last-rcv-seq>
</test-session> </test-session>
</session-sender> </session-sender>
</twamp> </twamp>
</data> </data>]]></sourcecode>
]]></artwork>
</figure>
</section> </section>
<section numbered="true" toc="default">
<name>Session-Reflector</name>
<section title="Session-Reflector"> <aside><t>Note: '\' line wrapping is for formatting only.</t></aside>
<figure>
<artwork><![CDATA[
[note: '\' line wrapping is for formatting only]
<sourcecode type="xml"><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<session-reflector> <session-reflector>
<admin-state>true</admin-state> <admin-state>true</admin-state>
<test-session> <test-session>
<sender-ip>203.0.113.3</sender-ip> <sender-ip>203.0.113.3</sender-ip>
<sender-udp-port>54000</sender-udp-port> <sender-udp-port>54000</sender-udp-port>
<reflector-ip>203.0.113.4</reflector-ip> <reflector-ip>203.0.113.4</reflector-ip>
<reflector-udp-port>55000</reflector-udp-port> <reflector-udp-port>55000</reflector-udp-port>
skipping to change at line 3120 skipping to change at line 2999
<parent-connection-server-tcp-port>862</parent-connection-se\ <parent-connection-server-tcp-port>862</parent-connection-se\
rver-tcp-port> rver-tcp-port>
<test-packet-dscp>32</test-packet-dscp> <test-packet-dscp>32</test-packet-dscp>
<sent-packets>21</sent-packets> <sent-packets>21</sent-packets>
<rcv-packets>21</rcv-packets> <rcv-packets>21</rcv-packets>
<last-sent-seq>20</last-sent-seq> <last-sent-seq>20</last-sent-seq>
<last-rcv-seq>20</last-rcv-seq> <last-rcv-seq>20</last-rcv-seq>
</test-session> </test-session>
</session-reflector> </session-reflector>
</twamp> </twamp>
</data> </data>]]></sourcecode>
[note: '\' line wrapping is for formatting only] <aside><t>Note: '\' line wrapping is for formatting only.</t></aside>
<sourcecode type="xml"><![CDATA[
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp">
<session-reflector> <session-reflector>
<admin-state>true</admin-state> <admin-state>true</admin-state>
<test-session> <test-session>
<sender-ip>2001:DB8:10:1:1::1</sender-ip> <sender-ip>2001:db8:10:1:1::1</sender-ip>
<sender-udp-port>54000</sender-udp-port> <sender-udp-port>54000</sender-udp-port>
<reflector-ip>2001:DB8:10:1:1::2</reflector-ip> <reflector-ip>2001:db8:10:1:1::2</reflector-ip>
<reflector-udp-port>55000</reflector-udp-port> <reflector-udp-port>55000</reflector-udp-port>
<sid>1232</sid> <sid>1232</sid>
<parent-connection-client-ip>2001:DB8:203:0:113::1</parent-c\ <parent-connection-client-ip>2001:db8:203:0:113::1</parent-c\
onnection-client-ip> onnection-client-ip>
<parent-connection-client-tcp-port>16341</parent-connection-\ <parent-connection-client-tcp-port>16341</parent-connection-\
client-tcp-port> client-tcp-port>
<parent-connection-server-ip>2001:DB8:203:0:113::2</parent-c\ <parent-connection-server-ip>2001:db8:203:0:113::2</parent-c\
onnection-server-ip> onnection-server-ip>
<parent-connection-server-tcp-port>862</parent-connection-se\ <parent-connection-server-tcp-port>862</parent-connection-se\
rver-tcp-port> rver-tcp-port>
<test-packet-dscp>32</test-packet-dscp> <test-packet-dscp>32</test-packet-dscp>
<sent-packets>2</sent-packets> <sent-packets>2</sent-packets>
<rcv-packets>2</rcv-packets> <rcv-packets>2</rcv-packets>
<last-sent-seq>1</last-sent-seq> <last-sent-seq>1</last-sent-seq>
<last-rcv-seq>1</last-rcv-seq> <last-rcv-seq>1</last-rcv-seq>
</test-session> </test-session>
<test-session> <test-session>
<sender-ip>2001:DB8:203:0:113::1</sender-ip> <sender-ip>2001:db8:203:0:113::1</sender-ip>
<sender-udp-port>54001</sender-udp-port> <sender-udp-port>54001</sender-udp-port>
<reflector-ip>2001:DB8:192:68::2</reflector-ip> <reflector-ip>2001:db8:192:68::2</reflector-ip>
<reflector-udp-port>55001</reflector-udp-port> <reflector-udp-port>55001</reflector-udp-port>
<sid>178943</sid> <sid>178943</sid>
<parent-connection-client-ip>2001:DB8:203:0:113::1</parent-c\ <parent-connection-client-ip>2001:db8:203:0:113::1</parent-c\
onnection-client-ip> onnection-client-ip>
<parent-connection-client-tcp-port>16341</parent-connection-\ <parent-connection-client-tcp-port>16341</parent-connection-\
client-tcp-port> client-tcp-port>
<parent-connection-server-ip>2001:DB8:203:0:113::2</parent-c\ <parent-connection-server-ip>2001:db8:203:0:113::2</parent-c\
onnection-server-ip> onnection-server-ip>
<parent-connection-server-tcp-port>862</parent-connection-se\ <parent-connection-server-tcp-port>862</parent-connection-se\
rver-tcp-port> rver-tcp-port>
<test-packet-dscp>32</test-packet-dscp> <test-packet-dscp>32</test-packet-dscp>
<sent-packets>21</sent-packets> <sent-packets>21</sent-packets>
<rcv-packets>21</rcv-packets> <rcv-packets>21</rcv-packets>
<last-sent-seq>20</last-sent-seq> <last-sent-seq>20</last-sent-seq>
<last-rcv-seq>20</last-rcv-seq> <last-rcv-seq>20</last-rcv-seq>
</test-session> </test-session>
</session-reflector> </session-reflector>
</twamp> </twamp>
</data> </data>]]></sourcecode>
]]></artwork>
</figure>
</section> </section>
</section> </section>
<section anchor="OperationalCommands" numbered="true" toc="default">
<section anchor="OperationalCommands" title="TWAMP Operational Commands"> <name>TWAMP Operational Commands</name>
<t>TWAMP operational commands could be performed programmatically or <t>TWAMP operational commands could be performed programmatically or
manually, e.g. using a command-line interface (CLI).</t> manually, e.g., using a command-line interface (CLI).</t>
<t>With respect to programmability, YANG can be used to define NETCONF <t>With respect to programmability, YANG can be used to define NETCONF
Remote Procedure Calls (RPC), therefore it would be, in principle, Remote Procedure Calls (RPCs); therefore, it would be, in principle,
possible to define TWAMP RPC operations for actions such as starting or possible to define TWAMP RPC operations for actions such as starting or
stopping control connections or test sessions or groups of sessions; stopping control connections, test sessions, or groups of sessions;
retrieving results; clearing stored results, and so on.</t> retrieving results; clearing stored results; and so on.</t>
<t>However, <xref target="RFC5357" format="default">TWAMP </xref> does not
<t>However, <xref target="RFC5357">TWAMP </xref> does not attempt to attempt to
describe such operational actions. Refer also to <xref target="scope"/> describe such operational actions. Refer also to <xref target="scope" form
and the unlabeled links in <xref target="fig:scope"/>. In actual at="default"/>
deployments different TWAMP implementations may support different sets and the unlabeled links in <xref target="fig_scope" format="default"/>. In
actual
deployments, different TWAMP implementations may support different sets
of operational commands, with different restrictions. Therefore, this of operational commands, with different restrictions. Therefore, this
document considers it the responsibility of the individual document considers it the responsibility of the individual
implementation to define its corresponding TWAMP operational commands implementation to define its corresponding data model for TWAMP operationa
data model.</t> l commands.</t>
</section>
<section anchor="acks" numbered="false" toc="default">
<name>Acknowledgments</name>
<t>We thank <contact fullname="Fred Baker"/>, <contact fullname="Kevin D'S
ouza"/>, <contact fullname="Gregory Mirsky"/>, <contact fullname="Brian Trammell
"/>,
<contact fullname="Robert Sherman"/>, and <contact fullname="Marius George
scu"/> for their thorough and constructive
reviews, comments, and text suggestions.</t>
<t><contact fullname="Haoxing Shen"/> contributed to the definition of the
YANG module in
<xref target="module" format="default"/>.</t>
<t><contact fullname="Jan Lindblad"/> and <contact fullname="Ladislav Lhot
ka"/> did thorough reviews of the YANG
module and the examples in <xref target="AuthExample"
format="default"/>.</t>
<t><contact fullname="Kostas Pentikousis"/> was partially supported by FP7
UNIFY, a research project partially funded by the
European Community under the Seventh Framework Program (grant agreement
no. 619609). The views expressed here are those of the authors only. The
European Commission is not liable for any use that may be made of the
information in this document.</t>
</section>
<section anchor="contributors" numbered="false" toc="default">
<name>Contributors</name>
<t><contact fullname="Lianshu Zheng"/></t>
</section> </section>
</back> </back>
</rfc> </rfc>
 End of changes. 497 change blocks. 
1411 lines changed or deleted 1417 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/