idnits 2.17.1 draft-mirsky-ippm-stamp-yang-00.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 359 has weird spacing: '...-status boo...' == Line 376 has weird spacing: '...sion-id uin...' == Line 379 has weird spacing: '...sion-id uin...' -- The document date (October 20, 2017) is 2378 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Outdated reference: A later version (-01) exists of draft-mirsky-ippm-stamp-00 ** Obsolete normative reference: RFC 6536 (Obsoleted by RFC 8341) Summary: 1 error (**), 0 flaws (~~), 5 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group G. Mirsky 3 Internet-Draft X. Min 4 Intended status: Standards Track ZTE Corp. 5 Expires: April 23, 2018 W. Luo 6 Ericsson 7 October 20, 2017 9 Simple Two-way Active Measurement Protocol (STAMP) Data Model 10 draft-mirsky-ippm-stamp-yang-00 12 Abstract 14 This document specifies the data model for implementations of Sender 15 and Reflector for Simple Two-way Active Measurement Protocol (STAMP) 16 mode using YANG. 18 Status of This Memo 20 This Internet-Draft is submitted in full conformance with the 21 provisions of BCP 78 and BCP 79. 23 Internet-Drafts are working documents of the Internet Engineering 24 Task Force (IETF). Note that other groups may also distribute 25 working documents as Internet-Drafts. The list of current Internet- 26 Drafts is at https://datatracker.ietf.org/drafts/current/. 28 Internet-Drafts are draft documents valid for a maximum of six months 29 and may be updated, replaced, or obsoleted by other documents at any 30 time. It is inappropriate to use Internet-Drafts as reference 31 material or to cite them other than as "work in progress." 33 This Internet-Draft will expire on April 23, 2018. 35 Copyright Notice 37 Copyright (c) 2017 IETF Trust and the persons identified as the 38 document authors. All rights reserved. 40 This document is subject to BCP 78 and the IETF Trust's Legal 41 Provisions Relating to IETF Documents 42 (https://trustee.ietf.org/license-info) in effect on the date of 43 publication of this document. Please review these documents 44 carefully, as they describe your rights and restrictions with respect 45 to this document. Code Components extracted from this document must 46 include Simplified BSD License text as described in Section 4.e of 47 the Trust Legal Provisions and are provided without warranty as 48 described in the Simplified BSD License. 50 Table of Contents 52 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 53 1.1. Conventions used in this document . . . . . . . . . . . . 2 54 1.1.1. Requirements Language . . . . . . . . . . . . . . . . 2 55 2. Scope, Model, and Applicability . . . . . . . . . . . . . . . 3 56 2.1. Data Model Parameters . . . . . . . . . . . . . . . . . . 3 57 2.1.1. STAMP-Sender . . . . . . . . . . . . . . . . . . . . 3 58 2.1.2. STAMP-Reflector . . . . . . . . . . . . . . . . . . . 4 59 3. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 4 60 3.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 4 61 3.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 9 62 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 27 63 5. Security Considerations . . . . . . . . . . . . . . . . . . . 27 64 6. Normative References . . . . . . . . . . . . . . . . . . . . 27 65 Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 29 66 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 29 68 1. Introduction 70 The Simple Two-way Active Measurement Protocol (STAMP) 71 [I-D.mirsky-ippm-stamp] can be used to measure performance parameters 72 of IP networks such as latency, jitter, and packet loss by sending 73 test packets and monitoring their experience in the network. The 74 STAMP protocol [Editor:ref to STAMP draft] in unauthenticated mode is 75 on-wire compatible with STAMP Light, mdiscussed in Appendix I 76 [RFC5357]. The STAMP Light is known to have many implementations 77 though no common management framework being defined, thus leaving 78 some aspects of test packet processing to interpretation. As one of 79 goals of STAMP is to support these variations, this document presents 80 their analysis; describes common STAMP and STAMP model while allowing 81 for STAMP extensions in the future. This document defines the STAMP 82 data model and specifies it formally using the YANG data modeling 83 language [RFC6020]. 85 1.1. Conventions used in this document 87 1.1.1. Requirements Language 89 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 90 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 91 "OPTIONAL" in this document are to be interpreted as described in BCP 92 14 [RFC2119] [RFC8174] when, and only when, they appear in all 93 capitals, as shown here. 95 2. Scope, Model, and Applicability 97 The scope of this document includes model of the STAMP as defined in 98 [Editor:ref to STAMP draft]. 100 o----------------------------------------------------------o 101 | Config client | 102 o----------------------------------------------------------o 103 || || 104 || NETCONF/RESTCONF || 105 || || 106 o-------------------o o-------------------o 107 | Config server | | Config server | 108 | | | | 109 +-------------------+ +-------------------+ 110 | STAMP Sender | <--- STAMP---> | STAMP Reflector | 111 +-------------------+ +-------------------+ 113 Figure 1: STAMP Reference Model 115 2.1. Data Model Parameters 117 This section describes all the parameters of the the stamp data 118 model. 120 2.1.1. STAMP-Sender 122 The stamp-session-sender container holds items that are related to 123 the configuration of the stamp Session-Sender logical entity. 125 The stamp-session-sender-state container holds information about the 126 state of the particular STAMP test session. 128 RPCs stamp-sender-start and stamp-sender-stop respectively start and 129 stop the referenced by session-id STAMP test session. 131 2.1.1.1. Controls for Test Session and Preforrmance Metric Calculation 133 The data model supports several scenarios for a STAMP Sender to 134 execute test sessions and calculate performance metrics: 136 The test mode in which the test packets are sent unbound in time 137 at defined by the parameter 'interval' in the stamp-session-sender 138 container frequency is referred as continuous mode. Performance 139 metrics in the continuous mode are calculated at period defined by 140 the parameter 'measurement-interval'. 142 The test mode that has specific number of the test packets 143 configured for the test session in the 'number-of-packets' 144 parameter is referred as periodic mode. The test session may be 145 repeated by the STAMP-Sender with the same parameters. The 146 'repeat' parameter defines number of tests and the 'repeat- 147 interval' - the interval between the consecuitive tests. The 148 performance metrics are calculated after each test session when 149 the interval defined by the 'session-timeout' expires. 151 2.1.2. STAMP-Reflector 153 The stamp-session-reflector container holds items that are related to 154 the configuration of the STAMP Session-Reflector logical entity. 156 The stamp-session-refl-state container holds Session-Reflector state 157 data for the particular STAMP test session. 159 3. Data Model 161 Creating STAMP data model presents number of challenges and among 162 them is identification of a test-session at Session-Reflector. A 163 Session-Reflector MAY require only as little as its IP and UDP port 164 number in received STAMP-Test packet to spawn new test session. More 165 so, to test processing of Class-of-Service along the same route in 166 Equal Cost Multi-Path environment Session-Sender may run STAMP test 167 sessions concurrently using the same source IP address, source UDP 168 port number, destination IP address, and destination UDP port number. 169 Thus the only parameter that can be used to differentiate these test 170 sessions would be DSCP value. The DSCP field may get re-marked along 171 the path and without use of [RFC7750] that will go undetected, but by 172 using five-tuple instead of four-tuple as a key we can ensure that 173 STAMP test packets that are considered as different test sessions 174 follow the same path even in ECMP environments. 176 3.1. Tree Diagram 178 module: ietf-stamp 179 +--rw stamp 180 | +--rw stamp-session-sender {session-sender}? 181 | | +--rw sender-enable? enable 182 | | +--rw test-session* [session-id] 183 | | +--rw session-id uint32 184 | | +--rw test-session-enable? enable 185 | | +--rw number-of-packets? union 186 | | +--rw packet-padding-size? uint32 187 | | +--rw interval? uint32 188 | | +--rw session-timeout? uint32 189 | | +--rw measurement-interval? uint32 190 | | +--rw repeat? union 191 | | +--rw repeat-interval? uint32 192 | | +--rw dscp-value? inet:dscp 193 | | +--rw test-session-reflector-mode? session-reflector-mode 194 | | +--rw sender-ip inet:ip-address 195 | | +--rw sender-udp-port inet:port-number 196 | | +--rw reflector-ip inet:ip-address 197 | | +--rw reflector-udp-port? inet:port-number 198 | | +--rw authentication-params! {stamp-authentication}? 199 | | | +--rw key-chain? kc:key-chain-ref 200 | | +--rw first-percentile? percentile 201 | | +--rw second-percentile? percentile 202 | | +--rw third-percentile? percentile 203 | +--rw stamp-session-reflector {session-reflector}? 204 | +--rw reflector-enable? enable 205 | +--rw ref-wait? uint32 206 | +--rw reflector-mode-state? session-reflector-mode 207 | +--rw test-session* [session-id] 208 | +--rw session-id uint32 209 | +--rw dscp-handling-mode? session-dscp-mode 210 | +--rw dscp-value? inet:dscp 211 | +--rw sender-ip inet:ip-address 212 | +--rw sender-udp-port inet:port-number 213 | +--rw reflector-ip inet:ip-address 214 | +--rw reflector-udp-port? inet:port-number 215 | +--rw authentication-params! {stamp-authentication}? 216 | +--rw key-chain? kc:key-chain-ref 217 +--ro stamp-state 218 +--ro stamp-session-sender-state {session-sender}? 219 | +--ro test-session-state* [session-id] 220 | +--ro session-id uint32 221 | +--ro sender-session-state? enumeration 222 | +--ro current-stats 223 | | +--ro start-time yang:date-and-time 224 | | +--ro packet-padding-size? uint32 225 | | +--ro interval? uint32 226 | | +--ro duplicate-packets? uint32 227 | | +--ro reordered-packets? uint32 228 | | +--ro sender-ip inet:ip-address 229 | | +--ro sender-udp-port inet:port-number 230 | | +--ro reflector-ip inet:ip-address 231 | | +--ro reflector-udp-port? inet:port-number 232 | | +--ro dscp? inet:dscp 233 | | +--ro sent-packets? uint32 234 | | +--ro rcv-packets? uint32 235 | | +--ro sent-packets-error? uint32 236 | | +--ro rcv-packets-error? uint32 237 | | +--ro last-sent-seq? uint32 238 | | +--ro last-rcv-seq? uint32 239 | | +--ro two-way-delay 240 | | | +--ro delay 241 | | | | +--ro min? yang:gauge32 242 | | | | +--ro max? yang:gauge32 243 | | | | +--ro avg? yang:gauge32 244 | | | +--ro delay-variation 245 | | | +--ro min? uint32 246 | | | +--ro max? uint32 247 | | | +--ro avg? uint32 248 | | +--ro one-way-delay-far-end 249 | | | +--ro delay 250 | | | | +--ro min? yang:gauge32 251 | | | | +--ro max? yang:gauge32 252 | | | | +--ro avg? yang:gauge32 253 | | | +--ro delay-variation 254 | | | +--ro min? uint32 255 | | | +--ro max? uint32 256 | | | +--ro avg? uint32 257 | | +--ro one-way-delay-near-end 258 | | | +--ro delay 259 | | | | +--ro min? yang:gauge32 260 | | | | +--ro max? yang:gauge32 261 | | | | +--ro avg? yang:gauge32 262 | | | +--ro delay-variation 263 | | | +--ro min? uint32 264 | | | +--ro max? uint32 265 | | | +--ro avg? uint32 266 | | +--ro low-percentile 267 | | | +--ro delay-percentile 268 | | | | +--ro rtt-delay? percentile 269 | | | | +--ro near-end-delay? percentile 270 | | | | +--ro far-end-delay? percentile 271 | | | +--ro delay-variation-percentile 272 | | | +--ro rtt-delay-variation? percentile 273 | | | +--ro near-end-delay-variation? percentile 274 | | | +--ro far-end-delay-variation? percentile 275 | | +--ro mid-percentile 276 | | | +--ro delay-percentile 277 | | | | +--ro rtt-delay? percentile 278 | | | | +--ro near-end-delay? percentile 279 | | | | +--ro far-end-delay? percentile 280 | | | +--ro delay-variation-percentile 281 | | | +--ro rtt-delay-variation? percentile 282 | | | +--ro near-end-delay-variation? percentile 283 | | | +--ro far-end-delay-variation? percentile 284 | | +--ro high-percentile 285 | | | +--ro delay-percentile 286 | | | | +--ro rtt-delay? percentile 287 | | | | +--ro near-end-delay? percentile 288 | | | | +--ro far-end-delay? percentile 289 | | | +--ro delay-variation-percentile 290 | | | +--ro rtt-delay-variation? percentile 291 | | | +--ro near-end-delay-variation? percentile 292 | | | +--ro far-end-delay-variation? percentile 293 | | +--ro two-way-loss 294 | | | +--ro loss-count? int32 295 | | | +--ro loss-ratio? percentage 296 | | | +--ro loss-burst-max? int32 297 | | | +--ro loss-burst-min? int32 298 | | | +--ro loss-burst-count? int32 299 | | +--ro one-way-loss-far-end 300 | | | +--ro loss-count? int32 301 | | | +--ro loss-ratio? percentage 302 | | | +--ro loss-burst-max? int32 303 | | | +--ro loss-burst-min? int32 304 | | | +--ro loss-burst-count? int32 305 | | +--ro one-way-loss-near-end 306 | | +--ro loss-count? int32 307 | | +--ro loss-ratio? percentage 308 | | +--ro loss-burst-max? int32 309 | | +--ro loss-burst-min? int32 310 | | +--ro loss-burst-count? int32 311 | +--ro history-stats* [id] 312 | +--ro id uint32 313 | +--ro end-time yang:date-and-time 314 | +--ro number-of-packets? uint32 315 | +--ro packet-padding-size? uint32 316 | +--ro interval? uint32 317 | +--ro duplicate-packets? uint32 318 | +--ro reordered-packets? uint32 319 | +--ro loss-packets? uint32 320 | +--ro sender-ip inet:ip-address 321 | +--ro sender-udp-port inet:port-number 322 | +--ro reflector-ip inet:ip-address 323 | +--ro reflector-udp-port? inet:port-number 324 | +--ro dscp? inet:dscp 325 | +--ro sent-packets? uint32 326 | +--ro rcv-packets? uint32 327 | +--ro sent-packets-error? uint32 328 | +--ro rcv-packets-error? uint32 329 | +--ro last-sent-seq? uint32 330 | +--ro last-rcv-seq? uint32 331 | +--ro two-way-delay 332 | | +--ro delay 333 | | | +--ro min? yang:gauge32 334 | | | +--ro max? yang:gauge32 335 | | | +--ro avg? yang:gauge32 336 | | +--ro delay-variation 337 | | +--ro min? uint32 338 | | +--ro max? uint32 339 | | +--ro avg? uint32 340 | +--ro one-way-delay-far-end 341 | | +--ro delay 342 | | | +--ro min? yang:gauge32 343 | | | +--ro max? yang:gauge32 344 | | | +--ro avg? yang:gauge32 345 | | +--ro delay-variation 346 | | +--ro min? uint32 347 | | +--ro max? uint32 348 | | +--ro avg? uint32 349 | +--ro one-way-delay-near-end 350 | +--ro delay 351 | | +--ro min? yang:gauge32 352 | | +--ro max? yang:gauge32 353 | | +--ro avg? yang:gauge32 354 | +--ro delay-variation 355 | +--ro min? uint32 356 | +--ro max? uint32 357 | +--ro avg? uint32 358 +--ro stamp-session-refl-state {session-reflector}? 359 +--ro reflector-light-admin-status boolean 360 +--ro test-session-state* [session-id] 361 +--ro session-id uint32 362 +--ro sent-packets? uint32 363 +--ro rcv-packets? uint32 364 +--ro sent-packets-error? uint32 365 +--ro rcv-packets-error? uint32 366 +--ro last-sent-seq? uint32 367 +--ro last-rcv-seq? uint32 368 +--ro sender-ip inet:ip-address 369 +--ro sender-udp-port inet:port-number 370 +--ro reflector-ip inet:ip-address 371 +--ro reflector-udp-port? inet:port-number 373 rpcs: 374 +---x stamp-sender-start 375 | +---w input 376 | +---w session-id uint32 377 +---x stamp-sender-stop 378 +---w input 379 +---w session-id uint32 381 3.2. YANG Module 383 file "ietf-stamp@2017-10-20.yang" 385 module ietf-stamp { 386 namespace "urn:ietf:params:xml:ns:yang:ietf-stamp"; 387 //namespace need to be assigned by IANA 388 prefix "ietf-stamp"; 390 import ietf-inet-types { 391 prefix inet; 392 } 393 import ietf-yang-types { 394 prefix yang; 395 } 396 import ietf-key-chain { 397 prefix kc; 398 } 400 organization 401 "IETF IPPM (IP Performance Metrics) Working Group"; 403 contact 404 "draft-mirsky-ippm-stamp-yang@tools.ietf.org"; 406 description "STAMP Data Model"; 408 revision "2017-10-20" { 409 description 410 "00 version. Base STAMP specification is covered"; 411 reference ""; 412 } 414 feature session-sender { 415 description 416 "This feature relates to the device functions as the 417 STAMP Session-Sender"; 418 } 420 feature session-reflector { 421 description 422 "This feature relates to the device functions as the 423 STAMP Session-Reflector"; 424 } 426 feature stamp-authentication { 427 description 428 "STAMP authentication supported"; 429 } 431 typedef enable { 432 type boolean; 433 description "enable"; 434 } 436 typedef session-reflector-mode { 437 type enumeration { 438 enum stateful { 439 description 440 "When the Session-Reflector is stateful, 441 i.e. is aware of STAMP-Test session state."; 442 } 443 enum stateless { 444 description 445 "When the Session-Reflector is stateless, 446 i.e. is not aware of the state of 447 STAMP-Test session."; 448 } 449 } 450 description "State of the Session-Reflector"; 451 } 453 typedef session-dscp-mode { 454 type enumeration { 455 enum copy-received-value { 456 description 457 "Use DSCP value copied from received 458 STAMP test packet of the test session."; 459 } 460 enum use-configured-value { 461 description 462 "Use DSCP value configured for this 463 test session on the Session-Reflector."; 464 } 465 } 466 description 467 "DSCP handling mode by Session-Reflector."; 468 } 470 typedef percentage { 471 type decimal64 { 472 fraction-digits 5; 473 } 474 description "Percentage"; 475 } 476 typedef percentile { 477 type decimal64 { 478 fraction-digits 2; 479 } 480 description 481 "Percentile is a measure used in statistics 482 indicating the value below which a given 483 percentage of observations in a group of 484 observations fall."; 485 } 487 grouping maintenance-statistics { 488 description "Maintenance statistics grouping"; 489 leaf sent-packets { 490 type uint32; 491 description "Packets sent"; 492 } 493 leaf rcv-packets { 494 type uint32; 495 description "Packets received"; 496 } 497 leaf sent-packets-error { 498 type uint32; 499 description "Packets sent error"; 500 } 501 leaf rcv-packets-error { 502 type uint32; 503 description "Packets received error"; 504 } 505 leaf last-sent-seq { 506 type uint32; 507 description "Last sent sequence number"; 508 } 509 leaf last-rcv-seq { 510 type uint32; 511 description "Last received sequence number"; 512 } 513 } 515 grouping stamp-session-percentile { 516 description "Percentile grouping"; 517 leaf first-percentile { 518 type percentile; 519 default 95.00; 520 description 521 "First percentile to report"; 522 } 523 leaf second-percentile { 524 type percentile; 525 default 99.00; 526 description 527 "Second percentile to report"; 528 } 529 leaf third-percentile { 530 type percentile; 531 default 99.90; 532 description 533 "Third percentile to report"; 534 } 535 } 537 grouping delay-statistics { 538 description "Delay statistics grouping"; 539 container delay { 540 description "Packets transmitted delay"; 541 leaf min { 542 type yang:gauge32; 543 units microseconds; 544 description 545 "Min of Packets transmitted delay"; 546 } 547 leaf max { 548 type yang:gauge32; 549 units microseconds; 550 description 551 "Max of Packets transmitted delay"; 552 } 553 leaf avg { 554 type yang:gauge32; 555 units microseconds; 556 description 557 "Avg of Packets transmitted delay"; 558 } 559 } 561 container delay-variation { 562 description 563 "Packets transmitted delay variation"; 564 leaf min { 565 type uint32; 566 units microseconds; 567 description 568 "Min of Packets transmitted 569 delay variation"; 570 } 571 leaf max { 572 type uint32; 573 units microseconds; 574 description 575 "Max of Packets transmitted 576 delay variation"; 577 } 578 leaf avg { 579 type uint32; 580 units microseconds; 581 description 582 "Avg of Packets transmitted 583 delay variation"; 584 } 585 } 586 } 587 grouping time-percentile-report { 588 description "Delay percentile report grouping"; 589 container delay-percentile { 590 description 591 "Report round-trip, near- and far-end delay"; 592 leaf rtt-delay { 593 type percentile; 594 description 595 "Percentile of round-trip delay"; 596 } 597 leaf near-end-delay { 598 type percentile; 599 description 600 "Percentile of near-end delay"; 601 } 602 leaf far-end-delay { 603 type percentile; 604 description 605 "Percentile of far-end delay"; 606 } 607 } 608 container delay-variation-percentile { 609 description 610 "Report round-trip, near- and far-end delay variation"; 611 leaf rtt-delay-variation { 612 type percentile; 613 description 614 "Percentile of round-trip delay-variation"; 615 } 616 leaf near-end-delay-variation { 617 type percentile; 618 description 619 "Percentile of near-end delay variation"; 621 } 622 leaf far-end-delay-variation { 623 type percentile; 624 description 625 "Percentile of far-end delay-variation"; 626 } 627 } 628 } 630 grouping packet-loss-statistics { 631 description 632 "Grouping for Packet Loss statistics"; 633 leaf loss-count { 634 type int32; 635 description 636 "Number of lost packets 637 during the test interval."; 638 } 639 leaf loss-ratio { 640 type percentage; 641 description 642 "Ratio of packets lost to packets 643 sent during the test interval."; 644 } 645 leaf loss-burst-max { 646 type int32; 647 description 648 "Maximum number of consequtively 649 lost packets during the test interval."; 650 } 651 leaf loss-burst-min { 652 type int32; 653 description 654 "Minimum number of consequtively 655 lost packets during the test interval."; 656 } 657 leaf loss-burst-count { 658 type int32; 659 description 660 "Number of occasions with packet 661 loss during the test interval."; 662 } 663 } 665 grouping session-parameters { 666 description 667 "Parameters common among 668 Session-Sender and Session-Reflector"; 669 leaf sender-ip { 670 type inet:ip-address; 671 mandatory true; 672 description "Sender IP address"; 673 } 674 leaf sender-udp-port { 675 type inet:port-number { 676 range "49152..65535"; 677 } 678 mandatory true; 679 description "Sender UDP port number"; 680 } 681 leaf reflector-ip { 682 type inet:ip-address; 683 mandatory true; 684 description "Reflector IP address"; 685 } 686 leaf reflector-udp-port { 687 type inet:port-number{ 688 range "862 | 49152..65535"; 689 } 690 default 862; 691 description "Reflector UDP port number"; 692 } 693 } 695 grouping session-auth-params { 696 description 697 "Grouping for STAMP authentication parameters"; 698 container authentication-params { 699 if-feature stamp-authentication; 700 presence "Enables STAMP authentication"; 701 description 702 "Parameters for STAMP Light authentication"; 703 leaf key-chain { 704 type kc:key-chain-ref; 705 description "Name of key-chain"; 706 } 707 } 708 } 710 /* Configuration Data */ 711 container stamp { 712 description 713 "Top level container for stamp configuration"; 715 container stamp-session-sender { 716 if-feature session-sender; 717 description "stamp Session-Sender container"; 719 leaf sender-enable { 720 type enable; 721 default "true"; 722 description 723 "Whether this network element is enabled to 724 act as STAMP Sender"; 725 } 727 list test-session { 728 key "session-id"; 729 unique "sender-ip sender-udp-port reflector-ip" 730 +" reflector-udp-port dscp-value"; 731 description 732 "This structure is a container of test session 733 managed objects"; 735 leaf session-id { 736 type uint32; 737 description "Session ID"; 738 } 740 leaf test-session-enable { 741 type enable; 742 default "true"; 743 description 744 "Whether this STAMP Test session is enabled"; 745 } 747 leaf number-of-packets { 748 type union { 749 type uint32 { 750 range 1..4294967294 { 751 description 752 "The overall number of UDP test packet 753 to be transmitted by the sender for this 754 test session"; 755 } 756 } 757 type enumeration { 758 enum forever { 759 description 760 "Indicates that the test session SHALL 761 be run *forever*."; 762 } 763 } 764 } 765 default 10; 766 description 767 "This value determines if the STAMP-Test session is 768 bound by number of test packets or not."; 769 } 771 leaf packet-padding-size { 772 type uint32; 773 default 27; 774 description 775 "Size of the Packet Padding. Suggested to run 776 Path MTU Discovery to avoid packet fragmentation in 777 IPv4 and packet blackholing in IPv6"; 778 } 780 leaf interval { 781 type uint32; 782 units microseconds; 783 description 784 "Time interval between transmission of two 785 consecutive packets in the test session in 786 microseconds"; 787 } 789 leaf session-timeout { 790 when "../number-of-packets != 'forever'" { 791 description 792 "Test session timeout only valid if the 793 test mode is periodic."; 794 } 795 type uint32; 796 units "seconds"; 797 default 900; 798 description 799 "The timeout value for the Session-Sender to 800 collect outstanding reflected packets."; 801 } 803 leaf measurement-interval { 804 when "../number-of-packets = 'forever'" { 805 description 806 "Valid only when the test to run forever, 807 i.e. continuously."; 808 } 809 type uint32; 810 units "seconds"; 811 default 60; 812 description 813 "Interval to calculate performance metric when 814 the test mode is 'continuous'."; 815 } 817 leaf repeat { 818 type union { 819 type uint32 { 820 range 0..4294967294; 821 } 822 type enumeration { 823 enum forever { 824 description 825 "Indicates that the test session SHALL 826 be repeated *forever* using the 827 information in repeat-interval 828 parameter, and SHALL NOT decrement 829 the value."; 830 } 831 } 832 } 833 default 0; 834 description 835 "This value determines if the STAMP-Test session must 836 be repeated. When a test session has completed, the 837 repeat parameter is checked. The default value 838 of 0 indicates that the session MUST NOT be repeated. 839 If the repeat value is 1 through 4,294,967,294 840 then the test session SHALL be repeated using the 841 information in repeat-interval parameter. 842 The implementation MUST decrement the value of repeat 843 after determining a repeated session is expected."; 844 } 846 leaf repeat-interval { 847 when "../repeat != '0'"; 848 type uint32; 849 units seconds; 850 default 0; 851 description 852 "This parameter determines the timing of repeated 853 STAMP-Test sessions when repeat is more than 0."; 854 } 856 leaf dscp-value { 857 type inet:dscp; 858 default 0; 859 description 860 "DSCP value to be set in the test packet."; 862 } 864 leaf test-session-reflector-mode { 865 type session-reflector-mode; 866 default "stateless"; 867 description 868 "The mode of STAMP-Reflector for the test session."; 869 } 871 uses session-parameters; 872 uses session-auth-params; 873 uses stamp-session-percentile; 874 } 875 } 877 container stamp-session-reflector { 878 if-feature session-reflector; 879 description 880 "stamp Session-Reflector container"; 881 leaf reflector-enable { 882 type enable; 883 default "true"; 884 description 885 "Whether this network element is enabled to 886 act as stamp Reflector"; 887 } 889 leaf ref-wait { 890 type uint32 { 891 range 1..604800; 892 } 893 units seconds; 894 default 900; 895 description 896 "REFWAIT(STAMP test session timeout in seconds), 897 the default value is 900"; 898 } 900 leaf reflector-mode-state { 901 type session-reflector-mode; 902 default stateless; 903 description 904 "The state of the mode of the stamp 905 Session-Reflector"; 906 } 908 list test-session { 909 key "session-id"; 910 unique "sender-ip sender-udp-port reflector-ip" 911 +" reflector-udp-port"; 912 description 913 "This structure is a container of test session 914 managed objects"; 916 leaf session-id { 917 type uint32; 918 description "Session ID"; 919 } 921 leaf dscp-handling-mode { 922 type session-dscp-mode; 923 default copy-received-value; 924 description 925 "Session-Reflector handling of DSCP: 926 - use value copied from received STAMP-Test packet; 927 - use value explicitly configured"; 928 } 930 leaf dscp-value { 931 when "../dscp-handling-mode = 'use-configured-value'"; 932 type inet:dscp; 933 default 0; 934 description 935 "DSCP value to be set in the reflected packet 936 if dscp-handling-mode is set to use-configured-value."; 937 } 939 uses session-parameters; 940 uses session-auth-params; 941 } 942 } 943 } 945 /* Operational state data nodes */ 946 container stamp-state{ 947 config "false"; 948 description 949 "Top level container for stamp state data"; 951 container stamp-session-sender-state { 952 if-feature session-sender; 953 description 954 "Session-Sender container for state data"; 955 list test-session-state{ 956 key "session-id"; 957 description 958 "This structure is a container of test session 959 managed objects"; 961 leaf session-id { 962 type uint32; 963 description "Session ID"; 964 } 966 leaf sender-session-state { 967 type enumeration { 968 enum active { 969 description "Test session is active"; 970 } 971 enum ready { 972 description "Test session is idle"; 973 } 974 } 975 description 976 "State of the particular stamp test 977 session at the sender"; 978 } 980 container current-stats { 981 description 982 "This container contains the results for the current 983 Measurement Interval in a Measurement session "; 984 leaf start-time { 985 type yang:date-and-time; 986 mandatory true; 987 description 988 "The time that the current Measurement Interval started"; 989 } 991 leaf packet-padding-size { 992 type uint32; 993 default 27; 994 description 995 "Size of the Packet Padding. Suggested to run 996 Path MTU Discovery to avoid packet fragmentation 997 in IPv4 and packet backholing in IPv6"; 998 } 1000 leaf interval { 1001 type uint32; 1002 units microseconds; 1003 description 1004 "Time interval between transmission of two 1005 consecutive packets in the test session"; 1007 } 1009 leaf duplicate-packets { 1010 type uint32; 1011 description "Duplicate packets"; 1012 } 1013 leaf reordered-packets { 1014 type uint32; 1015 description "Reordered packets"; 1016 } 1018 uses session-parameters; 1019 leaf dscp { 1020 type inet:dscp; 1021 description 1022 "The DSCP value that was placed in the header of 1023 STAMP UDP test packets by the Session-Sender."; 1024 } 1025 uses maintenance-statistics; 1027 container two-way-delay { 1028 description 1029 "two way delay result of the test session"; 1030 uses delay-statistics; 1031 } 1033 container one-way-delay-far-end { 1034 description 1035 "one way delay far-end of the test session"; 1036 uses delay-statistics; 1037 } 1039 container one-way-delay-near-end { 1040 description 1041 "one way delay near-end of the test session"; 1042 uses delay-statistics; 1043 } 1045 container low-percentile { 1046 when "/stamp/stamp-session-sender/" 1047 +"test-session[session-id]/" 1048 +"first-percentile != '0.00'" { 1049 description 1050 "Only valid if the 1051 the first-percentile is not NULL"; 1052 } 1053 description 1054 "Low percentile report"; 1055 uses time-percentile-report; 1056 } 1058 container mid-percentile { 1059 when "/stamp/stamp-session-sender/" 1060 +"test-session[session-id]/" 1061 +"second-percentile != '0.00'" { 1062 description 1063 "Only valid if the 1064 the first-percentile is not NULL"; 1065 } 1066 description 1067 "Mid percentile report"; 1068 uses time-percentile-report; 1069 } 1071 container high-percentile { 1072 when "/stamp/stamp-session-sender/" 1073 +"test-session[session-id]/" 1074 +"third-percentile != '0.00'" { 1075 description 1076 "Only valid if the 1077 the first-percentile is not NULL"; 1078 } 1079 description 1080 "High percentile report"; 1081 uses time-percentile-report; 1082 } 1084 container two-way-loss { 1085 description 1086 "two way loss count and ratio result of 1087 the test session"; 1088 uses packet-loss-statistics; 1089 } 1090 container one-way-loss-far-end { 1091 when "/stamp/stamp-session-sender/" 1092 +"test-session[session-id]/" 1093 +"test-session-reflector-mode = 'stateful'" { 1094 description 1095 "One-way statistic is only valid if the 1096 session-reflector is in stateful mode."; 1097 } 1098 description 1099 "one way loss count and ratio far-end of 1100 the test session"; 1101 uses packet-loss-statistics; 1102 } 1103 container one-way-loss-near-end { 1104 when "/stamp/stamp-session-sender/" 1105 +"test-session[session-id]/" 1106 +"test-session-reflector-mode = 'stateful'" { 1107 description 1108 "One-way statistic is only valid if the 1109 session-reflector is in stateful mode."; 1110 } 1111 description 1112 "one way loss count and ratio near-end of 1113 the test session"; 1114 uses packet-loss-statistics; 1115 } 1116 } 1118 list history-stats { 1119 key id; 1120 description 1121 "This container contains the results for the history 1122 Measurement Interval in a Measurement session "; 1123 leaf id { 1124 type uint32; 1125 description 1126 "The identifier for the Measurement Interval 1127 within this session"; 1128 } 1129 leaf end-time { 1130 type yang:date-and-time; 1131 mandatory true; 1132 description 1133 "The time that the Measurement Interval ended"; 1134 } 1135 leaf number-of-packets { 1136 type uint32; 1137 description 1138 "The overall number of UDP test packets to be 1139 transmitted by the sender for this test session"; 1140 } 1142 leaf packet-padding-size { 1143 type uint32; 1144 default 27; 1145 description 1146 "Size of the Packet Padding. Suggested to run 1147 Path MTU Discovery to avoid packet fragmentation 1148 in IPv4 and packet blackholing in IPv6"; 1149 } 1150 leaf interval { 1151 type uint32; 1152 units microseconds; 1153 description 1154 "Time interval between transmission of two 1155 consecutive packets in the test session"; 1156 } 1157 leaf duplicate-packets { 1158 type uint32; 1159 description "Duplicate packets"; 1160 } 1161 leaf reordered-packets { 1162 type uint32; 1163 description "Reordered packets"; 1164 } 1165 leaf loss-packets { 1166 type uint32; 1167 description "Loss packets"; 1168 } 1170 uses session-parameters; 1171 leaf dscp { 1172 type inet:dscp; 1173 description 1174 "The DSCP value that was placed in the header of 1175 STAMP UDP test packets by the Session-Sender."; 1176 } 1177 uses maintenance-statistics; 1179 container two-way-delay{ 1180 description 1181 "two way delay result of the test session"; 1182 uses delay-statistics; 1183 } 1184 container one-way-delay-far-end{ 1185 description 1186 "one way delay far end of the test session"; 1187 uses delay-statistics; 1188 } 1189 container one-way-delay-near-end{ 1190 description 1191 "one way delay near end of the test session"; 1192 uses delay-statistics; 1193 } 1194 } 1195 } 1196 } 1197 container stamp-session-refl-state { 1198 if-feature session-reflector; 1199 description 1200 "stamp Session-Reflector container for 1201 state data"; 1202 leaf reflector-light-admin-status { 1203 type boolean; 1204 mandatory "true"; 1205 description 1206 "Whether this network element is enabled to 1207 act as stamp Reflector"; 1208 } 1210 list test-session-state { 1211 key "session-id"; 1212 description 1213 "This structure is a container of test session 1214 managed objects"; 1216 leaf session-id { 1217 type uint32; 1218 description "Session ID"; 1219 } 1221 uses maintenance-statistics; 1222 uses session-parameters; 1223 } 1224 } 1225 } 1227 rpc stamp-sender-start { 1228 description 1229 "start the configured sender session"; 1230 input { 1231 leaf session-id { 1232 type uint32; 1233 mandatory true; 1234 description 1235 "The session to be started"; 1236 } 1237 } 1238 } 1240 rpc stamp-sender-stop { 1241 description 1242 "stop the configured sender session"; 1243 input { 1244 leaf session-id { 1245 type uint32; 1246 mandatory true; 1247 description 1248 "The session to be stopped"; 1249 } 1250 } 1251 } 1252 } 1254 1256 4. IANA Considerations 1258 This document registers a URI in the IETF XML registry [RFC3688]. 1259 Following the format in [RFC3688], the following registration is 1260 requested to be made. 1262 URI: urn:ietf:params:xml:ns:yang:ietf-stamp 1264 Registrant Contact: The IPPM WG of the IETF. 1266 XML: N/A, the requested URI is an XML namespace. 1268 This document registers a YANG module in the YANG Module Names 1269 registry [RFC6020]. 1271 name: ietf-stamp 1273 namespace: urn:ietf:params:xml:ns:yang:ietf-stamp 1275 prefix: stamp 1277 reference: RFC XXXX 1279 5. Security Considerations 1281 The configuration, state, action data defined in this document may be 1282 accessed via the NETCONF protocol [RFC6241]. SSH [RFC6242] is 1283 mandatory secure transport that is the lowest NETCONF layer. The 1284 NETCONF access control model [RFC6536] provides means to restrict 1285 access for particular NETCONF users to a pre-configured subset of all 1286 available NETCONF protocol operations and content. 1288 6. Normative References 1290 [I-D.mirsky-ippm-stamp] 1291 Mirsky, G. and G. Jun, "Simple Two-way Active Measurement 1292 Protocol", draft-mirsky-ippm-stamp-00 (work in progress), 1293 October 2017. 1295 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1296 Requirement Levels", BCP 14, RFC 2119, 1297 DOI 10.17487/RFC2119, March 1997, 1298 . 1300 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 1301 DOI 10.17487/RFC3688, January 2004, 1302 . 1304 [RFC5357] Hedayat, K., Krzanowski, R., Morton, A., Yum, K., and J. 1305 Babiarz, "A Two-Way Active Measurement Protocol (TWAMP)", 1306 RFC 5357, DOI 10.17487/RFC5357, October 2008, 1307 . 1309 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1310 the Network Configuration Protocol (NETCONF)", RFC 6020, 1311 DOI 10.17487/RFC6020, October 2010, 1312 . 1314 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1315 and A. Bierman, Ed., "Network Configuration Protocol 1316 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 1317 . 1319 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 1320 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 1321 . 1323 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 1324 Protocol (NETCONF) Access Control Model", RFC 6536, 1325 DOI 10.17487/RFC6536, March 2012, 1326 . 1328 [RFC7750] Hedin, J., Mirsky, G., and S. Baillargeon, "Differentiated 1329 Service Code Point and Explicit Congestion Notification 1330 Monitoring in the Two-Way Active Measurement Protocol 1331 (TWAMP)", RFC 7750, DOI 10.17487/RFC7750, February 2016, 1332 . 1334 [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 1335 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 1336 May 2017, . 1338 Appendix A. Acknowledgements 1340 Authors recognize and appreciate valuable comments providen by Adrian 1341 Pan. 1343 Authors' Addresses 1345 Greg Mirsky 1346 ZTE Corp. 1348 Email: gregimirsky@gmail.com 1350 Xiao Min 1351 ZTE Corp. 1353 Email: xiao.min2@zte.com.cn 1355 Wei S Luo 1356 Ericsson 1358 Email: wei.s.luo@ericsson.com