draft-ietf-ippm-stamp-yang-07.txt   draft-ietf-ippm-stamp-yang-08.txt 
Network Working Group G. Mirsky Network Working Group G. Mirsky
Internet-Draft X. Min Internet-Draft X. Min
Intended status: Standards Track ZTE Corp. Intended status: Standards Track ZTE Corp.
Expires: 1 October 2021 W.S. Luo Expires: 13 January 2022 W.S. Luo
Ericsson Ericsson
30 March 2021 12 July 2021
Simple Two-way Active Measurement Protocol (STAMP) Data Model Simple Two-way Active Measurement Protocol (STAMP) Data Model
draft-ietf-ippm-stamp-yang-07 draft-ietf-ippm-stamp-yang-08
Abstract Abstract
This document specifies the data model for implementations of This document specifies the data model for implementations of
Session-Sender and Session-Reflector for Simple Two-way Active Session-Sender and Session-Reflector for Simple Two-way Active
Measurement Protocol (STAMP) mode using YANG. Measurement Protocol (STAMP) mode using YANG.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
skipping to change at page 1, line 34 skipping to change at page 1, line 34
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on 1 October 2021. This Internet-Draft will expire on 13 January 2022.
Copyright Notice Copyright Notice
Copyright (c) 2021 IETF Trust and the persons identified as the Copyright (c) 2021 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/ Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document. license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights Please review these documents carefully, as they describe your rights
skipping to change at page 2, line 18 skipping to change at page 2, line 18
1.1. Conventions used in this document . . . . . . . . . . . . 2 1.1. Conventions used in this document . . . . . . . . . . . . 2
1.1.1. Requirements Language . . . . . . . . . . . . . . . . 3 1.1.1. Requirements Language . . . . . . . . . . . . . . . . 3
2. Scope, Model, and Applicability . . . . . . . . . . . . . . . 3 2. Scope, Model, and Applicability . . . . . . . . . . . . . . . 3
2.1. Data Model Parameters . . . . . . . . . . . . . . . . . . 3 2.1. Data Model Parameters . . . . . . . . . . . . . . . . . . 3
2.1.1. STAMP-Sender . . . . . . . . . . . . . . . . . . . . 3 2.1.1. STAMP-Sender . . . . . . . . . . . . . . . . . . . . 3
2.1.2. STAMP-Reflector . . . . . . . . . . . . . . . . . . . 4 2.1.2. STAMP-Reflector . . . . . . . . . . . . . . . . . . . 4
3. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 4 3. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.1. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 5 3.1. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 5
3.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 10 3.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 10
4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 31 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 31
5. Security Considerations . . . . . . . . . . . . . . . . . . . 31 5. Security Considerations . . . . . . . . . . . . . . . . . . . 32
6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 32 6. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 33
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.1. Normative References . . . . . . . . . . . . . . . . . . 32 7.1. Normative References . . . . . . . . . . . . . . . . . . 33
7.2. Informative References . . . . . . . . . . . . . . . . . 33 7.2. Informative References . . . . . . . . . . . . . . . . . 34
Appendix A. Example of STAMP Session Configuration . . . . . . . 34 Appendix A. Example of STAMP Session Configuration . . . . . . . 34
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 36
1. Introduction 1. Introduction
The Simple Two-way Active Measurement Protocol (STAMP) [RFC8762] can The Simple Two-way Active Measurement Protocol (STAMP) [RFC8762] can
be used to measure performance parameters of IP networks such as be used to measure performance parameters of IP networks such as
latency, jitter, and packet loss by sending test packets and latency, jitter, and packet loss by sending test packets and
monitoring their experience in the network. The STAMP protocol monitoring their experience in the network. The STAMP protocol
[RFC8762] in unauthenticated mode is on-wire compatible with STAMP [RFC8762] in unauthenticated mode is on-wire compatible with TWAMP
Light, discussed in Appendix I [RFC5357]. The STAMP Light is known Light, discussed in Appendix I [RFC5357]. The TWAMP Light is known
to have many implementations though no common management framework to have many implementations though no common management framework
being defined, thus leaving some aspects of test packet processing to being defined, thus leaving some aspects of test packet processing to
interpretation. As one of the goals of STAMP is to support these interpretation. As one of the goals of STAMP is to support these
variations, this document presents their analysis; describes common variations, this document presents their analysis; describes the data
STAMP and STAMP model while allowing for STAMP extensions in the model of the base STAMP specification. The defined STAMP data model
future. This document defines the STAMP data model and specifies it can be augmented to include STAMP extensions, for example, described
formally, using the YANG data modeling language [RFC7950]. in [RFC8972]. This document defines the STAMP data model and
specifies it formally, using the YANG data modeling language
[RFC7950].
This version of the interfaces data model conforms to the Network This version of the interfaces data model conforms to the Network
Management Datastore Architecture (NMDA) defined in [RFC8342]. Management Datastore Architecture (NMDA) defined in [RFC8342].
1.1. Conventions used in this document 1.1. Conventions used in this document
1.1.1. Requirements Language 1.1.1. Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP "OPTIONAL" in this document are to be interpreted as described in BCP
14 [RFC2119] [RFC8174] when, and only when, they appear in all 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here. capitals, as shown here.
2. Scope, Model, and Applicability 2. Scope, Model, and Applicability
The scope of this document includes a model of the STAMP as defined The scope of this document includes a model of the STAMP as defined
in [RFC8762]. in [RFC8762] and Section 3 [RFC8972].
o----------------------------------------------------------o o----------------------------------------------------------o
| Config client | | Config client |
o----------------------------------------------------------o o----------------------------------------------------------o
|| || || ||
|| NETCONF/RESTCONF || || NETCONF/RESTCONF ||
|| || || ||
o----------------------o o-------------------------o o----------------------o o-------------------------o
| Config server | | Config server | | Config server | | Config server |
| | | | | | | |
skipping to change at page 3, line 45 skipping to change at page 3, line 45
2.1.1. STAMP-Sender 2.1.1. STAMP-Sender
The stamp-session-sender container holds items that are related to The stamp-session-sender container holds items that are related to
the configuration of the stamp Session-Sender logical entity. the configuration of the stamp Session-Sender logical entity.
The stamp-session-sender-state container holds information about the The stamp-session-sender-state container holds information about the
state of the particular STAMP test session. state of the particular STAMP test session.
RPCs stamp-sender-start and stamp-sender-stop respectively start and RPCs stamp-sender-start and stamp-sender-stop respectively start and
stop the referenced session by the session-id of the STAMP. stop the referenced session by the stamp-session-id of the STAMP.
2.1.1.1. Controls for Test Session and Performance Metric Calculation 2.1.1.1. Controls for Test Session and Performance Metric Calculation
The data model supports several scenarios for a STAMP Session-Sender The data model supports several scenarios for a STAMP Session-Sender
to execute test sessions and calculate performance metrics: to execute test sessions and calculate performance metrics:
* The test mode in which the test packets are sent unbound in time * The test mode in which the test packets are sent unbound in time
as defined by the parameter 'interval' in the stamp-session-sender as defined by the parameter 'interval' in the stamp-session-sender
container frequency is referred to as continuous mode. container frequency is referred to as continuous mode.
Performance metrics in the continuous mode are calculated at a Performance metrics in the continuous mode are calculated at a
skipping to change at page 4, line 35 skipping to change at page 4, line 35
2.1.2. STAMP-Reflector 2.1.2. STAMP-Reflector
The stamp-session-reflector container holds items that are related to The stamp-session-reflector container holds items that are related to
the configuration of the STAMP Session-Reflector logical entity. the configuration of the STAMP Session-Reflector logical entity.
The stamp-session-refl-state container holds Session-Reflector state The stamp-session-refl-state container holds Session-Reflector state
data for the particular STAMP test session. data for the particular STAMP test session.
3. Data Model 3. Data Model
Creating STAMP data model presents a number of challenges and among Creating the STAMP data model presents several challenges, and among
them is the identification of a test-session at Session-Reflector. A them is the identification of a test-session at Session-Reflector. A
Session-Reflector MAY require only as little as its IP and UDP port Session-Reflector MAY require only as little as the STAMP Session
number in received STAMP-Test packet to spawn new test session. More Identifier (SSID) and the source IP address in received STAMP-Test
so, to test processing of Class-of-Service along the same route in packet to spawn a new test session. More so, to test processing of
Equal Cost Multi-Path environment Session-Sender may perform STAMP Class-of-Service along the same route in Equal Cost Multi-Path
test sessions concurrently using the same source IP address, source environment Session-Sender may perform STAMP test sessions
UDP port number, destination IP address, and destination UDP port concurrently using the same source IP address, source UDP port
number. Thus the only parameter that can be used to differentiate number, destination IP address, and destination UDP port number.
these test sessions would be DSCP value. The DSCP field may get re- Thus the only parameter that can be used to differentiate these test
marked along the path, and without the use of [RFC7750] that will go sessions would be DSCP value. The DSCP field may get re-marked along
undetected, but by using five-tuple instead of four-tuple as a key, the path, and without the use of Class of Service TLV (Section 4.4
we can ensure that STAMP test packets that are considered as [RFC8972]) that will go undetected, but by using SSID and the source
different test sessions follow the same path even in ECMP IP address as a key, we can ensure that STAMP test packets that are
environments. considered as different test sessions follow the same path even in
ECMP environments.
3.1. Tree Diagrams 3.1. Tree Diagrams
This section presents a simplified graphical representation of the This section presents a simplified graphical representation of the
STAMP data model using a YANG tree diagram [RFC8340]. STAMP data model using a YANG tree diagram [RFC8340].
module: ietf-stamp module: ietf-stamp
+--rw stamp +--rw stamp
| +--rw stamp-session-sender {session-sender}? | +--rw stamp-session-sender {session-sender}?
| | +--rw sender-enable? boolean | | +--rw sender-enable? boolean
| | +--rw test-session* [session-id] | | +--rw sender-test-session* [stamp-session-id]
| | +--rw session-id uint32
| | +--rw test-session-enable? boolean | | +--rw test-session-enable? boolean
| | +--rw number-of-packets? union | | +--rw number-of-packets? union
| | +--rw packet-padding-size? uint32
| | +--rw interval? uint32 | | +--rw interval? uint32
| | +--rw session-timeout? uint32 | | +--rw session-timeout? uint32
| | +--rw measurement-interval? uint32 | | +--rw measurement-interval? uint32
| | +--rw repeat? union | | +--rw repeat? union
| | +--rw repeat-interval? uint32 | | +--rw repeat-interval? uint32
| | +--rw dscp-value? inet:dscp | | +--rw dscp-value? inet:dscp
| | +--rw test-session-reflector-mode? session-reflector-mode | | +--rw test-session-reflector-mode? session-reflector-mode
| | +--rw sender-ip inet:ip-address | | +--rw sender-ip inet:ip-address
| | +--rw sender-udp-port inet:port-number | | +--rw session-sender-udp-port inet:port-number
| | +--rw reflector-ip inet:ip-address | | +--rw stamp-session-id uint32
| | +--rw reflector-udp-port? inet:port-number | | +--rw session-reflector-ip inet:ip-address
| | +--rw session-reflector-udp-port? inet:port-number
| | +--rw sender-timestamp-format? timestamp-format | | +--rw sender-timestamp-format? timestamp-format
| | +--rw security! {stamp-security}? | | +--rw security! {stamp-security}?
| | | +--rw key-chain? kc:key-chain-ref | | | +--rw key-chain? kc:key-chain-ref
| | +--rw first-percentile? percentile | | +--rw first-percentile? percentile
| | +--rw second-percentile? percentile | | +--rw second-percentile? percentile
| | +--rw third-percentile? percentile | | +--rw third-percentile? percentile
| +--rw stamp-session-reflector {session-reflector}? | +--rw stamp-session-reflector {session-reflector}?
| +--rw reflector-enable? boolean | +--rw reflector-enable? boolean
| +--rw ref-wait? uint32 | +--rw ref-wait? uint32
| +--rw reflector-mode-state? session-reflector-mode | +--rw reflector-mode-state? session-reflector-mode
| +--rw test-session* [session-id] | +--rw reflector-test-session* [stamp-session-id]
| +--rw session-id uint32 | +--rw stamp-session-id union
| +--rw dscp-handling-mode? session-dscp-mode | +--rw dscp-handling-mode? session-dscp-mode
| +--rw dscp-value? inet:dscp | +--rw dscp-value? inet:dscp
| +--rw sender-ip? union | +--rw sender-ip? union
| +--rw sender-udp-port? union | +--rw sender-udp-port? union
| +--rw reflector-ip? union | +--rw reflector-ip? union
| +--rw reflector-udp-port? inet:port-number | +--rw reflector-udp-port? inet:port-number
| +--rw reflector-timestamp-format? timestamp-format | +--rw reflector-timestamp-format? timestamp-format
| +--rw security! {stamp-security}? | +--rw security! {stamp-security}?
| +--rw key-chain? kc:key-chain-ref | +--rw key-chain? kc:key-chain-ref
Figure 2: STAMP Configuration Tree Diagram Figure 2: STAMP Configuration Tree Diagram
module: ietf-stamp module: ietf-stamp
+--ro stamp-state +--ro stamp-state
+--ro stamp-session-sender-state {session-sender}? +--ro stamp-session-sender-state {session-sender}?
| +--ro test-session-state* [session-id] | +--ro test-session-state* [stamp-session-id]
| +--ro session-id uint32 | +--ro stamp-session-id uint32
| +--ro sender-session-state? enumeration | +--ro sender-session-state? enumeration
| +--ro current-stats | +--ro current-stats
| | +--ro start-time yang:date-and-time | | +--ro start-time yang:date-and-time
| | +--ro packet-padding-size? uint32 | | +--ro interval? uint32
| | +--ro interval? uint32 | | +--ro duplicate-packets? uint32
| | +--ro duplicate-packets? uint32 | | +--ro reordered-packets? uint32
| | +--ro reordered-packets? uint32 | | +--ro sender-timestamp-format? timestamp-format
| | +--ro sender-timestamp-format? timestamp-format | | +--ro reflector-timestamp-format? timestamp-format
| | +--ro reflector-timestamp-format? timestamp-format | | +--ro dscp? inet:dscp
| | +--ro dscp? inet:dscp | | +--ro two-way-delay
| | +--ro two-way-delay | | | +--ro delay
| | | +--ro delay | | | | +--ro min? yang:gauge64
| | | | +--ro min? yang:gauge64 | | | | +--ro max? yang:gauge64
| | | | +--ro max? yang:gauge64 | | | | +--ro avg? yang:gauge64
| | | | +--ro avg? yang:gauge64 | | | +--ro delay-variation
| | | +--ro delay-variation | | | +--ro min? yang:gauge32
| | | +--ro min? yang:gauge32 | | | +--ro max? yang:gauge32
| | | +--ro max? yang:gauge32 | | | +--ro avg? yang:gauge32
| | | +--ro avg? yang:gauge32 | | +--ro one-way-delay-far-end
| | +--ro one-way-delay-far-end | | | +--ro delay
| | | +--ro delay | | | | +--ro min? yang:gauge64
| | | | +--ro min? yang:gauge64 | | | | +--ro max? yang:gauge64
| | | | +--ro max? yang:gauge64 | | | | +--ro avg? yang:gauge64
| | | | +--ro avg? yang:gauge64 | | | +--ro delay-variation
| | | +--ro delay-variation | | | +--ro min? yang:gauge32
| | | +--ro min? yang:gauge32 | | | +--ro max? yang:gauge32
| | | +--ro max? yang:gauge32 | | | +--ro avg? yang:gauge32
| | | +--ro avg? yang:gauge32 | | +--ro one-way-delay-near-end
| | +--ro one-way-delay-near-end | | | +--ro delay
| | | +--ro delay | | | | +--ro min? yang:gauge64
| | | | +--ro min? yang:gauge64 | | | | +--ro max? yang:gauge64
| | | | +--ro max? yang:gauge64 | | | | +--ro avg? yang:gauge64
| | | | +--ro avg? yang:gauge64 | | | +--ro delay-variation
| | | +--ro delay-variation | | | +--ro min? yang:gauge32
| | | +--ro min? yang:gauge32 | | | +--ro max? yang:gauge32
| | | +--ro max? yang:gauge32 | | | +--ro avg? yang:gauge32
| | | +--ro avg? yang:gauge32 | | +--ro low-percentile
| | +--ro low-percentile | | | +--ro delay-percentile
| | | +--ro delay-percentile | | | | +--ro rtt-delay? yang:gauge64
| | | | +--ro rtt-delay? yang:gauge64 | | | | +--ro near-end-delay? yang:gauge64
| | | | +--ro near-end-delay? yang:gauge64 | | | | +--ro far-end-delay? yang:gauge64
| | | | +--ro far-end-delay? yang:gauge64 | | | +--ro delay-variation-percentile
| | | +--ro delay-variation-percentile | | | +--ro rtt-delay-variation? yang:gauge32
| | | +--ro rtt-delay-variation? yang:gauge32 | | | +--ro near-end-delay-variation? yang:gauge32
| | | +--ro near-end-delay-variation? yang:gauge32 | | | +--ro far-end-delay-variation? yang:gauge32
| | | +--ro far-end-delay-variation? yang:gauge32 | | +--ro mid-percentile
| | +--ro mid-percentile | | | +--ro delay-percentile
| | | +--ro delay-percentile | | | | +--ro rtt-delay? yang:gauge64
| | | | +--ro rtt-delay? yang:gauge64 | | | | +--ro near-end-delay? yang:gauge64
| | | | +--ro near-end-delay? yang:gauge64 | | | | +--ro far-end-delay? yang:gauge64
| | | | +--ro far-end-delay? yang:gauge64 | | | +--ro delay-variation-percentile
| | | +--ro delay-variation-percentile | | | +--ro rtt-delay-variation? yang:gauge32
| | | +--ro rtt-delay-variation? yang:gauge32 | | | +--ro near-end-delay-variation? yang:gauge32
| | | +--ro near-end-delay-variation? yang:gauge32 | | | +--ro far-end-delay-variation? yang:gauge32
| | | +--ro far-end-delay-variation? yang:gauge32 | | +--ro high-percentile
| | +--ro high-percentile | | | +--ro delay-percentile
| | | +--ro delay-percentile | | | | +--ro rtt-delay? yang:gauge64
| | | | +--ro rtt-delay? yang:gauge64 | | | | +--ro near-end-delay? yang:gauge64
| | | | +--ro near-end-delay? yang:gauge64 | | | | +--ro far-end-delay? yang:gauge64
| | | | +--ro far-end-delay? yang:gauge64 | | | +--ro delay-variation-percentile
| | | +--ro delay-variation-percentile | | | +--ro rtt-delay-variation? yang:gauge32
| | | +--ro rtt-delay-variation? yang:gauge32 | | | +--ro near-end-delay-variation? yang:gauge32
| | | +--ro near-end-delay-variation? yang:gauge32 | | | +--ro far-end-delay-variation? yang:gauge32
| | | +--ro far-end-delay-variation? yang:gauge32 | | +--ro two-way-loss
| | +--ro two-way-loss | | | +--ro loss-count? int32
| | | +--ro loss-count? int32 | | | +--ro loss-ratio? percentage
| | | +--ro loss-ratio? percentage | | | +--ro loss-burst-max? int32
| | | +--ro loss-burst-max? int32 | | | +--ro loss-burst-min? int32
| | | +--ro loss-burst-min? int32 | | | +--ro loss-burst-count? int32
| | | +--ro loss-burst-count? int32 | | +--ro one-way-loss-far-end
| | +--ro one-way-loss-far-end | | | +--ro loss-count? int32
| | | +--ro loss-count? int32 | | | +--ro loss-ratio? percentage
| | | +--ro loss-ratio? percentage | | | +--ro loss-burst-max? int32
| | | +--ro loss-burst-max? int32 | | | +--ro loss-burst-min? int32
| | | +--ro loss-burst-min? int32 | | | +--ro loss-burst-count? int32
| | | +--ro loss-burst-count? int32 | | +--ro one-way-loss-near-end
| | +--ro one-way-loss-near-end | | | +--ro loss-count? int32
| | | +--ro loss-count? int32 | | | +--ro loss-ratio? percentage
| | | +--ro loss-ratio? percentage | | | +--ro loss-burst-max? int32
| | | +--ro loss-burst-max? int32 | | | +--ro loss-burst-min? int32
| | | +--ro loss-burst-min? int32 | | | +--ro loss-burst-count? int32
| | | +--ro loss-burst-count? int32 | | +--ro sender-ip inet:ip-address
| | +--ro sender-ip inet:ip-address | | +--ro session-sender-udp-port inet:port-number
| | +--ro sender-udp-port inet:port-number | | +--ro session-reflector-ip inet:ip-address
| | +--ro reflector-ip inet:ip-address | | +--ro session-reflector-udp-port? inet:port-number
| | +--ro reflector-udp-port? inet:port-number | | +--ro sent-packets? uint32
| | +--ro sent-packets? uint32 | | +--ro rcv-packets? uint32
| | +--ro rcv-packets? uint32 | | +--ro sent-packets-error? uint32
| | +--ro sent-packets-error? uint32 | | +--ro rcv-packets-error? uint32
| | +--ro rcv-packets-error? uint32 | | +--ro last-sent-seq? uint32
| | +--ro last-sent-seq? uint32 | | +--ro last-rcv-seq? uint32
| | +--ro last-rcv-seq? uint32 | +--ro history-stats* [stamp-session-id]
| +--ro history-stats* [session-id] | +--ro stamp-session-id uint32
| +--ro session-id uint32 | +--ro end-time yang:date-and-time
| +--ro end-time yang:date-and-time | +--ro interval? uint32
| +--ro packet-padding-size? uint32 | +--ro duplicate-packets? uint32
| +--ro interval? uint32 | +--ro reordered-packets? uint32
| +--ro duplicate-packets? uint32 | +--ro sender-timestamp-format? timestamp-format
| +--ro reordered-packets? uint32 | +--ro reflector-timestamp-format? timestamp-format
| +--ro sender-timestamp-format? timestamp-format | +--ro dscp? inet:dscp
| +--ro reflector-timestamp-format? timestamp-format | +--ro two-way-delay
| +--ro dscp? inet:dscp | | +--ro delay
| +--ro two-way-delay | | | +--ro min? yang:gauge64
| | +--ro delay | | | +--ro max? yang:gauge64
| | | +--ro min? yang:gauge64 | | | +--ro avg? yang:gauge64
| | | +--ro max? yang:gauge64 | | +--ro delay-variation
| | | +--ro avg? yang:gauge64 | | +--ro min? yang:gauge32
| | +--ro delay-variation | | +--ro max? yang:gauge32
| | +--ro min? yang:gauge32 | | +--ro avg? yang:gauge32
| | +--ro max? yang:gauge32 | +--ro one-way-delay-far-end
| | +--ro avg? yang:gauge32 | | +--ro delay
| +--ro one-way-delay-far-end | | | +--ro min? yang:gauge64
| | +--ro delay | | | +--ro max? yang:gauge64
| | | +--ro min? yang:gauge64 | | | +--ro avg? yang:gauge64
| | | +--ro max? yang:gauge64 | | +--ro delay-variation
| | | +--ro avg? yang:gauge64 | | +--ro min? yang:gauge32
| | +--ro delay-variation | | +--ro max? yang:gauge32
| | +--ro min? yang:gauge32 | | +--ro avg? yang:gauge32
| | +--ro max? yang:gauge32 | +--ro one-way-delay-near-end
| | +--ro avg? yang:gauge32 | | +--ro delay
| +--ro one-way-delay-near-end | | | +--ro min? yang:gauge64
| | +--ro delay | | | +--ro max? yang:gauge64
| | | +--ro min? yang:gauge64 | | | +--ro avg? yang:gauge64
| | | +--ro max? yang:gauge64 | | +--ro delay-variation
| | | +--ro avg? yang:gauge64 | | +--ro min? yang:gauge32
| | +--ro delay-variation | | +--ro max? yang:gauge32
| | +--ro min? yang:gauge32 | | +--ro avg? yang:gauge32
| | +--ro max? yang:gauge32 | +--ro low-percentile
| | +--ro avg? yang:gauge32 | | +--ro delay-percentile
| +--ro low-percentile | | | +--ro rtt-delay? yang:gauge64
| | +--ro delay-percentile | | | +--ro near-end-delay? yang:gauge64
| | | +--ro rtt-delay? yang:gauge64 | | | +--ro far-end-delay? yang:gauge64
| | | +--ro near-end-delay? yang:gauge64 | | +--ro delay-variation-percentile
| | | +--ro far-end-delay? yang:gauge64 | | +--ro rtt-delay-variation? yang:gauge32
| | +--ro delay-variation-percentile | | +--ro near-end-delay-variation? yang:gauge32
| | +--ro rtt-delay-variation? yang:gauge32 | | +--ro far-end-delay-variation? yang:gauge32
| | +--ro near-end-delay-variation? yang:gauge32 | +--ro mid-percentile
| | +--ro far-end-delay-variation? yang:gauge32 | | +--ro delay-percentile
| +--ro mid-percentile | | | +--ro rtt-delay? yang:gauge64
| | +--ro delay-percentile | | | +--ro near-end-delay? yang:gauge64
| | | +--ro rtt-delay? yang:gauge64 | | | +--ro far-end-delay? yang:gauge64
| | | +--ro near-end-delay? yang:gauge64 | | +--ro delay-variation-percentile
| | | +--ro far-end-delay? yang:gauge64 | | +--ro rtt-delay-variation? yang:gauge32
| | +--ro delay-variation-percentile | | +--ro near-end-delay-variation? yang:gauge32
| | +--ro rtt-delay-variation? yang:gauge32 | | +--ro far-end-delay-variation? yang:gauge32
| | +--ro near-end-delay-variation? yang:gauge32 | +--ro high-percentile
| | +--ro far-end-delay-variation? yang:gauge32 | | +--ro delay-percentile
| +--ro high-percentile | | | +--ro rtt-delay? yang:gauge64
| | +--ro delay-percentile | | | +--ro near-end-delay? yang:gauge64
| | | +--ro rtt-delay? yang:gauge64 | | | +--ro far-end-delay? yang:gauge64
| | | +--ro near-end-delay? yang:gauge64 | | +--ro delay-variation-percentile
| | | +--ro far-end-delay? yang:gauge64 | | +--ro rtt-delay-variation? yang:gauge32
| | +--ro delay-variation-percentile | | +--ro near-end-delay-variation? yang:gauge32
| | +--ro rtt-delay-variation? yang:gauge32 | | +--ro far-end-delay-variation? yang:gauge32
| | +--ro near-end-delay-variation? yang:gauge32 | +--ro two-way-loss
| | +--ro far-end-delay-variation? yang:gauge32 | | +--ro loss-count? int32
| +--ro two-way-loss | | +--ro loss-ratio? percentage
| | +--ro loss-count? int32 | | +--ro loss-burst-max? int32
| | +--ro loss-ratio? percentage | | +--ro loss-burst-min? int32
| | +--ro loss-burst-max? int32 | | +--ro loss-burst-count? int32
| | +--ro loss-burst-min? int32 | +--ro one-way-loss-far-end
| | +--ro loss-burst-count? int32 | | +--ro loss-count? int32
| +--ro one-way-loss-far-end | | +--ro loss-ratio? percentage
| | +--ro loss-count? int32 | | +--ro loss-burst-max? int32
| | +--ro loss-ratio? percentage | | +--ro loss-burst-min? int32
| | +--ro loss-burst-max? int32 | | +--ro loss-burst-count? int32
| | +--ro loss-burst-min? int32 | +--ro one-way-loss-near-end
| | +--ro loss-burst-count? int32 | | +--ro loss-count? int32
| +--ro one-way-loss-near-end | | +--ro loss-ratio? percentage
| | +--ro loss-count? int32 | | +--ro loss-burst-max? int32
| | +--ro loss-ratio? percentage | | +--ro loss-burst-min? int32
| | +--ro loss-burst-max? int32 | | +--ro loss-burst-count? int32
| | +--ro loss-burst-min? int32 | +--ro sender-ip inet:ip-address
| | +--ro loss-burst-count? int32 | +--ro session-sender-udp-port inet:port-number
| +--ro sender-ip inet:ip-address | +--ro session-reflector-ip inet:ip-address
| +--ro sender-udp-port inet:port-number | +--ro session-reflector-udp-port? inet:port-number
| +--ro reflector-ip inet:ip-address | +--ro sent-packets? uint32
| +--ro reflector-udp-port? inet:port-number | +--ro rcv-packets? uint32
| +--ro sent-packets? uint32 | +--ro sent-packets-error? uint32
| +--ro rcv-packets? uint32 | +--ro rcv-packets-error? uint32
| +--ro sent-packets-error? uint32 | +--ro last-sent-seq? uint32
| +--ro rcv-packets-error? uint32 | +--ro last-rcv-seq? uint32
| +--ro last-sent-seq? uint32 +--ro stamp-session-refl-state {session-reflector}?
| +--ro last-rcv-seq? uint32 +--ro reflector-light-admin-status? boolean
+--ro stamp-session-refl-state {session-reflector}? +--ro test-session-state* [stamp-session-id]
+--ro reflector-light-admin-status? boolean +--ro stamp-session-id uint32
+--ro test-session-state* [session-id] +--ro reflector-timestamp-format? timestamp-format
+--ro session-id uint32 +--ro sender-ip inet:ip-address
+--ro reflector-timestamp-format? timestamp-format +--ro session-sender-udp-port inet:port-number
+--ro sender-ip inet:ip-address +--ro session-reflector-ip inet:ip-address
+--ro sender-udp-port inet:port-number +--ro session-reflector-udp-port? inet:port-number
+--ro reflector-ip inet:ip-address +--ro sent-packets? uint32
+--ro reflector-udp-port? inet:port-number +--ro rcv-packets? uint32
+--ro sent-packets? uint32 +--ro sent-packets-error? uint32
+--ro rcv-packets? uint32 +--ro rcv-packets-error? uint32
+--ro sent-packets-error? uint32 +--ro last-sent-seq? uint32
+--ro rcv-packets-error? uint32 +--ro last-rcv-seq? uint32
+--ro last-sent-seq? uint32
+--ro last-rcv-seq? uint32
Figure 3: STAMP State Tree Diagram Figure 3: STAMP State Tree Diagram
rpcs: rpcs:
+---x stamp-sender-start +---x stamp-sender-start
| +---w input | +---w input
| +---w session-id uint32 | +---w stamp-session-id uint32
+---x stamp-sender-stop +---x stamp-sender-stop
+---w input +---w input
+---w session-id uint32 +---w stamp-stamp-session-id uint32
Figure 4: STAMP RPC Tree Diagram Figure 4: STAMP RPC Tree Diagram
3.2. YANG Module 3.2. YANG Module
<CODE BEGINS> file "ietf-stamp@2020-10-07.yang" <CODE BEGINS> file "ietf-stamp@2021-07-10.yang"
module ietf-stamp { module ietf-stamp {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-stamp"; namespace "urn:ietf:params:xml:ns:yang:ietf-stamp";
//namespace need to be assigned by IANA //namespace need to be assigned by IANA
prefix "ietf-stamp"; prefix "ietf-stamp";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
reference "RFC 6991: Common YANG Types."; reference "RFC 6991: Common YANG Types.";
} }
skipping to change at page 11, line 30 skipping to change at page 11, line 27
description description
"This YANG module specifies a vendor-independent model "This YANG module specifies a vendor-independent model
for the Simple Two-way Active Measurement Protocol (STAMP). for the Simple Two-way Active Measurement Protocol (STAMP).
The data model covers two STAMP logical entities - The data model covers two STAMP logical entities -
Session-Sender and Session-Reflector; characteristics Session-Sender and Session-Reflector; characteristics
of the STAMP test session, as well as measured and of the STAMP test session, as well as measured and
calculated performance metrics. calculated performance metrics.
Copyright (c) 2020 IETF Trust and the persons identified as Copyright (c) 2021 IETF Trust and the persons identified as
the document authors. All rights reserved. the document authors. 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 the license terms contained in, the Simplified BSD to the license terms contained in, the Simplified BSD
License set forth in Section 4.c of the IETF Trust's Legal License set forth in Section 4.c of the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://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 XXXX; see
the RFC itself for full legal notices."; the RFC itself for full legal notices.";
revision "2020-10-07" { revision "2021-07-10" {
description description
"Initial Revision. Base STAMP specification is covered"; "Initial Revision. Base STAMP specification is covered";
reference reference
"RFC XXXX: STAMP YANG Data Model."; "RFC XXXX: STAMP YANG Data Model.";
} }
/* /*
* Typedefs * Typedefs
*/ */
typedef session-reflector-mode { typedef session-reflector-mode {
type enumeration { type enumeration {
enum stateful { enum stateful {
description description
"When the Session-Reflector is stateful, "When the Session-Reflector is stateful,
i.e. is aware of STAMP-Test session state."; i.e. is aware of STAMP-Test session state.";
} }
enum stateless { enum stateless {
description description
"When the Session-Reflector is stateless, "When the Session-Reflector is stateless,
skipping to change at page 12, line 20 skipping to change at page 12, line 16
i.e. is aware of STAMP-Test session state."; i.e. is aware of STAMP-Test session state.";
} }
enum stateless { enum stateless {
description description
"When the Session-Reflector is stateless, "When the Session-Reflector is stateless,
i.e. is not aware of the state of i.e. is not aware of the state of
STAMP-Test session."; STAMP-Test session.";
} }
} }
description "State of the Session-Reflector"; description "State of the Session-Reflector";
reference
"RFC 8762 Simple Two-way Active
Measurement Protocol (STAMP) Section 4.";
} }
typedef session-dscp-mode { typedef session-dscp-mode {
type enumeration { type enumeration {
enum copy-received-value { enum copy-received-value {
description description
"Use DSCP value copied from received "Use DSCP value copied from received
STAMP test packet of the test session."; STAMP test packet of the test session.";
} }
enum use-configured-value { enum use-configured-value {
skipping to change at page 13, line 5 skipping to change at page 13, line 5
} }
enum ptp-format { enum ptp-format {
description description
"PTPv2 truncated format of a timestamp"; "PTPv2 truncated format of a timestamp";
} }
} }
description description
"Timestamp format used by Session-Sender "Timestamp format used by Session-Sender
or Session-Reflector."; or Session-Reflector.";
reference
"RFC 8762 Simple Two-way Active
Measurement Protocol (STAMP) Section 4.2.1.";
} }
typedef percentage { typedef percentage {
type decimal64 { type decimal64 {
fraction-digits 5; fraction-digits 5;
} }
description "Percentage"; description "Percentage";
} }
typedef percentile { typedef percentile {
skipping to change at page 13, line 32 skipping to change at page 13, line 35
observations fall."; observations fall.";
} }
/* /*
* Feature definitions. * Feature definitions.
*/ */
feature session-sender { feature session-sender {
description description
"This feature relates to the device functions as the "This feature relates to the device functions as the
STAMP Session-Sender"; STAMP Session-Sender";
reference
"RFC 8762 Simple Two-way Active
Measurement Protocol (STAMP) Section 4.2.";
} }
feature session-reflector { feature session-reflector {
description description
"This feature relates to the device functions as the "This feature relates to the device functions as the
STAMP Session-Reflector"; STAMP Session-Reflector";
reference
"RFC 8762 Simple Two-way Active
Measurement Protocol (STAMP) Section 4.3.";
} }
feature stamp-security { feature stamp-security {
description "Secure STAMP supported"; description "Secure STAMP supported";
reference
"RFC 8762 Simple Two-way Active
Measurement Protocol (STAMP) Section 4.4.";
} }
/* /*
* Reusable node groups * Reusable node groups
*/ */
grouping maintenance-statistics { grouping maintenance-statistics {
description "Maintenance statistics grouping"; description "Maintenance statistics grouping";
leaf sent-packets { leaf sent-packets {
type uint32; type uint32;
skipping to change at page 14, line 33 skipping to change at page 14, line 45
type uint32; type uint32;
description "Last received sequence number"; description "Last received sequence number";
} }
} }
grouping test-session-statistics { grouping test-session-statistics {
description description
"Performance metrics calculated for "Performance metrics calculated for
a STAMP test session."; a STAMP test session.";
leaf packet-padding-size {
type uint32;
description
"Size of the Packet Padding. Suggested to run
Path MTU Discovery to avoid packet fragmentation
in IPv4 and packet blackholing in IPv6";
}
leaf interval { leaf interval {
type uint32; type uint32;
units microseconds; units microseconds;
description description
"Time interval between transmission of two "Time interval between transmission of two
consecutive packets in the test session"; consecutive packets in the test session";
} }
leaf duplicate-packets { leaf duplicate-packets {
type uint32; type uint32;
description "Duplicate packets"; description "Duplicate packets";
} }
leaf reordered-packets { leaf reordered-packets {
type uint32; type uint32;
description "Reordered packets"; description "Reordered packets";
} }
leaf sender-timestamp-format { leaf sender-timestamp-format {
type timestamp-format; type timestamp-format;
description "Sender Timestamp format"; description "Sender Timestamp format";
skipping to change at page 15, line 26 skipping to change at page 15, line 28
leaf reflector-timestamp-format { leaf reflector-timestamp-format {
type timestamp-format; type timestamp-format;
description "Reflector Timestamp format"; description "Reflector Timestamp format";
} }
leaf dscp { leaf dscp {
type inet:dscp; type inet:dscp;
description description
"The DSCP value that was placed in the header of "The DSCP value that was placed in the header of
STAMP UDP test packets by the Session-Sender."; STAMP UDP test packets by the Session-Sender.";
} }
container two-way-delay { container two-way-delay {
description description
"two way delay result of the test session"; "two way delay result of the test session";
uses delay-statistics; uses delay-statistics;
} }
container one-way-delay-far-end { container one-way-delay-far-end {
description description
"one way delay far-end of the test session"; "one way delay far-end of the test session";
uses delay-statistics; uses delay-statistics;
} }
container one-way-delay-near-end { container one-way-delay-near-end {
description description
"one way delay near-end of the test session"; "one way delay near-end of the test session";
uses delay-statistics; uses delay-statistics;
} }
container low-percentile { container low-percentile {
when "/stamp/stamp-session-sender/" when "/stamp/stamp-session-sender/"
+"test-session[session-id]/" +"sender-test-session[stamp-session-id]/"
+"first-percentile != '0.00'" { +"first-percentile != '0.00'" {
description
"Only valid if the
the first-percentile is not NULL";
}
description description
"Low percentile report"; "Only valid if the
uses time-percentile-report; the first-percentile is not NULL";
} }
description
"Low percentile report";
uses time-percentile-report;
}
container mid-percentile { container mid-percentile {
when "/stamp/stamp-session-sender/" when "/stamp/stamp-session-sender/"
+"test-session[session-id]/" +"sender-test-session[stamp-session-id]/"
+"second-percentile != '0.00'" { +"second-percentile != '0.00'" {
description
"Only valid if the
the first-percentile is not NULL";
}
description description
"Mid percentile report"; "Only valid if the
uses time-percentile-report; the first-percentile is not NULL";
} }
description
"Mid percentile report";
uses time-percentile-report;
}
container high-percentile { container high-percentile {
when "/stamp/stamp-session-sender/" when "/stamp/stamp-session-sender/"
+"test-session[session-id]/" +"sender-test-session[stamp-session-id]/"
+"third-percentile != '0.00'" { +"third-percentile != '0.00'" {
description description
"Only valid if the "Only valid if the
the first-percentile is not NULL"; the first-percentile is not NULL";
} }
description description
"High percentile report"; "High percentile report";
uses time-percentile-report; uses time-percentile-report;
} }
container two-way-loss { container two-way-loss {
description description
"two way loss count and ratio result of "Two way loss count and ratio result of
the test session"; the test session";
uses packet-loss-statistics; uses packet-loss-statistics;
} }
container one-way-loss-far-end { container one-way-loss-far-end {
when "/stamp/stamp-session-sender/" when "/stamp/stamp-session-sender/"
+"test-session[session-id]/" +"sender-test-session[stamp-session-id]/"
+"test-session-reflector-mode = 'stateful'" { +"test-session-reflector-mode = 'stateful'" {
description description
"One-way statistic is only valid if the "One-way statistic is only valid if the
session-reflector is in stateful mode."; session-reflector is in stateful mode.";
} }
description description
"one way loss count and ratio far-end of "One way loss count and ratio far-end of
the test session"; the test session";
uses packet-loss-statistics; uses packet-loss-statistics;
} }
container one-way-loss-near-end { container one-way-loss-near-end {
when "/stamp/stamp-session-sender/" when "/stamp/stamp-session-sender/"
+"test-session[session-id]/" +"sender-test-session[stamp-session-id]/"
+"test-session-reflector-mode = 'stateful'" { +"test-session-reflector-mode = 'stateful'" {
description description
"One-way statistic is only valid if the "One-way statistic is only valid if the
session-reflector is in stateful mode."; session-reflector is in stateful mode.";
} }
description description
"one way loss count and ratio near-end of "One way loss count and ratio near-end of
the test session"; the test session";
uses packet-loss-statistics; uses packet-loss-statistics;
} }
uses session-parameters; uses session-parameters;
uses maintenance-statistics; uses maintenance-statistics;
} }
grouping stamp-session-percentile { grouping stamp-session-percentile {
description "Percentile grouping"; description "Percentile grouping";
leaf first-percentile { leaf first-percentile {
type percentile; type percentile;
default 95.00; default 95.00;
description description
"First percentile to report"; "First percentile to report";
} }
skipping to change at page 18, line 33 skipping to change at page 18, line 36
} }
container delay-variation { container delay-variation {
description description
"Packets transmitted delay variation"; "Packets transmitted delay variation";
leaf min { leaf min {
type yang:gauge32; type yang:gauge32;
units nanoseconds; units nanoseconds;
description description
"Min of Packets transmitted "Min of Packets transmitted
delay variation"; delay variation";
} }
leaf max { leaf max {
type yang:gauge32; type yang:gauge32;
units nanoseconds; units nanoseconds;
description description
"Max of Packets transmitted "Max of Packets transmitted
delay variation"; delay variation";
} }
leaf avg { leaf avg {
type yang:gauge32; type yang:gauge32;
units nanoseconds; units nanoseconds;
description description
"Avg of Packets transmitted "Avg of Packets transmitted
delay variation"; delay variation";
} }
} }
} }
grouping time-percentile-report { grouping time-percentile-report {
description "Delay percentile report grouping"; description "Delay percentile report grouping";
container delay-percentile { container delay-percentile {
description description
"Report round-trip, near- and far-end delay"; "Report round-trip, near- and far-end delay";
leaf rtt-delay { leaf rtt-delay {
type yang:gauge64; type yang:gauge64;
units nanoseconds; units nanoseconds;
description description
"Percentile of round-trip delay"; "Percentile of round-trip delay";
skipping to change at page 19, line 49 skipping to change at page 20, line 4
type yang:gauge32; type yang:gauge32;
units nanoseconds; units nanoseconds;
description description
"Percentile of near-end delay variation"; "Percentile of near-end delay variation";
} }
leaf far-end-delay-variation { leaf far-end-delay-variation {
type yang:gauge32; type yang:gauge32;
units nanoseconds; units nanoseconds;
description description
"Percentile of far-end delay-variation"; "Percentile of far-end delay-variation";
} }
} }
} }
grouping packet-loss-statistics { grouping packet-loss-statistics {
description description
"Grouping for Packet Loss statistics"; "Grouping for Packet Loss statistics";
leaf loss-count { leaf loss-count {
type int32; type int32;
description description
"Number of lost packets "Number of lost packets
during the test interval."; during the test interval.";
} }
leaf loss-ratio { leaf loss-ratio {
type percentage; type percentage;
description description
"Ratio of packets lost to packets "Ratio of packets lost to packets
sent during the test interval."; sent during the test interval.";
} }
leaf loss-burst-max { leaf loss-burst-max {
type int32; type int32;
description description
"Maximum number of consecutively "Maximum number of consecutively
lost packets during the test interval."; lost packets during the test interval.";
} }
leaf loss-burst-min { leaf loss-burst-min {
type int32; type int32;
description description
"Minimum number of consecutively "Minimum number of consecutively
lost packets during the test interval."; lost packets during the test interval.";
} }
leaf loss-burst-count { leaf loss-burst-count {
type int32; type int32;
description description
"Number of occasions with packet "Number of occasions with packet
loss during the test interval."; loss during the test interval.";
} }
} }
grouping session-parameters { grouping session-parameters {
description description
"Parameters Session-Sender"; "Parameters Session-Sender";
leaf sender-ip { leaf sender-ip {
type inet:ip-address; type inet:ip-address;
mandatory true; mandatory true;
description "Sender IP address"; description "Sender IP address";
} }
leaf sender-udp-port { leaf session-sender-udp-port {
type inet:port-number { type inet:port-number {
range "49152..65535"; range "49152..65535";
} }
mandatory true; mandatory true;
description "Sender UDP port number"; description "Sender UDP port number";
reference
"RFC 8762 Simple Two-Way Active
Measurement Protocol Section 4.1.";
} }
leaf reflector-ip { leaf stamp-session-id {
type uint32;
description
"A STAMP test session identifier
assigned by the Session-Sender.";
reference
"RFC 8972 Simple Two-Way Active
Measurement Protocol Optional
Extensions Section 3.";
}
leaf session-reflector-ip {
type inet:ip-address; type inet:ip-address;
mandatory true; mandatory true;
description "Reflector IP address"; description "Reflector IP address";
} }
leaf reflector-udp-port { leaf session-reflector-udp-port {
type inet:port-number{ type inet:port-number{
range "862 | 1024..49151 | 49152..65535"; range "862 | 1024..49151 | 49152..65535";
} }
default 862; default 862;
description "Reflector UDP port number"; description
"Reflector UDP port number";
reference
"RFC 8762 Simple Two-Way Active
Measurement Protocol Section 4.1.";
} }
} }
grouping session-security { grouping session-security {
description description
"Grouping for STAMP security and related parameters"; "Grouping for STAMP security and related parameters";
container security { container security {
if-feature stamp-security; if-feature stamp-security;
presence "Enables secure STAMP"; presence "Enables secure STAMP";
description description
skipping to change at page 21, line 31 skipping to change at page 22, line 4
description description
"Grouping for STAMP security and related parameters"; "Grouping for STAMP security and related parameters";
container security { container security {
if-feature stamp-security; if-feature stamp-security;
presence "Enables secure STAMP"; presence "Enables secure STAMP";
description description
"Parameters for STAMP authentication"; "Parameters for STAMP authentication";
leaf key-chain { leaf key-chain {
type kc:key-chain-ref; type kc:key-chain-ref;
description "Name of key-chain"; description "Name of key-chain";
} }
} }
reference
"RFC 8762 Simple Two-Way Active
Measurement Protocol Section 4.4.";
} }
/* /*
* Configuration Data * Configuration Data
*/ */
container stamp { container stamp {
description description
"Top level container for STAMP configuration"; "Top level container for STAMP configuration";
container stamp-session-sender { container stamp-session-sender {
if-feature session-sender; if-feature session-sender;
description "STAMP Session-Sender container"; description "STAMP Session-Sender container";
leaf sender-enable { leaf sender-enable {
type boolean; type boolean;
default "true"; default "true";
description description
"Whether this network element is enabled to "Whether this network element is enabled to
act as STAMP Session-Sender"; act as STAMP Session-Sender";
reference
"RFC 8762 Simple Two-Way Active
Measurement Protocol Section 4.2.";
} }
list test-session { list sender-test-session {
key "session-id"; key "stamp-session-id";
unique "sender-ip sender-udp-port reflector-ip" unique "stamp-session-id";
+" reflector-udp-port dscp-value";
description description
"This structure is a container of test session "This structure is a container of test session
managed objects"; managed objects";
leaf session-id {
type uint32;
description "Session ID";
}
leaf test-session-enable { leaf test-session-enable {
type boolean; type boolean;
default "true"; default "true";
description description
"Whether this STAMP Test session is enabled"; "Whether this STAMP Test session is enabled";
} }
leaf number-of-packets { leaf number-of-packets {
type union { type union {
type uint32 { type uint32 {
skipping to change at page 22, line 51 skipping to change at page 23, line 23
be run *forever*."; be run *forever*.";
} }
} }
} }
default 10; default 10;
description description
"This value determines if the STAMP-Test session is "This value determines if the STAMP-Test session is
bound by number of test packets or not."; bound by number of test packets or not.";
} }
leaf packet-padding-size {
type uint32;
default 30;
description
"Size of the Packet Padding. Suggested to run
Path MTU Discovery to avoid packet fragmentation in
IPv4 and packet blackholing in IPv6";
}
leaf interval { leaf interval {
type uint32; type uint32;
units microseconds; units microseconds;
description description
"Time interval between transmission of two "Time interval between transmission of two
consecutive packets in the test session in consecutive packets in the test session in
microseconds"; microseconds";
} }
leaf session-timeout { leaf session-timeout {
skipping to change at page 25, line 46 skipping to change at page 26, line 11
} }
leaf reflector-mode-state { leaf reflector-mode-state {
type session-reflector-mode; type session-reflector-mode;
default stateless; default stateless;
description description
"The state of the mode of the STAMP "The state of the mode of the STAMP
Session-Reflector"; Session-Reflector";
} }
list test-session { list reflector-test-session {
key "session-id"; key "session-index";
unique "sender-ip sender-udp-port reflector-ip" unique "sender-ip stamp-session-id";
+" reflector-udp-port";
description description
"This structure is a container of test session "This structure is a container of test session
managed objects"; managed objects";
leaf session-id { leaf session-index {
type uint32; type uint32;
description "Session ID"; description "Session index";
}
leaf stamp-session-id {
type union {
type uint32;
type enumeration {
enum any {
description
"Indicates that the Session-Reflector
accepts STAMP test packets from
a Session-Sender with any SSID
value";
reference
"RFC 8972 Simple Two-Way Active
Measurement Protocol Optional
Extensions Section 3.";
}
}
} }
leaf dscp-handling-mode { leaf dscp-handling-mode {
type session-dscp-mode; type session-dscp-mode;
default copy-received-value; default copy-received-value;
description description
"Session-Reflector handling of DSCP: "Session-Reflector handling of DSCP:
- use value copied from received STAMP-Test packet; - use value copied from received STAMP-Test packet;
- use value explicitly configured"; - use value explicitly configured";
} }
skipping to change at page 27, line 46 skipping to change at page 28, line 27
"This value determines whether specific "This value determines whether specific
IPv4/IPv6 address of the Session-Reflector IPv4/IPv6 address of the Session-Reflector
or the wildcard, i.e. any address"; or the wildcard, i.e. any address";
} }
leaf reflector-udp-port { leaf reflector-udp-port {
type inet:port-number{ type inet:port-number{
range "862 | 1024..49151 | 49152..65535"; range "862 | 1024..49151 | 49152..65535";
} }
default 862; default 862;
description "Reflector UDP port number"; description
"Reflector UDP port number";
reference
"RFC 8762 Simple Two-Way Active
Measurement Protocol Section 4.1.";
} }
leaf reflector-timestamp-format { leaf reflector-timestamp-format {
type timestamp-format; type timestamp-format;
default ntp-format; default ntp-format;
description "Reflector Timestamp format"; description "Reflector Timestamp format";
} }
uses session-security; uses session-security;
} }
} }
} }
/* /*
* Operational state data nodes * Operational state data nodes
*/ */
container stamp-state { container stamp-state {
skipping to change at page 28, line 24 skipping to change at page 29, line 10
container stamp-state { container stamp-state {
config false; config false;
description description
"Top level container for STAMP state data"; "Top level container for STAMP state data";
container stamp-session-sender-state { container stamp-session-sender-state {
if-feature session-sender; if-feature session-sender;
description description
"Session-Sender container for state data"; "Session-Sender container for state data";
list test-session-state{ list test-session-state{
key "session-id"; key "session-index";
description description
"This structure is a container of test session "This structure is a container of test session
managed objects"; managed objects";
leaf session-id { leaf session-index {
type uint32; type uint32;
description "Session ID"; description "Session index";
} }
leaf sender-session-state { leaf sender-session-state {
type enumeration { type enumeration {
enum active { enum active {
description "Test session is active"; description "Test session is active";
} }
enum ready { enum ready {
description "Test session is idle"; description "Test session is idle";
} }
skipping to change at page 29, line 15 skipping to change at page 29, line 50
mandatory true; mandatory true;
description description
"The time that the current Measurement Interval started"; "The time that the current Measurement Interval started";
} }
uses test-session-statistics; uses test-session-statistics;
} }
list history-stats { list history-stats {
key session-id; key session-index;
description description
"This container contains the results for the history "This container contains the results for the history
Measurement Interval in a Measurement session "; Measurement Interval in a Measurement session ";
leaf session-id { leaf session-index {
type uint32; type uint32;
description description
"The identifier for the Measurement Interval "The identifier for the Measurement Interval
within this session"; within this session";
} }
leaf end-time { leaf end-time {
type yang:date-and-time; type yang:date-and-time;
mandatory true; mandatory true;
description description
skipping to change at page 29, line 51 skipping to change at page 30, line 37
"STAMP Session-Reflector container for "STAMP Session-Reflector container for
state data"; state data";
leaf reflector-light-admin-status { leaf reflector-light-admin-status {
type boolean; type boolean;
description description
"Whether this network element is enabled to "Whether this network element is enabled to
act as STAMP Session-Reflector"; act as STAMP Session-Reflector";
} }
list test-session-state { list test-session-state {
key "session-id"; key "session-index";
description description
"This structure is a container of test session "This structure is a container of test session
managed objects"; managed objects";
leaf session-id { leaf session-index {
type uint32; type uint32;
description "Session ID"; description "Session index";
} }
leaf reflector-timestamp-format { leaf reflector-timestamp-format {
type timestamp-format; type timestamp-format;
description "Reflector Timestamp format"; description "Reflector Timestamp format";
} }
uses session-parameters; uses session-parameters;
uses maintenance-statistics; uses maintenance-statistics;
} }
} }
} }
rpc stamp-sender-start { rpc stamp-sender-start {
description description
"start the configured sender session"; "start the configured sender session";
input { input {
leaf session-id { leaf stamp-session-id {
type uint32; type uint32;
mandatory true; mandatory true;
description description
"The STAMP session to be started"; "The STAMP session to be started";
} }
} }
} }
rpc stamp-sender-stop { rpc stamp-sender-stop {
description description
"stop the configured sender session"; "stop the configured sender session";
input { input {
leaf session-id { leaf stamp-session-id {
type uint32; type uint32;
mandatory true; mandatory true;
description description
"The session to be stopped"; "The session to be stopped";
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
skipping to change at page 33, line 14 skipping to change at page 33, line 46
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
and A. Bierman, Ed., "Network Configuration Protocol and A. Bierman, Ed., "Network Configuration Protocol
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
<https://www.rfc-editor.org/info/rfc6241>. <https://www.rfc-editor.org/info/rfc6241>.
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
<https://www.rfc-editor.org/info/rfc6242>. <https://www.rfc-editor.org/info/rfc6242>.
[RFC7750] Hedin, J., Mirsky, G., and S. Baillargeon, "Differentiated
Service Code Point and Explicit Congestion Notification
Monitoring in the Two-Way Active Measurement Protocol
(TWAMP)", RFC 7750, DOI 10.17487/RFC7750, February 2016,
<https://www.rfc-editor.org/info/rfc7750>.
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, DOI 10.17487/RFC7950, August 2016, RFC 7950, DOI 10.17487/RFC7950, August 2016,
<https://www.rfc-editor.org/info/rfc7950>. <https://www.rfc-editor.org/info/rfc7950>.
[RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
<https://www.rfc-editor.org/info/rfc8040>. <https://www.rfc-editor.org/info/rfc8040>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
skipping to change at page 33, line 51 skipping to change at page 34, line 32
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
<https://www.rfc-editor.org/info/rfc8446>. <https://www.rfc-editor.org/info/rfc8446>.
[RFC8762] Mirsky, G., Jun, G., Nydell, H., and R. Foote, "Simple [RFC8762] Mirsky, G., Jun, G., Nydell, H., and R. Foote, "Simple
Two-Way Active Measurement Protocol", RFC 8762, Two-Way Active Measurement Protocol", RFC 8762,
DOI 10.17487/RFC8762, March 2020, DOI 10.17487/RFC8762, March 2020,
<https://www.rfc-editor.org/info/rfc8762>. <https://www.rfc-editor.org/info/rfc8762>.
[RFC8972] Mirsky, G., Min, X., Nydell, H., Foote, R., Masputra, A.,
and E. Ruffini, "Simple Two-Way Active Measurement
Protocol Optional Extensions", RFC 8972,
DOI 10.17487/RFC8972, January 2021,
<https://www.rfc-editor.org/info/rfc8972>.
7.2. Informative References 7.2. Informative References
[RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams",
BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
<https://www.rfc-editor.org/info/rfc8340>. <https://www.rfc-editor.org/info/rfc8340>.
Appendix A. Example of STAMP Session Configuration Appendix A. Example of STAMP Session Configuration
Figure 5 shows a configuration example of a STAMP-Sender. Figure 5 shows a configuration example of a STAMP-Sender.
<?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">
<stamp xmlns="urn:ietf:params:xml:ns:yang:ietf-stamp"> <stamp xmlns="urn:ietf:params:xml:ns:yang:ietf-stamp">
<stamp-session-sender> <stamp-session-sender>
<session-enable>enable</session-enable> <session-enable>enable</session-enable>
<session-id>10</session-id> <stamp-session-id>10</stamp-session-id>
<test-session-enable>enable<test-session-enable> <test-session-enable>enable<test-session-enable>
<number-of-packets>forever</number-of-packets> <number-of-packets>forever</number-of-packets>
<packet-padding-size/> <!-- use default 27 octets -->
<interval>10</interval> <!-- 10 microseconds --> <interval>10</interval> <!-- 10 microseconds -->
<measurement-interval/> <!-- use default 60 seconds --> <measurement-interval/> <!-- use default 60 seconds -->
<!-- use default 0 repetitions, <!-- use default 0 repetitions,
i.e. do not repeat this session --> i.e. do not repeat this session -->
<repeat/> <repeat/>
<dscp-value/> <!-- use deafult 0 (CS0) --> <dscp-value/> <!-- use deafult 0 (CS0) -->
<!-- use default 'stateless' --> <!-- use default 'stateless' -->
<test-session-reflector-mode/> <test-session-reflector-mode/>
<sender-ip></sender-ip> <sender-ip></sender-ip>
<sender-udp-port></sender-udp-port> <session-sender-udp-port></session-sender-udp-port>
<reflector-ip></reflector-ip> <session-reflector-ip></session-reflector-ip>
<reflector-udp-port/> <!-- use default 862 --> <session-reflector-udp-port/> <!-- use default 862 -->
<sender-timestamp-format/> <sender-timestamp-format/>
<!-- No authentication --> <!-- No authentication -->
<first-percentile/> <!-- use default 95 --> <first-percentile/> <!-- use default 95 -->
<second-percentile/> <!-- use default 99 --> <second-percentile/> <!-- use default 99 -->
<third-percentile/> <!-- use default 99.9 --> <third-percentile/> <!-- use default 99.9 -->
</stamp-session-sender> </stamp-session-sender>
</stamp> </stamp>
</data> </data>
Figure 5: XML instance of STAMP Session-Sender configuration Figure 5: XML instance of STAMP Session-Sender configuration
<?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">
<stamp xmlns="urn:ietf:params:xml:ns:yang:ietf-stamp"> <stamp xmlns="urn:ietf:params:xml:ns:yang:ietf-stamp">
<stamp-session-reflector> <stamp-session-reflector>
<session-enable>enable</session-enable> <session-enable>enable</session-enable>
<ref-wait/> <!-- use default 900 seconds --> <ref-wait/> <!-- use default 900 seconds -->
<!-- use default 'stateless' --> <!-- use default 'stateless' -->
<reflector-mode-state/> <reflector-mode-state/>
<session-id></session-id> <stamp-session-id/> <!-- use default 'any' -->
<!-- use default 'copy-received-value' --> <!-- use default 'copy-received-value' -->
<dscp-handling-mode/> <dscp-handling-mode/>
<!-- not used because of dscp-hanling-mode <!-- not used because of dscp-hanling-mode
being 'copy-received-value' --> being 'copy-received-value' -->
<dscp-value/> <dscp-value/>
<sender-ip/> <!-- use default 'any' --> <sender-ip/> <!-- use default 'any' -->
<sender-udp-port/> <!-- use default 'any' --> <sender-udp-port/> <!-- use default 'any' -->
<reflector-ip/> <!-- use default 'any' --> <reflector-ip/> <!-- use default 'any' -->
<reflector-udp-port/> <!-- use default 862 --> <reflector-udp-port/> <!-- use default 862 -->
<reflector-timestamp-format/> <reflector-timestamp-format/>
 End of changes. 85 change blocks. 
391 lines changed or deleted 426 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/