| < draft-ietf-ippm-twamp-yang-00.txt | draft-ietf-ippm-twamp-yang-01.txt > | |||
|---|---|---|---|---|
| IPPM WG R. Civil | IPPM WG R. Civil | |||
| Internet-Draft Ciena Corporation | Internet-Draft Ciena Corporation | |||
| Intended status: Standards Track A. Morton | Intended status: Standards Track A. Morton | |||
| Expires: September 22, 2016 AT&T Labs | Expires: January 9, 2017 AT&T Labs | |||
| L. Zheng | ||||
| Huawei Technologies | ||||
| R. Rahman | R. Rahman | |||
| M. Jethanandani | M. Jethanandani | |||
| Cisco Systems | Cisco Systems | |||
| K. Pentikousis, Ed. | K. Pentikousis, Ed. | |||
| EICT | Travelping | |||
| March 21, 2016 | L. Zheng | |||
| Huawei Technologies | ||||
| July 8, 2016 | ||||
| Two-Way Active Measurement Protocol (TWAMP) Data Model | Two-Way Active Measurement Protocol (TWAMP) Data Model | |||
| draft-ietf-ippm-twamp-yang-00 | draft-ietf-ippm-twamp-yang-01 | |||
| Abstract | Abstract | |||
| This document specifies a data model for client and server | This document specifies a data model for client and server | |||
| implementations of the Two-Way Active Measurement Protocol (TWAMP). | implementations of the Two-Way Active Measurement Protocol (TWAMP). | |||
| We define the TWAMP data model through Unified Modeling Language | We define the TWAMP data model through Unified Modeling Language | |||
| (UML) class diagrams and formally specify it using YANG. | (UML) class diagrams and formally specify it using YANG. | |||
| Status of This Memo | Status of This Memo | |||
| skipping to change at page 1, line 41 ¶ | skipping to change at page 1, line 41 ¶ | |||
| 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 http://datatracker.ietf.org/drafts/current/. | Drafts is at http://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 September 22, 2016. | This Internet-Draft will expire on January 9, 2017. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2016 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 | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 20 ¶ | skipping to change at page 2, line 20 ¶ | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.3. Document Organization . . . . . . . . . . . . . . . . . . 3 | 1.3. Document Organization . . . . . . . . . . . . . . . . . . 3 | |||
| 2. Scope, Model, and Applicability . . . . . . . . . . . . . . . 4 | 2. Scope, Model, and Applicability . . . . . . . . . . . . . . . 4 | |||
| 3. Data Model Overview . . . . . . . . . . . . . . . . . . . . . 5 | 3. Data Model Overview . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 3.1. Control-Client . . . . . . . . . . . . . . . . . . . . . 5 | 3.1. Control-Client . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3.2. Server . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3.2. Server . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.3. Session-Sender . . . . . . . . . . . . . . . . . . . . . 7 | 3.3. Session-Sender . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3.4. Session-Reflector . . . . . . . . . . . . . . . . . . . . 7 | 3.4. Session-Reflector . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4. Data Model Parameters . . . . . . . . . . . . . . . . . . . . 7 | 4. Data Model Parameters . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.1. Control-Client . . . . . . . . . . . . . . . . . . . . . 7 | 4.1. Control-Client . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 4.2. Server . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 4.2. Server . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 4.3. Session-Sender . . . . . . . . . . . . . . . . . . . . . 19 | 4.3. Session-Sender . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 4.4. Session-Reflector . . . . . . . . . . . . . . . . . . . . 22 | 4.4. Session-Reflector . . . . . . . . . . . . . . . . . . . . 13 | |||
| 5. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 26 | 5. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.1. YANG Tree Diagram . . . . . . . . . . . . . . . . . . . . 26 | 5.1. YANG Tree Diagram . . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 28 | 5.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 6. Data Model Examples . . . . . . . . . . . . . . . . . . . . . 44 | 6. Data Model Examples . . . . . . . . . . . . . . . . . . . . . 44 | |||
| 6.1. Control-Client . . . . . . . . . . . . . . . . . . . . . 44 | 6.1. Control-Client . . . . . . . . . . . . . . . . . . . . . 44 | |||
| 6.2. Server . . . . . . . . . . . . . . . . . . . . . . . . . 45 | 6.2. Server . . . . . . . . . . . . . . . . . . . . . . . . . 46 | |||
| 6.3. Session-Sender . . . . . . . . . . . . . . . . . . . . . 46 | 6.3. Session-Sender . . . . . . . . . . . . . . . . . . . . . 47 | |||
| 6.4. Session-Reflector . . . . . . . . . . . . . . . . . . . . 47 | 6.4. Session-Reflector . . . . . . . . . . . . . . . . . . . . 48 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 48 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 51 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 49 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 51 | |||
| 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 49 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 52 | |||
| 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 49 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 52 | |||
| 10.1. Normative References . . . . . . . . . . . . . . . . . . 49 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 52 | |||
| 10.2. Informative References . . . . . . . . . . . . . . . . . 50 | 10.2. Informative References . . . . . . . . . . . . . . . . . 53 | |||
| Appendix A. Detailed Data Model Examples . . . . . . . . . . . . 52 | Appendix A. Detailed Data Model Examples . . . . . . . . . . . . 54 | |||
| A.1. Control-Client . . . . . . . . . . . . . . . . . . . . . 52 | A.1. Control-Client . . . . . . . . . . . . . . . . . . . . . 54 | |||
| A.2. Server . . . . . . . . . . . . . . . . . . . . . . . . . 53 | A.2. Server . . . . . . . . . . . . . . . . . . . . . . . . . 57 | |||
| A.3. Session-Sender . . . . . . . . . . . . . . . . . . . . . 54 | A.3. Session-Sender . . . . . . . . . . . . . . . . . . . . . 58 | |||
| A.4. Session-Reflector . . . . . . . . . . . . . . . . . . . . 55 | A.4. Session-Reflector . . . . . . . . . . . . . . . . . . . . 59 | |||
| Appendix B. TWAMP Operational Commands . . . . . . . . . . . . . 57 | Appendix B. TWAMP Operational Commands . . . . . . . . . . . . . 62 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 57 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 62 | |||
| 1. Introduction | 1. Introduction | |||
| The Two-Way Active Measurement Protocol (TWAMP) [RFC5357] is used to | The Two-Way Active Measurement Protocol (TWAMP) [RFC5357] is used to | |||
| measure network performance parameters such as latency, bandwidth, | measure network performance parameters such as latency, bandwidth, | |||
| and packet loss by sending probe packets and measuring their | and packet loss by sending probe packets and measuring their | |||
| experience in the network. To date, TWAMP implementations do not | experience in the network. To date, TWAMP implementations do not | |||
| come with a standard management framework and, as such, configuration | come with a standard management framework and, as such, configuration | |||
| depends on the various proprietary mechanisms developed by the | depends on proprietary mechanisms developed by the corresponding | |||
| corresponding TWAMP vendor. This document addresses this gap by | TWAMP vendor. This document addresses this gap by formally | |||
| formally specifying the TWAMP data model using YANG. | specifying the TWAMP data model using YANG. | |||
| 1.1. Motivation | 1.1. Motivation | |||
| In current TWAMP deployments, the lack of a standardized data model | 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 as | network functions are placed according to orchestration algorithms as | |||
| discussed in [I-D.unify-nfvrg-challenges][I-D.unify-nfvrg-devops], | discussed in [I-D.unify-nfvrg-challenges][I-D.unify-nfvrg-devops], | |||
| proprietary mechanisms for managing TWAMP measurements pose severe | proprietary mechanisms for managing TWAMP measurements pose severe | |||
| limitations with respect to programmability. | limitations with respect to programmability. | |||
| Two major trends call for revisiting the standardization on TWAMP | Two major trends call for revisiting the standardization on TWAMP | |||
| management aspects. First, we expect that in the coming years large- | management aspects. First, we expect that in the coming years large- | |||
| skipping to change at page 4, line 17 ¶ | skipping to change at page 4, line 17 ¶ | |||
| 2. Scope, Model, and Applicability | 2. Scope, Model, and Applicability | |||
| The purpose of this document is the specification of a vendor- | The purpose of this document is the specification of a vendor- | |||
| independent data model for TWAMP implementations. | independent data model for TWAMP implementations. | |||
| Figure 1 illustrates a redrawn version of the TWAMP logical model | Figure 1 illustrates a redrawn version of the TWAMP logical model | |||
| found in Section 1.2 of [RFC5357]. The figure is annotated with | found in Section 1.2 of [RFC5357]. The figure is annotated with | |||
| pointers to the UML diagrams provided in this document and associated | pointers to the UML diagrams provided in this document and associated | |||
| with the data model of the four logical entities in a TWAMP | with the data model of the four logical entities in a TWAMP | |||
| deployment, namely the TWAMP Control-Client, Server, Session-Sender | deployment, namely the TWAMP Control-Client, Server, Session-Sender | |||
| and Session-Reflector. As per [RFC5357], unlabeled links in Figure 1 | and Session-Reflector. | |||
| are unspecified and may be proprietary protocols. | ||||
| As per [RFC5357], unlabeled links in Figure 1 are left unspecified | ||||
| and may be proprietary protocols. | ||||
| [Fig. 3] [Fig. 4] | [Fig. 3] [Fig. 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] | [Fig. 5] [Fig. 6] | |||
| Figure 1: Annotated TWAMP logical model | Figure 1: Annotated TWAMP logical model | |||
| As per [RFC5357], a TWAMP implementation may follow a simplified | As per [RFC5357], a TWAMP implementation may follow a simplified | |||
| logical model, in which the same node acts both as the Control-Client | logical model, in which the same node acts both as Control-Client and | |||
| and Session-Sender, while another node acts at the same time as the | Session-Sender, while another node acts at the same time as TWAMP | |||
| TWAMP Server and Session-Reflector. Figure 2 illustrates this | Server and Session-Reflector. Figure 2 illustrates this simplified | |||
| simplified logical model and indicates the interaction between the | logical model and indicates the interaction between the TWAMP | |||
| TWAMP configuration client and server using, for instance, NETCONF | configuration client and server using, for instance, NETCONF | |||
| [RFC6241] or RESTCONF [I-D.ietf-netconf-restconf]. Note, however, | [RFC6241] or RESTCONF [I-D.ietf-netconf-restconf]. | |||
| that the specific protocol used to communicate the TWAMP | ||||
| configuration parameters specified herein is outside the scope of | ||||
| this document. Appendix B considers TWAMP operational commands, | ||||
| which are also outside the scope of this document. | ||||
| o-------------------o o-------------------o | o-------------------o o-------------------o | |||
| | Config client | | Config client | | | Config client | | Config client | | |||
| o-------------------o o-------------------o | o-------------------o o-------------------o | |||
| || || | || || | |||
| NETCONF || RESTCONF NETCONF || RESTCONF | NETCONF || RESTCONF NETCONF || RESTCONF | |||
| || || | || || | |||
| o-------------------o o-------------------o | o-------------------o o-------------------o | |||
| | Config server | | Config server | | | Config server | | Config server | | |||
| | [Fig. 3, 5] | | [Fig. 4, 6] | | | [Fig. 3, 5] | | [Fig. 4, 6] | | |||
| +-------------------+ +-------------------+ | +-------------------+ +-------------------+ | |||
| | Control-Client | <-- TWAMP-Control --> | Server | | | Control-Client | <-- TWAMP-Control --> | Server | | |||
| | | | | | | | | | | |||
| | Session-Sender | <-- TWAMP-Test --> | Session-Reflector | | | Session-Sender | <-- TWAMP-Test --> | Session-Reflector | | |||
| +-------------------+ +-------------------+ | +-------------------+ +-------------------+ | |||
| Figure 2: Simplified TWAMP model and protocols | Figure 2: Simplified TWAMP model and protocols | |||
| We note that the data model defined in this document is orthogonal to | ||||
| the specific protocol used between the Config client and Config | ||||
| server to communicate the TWAMP configuration parameters. | ||||
| Operational actions such as how TWAMP-Test sessions are started and | ||||
| stopped, how perfmormance measurement results are retrieved, or how | ||||
| stored results are cleared, and so on, are not addressed by the | ||||
| configuration model defined in this docuemnt. As noted above, such | ||||
| operational actions are not part of the TWAMP specification [RFC5357] | ||||
| and hence are out of scope of this document. See also Appendix B. | ||||
| 3. Data Model Overview | 3. Data Model Overview | |||
| A TWAMP data model includes four categories of configuration items. | The TWAMP data model includes four categories of configuration items. | |||
| Global configuration items relate to parameters that are set on a per | Global configuration items relate to parameters that are set on a per | |||
| device level. For example, the administrative status of the device | device level. For example, the administrative status of the device | |||
| with respect to whether it allows TWAMP sessions and, if so, in what | with respect to whether it allows TWAMP sessions and, if so, in what | |||
| capacity (e.g. Control-Client, Server or both), are typical | capacity (e.g. Control-Client, Server or both), are typical | |||
| instances of global configuration items. A second category includes | instances of global configuration items. | |||
| attributes that can be configured on a per control connection basis, | ||||
| such as the Server IP address. A third category includes attributes | A second category includes attributes that can be configured on a per | |||
| related to per test session attributes, for instance setting | TWAMP-Control connection basis, such as the Server IP address. | |||
| different values in the Differentiated Services Code Point (DSCP) | ||||
| field. Finally, the data model could include attributes that relate | A third category includes attributes related to per TWAMP-Test | |||
| to the operational state of the TWAMP implementation. | session attributes, for instance setting different values in the | |||
| Differentiated Services Code Point (DSCP) field. | ||||
| Finally, the data model includes attributes that relate to the | ||||
| operational state of the TWAMP implementation. | ||||
| As we describe the TWAMP data model in the remaining sections of this | As we describe the TWAMP data model in the remaining sections of this | |||
| document, readers should keep in mind the functional entity grouping | document, readers should keep in mind the functional entity grouping | |||
| illustrated in Figure 1. | illustrated in Figure 1. | |||
| 3.1. Control-Client | 3.1. Control-Client | |||
| A TWAMP Control-Client has an administrative status field set at the | A TWAMP Control-Client has an administrative status field set at the | |||
| device level that indicates whether the node is enabled to function | device level that indicates whether the node is enabled to function | |||
| as such. | as such. | |||
| Each TWAMP Control-Client is associated with zero or more TWAMP | Each TWAMP Control-Client is associated with zero or more TWAMP- | |||
| control connections. The main configuration parameters of each | Control connections. The main configuration parameters of each | |||
| control connection are: | control connection are: | |||
| o A name which can be used to uniquely identify at the Control- | o A name which can be used to uniquely identify at the Control- | |||
| Client a particular control connection. This name is necessary | Client a particular control connection. This name is necessary | |||
| for programmability reasons because at the time of creation of a | for programmability reasons because at the time of creation of a | |||
| TWAMP control connection not all IP and TCP port number | TWAMP-Control connection not all IP and TCP port number | |||
| information needed to uniquely identify the connection is | information needed to uniquely identify the connection is | |||
| available. | available. | |||
| o The IP address of the interface the Control-Client will use for | o The IP address of the interface the Control-Client will use for | |||
| connections | connections. | |||
| o The IP address of the remote Server | o The IP address of the remote TWAMP Server. | |||
| o Authentication and Encryption attributes such as KeyID, Token and | o Authentication and Encryption attributes such as KeyID, Token and | |||
| the Client Initialization Vector (Client-IV) [RFC4656]. | the Client Initialization Vector (Client-IV); see also the last | |||
| paragraph of Section 6 in [RFC4656] and [RFC4086]. | ||||
| Each TWAMP control connection, in turn, is associated with zero or | Each TWAMP-Control connection, in turn, is associated with zero or | |||
| more test sessions. For each test session we note the following | more TWAMP-Test sessions. For each test session we note the | |||
| configuration items: | following configuration items: | |||
| o The test session name that uniquely identifies a particular test | o The test session name that uniquely identifies a particular test | |||
| session at the Control-Client and Session-Sender. Similarly to | session at the Control-Client and Session-Sender. Similarly to | |||
| the control connections above, this unique test session name is | the control connections above, this unique test session name is | |||
| needed because at the time of creation of a test session, for | needed because at the time of creation of a TWAMP-Test session, | |||
| example, the source UDP port number is not known to uniquely | for example, the source UDP port number is not known to uniquely | |||
| identify the test session. | identify the test session. | |||
| o The IP address and UDP port number of the Session-Sender of the | o The IP address and UDP port number of the Session-Sender on the | |||
| path under test by TWAMP | path under test by TWAMP. | |||
| o The IP address and UDP port number of the Session-Reflector of | o The IP address and UDP port number of the Session-Reflector on | |||
| said path | said path. | |||
| o Information pertaining to the test packet stream, such as the test | o Information pertaining to the test packet stream, such as the test | |||
| starting time or whether the test should be repeated. | starting time, which performance metric is to be used | |||
| [I-D.ietf-ippm-metric-registry], or whether the test should be | ||||
| repeated. | ||||
| 3.2. Server | 3.2. Server | |||
| Each TWAMP Server has an administrative status field set at the | 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. | TWAMP Server. | |||
| Each TWAMP Server is associated with zero or more control | 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}. Control connection configuration | |||
| items on a TWAMP Server are read-only. | items on a TWAMP Server are read-only. | |||
| 3.3. Session-Sender | 3.3. Session-Sender | |||
| There is one TWAMP Session-Sender instance for each test session that | There is one Session-Sender instance for each TWAMP-Test session that | |||
| is initiated from the sending device. Primary configuration fields | is initiated from the sending device. Primary configuration fields | |||
| include: | include: | |||
| o The test session name that MUST be identical with the | o The test session name that MUST be identical with the | |||
| corresponding test session name on the TWAMP Control-Client | corresponding test session name on the TWAMP Control-Client | |||
| (Section 3.1) | (Section 3.1) | |||
| o The control connection name, which along with the test session | o The control connection name, which along with the test session | |||
| name uniquely identify the TWAMP Session-Sender instance | name uniquely identify the TWAMP Session-Sender instance | |||
| o Information pertaining to the test packet stream, such as, for | o Information pertaining to the test packet stream, such as, for | |||
| example, the number of test packets and the packet distribution to | example, the number of test packets and the packet distribution to | |||
| be employed. | be employed; see also [RFC3432]. | |||
| 3.4. Session-Reflector | 3.4. Session-Reflector | |||
| Each TWAMP Session-Reflector is associated with zero or more test | Each Session-Reflector is associated with zero or more TWAMP-Test | |||
| sessions. For each test session, the REFWAIT parameter (Section 4.2 | sessions. For each test session, the REFWAIT parameter (Section 4.2 | |||
| of [RFC5357] can be configured. Read-only access to other data model | of [RFC5357] can be configured. | |||
| parameters, such as the Sender IP address is foreseen. Each test | ||||
| session can be uniquely identified by the 4-tuple mentioned in | Read-only access to other data model parameters, such as the Sender | |||
| Section 3.2. | IP address is foreseen. Each test session can be uniquely identified | |||
| by the 4-tuple mentioned in Section 3.2. | ||||
| 4. Data Model Parameters | 4. Data Model Parameters | |||
| This section defines the TWAMP data model using UML and describes all | This section defines the TWAMP data model using UML and introduces | |||
| associated parameters. | selected parameters associated with the four TWAMP logical entities. | |||
| The complete TWAMP data model specification is provided in the YANG | ||||
| module presented in Section 5.2. | ||||
| 4.1. Control-Client | 4.1. Control-Client | |||
| The twamp-client container (see Figure 3) holds items that are | The client container (see Figure 3) holds items that are related to | |||
| related to the configuration of the TWAMP Control-Client logical | the configuration of the TWAMP Control-Client logical entity (recall | |||
| entity. These are divided up into items that are associated with the | Figure 1). | |||
| configuration of the Control-Client as a whole (e.g. client-admin- | ||||
| state) and items that are associated with individual control | ||||
| connections initiated by the Control-Client entity (twamp-client- | ||||
| ctrl-connection). | ||||
| +--------------------+ | The client container includes an administrative configuration | |||
| | twamp-client | | parameter (client/admin-state) that indicates whether the device is | |||
| +--------------------+ 1..* +-----------------------+ | allowed to initiate TWAMP-Control connections. | |||
| | client-admin-state |<>----------------------| mode-preference-chain | | ||||
| | | +-----------------------+ | +-------------+ | |||
| | | 1..* +------------+ | priority | | | client | | |||
| | |<>-----| key-chain | | mode | | +-------------+ 1..* +-----------------------+ | |||
| +--------------------+ +------------+ +-----------------------+ | | admin-state |<>----------------------| mode-preference-chain | | |||
| ^ | key-id | | | | +-----------------------+ | |||
| V | secret-key | | | | 1..* +------------+ | priority | | |||
| | +------------+ | | |<>-----| key-chain | | mode | | |||
| | 0..* | +-------------+ +------------+ +-----------------------+ | |||
| +------------------------------+ | ^ | key-id | | |||
| | twamp-client-ctrl-connection | | V | secret-key | | |||
| +------------------------------+ | | +------------+ | |||
| | ctrl-connection-name | | | 0..* | |||
| | client-ip | | +------------------------+ | |||
| | server-ip | | | ctrl-connection | | |||
| | server-tcp-port | 0..* +-------------------------+ | +------------------------+ | |||
| | dscp |<>-------| twamp-session-request | | | name | | |||
| | key-id | +-------------------------+ | | client-ip | | |||
| | max-count | | test-session-name | | | server-ip | | |||
| | client-tcp-port {ro} | | sender-ip | | | server-tcp-port | 0..* +----------------------+ | |||
| | server-start-time {ro} | | sender-udp-port | | | control-packet-dscp |<>-------| test-session-request | | |||
| | ctrl-connection-state {ro} | | reflector-ip | | | key-id | +----------------------+ | |||
| | selected-mode {ro} | | reflector-udp-port | | | max-count | | name | | |||
| | token {ro} | | timeout | | | client-tcp-port {ro} | | sender-ip | | |||
| | client-iv {ro} | | padding-length | | | server-start-time {ro} | | sender-udp-port | | |||
| +------------------------------+ | dscp | | | state {ro} | | reflector-ip | | |||
| | start-time | | | selected-mode {ro} | | reflector-udp-port | | |||
| +-------------+ 1 | repeat | | | token {ro} | | timeout | | |||
| | pm-reg-list |------<>| repeat-interval | | | client-iv {ro} | | padding-length | | |||
| +-------------+ | test-session-state {ro} | | +------------------------+ | test-packet-dscp | | |||
| | pm-index | | sid {ro} | | | start-time | | |||
| +-------------+ +-------------------------+ | +-------------+ 1 | repeat | | |||
| | pm-reg-list |------<>| repeat-interval | | ||||
| +-------------+ | state {ro} | | ||||
| | pm-index | | sid {ro} | | ||||
| +-------------+ +----------------------+ | ||||
| Figure 3: TWAMP Control-Client UML class diagram | Figure 3: TWAMP Control-Client UML class diagram | |||
| The twamp-client container includes an administrative parameter | The client container holds a list (mode-preference-chain) which | |||
| (client-admin-state) that controls whether the device is allowed to | specifies the Mode values according to their preferred order of use | |||
| initiate TWAMP control sessions. | by the operator of this Control-Client, including the authentication | |||
| and encryption Modes. Specifically, mode-preference-chain lists each | ||||
| priority (expressed as a 16-bit unsigned integer, where zero is the | ||||
| highest priority and subsequent values monotonically increasing) with | ||||
| their corresponding mode (expressed as a 32-bit Hexadecimal value). | ||||
| The twamp-client container holds a list (mode-preference-chain) which | Depending on the Modes available in the Server Greeting, the Control- | |||
| specifies the preferred Mode values according to their preferred | Client MUST choose the highest priority Mode from the configured | |||
| order of use, including the authentication and encryption Modes. | mode-preference-chain list. | |||
| Specifically, mode-preference-chain lists each priority (expressed as | ||||
| a 16-bit unsigned integer, where zero is the highest priority and | Note that the list of preferred Modes may set bit position | |||
| subsequent values monotonically increasing) with their corresponding | combinations when necessary, such as when referring to the extended | |||
| mode (expressed as a 32-bit Hexadecimal value). Depending on the | TWAMP features in [RFC5618], [RFC5938], [RFC6038], and [RFC7717]. If | |||
| Modes available in the Server Greeting, the Control-Client MUST | ||||
| choose the highest priority Mode from the configured mode-preference- | ||||
| chain list. Note that the list of preferred Modes may set bit | ||||
| position combinations when necessary, such as when referring to the | ||||
| extended TWAMP features in [RFC5618], [RFC5938], and [RFC6038]. If | ||||
| the Control-Client cannot determine an acceptable Mode, it MUST | the Control-Client cannot determine an acceptable Mode, it MUST | |||
| respond with zero Mode bits set in the Set-up Response message, | respond with zero Mode bits set in the Set-up Response message, | |||
| indicating it will not continue with the control connection. | indicating it will not continue with the control connection. | |||
| In addition, the twamp-client container holds a list named key-chain | In addition, the client container holds a list named key-chain which | |||
| which relates KeyIDs with the respective secret keys. Both the | relates KeyIDs with the respective secret keys. Both the Server and | |||
| Server and the Control-Client use the same mappings from KeyIDs to | the Control-Client use the same mappings from KeyIDs to shared | |||
| shared secrets (key-id and secret-key in Figure 3, respectively). | secrets (key-id and secret-key in Figure 3, respectively). The | |||
| The Server, being prepared to conduct sessions with more than one | Server, being prepared to conduct sessions with more than one | |||
| Control-Client, uses KeyIDs to choose the appropriate secret-key; a | Control-Client, uses KeyIDs to choose the appropriate secret-key; a | |||
| Control-Client would typically have different secret keys for | Control-Client would typically have different secret keys for | |||
| different Servers. The secret-key is the shared secret, an octet | different Servers. The secret-key is the shared secret, an octet | |||
| string of arbitrary length whose interpretation as a text string is | string of arbitrary length whose interpretation as a text string is | |||
| unspecified. The key-id and secret-key encoding should follow | unspecified. The key-id and secret-key encoding should follow | |||
| Section 9.4 of [RFC6020]. The derived key length (dkLen in | Section 9.4 of [RFC6020]. The derived key length (dkLen in | |||
| [RFC2898]) MUST be 128-bits for the AES Session-key used for | [RFC2898]) MUST be 128-bits for the AES Session-key used for | |||
| encryption and a 256-bit HMAC-SHA1 Session-key used for | encryption and a 256-bit HMAC-SHA1 Session-key used for | |||
| authentication (see Section 6.10 of [RFC4656]). | authentication (see Section 6.10 of [RFC4656]). | |||
| Each twamp-client container also holds a list of twamp-client-ctrl- | Each client container also holds a list of ctrl-connections, where | |||
| connection, where each item in the list describes a TWAMP control | each item in the list describes a TWAMP control connection that will | |||
| connection that will be initiated by this Control-Client. There | be initiated by this Control-Client. There SHALL be one instance of | |||
| SHALL be one instance of twamp-client-ctrl-connection per TWAMP- | ctrl-connection per TWAMP-Control (TCP) connection that is to be | |||
| Control (TCP) connection that is to be initiated from this device. | initiated from this device. | |||
| The configuration items for twamp-client-ctrl-connection are: | ||||
| ctrl-connection-name | ||||
| A unique name used as a key to identify this individual TWAMP | ||||
| control connection on the Control-Client device. | ||||
| client-ip | ||||
| The IP address of the local Control-Client device, to be | ||||
| placed in the source IP address field of the IP header in | ||||
| TWAMP-Control (TCP) packets belonging to this control | ||||
| connection. If not configured, the device SHALL choose its | ||||
| own source IP address. | ||||
| server-ip | ||||
| The IP address belonging to the remote Server device, which | ||||
| the TWAMP-Control connection will be initiated to. This item | ||||
| is mandatory. | ||||
| server-tcp-port | ||||
| This parameter defines the TCP port number that is to be used | ||||
| by this outgoing TWAMP-Control connection. Typically, this | ||||
| is the well-known TWAMP port number (862) as per [RFC5357]. | ||||
| However, there are known realizations of TWAMP in the field | ||||
| that were implemented before this well-known port number was | ||||
| allocated. These early implementations allowed the port | ||||
| number to be configured. This parameter is therefore | ||||
| provided for backward compatibility reasons. The default | ||||
| value is 862. | ||||
| dscp The DSCP value to be placed in the TCP header of TWAMP- | ||||
| Control packets generated by this Control-Client. The | ||||
| default value is 0. | ||||
| key-id | ||||
| The key-id value that is selected for this TWAMP-Control | ||||
| connection. | ||||
| max-count | ||||
| 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. Therefore, TWAMP-compliant systems SHOULD have a | ||||
| configuration control to limit the maximum Count value. The | ||||
| default max-count value SHOULD be 32768. | ||||
| The following twamp-client-ctrl-connection parameters are read-only: | ||||
| client-tcp-port | ||||
| The source TCP port number used in the TWAMP-Control packets | ||||
| belonging to this control connection. | ||||
| server-start-time | ||||
| The Start-Time advertized by the Server in the Server-Start | ||||
| message ([RFC4656], Section 3.1). This is a timestamp | ||||
| representing the time when the current instantiation of the | ||||
| Server started operating. | ||||
| ctrl-connection-state | ||||
| The TWAMP-Control connection state can be either active or | ||||
| idle. | ||||
| selected-mode | ||||
| The TWAMP Mode that the Control-Client has chosen for this | ||||
| control connection as set in the Mode field of the Set-Up- | ||||
| Response message ([RFC4656], Section 3.1). | ||||
| token This parameter holds the 64 octets containing the | ||||
| concatenation of a 16-octet challenge, a 16-octet AES | ||||
| Session-key used for encryption, and a 32-octet HMAC-SHA1 | ||||
| Session-key used for authentication. AES Session-key and | ||||
| HMAC Session-key are generated randomly by the Control- | ||||
| Client. AES Session-key and HMAC Session-key MUST be | ||||
| generated with sufficient entropy not to reduce the security | ||||
| of the underlying cipher [RFC4086]. The token itself is | ||||
| encrypted using the AES (Advanced Encryption Standard) in | ||||
| Cipher Block Chaining (CBC). Encryption MUST be performed | ||||
| using an Initialization Vector (IV) of zero and a key derived | ||||
| from the shared secret associated with KeyID. Challenge is | ||||
| the same as transmitted by the Server (Section 4.2) in the | ||||
| clear; see also the last paragraph of Section 6 in [RFC4656]. | ||||
| client-iv | ||||
| The Control-Client Initialization Vector (Client-IV) is | ||||
| generated randomly by the Control-Client. Client-IV merely | ||||
| needs to be unique (i.e., it MUST never be repeated for | ||||
| different sessions using the same secret key; a simple way to | ||||
| achieve that without the use of cumbersome state is to | ||||
| generate the Client-IV values using a cryptographically | ||||
| secure pseudo-random number source. | ||||
| Each twamp-client-ctrl-connection holds a list of twamp-session- | Each ctrl-connection holds a list of test-session-request. test- | |||
| request. twamp-session-request holds information associated with the | session-request holds information associated with the Control-Client | |||
| Control-Client for this test session. This includes information that | for this test session. This includes information that is associated | |||
| is associated with the Request-TW-Session/Accept-Session message | with the Request-TW-Session/Accept-Session message exchange (see | |||
| exchange (see Section 3.5 of [RFC5357]). The Control-Client is also | Section 3.5 of [RFC5357]). | |||
| responsible for scheduling and results collection for TWAMP-Test | ||||
| sessions, so twamp-session-request will also hold information related | ||||
| these actions (e.g. pm-index, repeat-interval). | ||||
| There SHALL be one instance of twamp-session-request for each TWAMP- | There SHALL be one instance of test-session-request for each TWAMP- | |||
| Test session that is to be negotiated by this TWAMP-Control | Test session that is to be negotiated by this TWAMP-Control | |||
| connection via a Request-TW-Session/Accept-Session exchange. | connection via a Request-TW-Session/Accept-Session exchange. | |||
| The configuration items for twamp-session-request are: | The Control-Client is also responsible for scheduling and results | |||
| collection for TWAMP-Test sessions, so test-session-request will also | ||||
| test-session-name | hold information related to these actions (e.g. pm-index, repeat- | |||
| A unique name for this test session to be used for | interval). | |||
| identification of this TWAMP-Test session on the Control- | ||||
| Client. | ||||
| sender-ip | ||||
| The IP address of the Session-Sender device, which is to be | ||||
| placed in the source IP address field of the IP header in | ||||
| TWAMP-Test (UDP) packets belonging to this test session. | ||||
| This value will be used to populate the sender address field | ||||
| of the Request-TW-Session message. If not configured, the | ||||
| device SHALL choose its own source IP address. | ||||
| sender-udp-port | ||||
| The UDP port number that is to be used by the Session-Sender | ||||
| for this TWAMP-Test session. The number is restricted to the | ||||
| dynamic port range (49152 .. 65535). A value of zero | ||||
| indicates that the Control-Client SHALL auto-allocate a UDP | ||||
| port number for this TWAMP-Test session. The configured (or | ||||
| auto-allocated) value is advertized in the Sender Port field | ||||
| of the Request-TW-session message (see also Section 3.5 of | ||||
| [RFC5357]). Note that in the scenario where a device auto- | ||||
| allocates a UDP port number for a session, and the repeat | ||||
| parameter for that session indicates that it should be | ||||
| repeated, the device is free to auto-allocate a different UDP | ||||
| port number when it negotiates the next (repeated) iteration | ||||
| of this session. | ||||
| reflector-ip | ||||
| The IP address belonging to the remote Session-Reflector | ||||
| device to which the TWAMP-Test session will be initiated. | ||||
| This value will be used to populate the receiver address | ||||
| field of the Request-TW-Session message. This item is | ||||
| mandatory. | ||||
| reflector-udp-port | ||||
| This parameter defines the UDP port number that will be used | ||||
| by the Session-Reflector for this TWAMP-Test session. The | ||||
| number is restricted to the dynamic port range (49152 .. | ||||
| 65535). This value will be placed in the Receiver Port field | ||||
| of the Request-TW-Session message. If this value is not set, | ||||
| the device SHALL use the same port number as defined in the | ||||
| server-tcp-port parameter of this twamp-session-request's | ||||
| parent twamp-client-ctrl-connection. | ||||
| timeout The length of time (in seconds) that the Session-Reflector | ||||
| should continue to respond to packets belonging to this | ||||
| TWAMP-Test session after a Stop-Sessions TWAMP-Control | ||||
| message has been received ([RFC5357], Section 3.8). This | ||||
| value will be placed in the Timeout field of the Request-TW- | ||||
| Session message. The default value is 2 seconds. | ||||
| padding-length | ||||
| The number of bytes of padding that will be added to the | ||||
| TWAMP-Test (UDP) packets generated by the Session-Sender. | ||||
| This value will be placed in the Padding Length field of the | ||||
| Request-TW-Session message ([RFC4656], Section 3.5). | ||||
| dscp The DSCP value to be placed in the UDP header of TWAMP-Test | ||||
| packets generated by the Session-Sender, and in the UDP | ||||
| header of the TWAMP-Test response packets generated by the | ||||
| Session-Reflector for this test session. This value will be | ||||
| placed in the Type-P Descriptor field of the Request-TW- | ||||
| Session message ([RFC5357]). | ||||
| start-time | ||||
| Time when the session is to be started (but not before the | ||||
| Start-Sessions command is issued). This value is placed in | ||||
| the Start Time field of the Request-TW-Session message. The | ||||
| default value of 0 indicates that the session will be started | ||||
| as soon as the Start-Sessions message is received. | ||||
| repeat | ||||
| This value determines if the TWAMP-Test session must be | ||||
| repeated. When a test session has completed, the repeat | ||||
| parameter is checked. The value of 0 indicates that the | ||||
| session MUST NOT be repeated. If the value is 1 through | ||||
| 4,294,967,294 then the test session SHALL be repeated using | ||||
| the information in repeat-interval parameter, and the parent | ||||
| TWAMP-Control connection for this test session is restarted | ||||
| to negotiate a new instance of this TWAMP-Test session. The | ||||
| implementation MUST decrement the value of repeat after | ||||
| determining a repeated session is expected. The value of | ||||
| 4,294,967,295 indicates that the test session SHALL be | ||||
| repeated *forever* using the information in repeat-interval | ||||
| parameter, and SHALL NOT decrement the value. The default | ||||
| value of repeat is 0, indicating that once the session has | ||||
| completed, it will not be renegotiated and restarted. | ||||
| repeat-interval | ||||
| This parameter determines the timing of repeated test | ||||
| sessions when repeat > 0. When the value of repeat-interval | ||||
| is 0, the negotiation of a new test session SHALL begin | ||||
| immediately after the previous test session completes. | ||||
| Otherwise, the Control-Client will wait for the number of | ||||
| minutes specified in the repeat-interval parameter before | ||||
| negotiating the new instance of this TWAMP-Test session. The | ||||
| default value of repeat-interval is 0, indicating immediate | ||||
| re-start. | ||||
| pm-reg-list | ||||
| A list of one or more Performance Metric Registry Index | ||||
| values (see [I-D.ietf-ippm-metric-registry], which | ||||
| communicate packet stream characteristics and one or more | ||||
| metrics to be measured. All members of the pm-reg-list MUST | ||||
| have the same stream characteristics, such that they combine | ||||
| to specify all metrics that shall be measured on a single | ||||
| stream. | ||||
| pm-index | ||||
| One or more Numerical index values of a Registered Metric in | ||||
| the Performance Metric Registry | ||||
| [I-D.ietf-ippm-metric-registry] comprise the pm-reg-list. | ||||
| Output statistics are specified in the corresponding Registry | ||||
| entry. | ||||
| The following twamp-session-request parameters are read-only: | ||||
| test-session-state | ||||
| The TWAMP-Test session state can be either accepted or | ||||
| indicate the respective error code. | ||||
| sid The SID allocated by the Server for this TWAMP-Test session, | ||||
| and communicated back to the Control-Client in the SID field | ||||
| of the Accept-Session message; see Section 4.3 of [RFC6038]. | ||||
| 4.2. Server | 4.2. Server | |||
| The twamp-server container (see Figure 4) holds items that are | The server container (see Figure 4) holds items that are related to | |||
| related to the configuration of the TWAMP Server logical entity | the configuration of the TWAMP Server logical entity (recall | |||
| (recall Figure 1). | Figure 1). | |||
| +------------------ -+ | ||||
| | twamp-server | | ||||
| +--------------------+ | ||||
| | server-admin-state | 1..* +------------+ | ||||
| | server-tcp-port |<>------| key-chain | | ||||
| | servwait | +------------+ | ||||
| | dscp | | key-id | | ||||
| | count | | secret-key | | ||||
| | max-count | +------------+ | ||||
| | modes | | ||||
| | | 0..* +-----------------------------------+ | ||||
| | |<>------| twamp-server-ctrl-connection | | ||||
| +--------------------+ +-----------------------------------+ | ||||
| | client-ip {ro} | | ||||
| | client-tcp-port {ro} | | ||||
| | server-ip {ro} | | ||||
| | server-tcp-port {ro} | | ||||
| | server-ctrl-connection-state {ro} | | ||||
| | dscp {ro} | | ||||
| | selected-mode {ro} | | ||||
| | key-id {ro} | | ||||
| | count {ro} | | ||||
| | max-count {ro} | | ||||
| | salt {ro} | | ||||
| | server-iv {ro} | | ||||
| | challenge {ro} | | ||||
| +-----------------------------------+ | ||||
| Figure 4: TWAMP Server UML class diagram | The server container includes an administrative configuration | |||
| parameter (server/admin-state) that indicates whether the device is | ||||
| allowed to receive TWAMP-Control connections. | ||||
| A device operating in the Server role cannot configure attributes on | A device operating in the Server role cannot configure attributes on | |||
| a per TWAMP-Control connection basis, as it has no foreknowledge of | a per TWAMP-Control connection basis, as it has no foreknowledge of | |||
| what incoming TWAMP-Control connections it will receive. As such, | the incoming TWAMP-Control connections to be received. As such, any | |||
| any parameter that the Server might want to apply to an incoming | parameter that the Server might want to apply to an incoming control | |||
| control connection must be configured at the overall Server level, | connection must be configured at the overall Server level, and will | |||
| and will then be applied to all incoming TWAMP-Control connections. | then be applied to all incoming TWAMP-Control connections. | |||
| Each twamp-server container holds a list named key-chain which | ||||
| relates KeyIDs with the respective secret keys. As mentioned in | ||||
| Section 4.1, both the Server and the Control-Client use the same | ||||
| mappings from KeyIDs to shared secrets. The Server, being prepared | ||||
| to conduct sessions with more than one Control-Client, uses KeyIDs to | ||||
| choose the appropriate secret-key; a Control-Client would typically | ||||
| have different secret keys for different Servers. key-id tells the | ||||
| Server which shared-secret the Control-Client wishes to use for | ||||
| authentication or encryption. | ||||
| Each incoming control connection that is active on the Server will be | ||||
| represented by an instance of a twamp-server-ctrl-connection object. | ||||
| All items in the twamp-server-ctrl-connection object are read-only, | ||||
| as we explain later in this section. | ||||
| The twamp-server container items are as follows: | ||||
| server-admin-state | ||||
| This administrative parameter controls whether the device is | ||||
| allowed to operate as a TWAMP Server. As defined in | ||||
| [RFC5357] the roles of Server and Session-Reflector can be | ||||
| played by the same host; recall Figure 2. For a host | ||||
| operating in this manner, this parameter controls whether the | ||||
| device is allowed to respond to TWAMP control sessions. | ||||
| server-tcp-port | ||||
| This parameter defines the well known TCP port number that is | ||||
| used by TWAMP-Control. The Server will listen on this port | ||||
| number for incoming TWAMP-Control connections. Although this | ||||
| is defined as a fixed value (862) in [RFC5357], there are | ||||
| several realizations of TWAMP in the field that were | ||||
| implemented before this well-known port number was allocated. | ||||
| These early implementations allowed the port number to be | ||||
| configured. This parameter is therefore provided for | ||||
| backward compatibility reasons. The default value is 862. | ||||
| servwait | ||||
| TWAMP-Control (TCP) session timeout, in seconds (([RFC5357], | ||||
| Section 3.1)). | ||||
| dscp The DSCP value to be placed in the IP header of TWAMP-Control | ||||
| (TCP) packets generated by the Server. Section 3.1 of | ||||
| [RFC5357] specifies that the server SHOULD use the DSCP value | ||||
| from the Control-Client's TCP SYN. However, for practical | ||||
| purposes TWAMP will typically be implemented using a general | ||||
| purpose TCP stack provided by the underlying operating | ||||
| system, and such a stack may not provide this information to | ||||
| the user. Consequently, it is not always possible to | ||||
| implement the behavior described in [RFC5357] in an OS- | ||||
| portable version of TWAMP. The default behavior if this item | ||||
| is not set is to use the DSCP value from the Control-Client's | ||||
| TCP SYN, as per Section 3.1 of [RFC5357]. | ||||
| count Parameter used in deriving a key from a shared secret as | ||||
| described in Section 3.1 of [RFC4656], and are communicated | ||||
| to the Control-Client as part of the Server Greeting message. | ||||
| count MUST be a power of 2. count MUST be at least 1024. | ||||
| count SHOULD be increased as more computing power becomes | ||||
| common. | ||||
| max-count | ||||
| 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. Therefore, TWAMP-compliant systems SHOULD have a | ||||
| configuration control to limit the maximum count value. The | ||||
| default max-count value SHOULD be 32768. | ||||
| modes | ||||
| The bit mask of TWAMP Modes this Server instance is willing | ||||
| to support; see IANA TWAMP Modes Registry. Each bit position | ||||
| set represents a mode; see TWAMP-Modes at | ||||
| http://www.iana.org/assignments/twamp-parameters/twamp- | ||||
| parameters.xhtml. Note: Modes requiring Authentication or | ||||
| Encryption MUST include the related attributes. | ||||
| There SHALL be one instance of twamp-server-ctrl-connection per | ||||
| incoming TWAMP-Control (TCP) connection that is received and active | ||||
| on the Server device. All items in the twamp-server-ctrl-connection | ||||
| are read-only. Each instance of twamp-server-ctrl-connection uses | ||||
| the following 4-tuple as its unique key: client-ip, client-tcp-port, | ||||
| server-ip, server-tcp-port. | ||||
| The twamp-server-ctrl-connection container items are all read-only: | ||||
| client-ip | ||||
| The IP address on the remote Control-Client device, which is | ||||
| the source IP address used in the TWAMP-Control (TCP) packets | ||||
| belonging to this control connection. | ||||
| client-tcp-port | ||||
| The source TCP port number used in the TWAMP-Control (TCP) | ||||
| packets belonging to this control connection. | ||||
| server-ip | ||||
| The IP address of the local Server device, which is the | ||||
| destination IP address used in the TWAMP-Control (TCP) | ||||
| packets belonging to this control connection. | ||||
| server-tcp-port | ||||
| The destination TCP port number used in the TWAMP-Control | ||||
| (TCP) packets belonging to this control connection. This | ||||
| will usually be the same value as the server-tcp-port | ||||
| configured under twamp-server. However, in the event that | ||||
| the user re-configured twamp-server:server-tcp-port after | ||||
| this control connection was initiated, this value will | ||||
| indicate the server-tcp-port that is actually in use for this | ||||
| control connection. | ||||
| server-ctrl-connection-state | ||||
| The Server TWAMP-Control connection state can be active or | ||||
| SERVWAIT. | ||||
| dscp | ||||
| The DSCP value used in the IP header of the TWAMP-Control | ||||
| (TCP) packets sent by the Server for this control connection. | ||||
| This will usually be the same value as is configured in the | ||||
| dscp parameter under the twamp-server container. However, in | ||||
| the event that the user re-configures twamp-server:dscp after | ||||
| this control connection is already in progress, this read- | ||||
| only value will show the actual dscp value in use by this | ||||
| TWAMP-Control connection. | ||||
| selected-mode | ||||
| The Mode that was chosen for this TWAMP-Control connection as | ||||
| set in the Mode field of the Set-Up-Response message. | ||||
| key-id | ||||
| The KeyID value that is in use by this TWAMP-Control | ||||
| connection. The Control-Client selects the key-id for the | ||||
| control connection. | ||||
| count | +---------------------+ | |||
| The count value that is in use by this TWAMP-Control | | server | | |||
| connection. This will usually be the same value as is | +---------------------+ | |||
| configured under twamp-server. However, in the event that | | admin-state | 1..* +------------+ | |||
| the user re-configured twamp-server:count after this control | | server-tcp-port |<>------| key-chain | | |||
| connection is already in progress, this read-only value will | | servwait | +------------+ | |||
| show the actual count that is in use for this TWAMP-Control | | control-packet-dscp | | key-id | | |||
| connection. | | count | | secret-key | | |||
| | max-count | +------------+ | ||||
| | modes | | ||||
| | | 0..* +--------------------------+ | ||||
| | |<>------| ctrl-connection | | ||||
| +---------------------+ +--------------------------+ | ||||
| | client-ip {ro} | | ||||
| | client-tcp-port {ro} | | ||||
| | server-ip {ro} | | ||||
| | server-tcp-port {ro} | | ||||
| | state {ro} | | ||||
| | control-packet-dscp {ro} | | ||||
| | selected-mode {ro} | | ||||
| | key-id {ro} | | ||||
| | count {ro} | | ||||
| | max-count {ro} | | ||||
| | salt {ro} | | ||||
| | server-iv {ro} | | ||||
| | challenge {ro} | | ||||
| +--------------------------+ | ||||
| max-count | Figure 4: TWAMP Server UML class diagram | |||
| The max-count value that is in use by this TWAMP-Control | ||||
| connection. This will usually be the same value as is | ||||
| configured under twamp-server. However, in the event that | ||||
| the user re-configured twamp-server:max-count after this | ||||
| control connection is already in progress, this read-only | ||||
| value will show the actual max-count that is in use for this | ||||
| control connection. | ||||
| salt A parameter used in deriving a key from a shared secret as | Each server container holds a list named key-chain which relates | |||
| described in Section 3.1 of [RFC4656]. Salt MUST be | KeyIDs with the respective secret keys. As mentioned in Section 4.1, | |||
| generated pseudo-randomly (independently of anything else in | both the Server and the Control-Client use the same mappings from | |||
| the RFC) and is communicated to the Control-Client as part of | KeyIDs to shared secrets. The Server, being prepared to conduct | |||
| the Server Greeting message. | sessions with more than one Control-Client, uses KeyIDs to choose the | |||
| appropriate secret-key; a Control-Client would typically have | ||||
| different secret keys for different Servers. key-id tells the Server | ||||
| which shared-secret the Control-Client wishes to use for | ||||
| authentication or encryption. | ||||
| server-iv | Each incoming control connection that is active on the Server will be | |||
| The Server Initialization Vector (IV) is generated randomly | represented by an instance of a ctrl-connection object. There SHALL | |||
| by the Server. | be one instance of ctrl-connection per incoming TWAMP-Control (TCP) | |||
| connection that is received and active on the Server device. | ||||
| challenge | All items in the ctrl-connection object are read-only. Each instance | |||
| A random sequence of octets generated by the Server. As | of ctrl-connection can be uniquely identified by the 4-tuple {client- | |||
| described in Section 4.1 challenge is used by the Control- | ip, client-tcp-port, server-ip, server-tcp-port}. | |||
| Client to prove possession of a shared secret. | ||||
| 4.3. Session-Sender | 4.3. Session-Sender | |||
| The twamp-session-sender container, illustrated in Figure 5, holds | The session-sender container, illustrated in Figure 5, holds items | |||
| items that are related to the configuration of the TWAMP Session- | that are related to the configuration of the TWAMP Session-Sender | |||
| Sender logical entity. | logical entity. | |||
| The twamp-session-sender container includes an administrative | ||||
| parameter (session-sender-admin-state) that controls whether the | ||||
| device is allowed to initiate TWAMP test sessions. | ||||
| There is one instance of twamp-sender-test-session for each TWAMP- | The session-sender container includes an administrative parameter | |||
| Test session for which packets are being sent. | (session-sender/admin-state) that controls whether the device is | |||
| allowed to initiate TWAMP-Test sessions. | ||||
| +----------------------------+ | +----------------+ | |||
| | twamp-session-sender | | | session-sender | | |||
| +----------------------------+ 0..* +---------------------------+ | +----------------+ 0..* +---------------------------+ | |||
| | session-sender-admin-state |<>-----| twamp-sender-test-session | | | admin-state |<>-----| test-session | | |||
| +----------------------------+ +---------------------------+ | +----------------+ +---------------------------+ | |||
| | test-session-name | | | name | | |||
| | ctrl-connection-name {ro} | | | ctrl-connection-name {ro} | | |||
| | fill-mode | | | fill-mode | | |||
| | number-of-packets | | | number-of-packets | | |||
| | sender-session-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 | | | |||
| | periodic-interval-units | | | | periodic-interval-units | | | |||
| +-------------------------+ | | +-------------------------+ | | |||
| +------------------------+ | | | |||
| | lambda | | +------------------------+ | |||
| | lambda-units | | | lambda | | |||
| | max-interval | | | lambda-units | | |||
| | truncation-point-units | | | max-interval | | |||
| +------------------------+ | | truncation-point-units | | |||
| +------------------------+ | ||||
| Figure 5: TWAMP Session-Sender UML class diagram | Figure 5: TWAMP Session-Sender UML class diagram | |||
| The twamp-sender-test-session container items are: | Each TWAMP-Test session initiated by the Session-Sender will be | |||
| represented by an instance of a test-session object. There SHALL be | ||||
| test-session-name | one instance of test-session for each TWAMP-Test session for which | |||
| A unique name for this TWAMP-Test session to be used for | packets are being sent. | |||
| identifying this test session by the Session-Sender logical | ||||
| entity. | ||||
| ctrl-connection-name | ||||
| The name of the parent TWAMP-Control connection that is | ||||
| responsible for negotiating this TWAMP-Test session. | ||||
| fill-mode | ||||
| Indicates whether the padding added to the TWAMP-Test (UDP) | ||||
| packets will contain pseudo-random numbers, or whether it | ||||
| should consist of all zeroes, as per Section 4.2.1 of | ||||
| [RFC5357]. | ||||
| number-of-packets | ||||
| The overall number of TWAMP-Test (UDP) packets to be | ||||
| transmitted by the Session-Sender for this test session. | ||||
| packet-distribution | ||||
| Defines whether TWAMP-Test (UDP) packets are to be | ||||
| transmitted with a fixed interval between them, or whether a | ||||
| Poisson distribution is to be used. | ||||
| periodic-interval and periodic-interval-units | ||||
| If packet-distribution is set to periodic, these two values | ||||
| are used together to determine the period to wait between the | ||||
| first bits of TWAMP-Test (UDP) packet transmissions for this | ||||
| test session. periodic-interval-units is one of seconds, | ||||
| milliseconds, microseconds, nanoseconds; see [RFC3432]. | ||||
| lambda and lambda-units | ||||
| If packet-distribution is Poisson, the lambda parameter | ||||
| determines the corresponding average rate of packet | ||||
| transmission. lambda-units defines the units of lambda in | ||||
| reciprocal seconds; see [RFC3432]. | ||||
| max-interval | ||||
| If packet-distribution is Poisson, then this parameter keeps | ||||
| a stream active by setting a maximum time between packet | ||||
| transmissions. | ||||
| truncation-point-units | ||||
| One of seconds, milliseconds, microseconds, nanoseconds. | ||||
| The following twamp-sender-test-session parameters are read-only: | ||||
| sender-session-state | ||||
| This read-only item can be either Active or Idle. | ||||
| sent-packets | ||||
| The number of TWAMP-Test (UDP) packets belonging to this | ||||
| session that have been transmitted by the Session-Sender. | ||||
| rcv-packets | ||||
| The number of TWAMP-Test (UDP) packets belonging to this | ||||
| session that have been received from the Session-Reflector. | ||||
| The round trip loss for a test session can be calculated as | ||||
| sent-packets - rcv-packets. | ||||
| last-sent-seq | ||||
| The value in the sequence number field of the last TWAMP-Test | ||||
| (UDP) packet transmitted for this test session. Sequence | ||||
| numbers start from zero, so this should always be one less | ||||
| than the sent-packets value. | ||||
| last-rcv-seq | ||||
| The value in the sequence number field of the last TWAMP-Test | ||||
| (UDP) packet received for this test session. In the case of | ||||
| packet loss in the Session-Sender to Session-Reflector | ||||
| direction, this value minus the last-sent-seq will quantify | ||||
| the number of packets that were lost in the Session-Sender to | ||||
| Session-Reflector direction. | ||||
| 4.4. Session-Reflector | 4.4. Session-Reflector | |||
| The twamp-session-reflector container, illustrated in Figure 6, holds | The session-reflector container, illustrated in Figure 6, holds items | |||
| items that are related to the configuration of the TWAMP Session- | that are related to the configuration of the TWAMP Session-Reflector | |||
| Reflector logical entity. | logical entity. | |||
| The session-reflector container includes an administrative parameter | ||||
| (session-reflector/admin-state) that controls whether the device is | ||||
| allowed to respond to incoming TWAMP test sessions. | ||||
| A device operating in the Session-Reflector role cannot configure | 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, | session must be configured at the overall Session-Reflector level, | |||
| and will then be applied to all incoming sessions. | and will then be applied to all incoming sessions. | |||
| The twamp-session-sender container includes an administrative | +----=--------------+ | |||
| parameter (session-reflector-admin-state) that controls whether the | | session-reflector | | |||
| device is allowed to respond to incoming TWAMP test sessions. Each | +-------------------+ | |||
| incoming TWAMP-Test session that is active on the Session-Reflector | | admin-state | | |||
| will be represented by an instance of a twamp-reflector-test-session | | refwait | | |||
| object. All items in the twamp-reflector-test-session object are | +-------------------+ | |||
| read-only. | ^ | |||
| V | ||||
| +----=--------------------------+ | | | |||
| | twamp-session-reflector | | | 0..* | |||
| +-------------------------------+ | ||||
| | session-reflector-admin-state | | ||||
| | refwait | | ||||
| +-------------------------------+ | ||||
| ^ | ||||
| V | ||||
| | | ||||
| | 0..* | ||||
| +----------------------------------------+ | +----------------------------------------+ | |||
| | twamp-reflector-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} | | |||
| | 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} | | |||
| +----------------------------------------+ | +----------------------------------------+ | |||
| Figure 6: TWAMP Session-Reflector UML class diagram | Figure 6: TWAMP Session-Reflector UML class diagram | |||
| The twamp-session-reflector configuration items are: | Each incoming TWAMP-Test session that is active on the Session- | |||
| Reflector SHALL be represented by an instance of a test-session | ||||
| refwait | object. All items in the test-session object are read-only. | |||
| The Session-Reflector MAY discontinue any session that has | ||||
| been started when no packet associated with that session has | ||||
| been received for REFWAIT seconds. The default value of | ||||
| REFWAIT SHALL be 900 seconds, and this waiting time MAY be | ||||
| configurable. This timeout allows a Session-Reflector to | ||||
| free up resources in case of failure. | ||||
| Instances of twamp-reflector-test-session are indexed by a session | Instances of test-session are indexed by a session identifier (sid). | |||
| identifier (sid). This value is auto-allocated by the Server as test | This value is auto-allocated by the TWAMP Server as test session | |||
| session requests are received, and communicated back to the Control- | requests are received, and communicated back to the Control-Client in | |||
| Client in the SID field of the Accept-Session message; see | the SID field of the Accept-Session message; see Section 4.3 of | |||
| Section 4.3 of [RFC6038]. | [RFC6038]. | |||
| When attempting to retrieve operational data for active test sessions | 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 auto- | are currently active on that device, or what SIDs have been auto- | |||
| allocated for these test sessions. If the user has network access to | allocated for these test sessions. If the user has network access to | |||
| the Control-Client device, then it is possible to read the data for | the Control-Client device, then it is possible to read the data for | |||
| this session under twamp-client:twamp-client-ctrl-connection:twamp- | this session under client/ctrl-connection/test-session-request/sid | |||
| session-request:sid and obtain the SID (see Figure 3). The user may | and obtain the SID (see Figure 3). The user may then use this SID | |||
| then use this SID value as an index to retrieve an individual twamp- | value as an index to retrieve an individual session-reflector/test- | |||
| session-reflector:twamp-reflector-test-session instance on the | session instance on the Session-Reflector device. | |||
| Session-Reflector device. | ||||
| If the user has no network access to the Control-Client device, then | If the user has no network access to the Control-Client device, then | |||
| the only option is to retrieve all twamp-reflector-test-session | the only option is to retrieve all test-session instances from the | |||
| instances from the Session-Reflector device. This could be | Session-Reflector device. This could be problematic if a large | |||
| problematic if a large number of test sessions are currently active | number of test sessions are currently active on that device. | |||
| on that device. | ||||
| Each Session-Reflector TWAMP-Test session contains the following | Each Session-Reflector TWAMP-Test session contains the following | |||
| 4-tuple: {parent-connection-client-ip, parent-connection-client-tcp- | 4-tuple: {parent-connection-client-ip, parent-connection-client-tcp- | |||
| port, parent-connection-server-ip, parent-connection-server-tcp- | port, parent-connection-server-ip, parent-connection-server-tcp- | |||
| port}. This 4-tuple corresponds to the equivalent 4-tuple {client-ip, | port}. This 4-tuple MUST correspond to the equivalent 4-tuple | |||
| client-tcp-port, server-ip, server-tcp-port} in the twamp-server- | {client-ip, client-tcp-port, server-ip, server-tcp-port} in the | |||
| ctrl-connection object. This 4-tuple allows the user to trace back | server/ctrl-connection object. This 4-tuple allows the user to trace | |||
| from the TWAMP-Test session to the (parent) TWAMP-Control connection | back from the TWAMP-Test session to the (parent) TWAMP-Control | |||
| that negotiated this test session. | connection that negotiated this test session. | |||
| All data under twamp-reflector-test-session is read-only: | ||||
| sid An auto-allocated identifier for this TWAMP-Test session, | ||||
| that is unique within the context of this Server/Session- | ||||
| Reflector device only. This value will be communicated to | ||||
| the Control-Client that requested the test session in the SID | ||||
| field of the Accept-Session message. | ||||
| sender-ip | ||||
| The IP address on the remote device, which is the source IP | ||||
| address used in the TWAMP-Test (UDP) packets belonging to | ||||
| this test session. | ||||
| sender-udp-port | ||||
| The source UDP port used in the TWAMP-Test packets belonging | ||||
| to this test session. The number is restricted to the | ||||
| dynamic port range (49152 .. 65535). | ||||
| reflector-ip | ||||
| The IP address of the local Session-Reflector device, which | ||||
| is the destination IP address used in the TWAMP-Test (UDP) | ||||
| packets belonging to this test session. | ||||
| reflector-udp-port | ||||
| The destination UDP port number used in the TWAMP-Test (UDP) | ||||
| test packets belonging to this test session. The number is | ||||
| restricted to the dynamic port range (49152 .. 65535). | ||||
| parent-connection-client-ip | ||||
| The IP address on the Control-Client device, which is the | ||||
| source IP address used in the TWAMP-Control (TCP) packets | ||||
| belonging to the parent control connection that negotiated | ||||
| this test session. | ||||
| parent-connection-client-tcp-port | ||||
| The source TCP port number used in the TWAMP TCP control | ||||
| packets belonging to the parent control connection that | ||||
| negotiated this test session. | ||||
| parent-connection-server-ip | ||||
| The IP address of the Server device, which is the destination | ||||
| IP address used in the TWAMP-Control (TCP) packets belonging | ||||
| to the parent control connection that negotiated this test | ||||
| session. | ||||
| parent-connection-server-tcp-port | ||||
| The destination TCP port number used in the TWAMP-Control | ||||
| (TCP) packets belonging to the parent control connection that | ||||
| negotiated this test session. | ||||
| dscp The DSCP value present in the IP header of TWAMP-Test (UDP) | ||||
| packets belonging to this test session. | ||||
| sent-packets | ||||
| The number of TWAMP-Test (UDP) response packets that have | ||||
| been sent by the Session-Reflector for this test session. | ||||
| rcv-packets | ||||
| The number of TWAMP-Test (UDP) packets that have been | ||||
| received by the Session-Reflector for this test session. | ||||
| Since the Session-Reflector should respond to every test | ||||
| packet it receives, the sent-packets and rcv-packets values | ||||
| should always be identical. | ||||
| last-sent-seq | ||||
| The value in the sequence number field of the last TWAMP-Test | ||||
| (UDP) response packet transmitted for this test session. | ||||
| last-rcv-seq | ||||
| The value in the sequence number field of the last TWAMP-Test | ||||
| (UDP) packet received for this test session. | ||||
| 5. Data Model | 5. Data Model | |||
| This section formally specifies the TWAMP data model using YANG. | This section formally specifies the TWAMP data model using YANG. | |||
| 5.1. YANG Tree Diagram | 5.1. YANG Tree Diagram | |||
| This section presents a simplified graphical representation of the | 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. | artificial line breaks in some tree diagram nodes. | |||
| module: ietf-twamp | module: ietf-twamp | |||
| +--rw twamp | +--rw twamp | |||
| +--rw twamp-client! {control-client}? | +--rw client! {control-client}? | |||
| | +--rw client-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? mode | | | +--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? string | | | +--rw secret-key? string | |||
| | +--rw twamp-client-ctrl-connection* [ctrl-connection-name] | | +--rw ctrl-connection* [name] | |||
| | +--rw ctrl-connection-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 dscp? inet:dscp | | +--rw control-packet-dscp? inet:dscp | |||
| | +--rw key-id? string | | +--rw key-id? string | |||
| | +--rw max-count? uint32 | | +--rw max-count? uint32 | |||
| | +--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 ctrl-connection-state? ctrl-connection-state | | +--ro state? \ | |||
| | +--ro selected-mode? mode | control-client-connection-state | |||
| | +--ro token? binary | | +--ro selected-mode? twamp-modes | |||
| | +--ro client-iv? binary | | +--ro token? binary | |||
| | +--rw twamp-session-request* [test-session-name] | | +--ro client-iv? binary | |||
| | +--rw test-session-name string | | +--rw test-session-request* [name] | |||
| | +--rw sender-ip? inet:ip-address | | +--rw name string | |||
| | +--rw sender-udp-port? inet:port-number | | +--rw sender-ip? inet:ip-address | |||
| | +--rw reflector-ip inet:ip-address | | +--rw sender-udp-port? dynamic-port-number | |||
| | +--rw reflector-udp-port? inet:port-number | | +--rw reflector-ip inet:ip-address | |||
| | +--rw timeout? uint64 | | +--rw reflector-udp-port? dynamic-port-number | |||
| | +--rw padding-length? uint32 | | +--rw timeout? uint64 | |||
| | +--rw dscp? inet:dscp | | +--rw padding-length? uint32 | |||
| | +--rw start-time? uint64 | | +--rw test-packet-dscp? inet:dscp | |||
| | +--rw repeat? uint32 | | +--rw start-time? uint64 | |||
| | +--rw repeat-interval? uint32 | | +--rw repeat? uint32 | |||
| | +--rw pm-reg-list* [pm-index] | | +--rw repeat-interval? uint32 | |||
| | | +--rw pm-index uint16 | | +--rw pm-reg-list* [pm-index] | |||
| | +--ro test-session-state? test-session-state | | | +--rw pm-index uint16 | |||
| | +--ro sid? string | | +--ro state? test-session-state | |||
| +--rw twamp-server! {server}? | | +--ro sid? string | |||
| | +--rw server-admin-state boolean | +--rw server! {server}? | |||
| | +--rw server-tcp-port? inet:port-number | | +--rw admin-state boolean | |||
| | +--rw servwait? uint32 | | +--rw server-tcp-port? inet:port-number | |||
| | +--rw dscp? inet:dscp | | +--rw servwait? uint32 | |||
| | +--rw count? uint32 | | +--rw control-packet-dscp? inet:dscp | |||
| | +--rw max-count? uint32 | | +--rw count? uint32 | |||
| | +--rw modes? mode | | +--rw max-count? uint32 | |||
| | +--rw key-chain* [key-id] | | +--rw modes? twamp-modes | |||
| | | +--rw key-id string | | +--rw key-chain* [key-id] | |||
| | | +--rw secret-key? string | | | +--rw key-id string | |||
| | +--ro twamp-server-ctrl-connection* [client-ip client-tcp-port server-ip server-tcp-port] | | | +--rw secret-key? string | |||
| | +--ro client-ip inet:ip-address | | +--ro ctrl-connection* \ | |||
| | +--ro client-tcp-port inet:port-number | [client-ip client-tcp-port server-ip server-tcp-port] | |||
| | +--ro server-ip inet:ip-address | | +--ro client-ip inet:ip-address | |||
| | +--ro server-tcp-port inet:port-number | | +--ro client-tcp-port inet:port-number | |||
| | +--ro server-ctrl-connection-state? server-ctrl-connection-state | | +--ro server-ip inet:ip-address | |||
| | +--ro dscp? inet:dscp | | +--ro server-tcp-port inet:port-number | |||
| | +--ro selected-mode? mode | | +--ro state? server-ctrl-connection-state | |||
| | +--ro key-id? string | | +--ro control-packet-dscp? inet:dscp | |||
| | +--ro count? uint32 | | +--ro selected-mode? twamp-modes | |||
| | +--ro max-count? uint32 | | +--ro key-id? string | |||
| | +--ro salt? binary | | +--ro count? uint32 | |||
| | +--ro server-iv? binary | | +--ro max-count? uint32 | |||
| | +--ro challenge? binary | | +--ro salt? binary | |||
| +--rw twamp-session-sender! {session-sender}? | | +--ro server-iv? binary | |||
| | +--rw session-sender-admin-state boolean | | +--ro challenge? binary | |||
| | +--rw twamp-sender-test-session* [test-session-name] | +--rw session-sender! {session-sender}? | |||
| | +--rw test-session-name string | | +--rw admin-state boolean | |||
| | +--ro ctrl-connection-name? string | | +--rw test-session* [name] | |||
| | +--rw fill-mode? fill-mode | | +--rw name string | |||
| | +--rw number-of-packets? uint32 | | +--ro ctrl-connection-name? string | |||
| | +--rw (packet-distribution)? | | +--rw fill-mode? padding-fill-mode | |||
| | | +--:(periodic) | | +--rw number-of-packets? uint32 | |||
| | | | +--rw periodic-interval? uint32 | | +--rw (packet-distribution)? | |||
| | | | +--rw periodic-interval-units? units | | | +--:(periodic) | |||
| | | +--:(poisson) | | | | +--rw periodic-interval? uint32 | |||
| | | +--rw lambda? uint32 | | | | +--rw periodic-interval-units? time-units | |||
| | | +--rw lambda-units? uint32 | | | +--:(poisson) | |||
| | | +--rw max-interval? uint32 | | | +--rw lambda? uint32 | |||
| | | +--rw truncation-point-units? units | | | +--rw lambda-units? uint32 | |||
| | +--ro sender-session-state? sender-session-state | | | +--rw max-interval? uint32 | |||
| | +--ro sent-packets? uint32 | | | +--rw truncation-point-units? time-units | |||
| | +--ro rcv-packets? uint32 | | +--ro state? sender-session-state | |||
| | +--ro last-sent-seq? uint32 | | +--ro sent-packets? uint32 | |||
| | +--ro last-rcv-seq? uint32 | | +--ro rcv-packets? uint32 | |||
| +--rw twamp-session-reflector! {session-reflector}? | | +--ro last-sent-seq? uint32 | |||
| +--rw session-reflector-admin-state boolean | | +--ro last-rcv-seq? uint32 | |||
| +--rw refwait? uint32 | +--rw session-reflector! {session-reflector}? | |||
| +--ro twamp-reflector-test-session* [sender-ip sender-udp-port reflector-ip reflector-udp-port] | +--rw admin-state boolean | |||
| +--ro sid? string | +--rw refwait? uint32 | |||
| +--ro sender-ip inet:ip-address | +--ro test-session* \ | |||
| +--ro sender-udp-port inet:port-number | [sender-ip sender-udp-port \ | |||
| +--ro reflector-ip inet:ip-address | reflector-ip reflector-udp-port] | |||
| +--ro reflector-udp-port inet:port-number | +--ro sid? string | |||
| +--ro parent-connection-client-ip? inet:ip-address | +--ro sender-ip \ | |||
| +--ro parent-connection-client-tcp-port? inet:port-number | inet:ip-address | |||
| +--ro parent-connection-server-ip? inet:ip-address | +--ro sender-udp-port \ | |||
| +--ro parent-connection-server-tcp-port? inet:port-number | dynamic-port-number | |||
| +--ro dscp? inet:dscp | +--ro reflector-ip inet:ip-address | |||
| +--ro sent-packets? uint32 | +--ro reflector-udp-port \ | |||
| +--ro rcv-packets? uint32 | dynamic-port-number | |||
| +--ro last-sent-seq? uint32 | +--ro parent-connection-client-ip?\ | |||
| +--ro last-rcv-seq? uint32 | inet:ip-address | |||
| +--ro parent-connection-client-tcp-port? \ | ||||
| inet:port-number | ||||
| +--ro parent-connection-server-ip? \ | ||||
| inet:ip-address | ||||
| +--ro parent-connection-server-tcp-port? \ | ||||
| inet:port-number | ||||
| +--ro test-packet-dscp? inet:dscp | ||||
| +--ro sent-packets? uint32 | ||||
| +--ro rcv-packets? uint32 | ||||
| +--ro last-sent-seq? uint32 | ||||
| +--ro last-rcv-seq? uint32 | ||||
| 5.2. YANG Module | 5.2. YANG Module | |||
| This section presents the YANG module for the TWAMP data model | This section presents the YANG module for the TWAMP data model | |||
| defined in this document. | defined in this document. | |||
| <CODE BEGINS> file "ietf-twamp@2016-03-21.yang" | <CODE BEGINS> file "ietf-twamp@2016-07-07.yang" | |||
| module ietf-twamp { | ||||
| namespace "urn:ietf:params:xml:ns:yang:ietf-twamp"; | ||||
| //namespace need to be assigned by IANA | ||||
| prefix "ietf-twamp"; | ||||
| import ietf-inet-types { | module ietf-twamp { | |||
| prefix inet; | //namespace need to be assigned by IANA | |||
| } | namespace | |||
| urn:ietf:params:xml:ns:yang:ietf-twamp; | ||||
| prefix | ||||
| ietf-twamp; | ||||
| organization "IETF IPPM (IP Performance Metrics) Working Group"; | import ietf-inet-types { | |||
| prefix inet; | ||||
| } | ||||
| contact "draft-ietf-ippm-twamp-yang@tools.ietf.org"; | organization | |||
| "IETF IPPM (IP Performance Metrics) Working Group"; | ||||
| description "TWAMP Data Model"; | contact | |||
| draft-ietf-ippm-twamp-yang@tools.ietf.org; | ||||
| revision "2016-03-21" { | description | |||
| description "01 version. RFC5357, RFC5618, RFC5938 and RFC6038 | "This YANG module specifies a vendor-independent data | |||
| is covered. draft-ietf-ippm-metric-registry is also considered"; | model for the Two-Way Active Measurement Protocol (TWAMP). | |||
| reference "draft-ietf-ippm-twamp-yang"; | The data model covers four TWAMP logical entities: | |||
| } | Control-Client, Server, Session-Sender, and Session-Reflector. | |||
| feature control-client { | See Fig. 1 of draft-ietf-ippm-twamp-yang for an illustration | |||
| description "This feature relates to the device functions as | of the annotated TWAMP logical model. | |||
| the TWAMP Control-Client."; | ||||
| } | ||||
| feature server { | The YANG module uses features to indicate which of the four | |||
| description "This feature relates to the device functions as | logical entities are supported by an implementation."; | |||
| the TWAMP Server."; | ||||
| } | ||||
| feature session-sender { | revision 2016-07-07 { | |||
| description "This feature relates to the device functions as | description | |||
| the TWAMP Session-Sender."; | "Revision appearing in draft-ietf-ippm-twamp-yang-01. | |||
| } | Covers RFC 5357, RFC 5618, RFC 5938, RFC 6038, RFC 7717, | |||
| and draft-ietf-ippm-metric-registry"; | ||||
| reference | ||||
| draft-ietf-ippm-twamp-yang; | ||||
| } | ||||
| feature session-reflector { | /* | |||
| description "This feature relates to the device functions as | * Typedefs | |||
| the TWAMP Session-Reflector."; | */ | |||
| } | ||||
| typedef ctrl-connection-state { | typedef twamp-modes { | |||
| type enumeration { | type bits { | |||
| enum active { | bit unauthenticated { | |||
| description "Control session is active."; | position 0; | |||
| } | description | |||
| enum idle { | "Unauthenticated mode. See RFC 7717 Section 7."; | |||
| description "Control session is idle."; | } | |||
| bit authenticated { | ||||
| position 1; | ||||
| description | ||||
| "Authenticated mode. See RFC 7717 Section 7."; | ||||
| } | ||||
| bit encrypted { | ||||
| position 2; | ||||
| description | ||||
| "Encrypted mode. See RFC 7717 Section 7."; | ||||
| } | ||||
| bit unauth-test-encrpyt-control { | ||||
| position 3; | ||||
| description | ||||
| "Mixed Security Mode: TWAMP-Test protocol security | ||||
| mode in Unauthenticated mode, TWAMP-Control protocol | ||||
| in Encrypted mode."; | ||||
| reference | ||||
| "RFC 5618: Mixed Security Mode for the Two-Way Active | ||||
| Measurement Protocol (TWAMP)"; | ||||
| } | ||||
| bit individual-session-control { | ||||
| position 4; | ||||
| description | ||||
| "Individual Session Control."; | ||||
| reference | ||||
| "RFC 5938: Individual Session Control Feature | ||||
| for the Two-Way Active Measurement Protocol (TWAMP)"; | ||||
| } | ||||
| bit reflect-octets { | ||||
| position 5; | ||||
| description | ||||
| "Reflect Octets Capability."; | ||||
| reference | ||||
| "RFC 6038: Two-Way Active Measurement Protocol (TWAMP) | ||||
| Reflect Octets and Symmetrical Size Features"; | ||||
| } | ||||
| bit symmetrical-size { | ||||
| position 6; | ||||
| description | ||||
| "Symmetrical Size Sender Test Packet Format."; | ||||
| reference | ||||
| "RFC 6038: Two-Way Active Measurement Protocol (TWAMP) | ||||
| Reflect Octets and Symmetrical Size Features"; | ||||
| } | ||||
| bit IKEv2Derived { | ||||
| position 7; | ||||
| description | ||||
| "IKEv2Derived Mode Capability."; | ||||
| reference | ||||
| "RFC 7717: IKEv2-Derived Shared Secret Key for | ||||
| the One-Way Active Measurement Protocol (OWAMP) | ||||
| and Two-Way Active Measurement Protocol (TWAMP)"; | ||||
| } | ||||
| } | } | |||
| description | ||||
| "Specifies the configurable TWAMP-Modes used during a | ||||
| TWAMP-Control Connection setup between a Control-Client | ||||
| and a Server. RFC 7717 Section 7 summarizes the | ||||
| TWAMP-Modes registry."; | ||||
| } | } | |||
| description "Control connection state"; | ||||
| } | ||||
| typedef mode { | typedef control-client-connection-state { | |||
| type bits { | type enumeration { | |||
| bit unauthenticated { | enum active { | |||
| position "0"; | description | |||
| description "Unauthenticated"; | "Indicates an active TWAMP-Control connection to Server."; | |||
| } | } | |||
| bit authenticated { | enum idle { | |||
| position "1"; | description | |||
| description "Authenticated"; | "Indicates an idle TWAMP-Control connection to Server."; | |||
| } | } | |||
| bit encrypted { | ||||
| position "2"; | ||||
| description "Encrypted"; | ||||
| } | ||||
| bit unauth-test-encrpyt-control { | ||||
| position "3"; | ||||
| description "Mixed Security Mode per RFC 5618. Test | ||||
| protocol security mode in Unauthenticated mode, | ||||
| Control protocol in Encrypted mode."; | ||||
| } | ||||
| bit individual-session-control { | ||||
| position "4"; | ||||
| description "Individual session control per RFC5938."; | ||||
| } | ||||
| bit reflect-octets { | ||||
| position "5"; | ||||
| description "Reflect octets capability per RFC6038."; | ||||
| } | } | |||
| bit symmetrical-size { | description "Control-Client control connection state"; | |||
| position "6"; | } | |||
| description "Symmetrical size per RFC6038."; | typedef test-session-state { | |||
| type enumeration { | ||||
| enum accepted { | ||||
| value 0; | ||||
| description | ||||
| "Indicates that the TWAMP-Test session request | ||||
| is accepted."; | ||||
| } | ||||
| enum failed { | ||||
| value 1; | ||||
| description | ||||
| "Indicates a TWAMP-Test session failure due to | ||||
| some unspecified reason (catch-all)."; | ||||
| } | ||||
| enum internal-error { | ||||
| value 2; | ||||
| description | ||||
| "Indicates a TWAMP-Test session failure due to | ||||
| an internal error."; | ||||
| } | ||||
| enum not-supported { | ||||
| value 3; | ||||
| description | ||||
| "Indicates a TWAMP-Test session failure because | ||||
| some aspect of the TWAMP-Test session request | ||||
| is not supported."; | ||||
| } | ||||
| enum permanent-resource-limit { | ||||
| value 4; | ||||
| description | ||||
| "Indicates a TWAMP-Test session failure due to | ||||
| permanent resource limitations."; | ||||
| } | ||||
| enum temp-resource-limit { | ||||
| value 5; | ||||
| description | ||||
| "Indicates a TWAMP-Test session failure due to | ||||
| temporary resource limitations."; | ||||
| } | ||||
| } | } | |||
| description "TWAMP-Test session state"; | ||||
| } | } | |||
| description "Authentication mode bit mask"; | ||||
| } | ||||
| typedef test-session-state { | typedef server-ctrl-connection-state { | |||
| type enumeration { | type enumeration { | |||
| enum ok { | enum active { | |||
| value 0; | description "Indicates an active TWAMP-Control connection | |||
| description "Test session is accepted."; | to the Control-Client."; | |||
| } | ||||
| enum failed { | ||||
| value 1; | ||||
| description "Failure, reason unspecified (catch-all)."; | ||||
| } | ||||
| enum internal-error { | ||||
| value 2; | ||||
| description "Internal error."; | ||||
| } | ||||
| enum not-supported { | ||||
| value 3; | ||||
| description "Some aspect of request is not supported."; | ||||
| } | ||||
| enum permanent-resource-limit { | ||||
| value 4; | ||||
| description "Cannot perform request due to | ||||
| permanent resource limitations."; | ||||
| } | ||||
| enum temp-resource-limit { | ||||
| value 5; | ||||
| description "Cannot perform request due to | ||||
| temporary resource limitations."; | ||||
| } | ||||
| } | ||||
| enum servwait { | ||||
| description "Indicates that the TWAMP-Control connection | ||||
| to the Control-Client is in SERVWAIT according to RFC 5357 | ||||
| (Section 3.1): [a] Server MAY discontinue any established | ||||
| control connection when no packet associated with that | ||||
| connection has been received within SERVWAIT seconds."; | ||||
| } | ||||
| } | ||||
| description "Server control connection state"; | ||||
| } | } | |||
| description "Test session state"; | ||||
| } | ||||
| typedef server-ctrl-connection-state { | typedef sender-session-state { | |||
| type enumeration { | type enumeration { | |||
| enum "active" { | enum active { | |||
| description "Active"; | description | |||
| } | "Indicates that the TWAMP-Test session is active."; | |||
| enum "servwait" { | } | |||
| description "Servwait"; | enum failure { | |||
| description | ||||
| "Indicates that the TWAMP-Test session has failed."; | ||||
| } | ||||
| } | } | |||
| description "Session-Sender session state."; | ||||
| } | } | |||
| description "Server control connection state"; | ||||
| } | ||||
| typedef fill-mode { | typedef padding-fill-mode { | |||
| type enumeration { | type enumeration { | |||
| enum zero { | enum zero { | |||
| description "Zero"; | description "Packets will be padded with | |||
| } | all zeros"; | |||
| enum random { | } | |||
| description "Random"; | enum random { | |||
| description "Packets will be padded with | ||||
| pseudo-random numbers"; | ||||
| } | ||||
| } | } | |||
| description "Indicates what type of packet padding is | ||||
| to be used for the UDP TWAMP-Test packets."; | ||||
| } | } | |||
| description "Indicates whether the padding added to the | ||||
| UDP test packets will contain pseudo-random numbers, or | ||||
| whether it should consist of all zeroes."; | ||||
| } | ||||
| typedef units { | typedef time-units { | |||
| type enumeration { | type enumeration { | |||
| enum seconds { | enum s { | |||
| description "Seconds"; | description "Seconds."; | |||
| } | } | |||
| enum milliseconds { | enum ms { | |||
| description "Milliseconds"; | description "Milliseconds."; | |||
| } | ||||
| enum microseconds { | } | |||
| description "Microseconds"; | enum us { | |||
| } | description "Microseconds."; | |||
| enum nanoseconds { | } | |||
| description "Nanoseconds"; | enum ns { | |||
| description "Nanoseconds."; | ||||
| } | ||||
| } | } | |||
| description "TWAMP configuration parameters time units."; | ||||
| } | } | |||
| description "Time units"; | ||||
| } | typedef dynamic-port-number { | |||
| typedef sender-session-state { | type inet:port-number { | |||
| type enumeration { | range 49152..65535; | |||
| enum setup { | } | |||
| description "Test session is active."; | description "Dynamic range for port numbers"; | |||
| } | ||||
| enum failure { | ||||
| description "Test session is idle."; | ||||
| } | ||||
| } | } | |||
| description "Sender session state."; | ||||
| } | ||||
| typedef dynamic-port-number { | /* | |||
| type inet:port-number { | * Features | |||
| range "49152 .. 65535"; | */ | |||
| } | ||||
| description "Dynamic range for port numbers"; | ||||
| } | ||||
| grouping maintenance-statistics { | feature control-client { | |||
| description "Maintenance statistics grouping"; | description | |||
| leaf sent-packets { | "Indicates that the device supports configuration | |||
| type uint32; | of the TWAMP Control-Client."; | |||
| config "false"; | ||||
| description "Packets sent"; | ||||
| } | } | |||
| leaf rcv-packets { | ||||
| type uint32; | feature server { | |||
| config "false"; | description | |||
| description "Packets received"; | "Indicates that the device supports configuration | |||
| of the TWAMP Server."; | ||||
| } | } | |||
| leaf last-sent-seq { | ||||
| type uint32; | feature session-sender { | |||
| config "false"; | description | |||
| description "Last sent sequence number"; | "Indicates that the device supports configuration | |||
| of the TWAMP Session-Sender."; | ||||
| } | } | |||
| leaf last-rcv-seq { | ||||
| type uint32; | feature session-reflector { | |||
| config "false"; | description | |||
| description "Last received sequence number"; | "Indicates that the device supports configuration | |||
| of the TWAMP Session-Reflector."; | ||||
| } | } | |||
| } | ||||
| container twamp { | /* | |||
| description "Top level container"; | * Reusable node groups | |||
| container twamp-client { | */ | |||
| if-feature control-client; | ||||
| presence "twamp-client"; | ||||
| description "Twamp client container"; | ||||
| leaf client-admin-state { | ||||
| type boolean; | ||||
| mandatory "true"; | ||||
| description "Indicates whether this device is allowed to run | ||||
| TWAMP to initiate control sessions"; | ||||
| } | ||||
| list mode-preference-chain { | grouping key-management { | |||
| key "priority"; | ||||
| unique "mode"; | ||||
| leaf priority { | ||||
| type uint16; | ||||
| description "priority"; | ||||
| } | ||||
| leaf mode { | ||||
| type mode; | ||||
| description "Authentication mode bit mask"; | ||||
| } | ||||
| description "Authentication mode preference"; | ||||
| } | ||||
| 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 | ||||
| "KeyID to be used for a TWAMP-Control connection."; | ||||
| } | } | |||
| description "Key ID"; | ||||
| } | ||||
| leaf secret-key { | ||||
| type string; | ||||
| description "Secret key"; | ||||
| } | ||||
| description "Key chain"; | ||||
| } | ||||
| list twamp-client-ctrl-connection { | leaf secret-key { | |||
| key "ctrl-connection-name"; | type string; | |||
| description "Twamp client control connections"; | description | |||
| leaf ctrl-connection-name { | "The corresponding secret key for the | |||
| type string; | TWAMP-Control connection."; | |||
| description "A unique name used as a key to identify this | ||||
| individual TWAMP control connection on the | ||||
| Control-Client device."; | ||||
| } | ||||
| leaf client-ip { | ||||
| type inet:ip-address; | ||||
| description "Client IP address"; | ||||
| } | ||||
| leaf server-ip { | ||||
| type inet:ip-address; | ||||
| mandatory "true"; | ||||
| description "Server IP address"; | ||||
| } | ||||
| leaf server-tcp-port { | ||||
| type inet:port-number; | ||||
| default "862"; | ||||
| description "Server tcp port"; | ||||
| } | ||||
| leaf dscp{ | ||||
| type inet:dscp; | ||||
| default "0"; | ||||
| description "The DSCP value to be placed in the IP header | ||||
| of the TWAMP TCP Control packets generated | ||||
| by the Control-Client"; | ||||
| } | ||||
| leaf key-id { | ||||
| type string { | ||||
| length "1..80"; | ||||
| } | ||||
| description "Key ID"; | ||||
| } | ||||
| leaf max-count { | ||||
| type uint32 { | ||||
| range 1024..4294967295; | ||||
| } | } | |||
| default 32768; | description | |||
| description "Max count value."; | "Relates KeyIDs with the respective secret keys | |||
| } | for a TWAMP-Control connection."; | |||
| leaf client-tcp-port { | } | |||
| type inet:port-number; | description "TWAMP-Control key management."; | |||
| config "false"; | } | |||
| description "Client TCP port"; | ||||
| } | grouping maintenance-statistics { | |||
| leaf server-start-time { | ||||
| type uint64; | leaf sent-packets { | |||
| config "false"; | type uint32; | |||
| description "The Start-Time advertized by the Server in | config false; | |||
| the Server-Start message"; | description "Packets sent"; | |||
| } | } | |||
| leaf ctrl-connection-state { | ||||
| type ctrl-connection-state; | leaf rcv-packets { | |||
| config "false"; | type uint32; | |||
| description "Control connection state"; | config false; | |||
| } | description "Packets received"; | |||
| leaf selected-mode { | } | |||
| type mode; | ||||
| config "false"; | leaf last-sent-seq { | |||
| description "The TWAMP mode that the Control-Client has | type uint32; | |||
| chosen for this control connection as set in the Mode | config false; | |||
| field of the Set-Up-Response message"; | description "Last sent sequence number"; | |||
| } | ||||
| leaf last-rcv-seq { | ||||
| type uint32; | ||||
| config false; | ||||
| description "Last received sequence number"; | ||||
| } | ||||
| description "TWAMP-Test maintenance statistics"; | ||||
| } | ||||
| /* | ||||
| * Configuration data nodes | ||||
| */ | ||||
| container twamp { | ||||
| description | ||||
| "TWAMP logical entity configuration grouping."; | ||||
| container client { | ||||
| if-feature control-client; | ||||
| presence client; | ||||
| description | ||||
| "Configuration of the TWAMP Control-Client logical entity."; | ||||
| leaf admin-state { | ||||
| type boolean; | ||||
| mandatory true; | ||||
| description | ||||
| "Indicates whether the device is allowed to operate | ||||
| as a TWAMP Control-Client."; | ||||
| } | } | |||
| leaf token { | ||||
| type binary { | list mode-preference-chain { | |||
| length "64"; | key priority; | |||
| unique mode; | ||||
| leaf priority { | ||||
| type uint16; | ||||
| description "Priority."; | ||||
| } | } | |||
| config "false"; | leaf mode { | |||
| description "64 octets, containing the concatenation of a | type twamp-modes; | |||
| 16-octet challenge, a 16-octet AES Session-key used | description "Supported TWAMP Mode."; | |||
| for encryption, and a 32-octet HMAC-SHA1 Session-key | ||||
| used for authentication"; | ||||
| } | ||||
| leaf client-iv{ | ||||
| type binary { | ||||
| length "16"; | ||||
| } | } | |||
| config "false"; | description | |||
| description "16 octets, Client-IV is generated randomly | "Indicates the preferred order of use for the | |||
| by the Control-Client."; | corresponding supported TWAMP Modes"; | |||
| } | } | |||
| uses key-management; | ||||
| list twamp-session-request { | list ctrl-connection { | |||
| key "test-session-name"; | key name; | |||
| description "Twamp session requests"; | description | |||
| leaf test-session-name { | "List of TWAMP Control-Client control connections. | |||
| Each item in the list describes a control connection | ||||
| that will be initiated by this Control-Client"; | ||||
| leaf name { | ||||
| type string; | type string; | |||
| description "A unique name for this test session to be | description | |||
| used as a key for this test session on the | "A unique name used as a key to identify this individual | |||
| Control-Client."; | TWAMP control connection on the Control-Client device."; | |||
| } | } | |||
| leaf sender-ip { | leaf client-ip { | |||
| type inet:ip-address; | type inet:ip-address; | |||
| description "Sender IP address"; | description | |||
| } | "The IP address of the local Control-Client device, | |||
| leaf sender-udp-port { | to be placed in the source IP address field of the | |||
| type dynamic-port-number; | IP header in TWAMP-Control (TCP) packets belonging | |||
| description "Sender UDP port"; | to this control connection. If not configured, the | |||
| device SHALL choose its own source IP address."; | ||||
| } | } | |||
| leaf reflector-ip { | leaf server-ip { | |||
| type inet:ip-address; | type inet:ip-address; | |||
| mandatory "true"; | mandatory true; | |||
| description "Reflector IP address."; | description | |||
| "The IP address belonging to the remote Server device, | ||||
| which the TWAMP-Control connection will be | ||||
| initiated to."; | ||||
| } | } | |||
| leaf reflector-udp-port { | ||||
| type dynamic-port-number; | leaf server-tcp-port { | |||
| description "Reflector UDP port. If this value is not | type inet:port-number; | |||
| set, the device shall use the same port number as | default 862; | |||
| defined in the server-tcp-port parameter of this | description | |||
| twamp-session-request's | "This parameter defines the TCP port number that is | |||
| parent client-control-connection."; | to be used by this outgoing TWAMP-Control connection. | |||
| Typically, this is the well-known TWAMP port number (862) | ||||
| as per RFC 5357 However, there are known | ||||
| realizations of TWAMP in the field that were implemented | ||||
| before this well-known port number was allocated. These | ||||
| early implementations allowed the port number to be | ||||
| configured. This parameter is therefore provided for | ||||
| backward compatibility reasons."; | ||||
| } | } | |||
| leaf timeout { | leaf control-packet-dscp { | |||
| type uint64; | type inet:dscp; | |||
| default "2"; | default 0; | |||
| description "The time (in seconds)Session-Reflector MUST | description | |||
| wait after receiving a Stop-Session message."; | "The DSCP value to be placed in the IP header of | |||
| TWAMP-Control (TCP) packets generated by this | ||||
| Control-Client."; | ||||
| } | } | |||
| leaf padding-length { | ||||
| type uint32{ | leaf key-id { | |||
| range "64..4096"; | type string { | |||
| length 1..80; | ||||
| } | } | |||
| description "The number of bytes of padding that should | description | |||
| be added to the UDP test packets generated by the | "The KeyID value that is selected | |||
| sender. Jumbo sized packets supported."; | for this TWAMP-Control connection."; | |||
| } | } | |||
| leaf dscp { | ||||
| type inet:dscp; | leaf max-count { | |||
| description "The DSCP value to be placed in the UDP | type uint32 { | |||
| header of TWAMP-Test packets generated by the | range 1024..4294967295; | |||
| Session-Sender, and in the UDP header of the TWAMP-Test | } | |||
| response packets generated by the Session-Reflector | default 32768; | |||
| for this test session."; | description | |||
| "This parameter limits the maximum Count value. | ||||
| 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."; | ||||
| } | } | |||
| leaf start-time { | ||||
| leaf client-tcp-port { | ||||
| type inet:port-number; | ||||
| config false; | ||||
| description | ||||
| "The source TCP port number used in the TWAMP-Control | ||||
| packets belonging to this control connection."; | ||||
| } | ||||
| leaf server-start-time { | ||||
| type uint64; | type uint64; | |||
| default "0"; | config false; | |||
| description "Time when the session is to be started | description | |||
| (but not before the Start-Sessions command is issued). | "The Start-Time advertized by the Server in the | |||
| This value is placed in the Start Time field of the | Server-Start message (RFC 4656, Section 3.1). This is | |||
| Request-TW-Session message. The default value of 0 | a timestamp representing the time when the current | |||
| indicates that the session will be started as soon | instantiation of the Server started operating."; | |||
| as the Start-Sessions message is received."; | ||||
| } | } | |||
| leaf repeat { | ||||
| type uint32; | leaf state { | |||
| default "0"; | type control-client-connection-state; | |||
| description "Determines if the test session is to be | config false; | |||
| run repeatedly. The default value of repeat is 0, | description | |||
| indicating that once the session has completed, it | "Indicates the currest state of the TWAMP-Control | |||
| will not be renegotiated and restarted. 1 thru 4,294,967,294 | connection state."; | |||
| indicate the number of repetitions, and the max value of | ||||
| 4,294,967,295 indicates repeat forever."; | ||||
| } | } | |||
| leaf repeat-interval { | ||||
| when "../repeat!='0'" { | leaf selected-mode { | |||
| description "When repeat is not 0, the test is to be | type twamp-modes; | |||
| repeated"; | config false; | |||
| } | description | |||
| type uint32; | "The TWAMP Mode that the Control-Client has chosen for | |||
| description "Repeat interval (in minutes)"; | this control connection as set in the Mode field of the | |||
| Set-Up-Response message (RFC 4656, Section 3.1)."; | ||||
| } | } | |||
| list pm-reg-list { | leaf token { | |||
| key "pm-index"; | type binary { | |||
| leaf pm-index { | length 64; | |||
| type uint16; | ||||
| description "One or more Numerical index values of a | ||||
| Registered Metric in the Performance Metric Registry"; | ||||
| } | } | |||
| description "A list of one or more pm-index values, | config false; | |||
| which communicate packet stream characteristics and one | description | |||
| or more metrics to be measured."; | "This parameter holds the 64 octets containing the | |||
| } | concatenation of a 16-octet Challenge, a 16-octet AES | |||
| leaf test-session-state { | Session-key used for encryption, and a 32-octet | |||
| type test-session-state; | HMAC-SHA1 Session-key used for authentication. | |||
| config "false"; | ||||
| description "Test session state"; | AES Session-key and HMAC Session-key are generated | |||
| randomly by the Control-Client. AES Session-key and | ||||
| HMAC Session-key MUST be generated with sufficient | ||||
| entropy not to reduce the security of the underlying | ||||
| cipher. The token itself is encrypted | ||||
| using the AES (Advanced Encryption Standard) in | ||||
| Cipher Block Chaining (CBC). Encryption MUST be | ||||
| performed using an Initialization Vector (IV) | ||||
| of zero and a key derived from the shared secret | ||||
| associated with KeyID. Challenge is the same as | ||||
| transmitted by the Server in the clear; see also the | ||||
| last paragraph of Section 6 in RFC 4656."; | ||||
| reference | ||||
| "RFC 4086: Randomness Requirements for Security"; | ||||
| } | } | |||
| leaf sid{ | ||||
| type string; | leaf client-iv { | |||
| config "false"; | type binary { | |||
| description "The SID allocated by the Server for | length 16; | |||
| this test session"; | } | |||
| config false; | ||||
| description | ||||
| "The Control-Client Initialization Vector (Client-IV) | ||||
| is generated randomly by the Control-Client. | ||||
| Client-IV merely needs to be unique (i.e., it MUST | ||||
| never be repeated for different sessions using the | ||||
| same secret key; a simple way to achieve that without | ||||
| the use of cumbersome state is to generate the | ||||
| Client-IV values using a cryptographically secure | ||||
| pseudo-random number source."; | ||||
| } | } | |||
| } | ||||
| } | ||||
| } | ||||
| container twamp-server{ | list test-session-request { | |||
| if-feature server; | key name; | |||
| presence "twamp-server"; | description | |||
| description "Twamp sever container"; | "Information associated with the Control-Client | |||
| leaf server-admin-state{ | for this test session"; | |||
| type boolean; | ||||
| mandatory "true"; | ||||
| description "Indicates whether this device is allowed to run | ||||
| TWAMP to respond to control sessions"; | ||||
| } | ||||
| leaf server-tcp-port { | ||||
| type inet:port-number; | ||||
| default "862"; | ||||
| description "This parameter defines the well known TCP port | ||||
| number that is used by TWAMP."; | ||||
| } | ||||
| leaf servwait { | ||||
| type uint32 { | ||||
| range 1..604800; | ||||
| } | ||||
| default 900; | ||||
| description "SERVWAIT (TWAMP Control (TCP) session timeout), | ||||
| default value is 900"; | ||||
| } | ||||
| leaf dscp { | ||||
| type inet:dscp; | ||||
| description "The DSCP value to be placed in the IP header of | ||||
| TCP TWAMP-Control packets generated by the Server"; | ||||
| } | ||||
| leaf count { | ||||
| type uint32 { | ||||
| range 1024..4294967295; | ||||
| } | ||||
| description "Parameter used in deriving a key from a | ||||
| shared secret "; | ||||
| } | ||||
| leaf max-count { | ||||
| type uint32 { | ||||
| range 1024..4294967295; | ||||
| } | ||||
| default 32768; | ||||
| description "Max count value."; | ||||
| } | ||||
| leaf modes { | ||||
| type mode; | ||||
| description "The bit mask of TWAMP Modes this Server | ||||
| instance is willing to support."; | ||||
| } | ||||
| list key-chain { | leaf name { | |||
| key "key-id"; | type string; | |||
| leaf key-id { | description | |||
| type string { | "A unique name to be used for identification of | |||
| length "1..80"; | this TWAMP-Test session on the Control-Client."; | |||
| } | ||||
| leaf sender-ip { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "The IP address of the Session-Sender device, | ||||
| which is to be placed in the source IP address | ||||
| field of the IP header in TWAMP-Test (UDP) packets | ||||
| belonging to this test session. This value will be | ||||
| used to populate the sender address field of the | ||||
| Request-TW-Session message. If not configured, | ||||
| the device SHALL choose its own source IP address."; | ||||
| } | ||||
| leaf sender-udp-port { | ||||
| type dynamic-port-number; | ||||
| description | ||||
| "The UDP port number that is to be used by | ||||
| the Session-Sender for this TWAMP-Test session. | ||||
| The number is restricted to the dynamic port range. | ||||
| A value of zero indicates that the Control-Client | ||||
| SHALL auto-allocate a UDP port number for this | ||||
| TWAMP-Test session. The configured | ||||
| (or auto-allocated) value is advertized in the | ||||
| Sender Port field of the Request-TW-session message | ||||
| (see also Section 3.5 of RFC 5357. Note that in the | ||||
| scenario where a device auto-allocates a UDP port | ||||
| number for a session, and the repeat parameter | ||||
| for that session indicates that it should be | ||||
| repeated, the device is free to auto-allocate a | ||||
| different UDP port number when it negotiates the | ||||
| next (repeated) iteration of this session."; | ||||
| } | ||||
| leaf reflector-ip { | ||||
| type inet:ip-address; | ||||
| mandatory true; | ||||
| description | ||||
| "The IP address belonging to the remote | ||||
| Session-Reflector device to which the TWAMP-Test | ||||
| session will be initiated. This value will be | ||||
| used to populate the receiver address field of | ||||
| the Request-TW-Session message."; | ||||
| } | ||||
| leaf reflector-udp-port { | ||||
| type dynamic-port-number; | ||||
| description | ||||
| "This parameter defines the UDP port number that | ||||
| will be used by the Session-Reflector for | ||||
| this TWAMP-Test session. The number is restricted | ||||
| to the dynamic port range and is to be placed in | ||||
| the Receiver Port field of the Request-TW-Session | ||||
| message. If this value is not set, the device SHALL | ||||
| use the same port number as defined in the | ||||
| server-tcp-port parameter of this | ||||
| test-session-request's parent | ||||
| twamp/client/ctrl-connection."; | ||||
| } | ||||
| leaf timeout { | ||||
| type uint64; | ||||
| default 2; | ||||
| description | ||||
| "The length of time (in seconds) that the | ||||
| Session-Reflector should continue to respond to | ||||
| packets belonging to this TWAMP-Test session after | ||||
| a Stop-Sessions TWAMP-Control message has been | ||||
| received (RFC 5357, Section 3.8). | ||||
| This value will be placed in the Timeout field of | ||||
| the Request-TW-Session message."; | ||||
| } | ||||
| leaf padding-length { | ||||
| type uint32 { | ||||
| range 64..4096; | ||||
| } | ||||
| description | ||||
| "The number of padding bytes to be added to the | ||||
| TWAMP-Test (UDP) packets generated by the | ||||
| Session-Sender. | ||||
| This value will be placed in the Padding Length | ||||
| field of the Request-TW-Session message | ||||
| (RFC 4656, Section 3.5)."; | ||||
| } | ||||
| leaf test-packet-dscp { | ||||
| type inet:dscp; | ||||
| description | ||||
| "The DSCP value to be placed in the IP header | ||||
| of TWAMP-Test packets generated by the | ||||
| Session-Sender, and in the UDP header of the | ||||
| TWAMP-Test response packets generated by the | ||||
| Session-Reflector for this test session. | ||||
| This value will be placed in the Type-P Descriptor | ||||
| field of the Request-TW-Session message (RFC 5357)."; | ||||
| } | ||||
| leaf start-time { | ||||
| type uint64; | ||||
| default 0; | ||||
| description | ||||
| "Time when the session is to be started | ||||
| (but not before the TWAMP Start-Sessions command | ||||
| is issued; see RFC 5357, Section 3.4). | ||||
| The start-time value is placed in the Start Time | ||||
| field of the Request-TW-Session message. | ||||
| The default value of 0 indicates that the session | ||||
| will be started as soon as the Start-Sessions message | ||||
| is received."; | ||||
| } | ||||
| leaf repeat { | ||||
| type uint32; | ||||
| default 0; | ||||
| description | ||||
| "This value determines if the TWAMP-Test session must | ||||
| be repeated. When a test session has completed, the | ||||
| repeat parameter is checked. | ||||
| The value of 0 indicates that the session MUST NOT be | ||||
| repeated. | ||||
| If the value is 1 through 4,294,967,294 then the test | ||||
| session SHALL be repeated using the information in | ||||
| repeat-interval parameter, and the parent | ||||
| TWAMP-Control connection for this test session is | ||||
| restarted to negotiate a new instance of this | ||||
| TWAMP-Test session. The implementation MUST decrement | ||||
| the value of repeat after determining a repeated | ||||
| session is expected. | ||||
| The value of 4,294,967,295 indicates that the test | ||||
| session SHALL be repeated *forever* using the | ||||
| information in repeat-interval parameter, and | ||||
| SHALL NOT decrement the value."; | ||||
| } | ||||
| leaf repeat-interval { | ||||
| when "../repeat!='0'" { | ||||
| description | ||||
| "This parameter determines the timing of repeated | ||||
| test sessions when repeat is more than 0. | ||||
| When the value of repeat-interval is 0, the | ||||
| negotiation of a new test session SHALL begin | ||||
| immediately after the previous test session | ||||
| completes. Otherwise, the Control-Client will | ||||
| wait for the number of minutes specified in the | ||||
| repeat-interval parameter before negotiating the | ||||
| new instance of this TWAMP-Test session."; | ||||
| } | ||||
| type uint32; | ||||
| default 0; | ||||
| description "Repeat interval (in minutes)"; | ||||
| } | ||||
| list pm-reg-list { | ||||
| key pm-index; | ||||
| leaf pm-index { | ||||
| type uint16; | ||||
| description | ||||
| "Numerical index value of a Registered Metric | ||||
| in the Performance Metric Registry | ||||
| (see ietf-ippm-metric-registry). Output statistics | ||||
| are specified in the corresponding Registry entry."; | ||||
| } | ||||
| description | ||||
| "A list of one or more Performance Metric Registry | ||||
| Index values, which communicate packet stream | ||||
| characteristics along with one or more metrics | ||||
| to be measured. | ||||
| All members of the pm-reg-list MUST have the same | ||||
| stream characteristics, such that they combine | ||||
| to specify all metrics that shall be measured on | ||||
| a single stream."; | ||||
| reference | ||||
| "ietf-ippm-metric-registry: | ||||
| Registry for Performance Metrics"; | ||||
| } | ||||
| leaf state { | ||||
| type test-session-state; | ||||
| config false; | ||||
| description | ||||
| "Indicates the TWAMP-Test session state (accepted or | ||||
| indication of an error); see Section 3.5 of | ||||
| RFC 5357."; | ||||
| } | ||||
| leaf sid { | ||||
| type string; | ||||
| config false; | ||||
| description | ||||
| "The SID allocated by the Server for this TWAMP-Test | ||||
| session, and communicated back to the Control-Client | ||||
| in the SID field of the Accept-Session message; | ||||
| see Section 4.3 of RFC 6038."; | ||||
| } | ||||
| } | } | |||
| description "Key IDs."; | ||||
| } | } | |||
| leaf secret-key { | ||||
| type string; | ||||
| description "Secret keys."; | ||||
| } | ||||
| description "KeyIDs with the respective secret keys."; | ||||
| } | } | |||
| list twamp-server-ctrl-connection { | container server { | |||
| key "client-ip client-tcp-port server-ip server-tcp-port"; | if-feature server; | |||
| config "false"; | presence server; | |||
| description "Twamp server control connections"; | description | |||
| leaf client-ip { | "Configuration of the TWAMP Server logical entity."; | |||
| type inet:ip-address; | ||||
| description "Client IP address"; | leaf admin-state { | |||
| } | type boolean; | |||
| leaf client-tcp-port { | mandatory true; | |||
| type inet:port-number; | description | |||
| description "Client TCP port"; | "Indicates whether the device is allowed to operate | |||
| } | as a TWAMP Server."; | |||
| leaf server-ip { | ||||
| type inet:ip-address; | ||||
| description "Server IP address"; | ||||
| } | } | |||
| leaf server-tcp-port { | leaf server-tcp-port { | |||
| type inet:port-number; | type inet:port-number; | |||
| description "Server TCP port"; | default 862; | |||
| description | ||||
| "This parameter defines the well known TCP port number | ||||
| that is used by TWAMP-Control. The Server will listen | ||||
| on this port number for incoming TWAMP-Control | ||||
| connections. Although this is defined as a fixed value | ||||
| (862) in RFC 5357, there are several realizations of | ||||
| TWAMP in the field that were implemented before this | ||||
| well-known port number was allocated. These early | ||||
| implementations allowed the port number to be | ||||
| configured. This parameter is therefore provided for | ||||
| backward compatibility reasons."; | ||||
| } | } | |||
| leaf server-ctrl-connection-state { | ||||
| type server-ctrl-connection-state; | leaf servwait { | |||
| description "Server control connection state"; | type uint32 { | |||
| range 1..604800; | ||||
| } | ||||
| default 900; | ||||
| description | ||||
| "TWAMP-Control (TCP) session timeout, in seconds | ||||
| (RFC 5357, Section 3.1))."; | ||||
| } | } | |||
| leaf dscp { | ||||
| leaf control-packet-dscp { | ||||
| type inet:dscp; | type inet:dscp; | |||
| description "The DSCP value used in the IP header of the | description | |||
| TCP control packets sent by the Server for this control | "The DSCP value to be placed in the IP header of | |||
| connection. This will usually be the same value as is | TWAMP-Control (TCP) packets generated by the Server. | |||
| configured for twamp-server:dscp under the twamp-server. | ||||
| However, in the event that the user re-configures | Section 3.1 of RFC 5357 specifies that the server | |||
| twamp-server:dscp after this control connection is already | SHOULD use the DSCP value from the Control-Client's | |||
| in progress, this read-only value will show the actual | TCP SYN. However, for practical purposes TWAMP will | |||
| dscp value in use by this control connection."; | typically be implemented using a general purpose TCP | |||
| } | stack provided by the underlying operating system, | |||
| leaf selected-mode { | and such a stack may not provide this information to the | |||
| type mode; | user. Consequently, it is not always possible to | |||
| description "The mode that was chosen for this control | implement the behavior described in RFC 5357 in an | |||
| connection as set in the Mode field of the | OS-portable version of TWAMP. The default behavior if | |||
| Set-Up-Response message."; | this item is not set is to use the DSCP value from | |||
| } | the Control-Client's TCP SYN, as per Section 3.1 | |||
| leaf key-id { | of RFC 5357."; | |||
| type string { | ||||
| length "1..80"; | ||||
| } | ||||
| description "The key-id value that is in use by this | ||||
| control connection."; | ||||
| } | } | |||
| leaf count { | leaf count { | |||
| type uint32 { | type uint32 { | |||
| range 1024..4294967295; | range 1024..4294967295; | |||
| } | } | |||
| description "The count value that is in use by this control | description | |||
| connection. This will usually be the same value as is | "Parameter used in deriving a key from a shared | |||
| configured under twamp-server. However, in the event that | secret as described in Section 3.1 of RFC 4656, | |||
| the user re-configured twamp-server:count after this | and are communicated to the Control-Client as part | |||
| control connection is already in progress, this read-only | of the Server Greeting message. | |||
| value will show the different count that is in use for | ||||
| this control connection."; | count MUST be a power of 2. | |||
| count MUST be at least 1024. | ||||
| count SHOULD be increased as more computing power | ||||
| becomes common."; | ||||
| } | } | |||
| leaf max-count { | leaf max-count { | |||
| type uint32 { | type uint32 { | |||
| range 1024..4294967295; | range 1024..4294967295; | |||
| } | } | |||
| description "The max-count value that is in use by this | default 32768; | |||
| control connection. This will usually be the same value | description | |||
| as is configured under twamp-server. However, in the | "This parameter limits the maximum Count value. | |||
| event that the user re-configured twamp-server:max-count | ||||
| after this control connection is already in progress, | If an attacking system sets the maximum value in | |||
| this read-only value will show the different max-count | Count (2**32), then the system under attack would stall | |||
| that is in use for this control connection."; | 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 value SHOULD be 32768."; | ||||
| } | } | |||
| leaf salt{ | ||||
| type binary { | leaf modes { | |||
| length "16"; | type twamp-modes; | |||
| } | description | |||
| description "Salt MUST be generated pseudo-randomly"; | "The bit mask of TWAMP Modes this Server instance | |||
| is willing to support; see IANA TWAMP Modes Registry."; | ||||
| } | } | |||
| leaf server-iv { | ||||
| type binary { | uses key-management; | |||
| length "16"; | list ctrl-connection { | |||
| key | ||||
| "client-ip client-tcp-port server-ip server-tcp-port"; | ||||
| config false; | ||||
| description | ||||
| "List of all incoming TWAMP-Control (TCP) connections"; | ||||
| leaf client-ip { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "The IP address on the remote Control-Client device, | ||||
| which is the source IP address used in the | ||||
| TWAMP-Control (TCP) packets belonging to this control | ||||
| connection."; | ||||
| } | } | |||
| description "16 octets, Server-IV is generated randomly | ||||
| by the Control-Client."; | leaf client-tcp-port { | |||
| } | type inet:port-number; | |||
| leaf challenge { | description | |||
| type binary { | "The source TCP port number used in the TWAMP-Control | |||
| length "16"; | (TCP) packets belonging to this control connection."; | |||
| } | } | |||
| description "Challenge is a random sequence of octets | ||||
| generated by the Server"; | ||||
| } | leaf server-ip { | |||
| } | type inet:ip-address; | |||
| } | description | |||
| "The IP address of the local Server device, which is | ||||
| the destination IP address used in the | ||||
| TWAMP-Control (TCP) packets belonging to this control | ||||
| connection."; | ||||
| } | ||||
| container twamp-session-sender{ | leaf server-tcp-port { | |||
| if-feature session-sender; | type inet:port-number; | |||
| presence "twamp-session-sender"; | description | |||
| description "Twamp session sender container"; | "The destination TCP port number used in the | |||
| leaf session-sender-admin-state { | TWAMP-Control (TCP) packets belonging to this | |||
| type boolean; | control connection. This will usually be the | |||
| mandatory "true"; | same value as the server-tcp-port configured | |||
| description "Indicates whether this device is allowed to run | under twamp/server. However, in the event that | |||
| TWAMP to initiate test sessions"; | the user re-configured server/server-tcp-port | |||
| } | after this control connection was initiated, this | |||
| list twamp-sender-test-session{ | value will indicate the server-tcp-port that is | |||
| key "test-session-name"; | actually in use for this control connection."; | |||
| description "Twamp sender test sessions"; | } | |||
| leaf test-session-name { | ||||
| type string; | leaf state { | |||
| description "A unique name for this test session to be | type server-ctrl-connection-state; | |||
| used as a key for this test session by the Session-Sender | description | |||
| logical entity."; | "Indicates the Server TWAMP-Control connection state."; | |||
| } | } | |||
| leaf ctrl-connection-name { | ||||
| type string; | leaf control-packet-dscp { | |||
| config "false"; | type inet:dscp; | |||
| description "The name of the parent control connection | description | |||
| that is responsible for negotiating this test session."; | "The DSCP value used in the IP header of the | |||
| } | TWAMP-Control (TCP) packets sent by the Server | |||
| leaf fill-mode { | for this control connection. This will usually | |||
| type fill-mode; | be the same value as is configured in the | |||
| default zero; | control-packet-dscp parameter under the twamp/server | |||
| description "Indicates whether the padding added to the | container. However, in the event that the user | |||
| UDP test packets will contain pseudo-random numbers, or | re-configures server/dscp after this control | |||
| whether it should consist of all zeroes."; | connection is already in progress, this read-only | |||
| } | value will show the actual dscp value in use by this | |||
| leaf number-of-packets { | TWAMP-Control connection."; | |||
| type uint32; | } | |||
| description "The overall number of UDP test packets to be | ||||
| transmitted by the sender for this test session."; | leaf selected-mode { | |||
| } | type twamp-modes; | |||
| choice packet-distribution { | description | |||
| description "Packet distributions, poisson or periodic"; | "The Mode that was chosen for this TWAMP-Control | |||
| case periodic { | connection as set in the Mode field of the | |||
| leaf periodic-interval { | Set-Up-Response message."; | |||
| type uint32; | } | |||
| description "Periodic interval"; | ||||
| leaf key-id { | ||||
| type string { | ||||
| length 1..80; | ||||
| } | } | |||
| leaf periodic-interval-units { | description | |||
| type units; | "The KeyID value that is in use by this TWAMP-Control | |||
| description "Periodic interval units"; | connection as selected by Control-Client."; | |||
| } | ||||
| leaf count { | ||||
| type uint32 { | ||||
| range 1024..4294967295; | ||||
| } | } | |||
| description | ||||
| "The count value that is in use by this TWAMP-Control | ||||
| connection. This will usually be the same value | ||||
| as is configured under twamp/server. However, in the | ||||
| event that the user re-configured server/count | ||||
| after this control connection is already in progress, | ||||
| this read-only value will show the actual count that | ||||
| is in use for this TWAMP-Control connection."; | ||||
| } | } | |||
| case poisson { | ||||
| leaf lambda{ | leaf max-count { | |||
| type uint32; | type uint32 { | |||
| description "The average rate of | range 1024..4294967295; | |||
| packet transmission."; | ||||
| } | } | |||
| leaf lambda-units{ | description | |||
| type uint32; | "The max-count value that is in use by this | |||
| description "Lambda units."; | TWAMP-Control connection. This will usually be the | |||
| same value as is configured under twamp/server. However, | ||||
| in the event that the user re-configured | ||||
| server/max-count after this control connection is | ||||
| already in progress, this read-only value will show the | ||||
| actual max-count that is in use for this | ||||
| control connection."; | ||||
| } | ||||
| leaf salt { | ||||
| type binary { | ||||
| length 16; | ||||
| } | } | |||
| leaf max-interval{ | description | |||
| type uint32; | "A parameter used in deriving a key from a | |||
| description "maximum time between packet | shared secret as described in Section 3.1 of RFC 4656. | |||
| transmissions."; | Salt MUST be generated pseudo-randomly (independently | |||
| of anything else in the RFC) and is communicated to | ||||
| the Control-Client as part of the Server Greeting | ||||
| message."; | ||||
| } | ||||
| leaf server-iv { | ||||
| type binary { | ||||
| length 16; | ||||
| } | } | |||
| leaf truncation-point-units{ | description | |||
| type units; | "The Server Initialization Vector | |||
| description "Truncation point units"; | (IV) is generated randomly by the Server."; | |||
| } | ||||
| leaf challenge { | ||||
| type binary { | ||||
| length 16; | ||||
| } | } | |||
| description | ||||
| "A random sequence of octets generated by the Server. | ||||
| As described in client/token, Challenge is used | ||||
| by the Control-Client to prove possession of a | ||||
| shared secret."; | ||||
| } | } | |||
| } | } | |||
| leaf sender-session-state { | ||||
| type sender-session-state; | ||||
| config "false"; | ||||
| description "Sender session state."; | ||||
| } | ||||
| uses maintenance-statistics; | ||||
| } | } | |||
| } | ||||
| container twamp-session-reflector { | container session-sender { | |||
| if-feature session-reflector; | if-feature session-sender; | |||
| presence "twamp-session-reflector"; | presence session-sender; | |||
| description "Twamp session reflector container"; | description | |||
| leaf session-reflector-admin-state { | "Configuration of the TWAMP Session-Sender | |||
| type boolean; | logical entity"; | |||
| mandatory "true"; | leaf admin-state { | |||
| description "Indicates whether this device is allowed to run | type boolean; | |||
| TWAMP to respond to test sessions"; | mandatory true; | |||
| } | description | |||
| leaf refwait { | "Indicates whether the device is allowed to operate | |||
| type uint32 { | as a TWAMP Session-Sender."; | |||
| range 1..604800; | } | |||
| list test-session{ | ||||
| key name; | ||||
| description | ||||
| "TWAMP Session-Sender test sessions."; | ||||
| leaf name { | ||||
| type string; | ||||
| description | ||||
| "A unique name for this TWAMP-Test session to be used | ||||
| for identifying this test session by the Session-Sender | ||||
| logical entity."; | ||||
| } | ||||
| leaf ctrl-connection-name { | ||||
| type string; | ||||
| config false; | ||||
| description | ||||
| "The name of the parent TWAMP-Control connection that | ||||
| is responsible for negotiating this TWAMP-Test session."; | ||||
| } | ||||
| leaf fill-mode { | ||||
| type padding-fill-mode; | ||||
| default zero; | ||||
| description | ||||
| "Indicates whether the padding added to the | ||||
| TWAMP-Test (UDP) packets will contain pseudo-random | ||||
| numbers, or whether it should consist of all zeroes, | ||||
| as per Section 4.2.1 of RFC 5357."; | ||||
| } | ||||
| leaf number-of-packets { | ||||
| type uint32; | ||||
| description | ||||
| "The overall number of TWAMP-Test (UDP) packets to | ||||
| be transmitted by the Session-Sender | ||||
| for this test session."; | ||||
| } | ||||
| choice packet-distribution { | ||||
| description | ||||
| "Indicates the distribution to be used for transmitting | ||||
| the TWAMP-Test (UDP) packets."; | ||||
| case periodic { | ||||
| leaf periodic-interval { | ||||
| type uint32; | ||||
| description | ||||
| "Indicates the period to wait between the first bits | ||||
| of TWAMP-Test (UDP) packet transmissions for | ||||
| this test session"; | ||||
| } | ||||
| leaf periodic-interval-units { | ||||
| type time-units; | ||||
| description "Periodic interval time unit."; | ||||
| reference | ||||
| "RFC 3432: Network performance measurement | ||||
| with periodic streams"; | ||||
| } | ||||
| } | ||||
| case poisson { | ||||
| leaf lambda { | ||||
| type uint32; | ||||
| description | ||||
| "Indicates the average packet transmission rate."; | ||||
| } | ||||
| leaf lambda-units { | ||||
| type uint32; | ||||
| description | ||||
| "Indicates the units of lambda in | ||||
| reciprocal seconds."; | ||||
| reference | ||||
| "RFC 3432: Network performance measurement | ||||
| with periodic streams"; | ||||
| } | ||||
| leaf max-interval { | ||||
| type uint32; | ||||
| description | ||||
| "Indicates the maximum time between packet | ||||
| transmissions."; | ||||
| } | ||||
| leaf truncation-point-units { | ||||
| type time-units; | ||||
| description "Time units to truncate."; | ||||
| } | ||||
| } | ||||
| } | ||||
| leaf state { | ||||
| type sender-session-state; | ||||
| config false; | ||||
| description | ||||
| "Indicates the Session-Sender test session state."; | ||||
| } | ||||
| uses maintenance-statistics; | ||||
| } | } | |||
| default 900; | ||||
| description "REFWAIT (TWAMP test session timeout), | ||||
| the default value is 900"; | ||||
| } | } | |||
| list twamp-reflector-test-session { | container session-reflector { | |||
| key "sender-ip sender-udp-port reflector-ip | if-feature session-reflector; | |||
| reflector-udp-port"; | presence session-reflector; | |||
| config "false"; | description | |||
| description "Twamp reflector test sessions"; | "Configuration of the TWAMP Session-Reflector | |||
| leaf sid{ | logical entity"; | |||
| type string; | ||||
| description "An auto-allocated identifier for this test | leaf admin-state { | |||
| session, that is unique within the context of this | type boolean; | |||
| Server/Session-Reflector device only. "; | mandatory true; | |||
| } | description | |||
| leaf sender-ip { | "Indicates whether the device is allowed to operate | |||
| type inet:ip-address; | as a TWAMP Session-Reflector."; | |||
| description "Sender IP address."; | ||||
| } | ||||
| leaf sender-udp-port { | ||||
| type dynamic-port-number; | ||||
| description "Sender UDP port."; | ||||
| } | ||||
| leaf reflector-ip { | ||||
| type inet:ip-address; | ||||
| description "Reflector IP address."; | ||||
| } | ||||
| leaf reflector-udp-port { | ||||
| type dynamic-port-number; | ||||
| description "Reflector UDP port."; | ||||
| } | ||||
| leaf parent-connection-client-ip { | ||||
| type inet:ip-address; | ||||
| description "Parent connction client IP address."; | ||||
| } | ||||
| leaf parent-connection-client-tcp-port { | ||||
| type inet:port-number; | ||||
| description "Parent connection client TCP port."; | ||||
| } | ||||
| leaf parent-connection-server-ip { | ||||
| type inet:ip-address; | ||||
| description "Parent connection server IP address."; | ||||
| } | } | |||
| leaf parent-connection-server-tcp-port { | ||||
| type inet:port-number; | leaf refwait { | |||
| description "Parent connection server TCP port"; | type uint32 { | |||
| range 1..604800; | ||||
| } | ||||
| default 900; | ||||
| description | ||||
| "The Session-Reflector MAY discontinue any session | ||||
| that has been started when no packet associated with | ||||
| that session has been received for REFWAIT seconds. | ||||
| The default value of REFWAIT SHALL be 900 seconds, and | ||||
| this waiting time MAY be configurable. This timeout | ||||
| allows a Session-Reflector to free up resources in | ||||
| case of failure."; | ||||
| } | } | |||
| leaf dscp { | ||||
| type inet:dscp; | list test-session { | |||
| description "The DSCP value present in the IP header of | key | |||
| TWAMP UDP test packets belonging to this test session."; | "sender-ip sender-udp-port | |||
| reflector-ip reflector-udp-port"; | ||||
| config false; | ||||
| description | ||||
| "TWAMP Session-Reflectortest sessions."; | ||||
| leaf sid { | ||||
| type string; | ||||
| description | ||||
| "An auto-allocated identifier for this TWAMP-Test | ||||
| session, that is unique within the context of this | ||||
| Server/Session-Reflector device only. This value | ||||
| will be communicated to the Control-Client that | ||||
| requested the test session in the SID field of the | ||||
| Accept-Session message."; | ||||
| } | ||||
| leaf sender-ip { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "The IP address on the remote device, which is the | ||||
| source IP address used in the TWAMP-Test | ||||
| (UDP) packets belonging to this test session."; | ||||
| } | ||||
| leaf sender-udp-port { | ||||
| type dynamic-port-number; | ||||
| description | ||||
| "The source UDP port used in the TWAMP-Test packets | ||||
| belonging to this test session."; | ||||
| } | ||||
| leaf reflector-ip { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "The IP address of the local Session-Reflector | ||||
| device, which is the destination IP address used | ||||
| in the TWAMP-Test (UDP) packets belonging to this test | ||||
| session."; | ||||
| } | ||||
| leaf reflector-udp-port { | ||||
| type dynamic-port-number; | ||||
| description | ||||
| "The destination UDP port number used in the | ||||
| TWAMP-Test (UDP) test packets belonging to this | ||||
| test session."; | ||||
| } | ||||
| leaf parent-connection-client-ip { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "The IP address on the Control-Client device, which | ||||
| is the source IP address used in the TWAMP-Control | ||||
| (TCP) packets belonging to the parent control | ||||
| connection that negotiated this test session."; | ||||
| } | ||||
| leaf parent-connection-client-tcp-port { | ||||
| type inet:port-number; | ||||
| description | ||||
| "The source TCP port number used in the TWAMP-Control | ||||
| (TCP) packets belonging to the parent control connection | ||||
| that negotiated this test session."; | ||||
| } | ||||
| leaf parent-connection-server-ip { | ||||
| type inet:ip-address; | ||||
| description | ||||
| "The IP address of the Server device, which is the | ||||
| destination IP address used in the TWAMP-Control | ||||
| (TCP) packets belonging to the parent control | ||||
| connection that negotiated this test session."; | ||||
| } | ||||
| leaf parent-connection-server-tcp-port { | ||||
| type inet:port-number; | ||||
| description | ||||
| "The destination TCP port number used in the TWAMP-Control | ||||
| (TCP) packets belonging to the parent control connection | ||||
| that negotiated this test session."; | ||||
| } | ||||
| leaf test-packet-dscp { | ||||
| type inet:dscp; | ||||
| description | ||||
| "The DSCP value present in the IP header of | ||||
| TWAMP-Test (UDP) packets belonging to this test | ||||
| session."; | ||||
| } | ||||
| uses maintenance-statistics; | ||||
| } | } | |||
| uses maintenance-statistics; | ||||
| } | } | |||
| } | } | |||
| } | } | |||
| } | ||||
| <CODE ENDS> | <CODE ENDS> | |||
| 6. Data Model Examples | 6. Data Model Examples | |||
| This section presents a simple but complete example of configuring | This section presents a simple but complete example of configuring | |||
| all four entities in Figure 1, based on the YANG module specified in | all four entities in Figure 1, based on the YANG module specified in | |||
| Section 5. The example is illustrative in nature, but aims to be | Section 5. The example is illustrative in nature, but aims to be | |||
| self-contained, i.e. were it to be executed in a real TWAMP | self-contained, i.e. were it to be executed in a real TWAMP | |||
| implementation it would lead to a correctly configured test session. | implementation it would lead to a correctly configured test session. | |||
| For completeness, examples are provided for both IPv4 and IPv6. | ||||
| A more elaborated example, which also includes authentication | A more elaborated example, which also includes authentication | |||
| parameters, is provided in Appendix A. | parameters, is provided in Appendix A. | |||
| 6.1. Control-Client | 6.1. Control-Client | |||
| The following configuration example shows a Control-Client with | The following configuration example shows a Control-Client with | |||
| client-admin-state enabled. In a real implementation following | client/admin-state enabled. In a real implementation following | |||
| Figure 2 this would permit the initiation of TWAMP-Control | Figure 2 this would permit the initiation of TWAMP-Control | |||
| connections and TWAMP-Test sessions. | connections and TWAMP-Test sessions. | |||
| <?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"> | |||
| <twamp-client> | <client> | |||
| <client-admin-state>true</client-admin-state> | <admin-state>true</admin-state> | |||
| </twamp-client> | </client> | |||
| </twamp> | </twamp> | |||
| </config> | </config> | |||
| The following configuration example shows a Control-Client with two | The following configuration example shows a Control-Client with two | |||
| instances of twamp-client-ctrl-connection, one called "RouterA" and | instances of client/ctrl-connection, one called "RouterA" and another | |||
| another called "RouterB". Each TWAMP-Control connection is to a | called "RouterB". | |||
| different Server. The control connection named "RouterA" has two | ||||
| test session requests. The TWAMP-Control connection named "RouterB" | Each TWAMP-Control connection is to a different Server. The control | |||
| has no TWAMP-Test session requests. | connection named "RouterA" has two test session requests. The TWAMP- | |||
| Control connection named "RouterB" has no TWAMP-Test session | ||||
| requests. | ||||
| <?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"> | |||
| <twamp-client> | <client> | |||
| <client-admin-state>true</client-admin-state> | <admin-state>true</admin-state> | |||
| <twamp-client-ctrl-connection> | <ctrl-connection> | |||
| <ctrl-connection-name>RouterA</ctrl-connection-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> | |||
| <twamp-session-request> | <test-session-request> | |||
| <test-session-name>Test1</test-session-name> | <name>Test1</name> | |||
| <sender-ip>10.1.1.1</sender-ip> | <sender-ip>10.1.1.1</sender-ip> | |||
| <sender-udp-port>50000</sender-udp-port> | <sender-udp-port>50000</sender-udp-port> | |||
| <reflector-ip>10.1.1.2</reflector-ip> | <reflector-ip>10.1.1.2</reflector-ip> | |||
| <reflector-udp-port>500001</reflector-udp-port> | <reflector-udp-port>500001</reflector-udp-port> | |||
| <start-time>0</start-time> | <start-time>0</start-time> | |||
| </twamp-session-request> | </test-session-request> | |||
| <twamp-session-request> | <test-session-request> | |||
| <test-session-name>Test2</test-session-name> | <name>Test2</name> | |||
| <sender-ip>203.0.113.1</sender-ip> | <sender-ip>203.0.113.1</sender-ip> | |||
| <sender-udp-port>4001</sender-udp-port> | <sender-udp-port>4001</sender-udp-port> | |||
| <reflector-ip>203.0.113.2</reflector-ip> | <reflector-ip>203.0.113.2</reflector-ip> | |||
| <reflector-udp-port>50001</reflector-udp-port> | <reflector-udp-port>50001</reflector-udp-port> | |||
| <start-time>0</start-time> | <start-time>0</start-time> | |||
| </twamp-session-request> | </test-session-request> | |||
| </twamp-client-ctrl-connection> | </ctrl-connection> | |||
| <twamp-client-ctrl-connection> | <ctrl-connection> | |||
| <ctrl-connection-name>RouterB</ctrl-connection-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> | |||
| </twamp-client-ctrl-connection> | </ctrl-connection> | |||
| </twamp-client> | </client> | |||
| </twamp> | ||||
| </config> | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | ||||
| <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> | ||||
| <client> | ||||
| <admin-state>true</admin-state> | ||||
| <ctrl-connection> | ||||
| <name>RouterA</name> | ||||
| <client-ip>2001:DB8:203:0:113::1</client-ip> | ||||
| <server-ip>2001:DB8:203:0:113::2</server-ip> | ||||
| <test-session-request> | ||||
| <name>Test1</name> | ||||
| <sender-ip>2001:DB8:10:1:1::1</sender-ip> | ||||
| <sender-udp-port>4000</sender-udp-port> | ||||
| <reflector-ip>2001:DB8:10:1:1::2</reflector-ip> | ||||
| <reflector-udp-port>5000</reflector-udp-port> | ||||
| <start-time>0</start-time> | ||||
| </test-session-request> | ||||
| <test-session-request> | ||||
| <name>Test2</name> | ||||
| <sender-ip>2001:DB8:203:0:113::1</sender-ip> | ||||
| <sender-udp-port>4001</sender-udp-port> | ||||
| <reflector-ip>2001:DB8:203:0:113::2</reflector-ip> | ||||
| <reflector-udp-port>5001</reflector-udp-port> | ||||
| <start-time>0</start-time> | ||||
| </test-session-request> | ||||
| </ctrl-connection> | ||||
| <ctrl-connection> | ||||
| <name>RouterB</name> | ||||
| <client-ip>2001:DB8:203:0:113::1</client-ip> | ||||
| <server-ip>2001:DB8:203:0:113::3</server-ip> | ||||
| </ctrl-connection> | ||||
| </client> | ||||
| </twamp> | </twamp> | |||
| </config> | </config> | |||
| 6.2. Server | 6.2. Server | |||
| This configuration example shows a Server with server-admin-state | This configuration example shows a Server with server/admin-state | |||
| enabled, which permits a device following Figure 2 to respond to | enabled, which permits a device following Figure 2 to respond to | |||
| TWAMP-Control connections and TWAMP-Test sessions. | TWAMP-Control connections and TWAMP-Test sessions. | |||
| <?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"> | |||
| <twamp-server> | <server> | |||
| <server-admin-state>true</server-admin-state> | <admin-state>true</admin-state> | |||
| </twamp-server> | </server> | |||
| </twamp> | </twamp> | |||
| </config> | </config> | |||
| The following example presents a Server with the TWAMP-Control | The following example presents a Server with the TWAMP-Control | |||
| connection corresponding to the control connection name (ctrl- | connection corresponding to the control connection name (client/ctrl- | |||
| connection-name) "RouterA" presented in Section 6.1. | connection/name) "RouterA" presented in Section 6.1. | |||
| <?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"> | |||
| <twamp-server> | <server> | |||
| <server-admin-state>true</server-admin-state> | <admin-state>true</admin-state> | |||
| <twamp-server-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> | |||
| <server-ctrl-connection-state> | <state> | |||
| active | active | |||
| </server-ctrl-connection-state> | </state> | |||
| </twamp-server-ctrl-connection> | </ctrl-connection> | |||
| </twamp-server> | </server> | |||
| </twamp> | ||||
| </data> | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | ||||
| <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> | ||||
| <server> | ||||
| <admin-state>true</admin-state> | ||||
| <ctrl-connection> | ||||
| <client-ip>2001:DB8:203:0:113::1</client-ip> | ||||
| <client-tcp-port>16341</client-tcp-port> | ||||
| <server-ip>2001:DB8:203:0:113::2</server-ip> | ||||
| <server-tcp-port>862</server-tcp-port> | ||||
| <state> | ||||
| active | ||||
| </state> | ||||
| </ctrl-connection> | ||||
| </server> | ||||
| </twamp> | </twamp> | |||
| </data> | </data> | |||
| 6.3. Session-Sender | 6.3. Session-Sender | |||
| The following configuration example shows a Session-Sender with the | The following configuration example shows a Session-Sender with the | |||
| two TWAMP-Test sessions presented in Section 6.1. | two TWAMP-Test sessions presented in Section 6.1. | |||
| <?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"> | |||
| <twamp-session-sender> | <session-sender> | |||
| <session-sender-admin-state>true</session-sender-admin-state> | <admin-state>true</admin-state> | |||
| <twamp-sender-test-session> | <test-session> | |||
| <test-session-name>Test1</test-session-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> | |||
| <periodic-interval-units>seconds</periodic-interval-units> | <periodic-interval-units>seconds</periodic-interval-units> | |||
| <sender-session-state>setup</sender-session-state> | <state>setup</state> | |||
| </twamp-sender-test-session> | </test-session> | |||
| <twamp-sender-test-session> | <test-session> | |||
| <test-session-name>Test2</test-session-name> | <name>Test2</name> | |||
| <ctrl-connection-name> | <ctrl-connection-name> | |||
| RouterA | RouterA | |||
| </ctrl-connection-name> | </ctrl-connection-name> | |||
| <number-of-packets>900</number-of-packets> | <number-of-packets>900</number-of-packets> | |||
| <lambda>1</lambda> | <lambda>1</lambda> | |||
| <lambda-units>1</lambda-units> | <lambda-units>1</lambda-units> | |||
| <max-interval>2</max-interval> | <max-interval>2</max-interval> | |||
| <truncation-point-units>seconds</truncation-point-units> | <truncation-point-units>seconds</truncation-point-units> | |||
| <sender-session-state>setup</sender-session-state> | <state>setup</state> | |||
| </twamp-sender-test-session> | </test-session> | |||
| </twamp-session-sender> | </session-sender> | |||
| </twamp> | </twamp> | |||
| </data> | </data> | |||
| 6.4. Session-Reflector | 6.4. Session-Reflector | |||
| The following example shows the two Session-Reflector TWAMP-Test | The following example shows the two Session-Reflector TWAMP-Test | |||
| sessions corresponding to the test sessions presented in Section 6.3. | sessions corresponding to the test sessions presented in Section 6.3. | |||
| <?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"> | |||
| <twamp-session-reflector> | <session-reflector> | |||
| <session-reflector-admin-state> | <admin-state> | |||
| true | true | |||
| </session-reflector-admin-state> | </admin-state> | |||
| <twamp-reflector-test-session> | <test-session> | |||
| <sender-ip>10.1.1.1</sender-ip> | <sender-ip>10.1.1.1</sender-ip> | |||
| <sender-udp-port>4000</sender-udp-port> | <sender-udp-port>4000</sender-udp-port> | |||
| <reflector-ip>10.1.1.2</reflector-ip> | <reflector-ip>10.1.1.2</reflector-ip> | |||
| <reflector-udp-port>50001</reflector-udp-port> | <reflector-udp-port>50001</reflector-udp-port> | |||
| <sid>1232</sid> | <sid>1232</sid> | |||
| <parent-connection-client-ip> | <parent-connection-client-ip> | |||
| 203.0.113.1 | 203.0.113.1 | |||
| </parent-connection-client-ip> | </parent-connection-client-ip> | |||
| <parent-connection-client-tcp-port> | <parent-connection-client-tcp-port> | |||
| 16341 | 16341 | |||
| skipping to change at page 48, line 19 ¶ | skipping to change at page 49, line 19 ¶ | |||
| <parent-connection-server-ip> | <parent-connection-server-ip> | |||
| 203.0.113.2 | 203.0.113.2 | |||
| </parent-connection-server-ip> | </parent-connection-server-ip> | |||
| <parent-connection-server-tcp-port> | <parent-connection-server-tcp-port> | |||
| 862 | 862 | |||
| </parent-connection-server-tcp-port> | </parent-connection-server-tcp-port> | |||
| <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> | |||
| </twamp-reflector-test-session> | </test-session> | |||
| <twamp-reflector-test-session> | <test-session> | |||
| <sender-ip>203.0.113.1</sender-ip> | <sender-ip>203.0.113.1</sender-ip> | |||
| <sender-udp-port>50000</sender-udp-port> | <sender-udp-port>50000</sender-udp-port> | |||
| <reflector-ip>192.68.0.2</reflector-ip> | <reflector-ip>192.68.0.2</reflector-ip> | |||
| <reflector-udp-port>50001</reflector-udp-port> | <reflector-udp-port>50001</reflector-udp-port> | |||
| <sid>178943</sid> | <sid>178943</sid> | |||
| <parent-connection-client-ip> | <parent-connection-client-ip> | |||
| 203.0.113.1 | 203.0.113.1 | |||
| </parent-connection-client-ip> | </parent-connection-client-ip> | |||
| <parent-connection-client-tcp-port> | <parent-connection-client-tcp-port> | |||
| 16341 | 16341 | |||
| skipping to change at page 48, line 42 ¶ | skipping to change at page 49, line 42 ¶ | |||
| <parent-connection-server-ip> | <parent-connection-server-ip> | |||
| 203.0.113.2 | 203.0.113.2 | |||
| </parent-connection-server-ip> | </parent-connection-server-ip> | |||
| <parent-connection-server-tcp-port> | <parent-connection-server-tcp-port> | |||
| 862 | 862 | |||
| </parent-connection-server-tcp-port> | </parent-connection-server-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> | |||
| </twamp-reflector-test-session> | </test-session> | |||
| </twamp-session-reflector> | </session-reflector> | |||
| </twamp> | </twamp> | |||
| </data> | </data> | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | ||||
| <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> | ||||
| <session-reflector> | ||||
| <admin-state>true</admin-state> | ||||
| <test-session> | ||||
| <sender-ip>10.1.1.1</sender-ip> | ||||
| <sender-udp-port>4000</sender-udp-port> | ||||
| <reflector-ip>10.1.1.2</reflector-ip> | ||||
| <reflector-udp-port>5000</reflector-udp-port> | ||||
| <sid>1232</sid> | ||||
| <parent-connection-client-ip> | ||||
| 203.0.113.1 | ||||
| </parent-connection-client-ip> | ||||
| <parent-connection-client-tcp-port> | ||||
| 16341 | ||||
| </parent-connection-client-tcp-port> | ||||
| <parent-connection-server-ip> | ||||
| 203.0.113.2 | ||||
| </parent-connection-server-ip> | ||||
| <parent-connection-server-tcp-port> | ||||
| 862 | ||||
| </parent-connection-server-tcp-port> | ||||
| <sent-packets>2</sent-packets> | ||||
| <rcv-packets>2</rcv-packets> | ||||
| <last-sent-seq>1</last-sent-seq> | ||||
| <last-rcv-seq>1</last-rcv-seq> | ||||
| </test-session> | ||||
| <test-session> | ||||
| <sender-ip>203.0.113.1</sender-ip> | ||||
| <sender-udp-port>4001</sender-udp-port> | ||||
| <reflector-ip>192.68.0.2</reflector-ip> | ||||
| <reflector-udp-port>5001</reflector-udp-port> | ||||
| <sid>178943</sid> | ||||
| <parent-connection-client-ip> | ||||
| 203.0.113.1 | ||||
| </parent-connection-client-ip> | ||||
| <parent-connection-client-tcp-port> | ||||
| 16341 | ||||
| </parent-connection-client-tcp-port> | ||||
| <parent-connection-server-ip> | ||||
| 203.0.113.2 | ||||
| </parent-connection-server-ip> | ||||
| <parent-connection-server-tcp-port> | ||||
| 862 | ||||
| </parent-connection-server-tcp-port> | ||||
| <sent-packets>21</sent-packets> | ||||
| <rcv-packets>21</rcv-packets> | ||||
| <last-sent-seq>20</last-sent-seq> | ||||
| <last-rcv-seq>20</last-rcv-seq> | ||||
| </test-session> | ||||
| </session-reflector> | ||||
| </twamp> | ||||
| </data> | ||||
| 7. Security Considerations | 7. Security Considerations | |||
| TBD | The YANG module defined in Section 5 is designed to be accessed, | |||
| among other protocols, via NETCONF [RFC6241]. Protocols like NETCONF | ||||
| use a secure transport layer like SSH that is mandatory to implement. | ||||
| The NETCONF Access Control Module (NACM) [RFC6536] provides the means | ||||
| to restrict access for particular users to a pre-configured set of | ||||
| NETCONF protocol operations and attributes. | ||||
| There are a number of nodes defined in this YANG module which are | ||||
| writeable. These data nodes may be considered sensitive and | ||||
| vulnerable to attacks in some network environments. Ability to write | ||||
| into these nodes without proper protection can have a negative effect | ||||
| on the devices that support this feature. | ||||
| Examples of 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. | ||||
| 8. IANA Considerations | 8. IANA Considerations | |||
| This document registers a URI in the IETF XML registry [RFC3688]. | This document registers a URI in the IETF XML registry [RFC3688]. | |||
| Following the format in [RFC3688], the following registration is | Following the format in [RFC3688], the following registration is | |||
| requested to be made. | requested to be made. | |||
| URI: urn:ietf:params:xml:ns:yang:ietf-twamp | URI: urn:ietf:params:xml:ns:yang:ietf-twamp | |||
| Registrant Contact: The IPPM WG of the IETF. | Registrant Contact: The IPPM WG of the IETF. | |||
| skipping to change at page 49, line 30 ¶ | skipping to change at page 52, line 7 ¶ | |||
| name: ietf-twamp | name: ietf-twamp | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-twamp | namespace: urn:ietf:params:xml:ns:yang:ietf-twamp | |||
| prefix: twamp | prefix: twamp | |||
| reference: RFC XXXX | reference: RFC XXXX | |||
| 9. Acknowledgements | 9. Acknowledgements | |||
| We thank Gregory Mirsky, Kevin D'Souza, and Robert Sherman for their | We thank Fred Baker, Kevin D'Souza, Gregory Mirsky, Brian Trammell | |||
| thorough and constructive reviews, comments and text suggestions. | and Robert Sherman for their thorough and constructive reviews, | |||
| comments and text suggestions. | ||||
| Haoxing Shen contributed to the definition of the YANG module in | Haoxing Shen contributed to the definition of the YANG module in | |||
| Section 5. | Section 5. | |||
| Ladislav Lhokta did thorough review of the YANG module and the | Jan Lindblad and Ladislav Lhokta did thorough reviews of the YANG | |||
| examples. | module and the examples in Appendix A. | |||
| Kostas Pentikousis is partially supported by FP7 UNIFY | Kostas Pentikousis is partially supported by FP7 UNIFY | |||
| (http://fp7-unify.eu), a research project partially funded by the | (http://fp7-unify.eu), a research project partially funded by the | |||
| European Community under the Seventh Framework Program (grant | European Community under the Seventh Framework Program (grant | |||
| agreement no. 619609). The views expressed here are those of the | agreement no. 619609). The views expressed here are those of the | |||
| authors only. The European Commission is not liable for any use that | authors only. The European Commission is not liable for any use that | |||
| may be made of the information in this document. | may be made of the information in this document. | |||
| 10. References | 10. References | |||
| skipping to change at page 50, line 39 ¶ | skipping to change at page 53, line 15 ¶ | |||
| [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
| the Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
| DOI 10.17487/RFC6020, October 2010, | DOI 10.17487/RFC6020, October 2010, | |||
| <http://www.rfc-editor.org/info/rfc6020>. | <http://www.rfc-editor.org/info/rfc6020>. | |||
| [RFC6038] Morton, A. and L. Ciavattone, "Two-Way Active Measurement | [RFC6038] Morton, A. and L. Ciavattone, "Two-Way Active Measurement | |||
| Protocol (TWAMP) Reflect Octets and Symmetrical Size | Protocol (TWAMP) Reflect Octets and Symmetrical Size | |||
| Features", RFC 6038, DOI 10.17487/RFC6038, October 2010, | Features", RFC 6038, DOI 10.17487/RFC6038, October 2010, | |||
| <http://www.rfc-editor.org/info/rfc6038>. | <http://www.rfc-editor.org/info/rfc6038>. | |||
| [RFC7717] Pentikousis, K., Ed., Zhang, E., and Y. Cui, | ||||
| "IKEv2-Derived Shared Secret Key for the One-Way Active | ||||
| Measurement Protocol (OWAMP) and Two-Way Active | ||||
| Measurement Protocol (TWAMP)", RFC 7717, | ||||
| DOI 10.17487/RFC7717, December 2015, | ||||
| <http://www.rfc-editor.org/info/rfc7717>. | ||||
| 10.2. Informative References | 10.2. Informative References | |||
| [I-D.ietf-ippm-metric-registry] | [I-D.ietf-ippm-metric-registry] | |||
| Bagnulo, M., Claise, B., Eardley, P., Morton, A., and A. | Bagnulo, M., Claise, B., Eardley, P., Morton, A., and A. | |||
| Akhter, "Registry for Performance Metrics", draft-ietf- | Akhter, "Registry for Performance Metrics", draft-ietf- | |||
| ippm-metric-registry-06 (work in progress), March 2016. | ippm-metric-registry-06 (work in progress), March 2016. | |||
| [I-D.ietf-netconf-restconf] | [I-D.ietf-netconf-restconf] | |||
| Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | |||
| Protocol", draft-ietf-netconf-restconf-10 (work in | Protocol", draft-ietf-netconf-restconf-15 (work in | |||
| progress), March 2016. | progress), July 2016. | |||
| [I-D.unify-nfvrg-challenges] | [I-D.unify-nfvrg-challenges] | |||
| Szabo, R., Csaszar, A., Pentikousis, K., Kind, M., Daino, | Szabo, R., Csaszar, A., Pentikousis, K., Kind, M., Daino, | |||
| D., Qiang, Z., and H. Woesner, "Unifying Carrier and Cloud | D., Qiang, Z., and H. Woesner, "Unifying Carrier and Cloud | |||
| Networks: Problem Statement and Challenges", draft-unify- | Networks: Problem Statement and Challenges", draft-unify- | |||
| nfvrg-challenges-03 (work in progress), January 2016. | nfvrg-challenges-03 (work in progress), January 2016. | |||
| [I-D.unify-nfvrg-devops] | [I-D.unify-nfvrg-devops] | |||
| Meirosu, C., Manzalini, A., Steinert, R., Marchetto, G., | Meirosu, C., Manzalini, A., Steinert, R., Marchetto, G., | |||
| Papafili, I., Pentikousis, K., and S. Wright, "DevOps for | Papafili, I., Pentikousis, K., and S. Wright, "DevOps for | |||
| skipping to change at page 51, line 46 ¶ | skipping to change at page 54, line 30 ¶ | |||
| [RFC5938] Morton, A. and M. Chiba, "Individual Session Control | [RFC5938] Morton, A. and M. Chiba, "Individual Session Control | |||
| Feature for the Two-Way Active Measurement Protocol | Feature for the Two-Way Active Measurement Protocol | |||
| (TWAMP)", RFC 5938, DOI 10.17487/RFC5938, August 2010, | (TWAMP)", RFC 5938, DOI 10.17487/RFC5938, August 2010, | |||
| <http://www.rfc-editor.org/info/rfc5938>. | <http://www.rfc-editor.org/info/rfc5938>. | |||
| [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, | |||
| <http://www.rfc-editor.org/info/rfc6241>. | <http://www.rfc-editor.org/info/rfc6241>. | |||
| [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration | ||||
| Protocol (NETCONF) Access Control Model", RFC 6536, | ||||
| DOI 10.17487/RFC6536, March 2012, | ||||
| <http://www.rfc-editor.org/info/rfc6536>. | ||||
| [RFC7426] Haleplidis, E., Ed., Pentikousis, K., Ed., Denazis, S., | [RFC7426] Haleplidis, E., Ed., Pentikousis, K., Ed., Denazis, S., | |||
| Hadi Salim, J., Meyer, D., and O. Koufopavlou, "Software- | Hadi Salim, J., Meyer, D., and O. Koufopavlou, "Software- | |||
| Defined Networking (SDN): Layers and Architecture | Defined Networking (SDN): Layers and Architecture | |||
| Terminology", RFC 7426, DOI 10.17487/RFC7426, January | Terminology", RFC 7426, DOI 10.17487/RFC7426, January | |||
| 2015, <http://www.rfc-editor.org/info/rfc7426>. | 2015, <http://www.rfc-editor.org/info/rfc7426>. | |||
| Appendix A. Detailed Data Model Examples | Appendix A. Detailed Data Model Examples | |||
| This appendix extends the example presented in Section 6 by | This appendix extends the example presented in Section 6 by | |||
| configuring more fields such as authentication parameters, dscp | configuring more fields such as authentication parameters, DSCP | |||
| values and so on. | values and so on. | |||
| A.1. Control-Client | A.1. Control-Client | |||
| <?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"> | |||
| <twamp-client> | <client> | |||
| <client-admin-state>true</client-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> | |||
| <priority>1</priority> | <priority>1</priority> | |||
| <mode>unauthenticated</mode> | <mode>unauthenticated</mode> | |||
| </mode-preference-chain> | </mode-preference-chain> | |||
| <key-chain> | <key-chain> | |||
| <key-id>KeyClient1ToRouterA</key-id> | <key-id>KeyClient1ToRouterA</key-id> | |||
| <secret-key>secret1</secret-key> | <secret-key>secret1</secret-key> | |||
| </key-chain> | </key-chain> | |||
| <key-chain> | <key-chain> | |||
| <key-id>KeyForRouterB</key-id> | <key-id>KeyForRouterB</key-id> | |||
| <secret-key>secret2</secret-key> | <secret-key>secret2</secret-key> | |||
| </key-chain> | </key-chain> | |||
| <twamp-client-ctrl-connection> | <ctrl-connection> | |||
| <ctrl-connection-name>RouterA</ctrl-connection-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> | |||
| <dscp>32</dscp> | <dscp>32</dscp> | |||
| <key-id>KeyClient1ToRouterA</key-id> | <key-id>KeyClient1ToRouterA</key-id> | |||
| <twamp-session-request> | <test-session-request> | |||
| <test-session-name>Test1</test-session-name> | <name>Test1</name> | |||
| <sender-ip>10.1.1.1</sender-ip> | <sender-ip>10.1.1.1</sender-ip> | |||
| <sender-udp-port>4000</sender-udp-port> | <sender-udp-port>4000</sender-udp-port> | |||
| <reflector-ip>10.1.1.2</reflector-ip> | <reflector-ip>10.1.1.2</reflector-ip> | |||
| <reflector-udp-port>5000</reflector-udp-port> | <reflector-udp-port>5000</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-state>ok</test-session-state> | <state>ok</state> | |||
| <sid>1232</sid> | <sid>1232</sid> | |||
| </twamp-session-request> | </test-session-request> | |||
| <twamp-session-request> | <test-session-request> | |||
| <test-session-name>Test2</test-session-name> | <name>Test2</name> | |||
| <sender-ip>203.0.113.1</sender-ip> | <sender-ip>203.0.113.1</sender-ip> | |||
| <sender-udp-port>4001</sender-udp-port> | <sender-udp-port>4001</sender-udp-port> | |||
| <reflector-ip>203.0.113.2</reflector-ip> | <reflector-ip>203.0.113.2</reflector-ip> | |||
| <reflector-udp-port>5001</reflector-udp-port> | <reflector-udp-port>5001</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-state>ok</test-session-state> | <state>ok</state> | |||
| <sid>178943</sid> | <sid>178943</sid> | |||
| </twamp-session-request> | </test-session-request> | |||
| </twamp-client-ctrl-connection> | </ctrl-connection> | |||
| </twamp-client> | </client> | |||
| </twamp> | ||||
| </data> | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | ||||
| <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> | ||||
| <client> | ||||
| <admin-state>true</admin-state> | ||||
| <mode-preference-chain> | ||||
| <priority>0</priority> | ||||
| <mode>authenticated</mode> | ||||
| </mode-preference-chain> | ||||
| <mode-preference-chain> | ||||
| <priority>1</priority> | ||||
| <mode>unauthenticated</mode> | ||||
| </mode-preference-chain> | ||||
| <key-chain> | ||||
| <key-id>KeyClient1ToRouterA</key-id> | ||||
| <secret-key>secret1</secret-key> | ||||
| </key-chain> | ||||
| <key-chain> | ||||
| <key-id>KeyForRouterB</key-id> | ||||
| <secret-key>secret2</secret-key> | ||||
| </key-chain> | ||||
| <ctrl-connection> | ||||
| <name>RouterA</name> | ||||
| <client-ip>2001:DB8:203:0:113::1</client-ip> | ||||
| <server-ip>2001:DB8:203:0:113::2</server-ip> | ||||
| <dscp>32</dscp> | ||||
| <key-id>KeyClient1ToRouterA</key-id> | ||||
| <test-session-request> | ||||
| <name>Test1</name> | ||||
| <sender-ip>2001:DB8:10:1:1::1</sender-ip> | ||||
| <sender-udp-port>4000</sender-udp-port> | ||||
| <reflector-ip>2001:DB8:10:1:1::2</reflector-ip> | ||||
| <reflector-udp-port>5000</reflector-udp-port> | ||||
| <padding-length>64</padding-length> | ||||
| <start-time>0</start-time> | ||||
| <state>ok</state> | ||||
| <sid>1232</sid> | ||||
| </test-session-request> | ||||
| <test-session-request> | ||||
| <name>Test2</name> | ||||
| <sender-ip>2001:DB8:203:0:113::1</sender-ip> | ||||
| <sender-udp-port>4001</sender-udp-port> | ||||
| <reflector-ip>2001:DB8:203:0:113::2</reflector-ip> | ||||
| <reflector-udp-port>5001</reflector-udp-port> | ||||
| <padding-length>128</padding-length> | ||||
| <start-time>0</start-time> | ||||
| <state>ok</state> | ||||
| <sid>178943</sid> | ||||
| </test-session-request> | ||||
| </ctrl-connection> | ||||
| </client> | ||||
| </twamp> | </twamp> | |||
| </data> | </data> | |||
| A.2. Server | A.2. Server | |||
| <?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"> | |||
| <twamp-server> | <server> | |||
| <server-admin-state>true</server-admin-state> | <admin-state>true</admin-state> | |||
| <servwait>1800</servwait> | <servwait>1800</servwait> | |||
| <dscp>32</dscp> | <dscp>32</dscp> | |||
| <modes>authenticated unauthenticated</modes> | <modes>authenticated unauthenticated</modes> | |||
| <count>1024</count> | <count>1024</count> | |||
| <key-chain> | <key-chain> | |||
| <key-id>KeyClient1ToRouterA</key-id> | <key-id>KeyClient1ToRouterA</key-id> | |||
| <secret-key>secret1</secret-key> | <secret-key>secret1</secret-key> | |||
| </key-chain> | </key-chain> | |||
| <key-chain> | <key-chain> | |||
| <key-id>KeyClient10ToRouterA</key-id> | <key-id>KeyClient10ToRouterA</key-id> | |||
| <secret-key>secret10</secret-key> | <secret-key>secret10</secret-key> | |||
| </key-chain> | </key-chain> | |||
| <twamp-server-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> | |||
| <server-ctrl-connection-state> | <state> | |||
| active | active | |||
| </server-ctrl-connection-state> | </state> | |||
| <dscp>32</dscp> | <dscp>32</dscp> | |||
| <selected-mode>unauthenticated</selected-mode> | <selected-mode>unauthenticated</selected-mode> | |||
| <key-id>KeyClient1ToRouterA</key-id> | <key-id>KeyClient1ToRouterA</key-id> | |||
| <count>1024</count> | <count>1024</count> | |||
| </twamp-server-ctrl-connection> | </ctrl-connection> | |||
| </twamp-server> | </server> | |||
| </twamp> | ||||
| </data> | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | ||||
| <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> | ||||
| <server> | ||||
| <admin-state>true</admin-state> | ||||
| <servwait>1800</servwait> | ||||
| <dscp>32</dscp> | ||||
| <modes>authenticated unauthenticated</modes> | ||||
| <count>1024</count> | ||||
| <key-chain> | ||||
| <key-id>KeyClient1ToRouterA</key-id> | ||||
| <secret-key>secret1</secret-key> | ||||
| </key-chain> | ||||
| <key-chain> | ||||
| <key-id>KeyClient10ToRouterA</key-id> | ||||
| <secret-key>secret10</secret-key> | ||||
| </key-chain> | ||||
| <ctrl-connection> | ||||
| <client-ip>2001:DB8:203:0:113::1</client-ip> | ||||
| <client-tcp-port>16341</client-tcp-port> | ||||
| <server-ip>2001:DB8:203:0:113::2</server-ip> | ||||
| <server-tcp-port>862</server-tcp-port> | ||||
| <state> | ||||
| active | ||||
| </state> | ||||
| <dscp>32</dscp> | ||||
| <selected-mode>unauthenticated</selected-mode> | ||||
| <key-id>KeyClient1ToRouterA</key-id> | ||||
| <count>1024</count> | ||||
| </ctrl-connection> | ||||
| </server> | ||||
| </twamp> | </twamp> | |||
| </data> | </data> | |||
| A.3. Session-Sender | A.3. Session-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"> | |||
| <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> | <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> | |||
| <twamp-session-sender> | <session-sender> | |||
| <session-sender-admin-state>true</session-sender-admin-state> | <admin-state>true</admin-state> | |||
| <twamp-sender-test-session> | <test-session> | |||
| <test-session-name>Test1</test-session-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> | |||
| <periodic-interval>1</periodic-interval> | <periodic-interval>1</periodic-interval> | |||
| <periodic-interval-units>seconds</periodic-interval-units> | <periodic-interval-units> | |||
| <sender-session-state>setup</sender-session-state> | seconds | |||
| </periodic-interval-units> | ||||
| <state>setup</state> | ||||
| <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> | |||
| </twamp-sender-test-session> | </test-session> | |||
| <twamp-sender-test-session> | <test-session> | |||
| <test-session-name>Test2</test-session-name> | <name>Test2</name> | |||
| <ctrl-connection-name> | <ctrl-connection-name> | |||
| RouterA | RouterA | |||
| </ctrl-connection-name> | </ctrl-connection-name> | |||
| <fill-mode>random</fill-mode> | <fill-mode>random</fill-mode> | |||
| <number-of-packets>900</number-of-packets> | <number-of-packets>900</number-of-packets> | |||
| <lambda>1</lambda> | <lambda>1</lambda> | |||
| <lambda-units>1</lambda-units> | <lambda-units>1</lambda-units> | |||
| <max-interval>2</max-interval> | <max-interval>2</max-interval> | |||
| <truncation-point-units>seconds</truncation-point-units> | <truncation-point-units>seconds</truncation-point-units> | |||
| <sender-session-state>setup</sender-session-state> | <state>setup</state> | |||
| <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> | |||
| </twamp-sender-test-session> | </test-session> | |||
| </twamp-session-sender> | </session-sender> | |||
| </twamp> | </twamp> | |||
| </data> | </data> | |||
| A.4. Session-Reflector | A.4. Session-Reflector | |||
| <?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"> | |||
| <twamp-session-reflector> | <session-reflector> | |||
| <session-reflector-admin-state> | <admin-state> | |||
| true | true | |||
| </session-reflector-admin-state> | </admin-state> | |||
| <twamp-reflector-test-session> | <test-session> | |||
| <sender-ip>10.1.1.1</sender-ip> | <sender-ip>10.1.1.1</sender-ip> | |||
| <sender-udp-port>4000</sender-udp-port> | <sender-udp-port>4000</sender-udp-port> | |||
| <reflector-ip>10.1.1.2</reflector-ip> | <reflector-ip>10.1.1.2</reflector-ip> | |||
| <reflector-udp-port>5000</reflector-udp-port> | <reflector-udp-port>5000</reflector-udp-port> | |||
| <sid>1232</sid> | <sid>1232</sid> | |||
| <parent-connection-client-ip> | <parent-connection-client-ip> | |||
| 203.0.113.1 | 203.0.113.1 | |||
| </parent-connection-client-ip> | </parent-connection-client-ip> | |||
| <parent-connection-client-tcp-port> | <parent-connection-client-tcp-port> | |||
| 16341 | 16341 | |||
| skipping to change at page 56, line 27 ¶ | skipping to change at page 60, line 29 ¶ | |||
| 203.0.113.2 | 203.0.113.2 | |||
| </parent-connection-server-ip> | </parent-connection-server-ip> | |||
| <parent-connection-server-tcp-port> | <parent-connection-server-tcp-port> | |||
| 862 | 862 | |||
| </parent-connection-server-tcp-port> | </parent-connection-server-tcp-port> | |||
| <dscp>32</dscp> | <dscp>32</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> | |||
| </twamp-reflector-test-session> | </test-session> | |||
| <twamp-reflector-test-session> | <test-session> | |||
| <sender-ip>203.0.113.1</sender-ip> | <sender-ip>203.0.113.1</sender-ip> | |||
| <sender-udp-port>4001</sender-udp-port> | <sender-udp-port>4001</sender-udp-port> | |||
| <reflector-ip>192.68.0.2</reflector-ip> | <reflector-ip>192.68.0.2</reflector-ip> | |||
| <reflector-udp-port>5001</reflector-udp-port> | <reflector-udp-port>5001</reflector-udp-port> | |||
| <sid>178943</sid> | <sid>178943</sid> | |||
| <parent-connection-client-ip> | <parent-connection-client-ip> | |||
| 203.0.113.1 | 203.0.113.1 | |||
| </parent-connection-client-ip> | </parent-connection-client-ip> | |||
| <parent-connection-client-tcp-port> | <parent-connection-client-tcp-port> | |||
| 16341 | 16341 | |||
| skipping to change at page 56, line 51 ¶ | skipping to change at page 61, line 5 ¶ | |||
| 203.0.113.2 | 203.0.113.2 | |||
| </parent-connection-server-ip> | </parent-connection-server-ip> | |||
| <parent-connection-server-tcp-port> | <parent-connection-server-tcp-port> | |||
| 862 | 862 | |||
| </parent-connection-server-tcp-port> | </parent-connection-server-tcp-port> | |||
| <dscp>32</dscp> | <dscp>32</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> | |||
| </twamp-reflector-test-session> | </test-session> | |||
| </session-reflector> | ||||
| </twamp> | ||||
| </data> | ||||
| </twamp-session-reflector> | <?xml version="1.0" encoding="utf-8"?> | |||
| <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | ||||
| <twamp xmlns="urn:ietf:params:xml:ns:yang:ietf-twamp"> | ||||
| <session-reflector> | ||||
| <admin-state>true</admin-state> | ||||
| <test-session> | ||||
| <sender-ip>2001:DB8:10:1:1::1</sender-ip> | ||||
| <sender-udp-port>4000</sender-udp-port> | ||||
| <reflector-ip>2001:DB8:10:1:1::2</reflector-ip> | ||||
| <reflector-udp-port>5000</reflector-udp-port> | ||||
| <sid>1232</sid> | ||||
| <parent-connection-client-ip> | ||||
| 2001:DB8:203:0:113::1 | ||||
| </parent-connection-client-ip> | ||||
| <parent-connection-client-tcp-port> | ||||
| 16341 | ||||
| </parent-connection-client-tcp-port> | ||||
| <parent-connection-server-ip> | ||||
| 2001:DB8:203:0:113::2 | ||||
| </parent-connection-server-ip> | ||||
| <parent-connection-server-tcp-port> | ||||
| 862 | ||||
| </parent-connection-server-tcp-port> | ||||
| <dscp>32</dscp> | ||||
| <sent-packets>2</sent-packets> | ||||
| <rcv-packets>2</rcv-packets> | ||||
| <last-sent-seq>1</last-sent-seq> | ||||
| <last-rcv-seq>1</last-rcv-seq> | ||||
| </test-session> | ||||
| <test-session> | ||||
| <sender-ip>2001:DB8:203:0:113::1</sender-ip> | ||||
| <sender-udp-port>4001</sender-udp-port> | ||||
| <reflector-ip>2001:DB8:192:68::2</reflector-ip> | ||||
| <reflector-udp-port>5001</reflector-udp-port> | ||||
| <sid>178943</sid> | ||||
| <parent-connection-client-ip> | ||||
| 2001:DB8:203:0:113::1 | ||||
| </parent-connection-client-ip> | ||||
| <parent-connection-client-tcp-port> | ||||
| 16341 | ||||
| </parent-connection-client-tcp-port> | ||||
| <parent-connection-server-ip> | ||||
| 2001:DB8:203:0:113::2 | ||||
| </parent-connection-server-ip> | ||||
| <parent-connection-server-tcp-port> | ||||
| 862 | ||||
| </parent-connection-server-tcp-port> | ||||
| <dscp>32</dscp> | ||||
| <sent-packets>21</sent-packets> | ||||
| <rcv-packets>21</rcv-packets> | ||||
| <last-sent-seq>20</last-sent-seq> | ||||
| <last-rcv-seq>20</last-rcv-seq> | ||||
| </test-session> | ||||
| </session-reflector> | ||||
| </twamp> | </twamp> | |||
| </data> | </data> | |||
| Appendix B. TWAMP Operational Commands | Appendix B. TWAMP Operational Commands | |||
| This document is targeted at configuration details for TWAMP. | ||||
| Operational actions such as how TWAMP sessions are started/stopped, | ||||
| how results are retrieved, or stored results are cleared, and so on, | ||||
| are not addressed by this configuration model and are out of scope of | ||||
| this document. | ||||
| TWAMP operational commands could be performed programmatically or | TWAMP operational commands could be performed programmatically or | |||
| manually, e.g. using a command-line interface (CLI). With respect to | manually, e.g. using a command-line interface (CLI). | |||
| programmability, YANG can be used to define NETCONF Remote Procedure | ||||
| Calls (RPC), therefore it would be possible to define RPC operations | With respect to programmability, YANG can be used to define NETCONF | |||
| for actions such as starting or stopping control or test sessions or | Remote Procedure Calls (RPC), therefore it would be, in principle, | |||
| groups of sessions; retrieving results; clearing stored results, and | possible to define TWAMP RPC operations for actions such as starting | |||
| so on. | or stopping control connections or test sessions or groups of | |||
| sessions; retrieving results; clearing stored results, and so on. | ||||
| However, [RFC5357] does not attempt to describe such operational | However, [RFC5357] does not attempt to describe such operational | |||
| actions, and it is likely that different TWAMP implementations could | actions. Refer also to Section 2 and the unlabeled links in | |||
| Figure 1. In actual deployments different TWAMP implementations may | ||||
| support different sets of operational commands, with different | support different sets of operational commands, with different | |||
| restrictions. Therefore, this document considers it the | restrictions. Therefore, this document considers it the | |||
| responsibility of the individual implementation to define its | responsibility of the individual implementation to define its | |||
| corresponding TWAMP operational commands data model. | corresponding TWAMP operational commands data model. | |||
| Authors' Addresses | Authors' Addresses | |||
| Ruth Civil | Ruth Civil | |||
| Ciena Corporation | Ciena Corporation | |||
| 307 Legget Drive | 307 Legget Drive | |||
| skipping to change at page 58, line 13 ¶ | skipping to change at page 63, line 13 ¶ | |||
| URI: www.ciena.com | URI: www.ciena.com | |||
| Al Morton | Al Morton | |||
| AT&T Labs | AT&T Labs | |||
| 200 Laurel Avenue South | 200 Laurel Avenue South | |||
| Middletown,, NJ 07748 | Middletown,, NJ 07748 | |||
| USA | USA | |||
| Phone: +1 732 420 1571 | Phone: +1 732 420 1571 | |||
| Fax: +1 732 368 1192 | Fax: +1 732 368 1192 | |||
| Email: acmorton@att.com | Email: acmorton@att.com | |||
| URI: http://home.comcast.net/~acmacm/ | ||||
| Lianshu Zheng | ||||
| Huawei Technologies | ||||
| China | ||||
| Email: vero.zheng@huawei.com | ||||
| Reshad Rahman | Reshad Rahman | |||
| Cisco Systems | Cisco Systems | |||
| 2000 Innovation Drive | 2000 Innovation Drive | |||
| Kanata, ON K2K 3E8 | Kanata, ON K2K 3E8 | |||
| Canada | Canada | |||
| Email: rrahman@cisco.com | Email: rrahman@cisco.com | |||
| Mahesh Jethanandani | Mahesh Jethanandani | |||
| Cisco Systems | Cisco Systems | |||
| 3700 Cisco Way | 3700 Cisco Way | |||
| San Jose, CA 95134 | San Jose, CA 95134 | |||
| USA | USA | |||
| Email: mjethanandani@gmail.com | Email: mjethanandani@gmail.com | |||
| Kostas Pentikousis (editor) | Kostas Pentikousis (editor) | |||
| Berlin | Travelping | |||
| Koernerstr. 7-10 | ||||
| Berlin 10785 | ||||
| Germany | Germany | |||
| Email: pentikousis@gmail.com | Email: k.pentikousis@travelping.com | |||
| Lianshu Zheng | ||||
| Huawei Technologies | ||||
| China | ||||
| Email: vero.zheng@huawei.com | ||||
| End of changes. 222 change blocks. | ||||
| 1687 lines changed or deleted | 1961 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/ | ||||