idnits 2.17.1 draft-ietf-lmap-yang-12.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 179 has weird spacing: '...version str...' == Line 251 has weird spacing: '...pletion yan...' == Line 270 has weird spacing: '...nterval uin...' == Line 286 has weird spacing: '...rw time yan...' == Line 294 has weird spacing: '...nnected emp...' -- The document date (April 21, 2017) is 2561 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 (-18) exists of draft-ietf-lmap-information-model-16 == Outdated reference: A later version (-36) exists of draft-ietf-netconf-netconf-client-server-01 == Outdated reference: A later version (-08) exists of draft-ietf-netmod-entity-02 -- Obsolete informational reference (is this intentional?): RFC 5246 (Obsoleted by RFC 8446) -- Obsolete informational reference (is this intentional?): RFC 6536 (Obsoleted by RFC 8341) -- Obsolete informational reference (is this intentional?): RFC 7223 (Obsoleted by RFC 8343) Summary: 0 errors (**), 0 flaws (~~), 9 warnings (==), 4 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group J. Schoenwaelder 3 Internet-Draft V. Bajpai 4 Intended status: Standards Track Jacobs University Bremen 5 Expires: October 23, 2017 April 21, 2017 7 A YANG Data Model for LMAP Measurement Agents 8 draft-ietf-lmap-yang-12.txt 10 Abstract 12 This document defines a data model for Large-Scale Measurement 13 Platforms (LMAP). The data model is defined using the YANG data 14 modeling language. 16 Status of This Memo 18 This Internet-Draft is submitted in full conformance with the 19 provisions of BCP 78 and BCP 79. 21 Internet-Drafts are working documents of the Internet Engineering 22 Task Force (IETF). Note that other groups may also distribute 23 working documents as Internet-Drafts. The list of current Internet- 24 Drafts is at http://datatracker.ietf.org/drafts/current/. 26 Internet-Drafts are draft documents valid for a maximum of six months 27 and may be updated, replaced, or obsoleted by other documents at any 28 time. It is inappropriate to use Internet-Drafts as reference 29 material or to cite them other than as "work in progress." 31 This Internet-Draft will expire on October 23, 2017. 33 Copyright Notice 35 Copyright (c) 2017 IETF Trust and the persons identified as the 36 document authors. All rights reserved. 38 This document is subject to BCP 78 and the IETF Trust's Legal 39 Provisions Relating to IETF Documents 40 (http://trustee.ietf.org/license-info) in effect on the date of 41 publication of this document. Please review these documents 42 carefully, as they describe your rights and restrictions with respect 43 to this document. Code Components extracted from this document must 44 include Simplified BSD License text as described in Section 4.e of 45 the Trust Legal Provisions and are provided without warranty as 46 described in the Simplified BSD License. 48 Table of Contents 50 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 51 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 2 52 1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 53 2. Data Model Overview . . . . . . . . . . . . . . . . . . . . . 3 54 3. Relationship to the Information Model . . . . . . . . . . . . 8 55 4. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 10 56 4.1. LMAP Common YANG Module . . . . . . . . . . . . . . . . . 10 57 4.2. LMAP Control YANG Module . . . . . . . . . . . . . . . . 18 58 4.3. LMAP Report YANG Module . . . . . . . . . . . . . . . . . 39 59 5. Security Considerations . . . . . . . . . . . . . . . . . . . 44 60 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46 61 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 47 62 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 48 63 8.1. Normative References . . . . . . . . . . . . . . . . . . 48 64 8.2. Informative References . . . . . . . . . . . . . . . . . 48 65 Appendix A. Example Parameter Extension Module . . . . . . . . . 50 66 Appendix B. Example Configuration . . . . . . . . . . . . . . . 52 67 Appendix C. Example Report . . . . . . . . . . . . . . . . . . . 55 68 Appendix D. Change History . . . . . . . . . . . . . . . . . . . 57 69 D.1. Non-editorial Changes since -07 . . . . . . . . . . . . . 57 70 D.2. Non-editorial Changes since -06 . . . . . . . . . . . . . 58 71 D.3. Non-editorial Changes since -05 . . . . . . . . . . . . . 58 72 D.4. Non-editorial Changes since -04 . . . . . . . . . . . . . 58 73 D.5. Non-editorial Changes since -03 . . . . . . . . . . . . . 59 74 D.6. Non-editorial Changes since -02 . . . . . . . . . . . . . 59 75 D.7. Non-editorial Changes since -01 . . . . . . . . . . . . . 59 76 D.8. Non-editorial Changes since -00 . . . . . . . . . . . . . 60 77 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 60 79 1. Introduction 81 This document defines a data model for Large-Scale Measurement 82 Platforms (LMAP) [RFC7594]. The data model is defined using the YANG 83 [RFC7950] data modeling language. It is based on the LMAP 84 Information Model [I-D.ietf-lmap-information-model]. 86 1.1. Terminology 88 This document uses the LMAP terminology defined in [RFC7594]. 90 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 91 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 92 document are to be interpreted as described in [RFC2119]. 94 1.2. Tree Diagrams 96 A simplified graphical representation of the data model is used in 97 this document. The meaning of the symbols in these diagrams is as 98 follows: 100 o Brackets "[" and "]" enclose list keys. 102 o Abbreviations before data node names: "rw" means configuration 103 (read-write), "ro" means state data (read-only), and "w" means RPC 104 input data (write-only). 106 o Symbols after data node names: "?" means an optional node, "!" 107 means a presence container, and "*" denotes a list and leaf-list. 109 o Parentheses enclose choice and case nodes, and case nodes are also 110 marked with a colon (":"). 112 o Ellipsis ("...") stands for contents of subtrees that are not 113 shown. 115 2. Data Model Overview 117 The LMAP framework has three basic elements: Measurement Agents, 118 Controllers, and Collectors. Measurement Agents initiate the actual 119 measurements, which are called Measurement Tasks in the LMAP 120 terminology. The Controller instructs one or more MAs and 121 communicates the set of Measurement Tasks an MA should perform and 122 when. The Collector accepts Reports from the MAs with the Results 123 from their Measurement Tasks. 125 The YANG data model for LMAP has been split into three modules: 127 1. The module ietf-lmap-common.yang provides common definitions such 128 as LMAP specific data types. 130 2. The module ietf-lmap-control.yang defines the data structures 131 exchanged between a Controller and Measurement Agents. 133 3. The module ietf-lmap-report.yang defines the data structures 134 exchanged between Measurement Agents and Collectors. 136 As shown in Figure 1, a Controller, implementing ietf-lmap- 137 common.yang and ietf-lmap-control.yang as a client, will instruct 138 Measurement Agents, which implement ietf-lmap-common.yang and ietf- 139 lmap-control.yang as servers. A Measurement Agent, implementing 140 ietf-lmap-common.yang and ietf-lmap-report.yang, will send results to 141 a Collector, which implements ietf-lmap-common.yang and ietf-lmap- 142 report.yang as a server. 144 +------------------------+ 145 | LMAP Controller | 146 | | 147 | Client: | 148 | ietf-lmap-common.yang | 149 | ietf-lmap-control.yang | 150 +------------------------+ 151 +------------------------+ | 152 | LMAP Measurement Agent | | 153 | | <- request | 154 | Server: |<---------------------' 155 | ietf-lmap-common.yang | response -> 156 | ietf-lmap-control.yang | 157 | | 158 | | request -> 159 | Client: |----------------------. 160 | ietf-lmap-common.yang | <- response | 161 | ietf-lmap-report.yang | | 162 +------------------------+ v 163 +------------------------+ 164 | LMAP Collector | 165 | | 166 | Server: | 167 | ietf-lmap-common.yang | 168 | ietf-lmap-report.yang | 169 +------------------------+ 171 Figure 1: LMAP Controller, Measurement Agents, and Collector and the 172 YANG modules they implement as client or server 174 The tree diagram below shows the structure of the control data model. 176 module: ietf-lmap-control 177 +--rw lmap 178 +--ro capabilities 179 | +--ro version string 180 | +--ro tag* lmap:tag 181 | +--ro tasks 182 | +--ro task* [name] 183 | +--ro name lmap:identifier 184 | +--ro function* [uri] 185 | | +--ro uri inet:uri 186 | | +--ro role* string 187 | +--ro version? string 188 | +--ro program? string 189 +--rw agent 190 | +--rw agent-id? yang:uuid 191 | +--rw group-id? string 192 | +--rw measurement-point? string 193 | +--rw report-agent-id? boolean 194 | +--rw report-group-id? boolean 195 | +--rw report-measurement-point? boolean 196 | +--rw controller-timeout? uint32 197 | +--ro last-started yang:date-and-time 198 +--rw tasks 199 | +--rw task* [name] 200 | +--rw name lmap:identifier 201 | +--rw function* [uri] 202 | | +--rw uri inet:uri 203 | | +--rw role* string 204 | +--rw program? string 205 | +--rw option* [id] 206 | | +--rw id lmap:identifier 207 | | +--rw name? string 208 | | +--rw value? string 209 | +--rw tag* lmap:identifier 210 +--rw schedules 211 | +--rw schedule* [name] 212 | +--rw name lmap:identifier 213 | +--rw start event-ref 214 | +--rw (stop)? 215 | | +--:(end) 216 | | | +--rw end? event-ref 217 | | +--:(duration) 218 | | +--rw duration? uint32 219 | +--rw execution-mode? enumeration 220 | +--rw tag* lmap:tag 221 | +--rw suppression-tag* lmap:tag 222 | +--ro state enumeration 223 | +--ro storage yang:gauge64 224 | +--ro invocations yang:counter32 225 | +--ro suppressions yang:counter32 226 | +--ro overlaps yang:counter32 227 | +--ro failures yang:counter32 228 | +--ro last-invocation? yang:date-and-time 229 | +--rw action* [name] 230 | +--rw name lmap:identifier 231 | +--rw task task-ref 232 | +--rw parameters 233 | | +--rw (extension)? 234 | +--rw option* [id] 235 | | +--rw id lmap:identifier 236 | | +--rw name? string 237 | | +--rw value? string 238 | +--rw destination* schedule-ref 239 | +--rw tag* lmap:tag 240 | +--rw suppression-tag* lmap:tag 241 | +--ro state enumeration 242 | +--ro storage yang:gauge64 243 | +--ro invocations yang:counter32 244 | +--ro suppressions yang:counter32 245 | +--ro overlaps yang:counter32 246 | +--ro failures yang:counter32 247 | +--ro last-invocation yang:date-and-time 248 | +--ro last-completion yang:date-and-time 249 | +--ro last-status lmap:status-code 250 | +--ro last-message string 251 | +--ro last-failed-completion yang:date-and-time 252 | +--ro last-failed-status lmap:status-code 253 | +--ro last-failed-message string 254 +--rw suppressions 255 | +--rw suppression* [name] 256 | +--rw name lmap:identifier 257 | +--rw start? event-ref 258 | +--rw end? event-ref 259 | +--rw match* lmap:glob-pattern 260 | +--rw stop-running? boolean 261 | +--ro state enumeration 262 +--rw events 263 +--rw event* [name] 264 +--rw name lmap:identifier 265 +--rw random-spread? uint32 266 +--rw cycle-interval? uint32 267 +--rw (event-type)? 268 +--:(periodic) 269 | +--rw periodic 270 | +--rw interval uint32 271 | +--rw start? yang:date-and-time 272 | +--rw end? yang:date-and-time 273 +--:(calendar) 274 | +--rw calendar 275 | +--rw month* lmap:month-or-all 276 | +--rw day-of-month* lmap:day-of-months-or-all 277 | +--rw day-of-week* lmap:weekday-or-all 278 | +--rw hour* lmap:hour-or-all 279 | +--rw minute* lmap:minute-or-all 280 | +--rw second* lmap:second-or-all 281 | +--rw timezone-offset? lmap:timezone-offset 282 | +--rw start? yang:date-and-time 283 | +--rw end? yang:date-and-time 284 +--:(one-off) 285 | +--rw one-off 286 | +--rw time yang:date-and-time 287 +--:(immediate) 288 | +--rw immediate empty 289 +--:(startup) 290 | +--rw startup empty 291 +--:(controller-lost) 292 | +--rw controller-lost empty 293 +--:(controller-connected) 294 +--rw controller-connected empty 296 The tree diagram below shows the structure of the reporting data 297 model. 299 module: ietf-lmap-report 301 rpcs: 302 +---x report 303 +---w input 304 +---w date yang:date-and-time 305 +---w agent-id? yang:uuid 306 +---w group-id? string 307 +---w measurement-point? string 308 +---w result* 309 +---w schedule? lmap:identifier 310 +---w action? lmap:identifier 311 +---w task? lmap:identifier 312 +---w parameters 313 | +---w (extension)? 314 +---w option* [id] 315 | +---w id lmap:identifier 316 | +---w name? string 317 | +---w value? string 318 +---w tag* lmap:tag 319 +---w event? yang:date-and-time 320 +---w start yang:date-and-time 321 +---w end? yang:date-and-time 322 +---w cycle-number? lmap:cycle-number 323 +---w status lmap:status-code 324 +---w conflict* 325 | +---w schedule-name? lmap:identifier 326 | +---w action-name? lmap:identifier 327 | +---w task-name? lmap:identifier 328 +---w table* 329 +---w function* [uri] 330 | +---w uri inet:uri 331 | +---w role* string 332 +---w column* string 333 +---w row* 334 +---w value* string 336 3. Relationship to the Information Model 338 The LMAP information model [I-D.ietf-lmap-information-model] is 339 divided into six aspects. They are mapped into the YANG data model 340 as explained below: 342 o Pre-Configuration Information: This is not modeled explicitly 343 since bootstrapping information is outside the scope of this data 344 model. Implementations may use some of the Configuration 345 Information also for bootstrapping purposes. 347 o Configuration Information: This is modeled in the /lmap/agent 348 subtree, the /lmap/schedules subtree, and the /lmap/tasks subtree 349 described below. Some items have been left out because they are 350 expected to be dealt with by the underlying protocol. 352 o Instruction Information: This is modeled in the /lmap/suppressions 353 subtree, the /lmap/schedules subtree, and the /lmap/tasks subtree 354 described below. 356 o Logging Information: Some of the logging information, in 357 particular 'success/failure/warning messages in response to 358 information updates from the Controller', will be handled by the 359 protocol used to manipulate the lmap specific configuration. The 360 LMAP data model defined in this document assumes that runtime 361 logging information will be communicated using protocols that do 362 not require a formal data model, e.g., the Syslog protocol defined 363 in [RFC5424]. 365 o Capability and Status Information: Some of the capability and 366 status information is modeled in the /lmap/capability subtree. 367 The list of supported tasks is modeled in the /lmap/capabilities/ 368 task list. Status information about schedules and actions is 369 included in the /lmap/schedules subtree. Information about 370 network interfaces can be obtained from the ietf-interfaces YANG 371 data model [RFC7223]. Information about the hardware and the 372 firmware can be obtained from the ietf-system YANG data model 373 [RFC7317]. A device identifier can be obtained from the ietf- 374 hardware YANG data model [I-D.ietf-netmod-entity]. 376 o Reporting Information: This is modeled by the report data model to 377 be implemented by the Collector. Measurement Agents send results 378 to the Collector by invoking an RPC on the Collector. 380 These six information model aspects use a collection of common 381 information objects. These common information objects are 382 represented in the YANG data model as follows: 384 o Schedules: Schedules are modeled in the /lmap/schedules subtree. 386 o Channels: Channels are not modeled since the NETCONF server 387 configuration data model [I-D.ietf-netconf-netconf-client-server] 388 already provides a mechanism to configure NETCONF server channels. 390 o Task Configurations: Configured tasks are modeled in the /lmap/ 391 tasks subtree. 393 o Event Information: Event definitions are modeled in the /lmap/ 394 events subtree. 396 4. YANG Modules 398 4.1. LMAP Common YANG Module 400 This module imports definitions from [RFC6536] and it references 401 [ISO-8601]. 403 file "ietf-lmap-common@2017-04-21.yang" 404 module ietf-lmap-common { 406 yang-version 1.1; 407 namespace "urn:ietf:params:xml:ns:yang:ietf-lmap-common"; 408 prefix "lmap"; 410 import ietf-inet-types { 411 prefix inet; 412 } 414 organization 415 "IETF Large-Scale Measurement Platforms Working Group"; 417 contact 418 "WG Web: 419 WG List: 421 Editor: Juergen Schoenwaelder 422 424 Editor: Vaibhav Bajpai 425 "; 427 description 428 "This module provides common definitions used by the data 429 models written for Large-Scale Measurement Platforms (LMAP). 430 This module defines typedefs and groupings but no schema 431 tree elements."; 433 revision "2017-04-21" { 434 description 435 "Initial version"; 436 reference 437 "RFC XXXX: A YANG Data Model for LMAP Measurement Agents"; 438 } 440 /* 441 * Typedefs 442 */ 444 typedef identifier { 445 type string { 446 length "1..max"; 447 } 448 description 449 "An string value used to name something."; 450 } 452 typedef tag { 453 type string { 454 length "1..max"; 455 } 456 description 457 "A tag consists of at least one character."; 458 } 460 typedef glob-pattern { 461 type string { 462 length "1..max"; 463 } 464 description 465 'A glob style pattern (following POSIX.2 fnmatch() without 466 special treatment of file paths): 468 * matches a sequence of characters 469 ? matches a single character 470 [seq] matches any character in seq 471 [!seq] matches any character not in seq 473 A backslash followed by a character matches the following 474 character. In particular: 476 \* matches * 477 \? matches ? 478 \\ matches \ 480 A sequence seq may be a sequence of characters (e.g., [abc] 481 or a range of characters (e.g., [a-c]).'; 482 } 484 typedef wildcard { 485 type string { 486 pattern '\*'; 487 } 488 description 489 "A wildcard for calendar scheduling entries."; 490 } 491 typedef cycle-number { 492 type string { 493 pattern '[0-9]{8}\.[0-9]{6}'; 494 } 495 description 496 "A cycle number represented in the format YYYYMMDD.HHMMSS 497 where YYYY represents the year, MM the month (1..12), DD 498 the day of the months (01..31), HH the hour (00..23), MM 499 the minute (00..59), and SS the second (00..59). The cycle 500 number is using Coordinated Universal Time (UTC)."; 501 } 503 typedef month { 504 type enumeration { 505 enum january { 506 value 1; 507 description 508 "January of the Gregorian calendar."; 509 } 510 enum february { 511 value 2; 512 description 513 "February of the Gregorian calendar."; 514 } 515 enum march { 516 value 3; 517 description 518 "March of the Gregorian calendar."; 519 } 520 enum april { 521 value 4; 522 description 523 "April of the Gregorian calendar."; 524 } 525 enum may { 526 value 5; 527 description 528 "May of the Gregorian calendar."; 529 } 530 enum june { 531 value 6; 532 description 533 "June of the Gregorian calendar."; 534 } 535 enum july { 536 value 7; 537 description 538 "July of the Gregorian calendar."; 540 } 541 enum august { 542 value 8; 543 description 544 "August of the Gregorian calendar."; 545 } 546 enum september { 547 value 9; 548 description 549 "September of the Gregorian calendar."; 550 } 551 enum october { 552 value 10; 553 description 554 "October of the Gregorian calendar."; 555 } 556 enum november { 557 value 11; 558 description 559 "November of the Gregorian calendar."; 560 } 561 enum december { 562 value 12; 563 description 564 "December of the Gregorian calendar."; 565 } 566 } 567 description 568 "A type modeling the month in the Gregorian calendar."; 569 } 571 typedef month-or-all { 572 type union { 573 type month; 574 type wildcard; 575 } 576 description 577 "A month or a wildcard indicating all twelve months."; 578 } 580 typedef day-of-month { 581 type uint8 { range "1..31"; } 582 description 583 "A day of a month of the Gregorian calendar."; 584 } 586 typedef day-of-months-or-all { 587 type union { 588 type day-of-month; 589 type wildcard; 590 } 591 description 592 "A day of a months or a wildcard indicating all days 593 of a month."; 594 } 596 typedef weekday { 597 type enumeration { 598 enum monday { 599 value 1; 600 description 601 "Monday of the Gregorian calendar."; 602 } 603 enum tuesday { 604 value 2; 605 description 606 "Tuesday of the Gregorian calendar."; 607 } 608 enum wednesday { 609 value 3; 610 description 611 "Wednesday of the Gregorian calendar."; 612 } 613 enum thursday { 614 value 4; 615 description 616 "Thursday of the Gregorian calendar."; 617 } 618 enum friday { 619 value 5; 620 description 621 "Friday of the Gregorian calendar."; 622 } 623 enum saturday { 624 value 6; 625 description 626 "Saturday of the Gregorian calendar."; 627 } 628 enum sunday { 629 value 7; 630 description 631 "Sunday of the Gregorian calendar."; 632 } 633 } 634 description 635 "A type modeling the weekdays in the Gregorian calendar. 637 The numbering follows the ISO 8601 scheme."; 638 reference 639 "ISO 8601:2004: Data elements and interchange formats -- 640 Information interchange -- Representation 641 of dates and times"; 642 } 644 typedef weekday-or-all { 645 type union { 646 type weekday; 647 type wildcard; 648 } 649 description 650 "A weekday or a wildcard indicating all seven weekdays."; 651 } 653 typedef hour { 654 type uint8 { range "0..23"; } 655 description 656 "An hour of a day."; 657 } 659 typedef hour-or-all { 660 type union { 661 type hour; 662 type wildcard; 663 } 664 description 665 "An hour of a day or a wildcard indicating all hours 666 of a day."; 667 } 669 typedef minute { 670 type uint8 { range "0..59"; } 671 description 672 "A minute of an hour."; 673 } 675 typedef minute-or-all { 676 type union { 677 type minute; 678 type wildcard; 679 } 680 description 681 "A minute of an hour or a wildcard indicating all 682 minutes of an hour."; 683 } 684 typedef second { 685 type uint8 { range "0..59"; } 686 description 687 "A second of a minute."; 688 } 690 typedef second-or-all { 691 type union { 692 type second; 693 type wildcard; 694 } 695 description 696 "A second of a minute or a wildcard indicating all 697 seconds of a minute."; 698 } 700 typedef status-code { 701 type int32; 702 description 703 "A status code returned by the execution of a task. Note 704 that the actual range is implementation dependent but it 705 should be portable to use values in the range 0..127 for 706 regular exit codes. By convention, 0 indicates successful 707 termination. Negative values may be used to indicate 708 abnormal termination due to a signal; the absolute value 709 may identify the signal number in this case."; 710 } 712 typedef timezone-offset { 713 type string { 714 pattern 'Z|[\+\-]\d{2}:\d{2}'; 715 } 716 description 717 "A timezone-offset as it is used by the date-and-time type 718 defined in the ietf-yang-types module. The value Z is 719 equivalent to +00:00. The value -00:00 indicates and 720 unknown time-offset."; 721 reference 722 "RFC 6991: Common YANG Data Types"; 723 } 725 /* 726 * Groupings 727 */ 729 grouping registry-grouping { 730 description 731 "This grouping models a list of entries in a registry 732 that identify functions of a tasks."; 734 list function { 735 key uri; 736 description 737 "A list of entries in a registry identifying functions."; 739 leaf uri { 740 type inet:uri; 741 description 742 "A URI identifying an entry in a registry."; 743 } 745 leaf-list role { 746 type string; 747 description 748 "A set of roles for the identified registry entry."; 749 } 750 } 751 } 753 grouping options-grouping { 754 description 755 "A list of options of a task. Each option is a name/value 756 pair (where the value may be absent)."; 758 list option { 759 key "id"; 760 ordered-by user; 761 description 762 "A list of options passed to the task. It is a list of 763 key / value pairs and may be used to model options. 764 Options may be used to identify the role of a task 765 or to pass a channel name to a task."; 767 leaf id { 768 type lmap:identifier; 769 description 770 "An identifier uniquely identifying an option. This 771 identifier is required by YANG to uniquely identify 772 a name value pair but it otherwise has no semantic 773 value"; 774 } 776 leaf name { 777 type string; 778 description 779 "The name of the option."; 781 } 783 leaf value { 784 type string; 785 description 786 "The value of the option."; 787 } 788 } 789 } 790 } 791 793 4.2. LMAP Control YANG Module 795 This module imports definitions from [RFC6536], [RFC6991] and the 796 common LMAP module and it references [RFC7398]. 798 file "ietf-lmap-control@2017-04-21.yang" 799 module ietf-lmap-control { 801 yang-version 1.1; 802 namespace "urn:ietf:params:xml:ns:yang:ietf-lmap-control"; 803 prefix "lmapc"; 805 import ietf-yang-types { 806 prefix yang; 807 } 808 import ietf-netconf-acm { 809 prefix nacm; 810 } 811 import ietf-lmap-common { 812 prefix lmap; 813 } 815 organization 816 "IETF Large-Scale Measurement Platforms Working Group"; 818 contact 819 "WG Web: 820 WG List: 822 Editor: Juergen Schoenwaelder 823 825 Editor: Vaibhav Bajpai 826 "; 828 description 829 "This module defines a data model for controlling measurement 830 agents that are part of a Large-Scale Measurement Platform 831 (LMAP). This data model is expected to be implemented by a 832 measurement agent."; 834 revision "2017-04-21" { 835 description 836 "Initial version"; 837 reference 838 "RFC XXXX: A YANG Data Model for LMAP Measurement Agents"; 839 } 841 /* 842 * Typedefs 843 */ 845 typedef event-ref { 846 type leafref { 847 path "/lmap/events/event/name"; 848 } 849 description 850 "This type is used by data models that need to reference 851 a configured event source."; 852 } 854 typedef task-ref { 855 type leafref { 856 path "/lmap/tasks/task/name"; 857 } 858 description 859 "This type is used by data models that need to reference 860 a configured task."; 861 } 863 typedef schedule-ref { 864 type leafref { 865 path "/lmap/schedules/schedule/name"; 866 } 867 description 868 "This type is used by data models that need to reference 869 a configured schedule."; 870 } 872 /* 873 * Groupings 874 */ 876 grouping start-end-grouping { 877 description 878 "A grouping that provides start and end times for 879 event objects."; 880 leaf start { 881 type yang:date-and-time; 882 description 883 "The date and time when the event object 884 starts to create triggers."; 885 } 886 leaf end { 887 type yang:date-and-time; 888 description 889 "The date and time when the event object 890 stops to create triggers. 892 It is generally a good idea to always configure 893 an end time and to refresh the end time as needed 894 to ensure that agents that lose connectivity to 895 their controller do not continue executing schedules 896 forever."; 897 } 898 } 900 /* 901 * Capability, configuration and state data nodes 902 */ 904 container lmap { 905 description 906 "Configuration and control of an LMAP agent."; 908 container capabilities { 909 config false; 910 description 911 "Agent capabilities including a list of supported tasks."; 913 leaf version { 914 type string; 915 config false; 916 mandatory true; 917 description 918 "A short description of the software implementing the 919 measurement agent. This should include the version 920 number of the measurement agent software."; 921 } 923 leaf-list tag { 924 type lmap:tag; 925 config false; 926 description 927 "An optional unordered set of tags that provide 928 additional information about the capabilities of 929 the measurement agent."; 930 } 932 container tasks { 933 description 934 "A list of tasks that the measurement agent supports."; 936 list task { 937 key name; 938 description 939 "The list of tasks supported by the LMAP agent."; 941 leaf name { 942 type lmap:identifier; 943 description 944 "The unique name of a task capability."; 945 } 947 uses lmap:registry-grouping; 949 leaf version { 950 type string; 951 description 952 "A short description of the software implementing 953 the task. This should include the version 954 number of the measurement task software."; 955 } 957 leaf program { 958 type string; 959 description 960 "The (local) program to invoke in order to execute 961 the task."; 962 } 963 } 964 } 965 } 967 /* 968 * Agent Configuration 969 */ 971 container agent { 972 description 973 "Configuration of parameters affecting the whole 974 measurement agent."; 976 leaf agent-id { 977 type yang:uuid; 978 description 979 "The agent-id identifies a measurement agent with 980 a very low probability of collision. In certain 981 deployments, the agent-id may be considered 982 sensitive and hence this object is optional."; 983 } 985 leaf group-id { 986 type string; 987 description 988 "The group-id identifies a group of measurement 989 agents. In certain deployments, the group-id 990 may be considered less sensitive than the 991 agent-id."; 992 } 994 leaf measurement-point { 995 type string; 996 description 997 "The measurement point indicating where the 998 measurement agent is located on a path."; 999 reference 1000 "RFC 7398: A Reference Path and Measurement Points 1001 for Large-Scale Measurement of Broadband 1002 Performance"; 1003 } 1005 leaf report-agent-id { 1006 type boolean; 1007 must '. != "true" or ../agent-id' { 1008 description 1009 "An agent-id must exist for this to be set 1010 to true."; 1011 } 1012 default false; 1013 description 1014 "The 'report-agent-id' controls whether the 1015 'agent-id' is reported to collectors."; 1016 } 1018 leaf report-group-id { 1019 type boolean; 1020 must '. != "true" or ../group-id' { 1021 description 1022 "A group-id must exist for this to be set 1023 to true."; 1024 } 1025 default false; 1026 description 1027 "The 'report-group-id' controls whether the 1028 'group-id' is reported to collectors."; 1029 } 1031 leaf report-measurement-point { 1032 type boolean; 1033 must '. != "true" or ../measurement-point' { 1034 description 1035 "A measurement-point must exist for this to be 1036 set to true."; 1037 } 1038 default false; 1039 description 1040 "The 'report-measurement-point' controls whether 1041 the 'measurement-point' is reported to collectors."; 1042 } 1044 leaf controller-timeout { 1045 type uint32; 1046 units "seconds"; 1047 description 1048 "A timer is started after each successful contact 1049 with a controller. When the timer reaches the 1050 controller-timeout, an event (controller-lost) is 1051 raised indicating that connectivity to the controller 1052 has been lost."; 1053 } 1055 leaf last-started { 1056 type yang:date-and-time; 1057 config false; 1058 mandatory true; 1059 description 1060 "The date and time the measurement agent last started."; 1061 } 1062 } 1064 /* 1065 * Task Configuration 1066 */ 1068 container tasks { 1069 description 1070 "Configuration of LMAP tasks."; 1072 list task { 1073 key name; 1074 description 1075 "The list of tasks configured on the LMAP agent. Note 1076 that a configured task MUST resolve to a task listed 1077 in the capabilities. Attempts to execute a configured 1078 task that is not listed in the capabilities result in 1079 a runtime execution error."; 1081 leaf name { 1082 type lmap:identifier; 1083 description 1084 "The unique name of a task."; 1085 } 1087 uses lmap:registry-grouping; 1089 leaf program { 1090 type string; 1091 nacm:default-deny-write; 1092 description 1093 "The (local) program to invoke in order to execute 1094 the task. If this leaf is not set, then the system 1095 will try to identify a suitable program based on 1096 the registry information present."; 1097 } 1099 uses lmap:options-grouping { 1100 description 1101 "The list of task specific options."; 1102 } 1104 leaf-list tag { 1105 type lmap:identifier; 1106 description 1107 "A set of task specific tags that are reported 1108 together with the measurement results to a collector. 1109 A tag can be used, for example, to carry the 1110 Measurement Cycle ID."; 1111 } 1112 } 1113 } 1115 /* 1116 * Schedule Instructions 1117 */ 1119 container schedules { 1120 description 1121 "Configuration of LMAP schedules. Schedules control 1122 which tasks are executed by the LMAP implementation."; 1124 list schedule { 1125 key name; 1126 description 1127 "Configuration of a particular schedule."; 1129 leaf name { 1130 type lmap:identifier; 1131 description 1132 "The locally-unique, administratively assigned name 1133 for this schedule."; 1134 } 1136 leaf start { 1137 type event-ref; 1138 mandatory true; 1139 description 1140 "The event source controlling the start of the 1141 scheduled actions."; 1142 } 1144 choice stop { 1145 description 1146 "This choice contains optional leafs that control the 1147 graceful forced termination of scheduled actions. 1148 When the end has been reached, the scheduled actions 1149 should be forced to terminate the measurements. 1150 This may involve being active some additional time in 1151 order to properly finish the action's activity (e.g., 1152 waiting for any still outstanding messages)."; 1154 leaf end { 1155 type event-ref; 1156 description 1157 "The event source controlling the graceful 1158 forced termination of the scheduled actions."; 1159 } 1161 leaf duration { 1162 type uint32; 1163 units "seconds"; 1164 description 1165 "The duration controlling the graceful forced 1166 termination of the scheduled actions."; 1167 } 1168 } 1170 leaf execution-mode { 1171 type enumeration { 1172 enum sequential { 1173 value 1; 1174 description 1175 "The actions of the schedule are executed 1176 sequentially."; 1177 } 1178 enum parallel { 1179 value 2; 1180 description 1181 "The actions of the schedule are executed 1182 concurrently"; 1183 } 1184 enum pipelined { 1185 value 3; 1186 description 1187 "The actions of the schedule are executed in a 1188 pipelined mode. Output created by an action is 1189 passed as input to the subsequent action."; 1190 } 1191 } 1192 default pipelined; 1193 description 1194 "The execution mode of this schedule determines in 1195 which order the actions of the schedule are executed."; 1196 } 1198 leaf-list tag { 1199 type lmap:tag; 1200 description 1201 "A set of schedule specific tags that are reported 1202 together with the measurement results to a collector."; 1203 } 1205 leaf-list suppression-tag { 1206 type lmap:tag; 1207 description 1208 "A set of suppression tags that are used to select 1209 schedules to be suppressed."; 1210 } 1211 leaf state { 1212 type enumeration { 1213 enum enabled { 1214 value 1; 1215 description 1216 "The value 'enabled' indicates that the 1217 schedule is currently enabled."; 1218 } 1219 enum disabled { 1220 value 2; 1221 description 1222 "The value 'disabled' indicates that the 1223 schedule is currently disabled."; 1224 } 1225 enum running { 1226 value 3; 1227 description 1228 "The value 'running' indicates that the 1229 schedule is currently running."; 1230 } 1231 enum suppressed { 1232 value 4; 1233 description 1234 "The value 'suppressed' indicates that the 1235 schedule is currently suppressed."; 1236 } 1237 } 1238 config false; 1239 mandatory true; 1240 description 1241 "The current state of the schedule."; 1242 } 1244 leaf storage { 1245 type yang:gauge64; 1246 units "bytes"; 1247 config false; 1248 mandatory true; 1249 description 1250 "The amount of secondary storage (e.g., allocated in a 1251 file system) holding temporary data allocated to the 1252 schedule in bytes. This object reports the amount of 1253 allocated physical storage and not the storage used 1254 by logical data records."; 1255 } 1257 leaf invocations { 1258 type yang:counter32; 1259 config false; 1260 mandatory true; 1261 description 1262 "Number of invocations of this schedule. This counter 1263 does not include suppressed invocations or invocations 1264 that were prevented due to an overlap with a previous 1265 invocation of this schedule."; 1266 } 1268 leaf suppressions { 1269 type yang:counter32; 1270 config false; 1271 mandatory true; 1272 description 1273 "Number of suppressed executions of this schedule."; 1274 } 1276 leaf overlaps { 1277 type yang:counter32; 1278 config false; 1279 mandatory true; 1280 description 1281 "Number of executions prevented due to overlaps with 1282 a previous invocation of this schedule."; 1283 } 1285 leaf failures { 1286 type yang:counter32; 1287 config false; 1288 mandatory true; 1289 description 1290 "Number of failed executions of this schedule. A 1291 failed execution is an execution where at least 1292 one action failed."; 1293 } 1295 leaf last-invocation { 1296 type yang:date-and-time; 1297 config false; 1298 description 1299 "The date and time of the last invocation of 1300 this schedule."; 1301 } 1303 list action { 1304 key name; 1305 description 1306 "An action describes a task that is invoked by the 1307 schedule. Multiple actions are invoked according to 1308 the execution-mode of the schedule."; 1310 leaf name { 1311 type lmap:identifier; 1312 description 1313 "The unique identifier for this action."; 1314 } 1316 leaf task { 1317 type task-ref; 1318 mandatory true; 1319 description 1320 "The task invoked by this action."; 1321 } 1323 container parameters { 1324 description 1325 "This container is a place-holder for run-time 1326 parameters defined in task-specific data models 1327 augmenting the base lmap control data model."; 1329 choice extension { 1330 description 1331 "This choice is provided to augment in different 1332 sets of parameters."; 1333 } 1334 } 1336 uses lmap:options-grouping { 1337 description 1338 "The list of action specific options that are 1339 appended to the list of task specific options."; 1340 } 1342 leaf-list destination { 1343 type schedule-ref; 1344 description 1345 "A set of schedules receiving the output produced 1346 by this action. The output is stored temporarily 1347 since the destination schedules will in general 1348 not be running when output is passed to them. The 1349 behaviour of an action passing data to its own 1350 schedule is implementation specific. 1352 Data passed to a sequential or pipelined schedule 1353 is received by the schedule's first action. Data 1354 passed to a parallel schedule is received by all 1355 actions of the schedule."; 1356 } 1358 leaf-list tag { 1359 type lmap:tag; 1360 description 1361 "A set of action specific tags that are reported 1362 together with the measurement results to a 1363 collector."; 1364 } 1366 leaf-list suppression-tag { 1367 type lmap:tag; 1368 description 1369 "A set of suppression tags that are used to select 1370 actions to be suppressed."; 1371 } 1373 leaf state { 1374 type enumeration { 1375 enum enabled { 1376 value 1; 1377 description 1378 "The value 'enabled' indicates that the 1379 action is currently enabled."; 1380 } 1381 enum disabled { 1382 value 2; 1383 description 1384 "The value 'disabled' indicates that the 1385 action is currently disabled."; 1386 } 1387 enum running { 1388 value 3; 1389 description 1390 "The value 'running' indicates that the 1391 action is currently runnning."; 1392 } 1393 enum suppressed { 1394 value 4; 1395 description 1396 "The value 'suppressed' indicates that the 1397 action is currently suppressed."; 1398 } 1399 } 1400 config false; 1401 mandatory true; 1402 description 1403 "The current state of the action."; 1404 } 1406 leaf storage { 1407 type yang:gauge64; 1408 units "bytes"; 1409 config false; 1410 mandatory true; 1411 description 1412 "The amount of secondary storage (e.g., allocated in a 1413 file system) holding temporary data allocated to the 1414 schedule in bytes. This object reports the amount of 1415 allocated physical storage and not the storage used 1416 by logical data records."; 1417 } 1419 leaf invocations { 1420 type yang:counter32; 1421 config false; 1422 mandatory true; 1423 description 1424 "Number of invocations of this action. This counter 1425 does not include suppressed invocations or invocations 1426 that were prevented due to an overlap with a previous 1427 invocation of this action."; 1428 } 1430 leaf suppressions { 1431 type yang:counter32; 1432 config false; 1433 mandatory true; 1434 description 1435 "Number of suppressed executions of this action."; 1436 } 1438 leaf overlaps { 1439 type yang:counter32; 1440 config false; 1441 mandatory true; 1442 description 1443 "Number of executions prevented due to overlaps with 1444 a previous invocation of this action."; 1445 } 1447 leaf failures { 1448 type yang:counter32; 1449 config false; 1450 mandatory true; 1451 description 1452 "Number of failed executions of this action."; 1453 } 1455 leaf last-invocation { 1456 type yang:date-and-time; 1457 config false; 1458 mandatory true; 1459 description 1460 "The date and time of the last invocation of 1461 this action."; 1462 } 1464 leaf last-completion { 1465 type yang:date-and-time; 1466 config false; 1467 mandatory true; 1468 description 1469 "The date and time of the last completion of 1470 this action."; 1471 } 1473 leaf last-status { 1474 type lmap:status-code; 1475 config false; 1476 mandatory true; 1477 description 1478 "The status code returned by the last execution of 1479 this action."; 1480 } 1482 leaf last-message { 1483 type string; 1484 config false; 1485 mandatory true; 1486 description 1487 "The status message produced by the last execution 1488 of this action."; 1489 } 1491 leaf last-failed-completion { 1492 type yang:date-and-time; 1493 config false; 1494 mandatory true; 1495 description 1496 "The date and time of the last failed completion 1497 of this action."; 1498 } 1499 leaf last-failed-status { 1500 type lmap:status-code; 1501 config false; 1502 mandatory true; 1503 description 1504 "The status code returned by the last failed 1505 execution of this action."; 1506 } 1508 leaf last-failed-message { 1509 type string; 1510 config false; 1511 mandatory true; 1512 description 1513 "The status message produced by the last failed 1514 execution of this action."; 1515 } 1516 } 1517 } 1518 } 1520 /* 1521 * Suppression Instructions 1522 */ 1524 container suppressions { 1525 description 1526 "Suppression information to prevent schedules or 1527 certain actions from starting."; 1529 list suppression { 1530 key name; 1531 description 1532 "Configuration of a particular suppression."; 1534 leaf name { 1535 type lmap:identifier; 1536 description 1537 "The locally-unique, administratively assigned name 1538 for this suppression."; 1539 } 1541 leaf start { 1542 type event-ref; 1543 description 1544 "The event source controlling the start of the 1545 suppression period."; 1546 } 1547 leaf end { 1548 type event-ref; 1549 description 1550 "The event source controlling the end of the 1551 suppression period. If not present, supression 1552 continues indefinitely."; 1553 } 1555 leaf-list match { 1556 type lmap:glob-pattern; 1557 description 1558 "A set of suppression match pattern. The suppression 1559 will apply to all schedules (and their actions) that 1560 have a matching value in their suppression-tags 1561 and to all actions that have a matching value in 1562 their suppression-tags."; 1563 } 1565 leaf stop-running { 1566 type boolean; 1567 default false; 1568 description 1569 "If 'stop-running' is true, running schedules and 1570 actions matching the suppression will be terminated 1571 when suppression is activated. If 'stop-running' is 1572 false, running schedules and actions will not be 1573 affected if suppression is activated."; 1574 } 1576 leaf state { 1577 type enumeration { 1578 enum enabled { 1579 value 1; 1580 description 1581 "The value 'enabled' indicates that the 1582 suppression is currently enabled."; 1583 } 1584 enum disabled { 1585 value 2; 1586 description 1587 "The value 'disabled' indicates that the 1588 suppression is currently disabled."; 1589 } 1590 enum active { 1591 value 3; 1592 description 1593 "The value 'active' indicates that the 1594 suppression is currently active."; 1596 } 1597 } 1598 config false; 1599 mandatory true; 1600 description 1601 "The current state of the suppression."; 1602 } 1603 } 1604 } 1606 /* 1607 * Event Instructions 1608 */ 1610 container events { 1611 description 1612 "Configuration of LMAP events. 1614 Implementations may be forced to delay acting 1615 upon the occurance of events in the face of local 1616 constraints. An action triggered by an event 1617 therefore should not rely on the accuracy 1618 provided by the scheduler implementation."; 1620 list event { 1621 key name; 1622 description 1623 "The list of event sources configured on the 1624 LMAP agent."; 1626 leaf name { 1627 type lmap:identifier; 1628 description 1629 "The unique name of an event source."; 1630 } 1632 leaf random-spread { 1633 type uint32; 1634 units seconds; 1635 description 1636 "This optional leaf adds a random spread to the 1637 computation of the event's trigger time. The 1638 random spread is a uniformly distributed random 1639 number taken from the interval [0:random-spread]."; 1640 } 1642 leaf cycle-interval { 1643 type uint32; 1644 units seconds; 1645 description 1646 "The optional cycle-interval defines the duration 1647 of the time interval in seconds that is used to 1648 calculate cycle numbers. No cycle number is 1649 calculated if the optional cycle-interval does 1650 not exist."; 1651 } 1653 choice event-type { 1654 description 1655 "Different types of events are handled by 1656 different branches of this choice. Note that 1657 this choice can be extended via augmentations."; 1659 case periodic { 1660 container periodic { 1661 description 1662 "A periodic timing object triggers periodically 1663 according to a regular interval."; 1665 leaf interval { 1666 type uint32 { 1667 range "1..max"; 1668 } 1669 units "seconds"; 1670 mandatory true; 1671 description 1672 "The number of seconds between two triggers 1673 generated by this periodic timing object."; 1674 } 1675 uses start-end-grouping; 1676 } 1677 } 1679 case calendar { 1680 container calendar { 1681 description 1682 "A calendar timing object triggers based on the 1683 current calendar date and time."; 1685 leaf-list month { 1686 type lmap:month-or-all; 1687 min-elements 1; 1688 description 1689 "A set of months at which this calendar timing 1690 will trigger. The wildcard means all months."; 1691 } 1692 leaf-list day-of-month { 1693 type lmap:day-of-months-or-all; 1694 min-elements 1; 1695 description 1696 "A set of days of the month at which this 1697 calendar timing will trigger. The wildcard means 1698 all days of a month."; 1699 } 1701 leaf-list day-of-week { 1702 type lmap:weekday-or-all; 1703 min-elements 1; 1704 description 1705 "A set of weekdays at which this calendar timing 1706 will trigger. The wildcard means all weekdays."; 1707 } 1709 leaf-list hour { 1710 type lmap:hour-or-all; 1711 min-elements 1; 1712 description 1713 "A set of hours at which this calendar timing will 1714 trigger. The wildcard means all hours of a day."; 1715 } 1717 leaf-list minute { 1718 type lmap:minute-or-all; 1719 min-elements 1; 1720 description 1721 "A set of minutes at which this calendar timing 1722 will trigger. The wildcard means all minutes of 1723 an hour."; 1724 } 1726 leaf-list second { 1727 type lmap:second-or-all; 1728 min-elements 1; 1729 description 1730 "A set of seconds at which this calendar timing 1731 will trigger. The wildcard means all seconds of 1732 a minute."; 1733 } 1735 leaf timezone-offset { 1736 type lmap:timezone-offset; 1737 description 1738 "The timezone in which this calendar timing 1739 object will be evaluated. If not present, 1740 the systems' local timezone will be used."; 1741 } 1742 uses start-end-grouping; 1743 } 1744 } 1746 case one-off { 1747 container one-off { 1748 description 1749 "A one-off timing object triggers exactly once."; 1751 leaf time { 1752 type yang:date-and-time; 1753 mandatory true; 1754 description 1755 "This one-off timing object triggers once at 1756 the configured date and time."; 1757 } 1758 } 1759 } 1761 case immediate { 1762 leaf immediate { 1763 type empty; 1764 mandatory true; 1765 description 1766 "This immediate event object triggers immediately 1767 when it is configured."; 1768 } 1769 } 1771 case startup { 1772 leaf startup { 1773 type empty; 1774 mandatory true; 1775 description 1776 "This startup event object triggers whenever the 1777 LMAP agent (re)starts."; 1778 } 1779 } 1781 case controller-lost { 1782 leaf controller-lost { 1783 type empty; 1784 mandatory true; 1785 description 1786 "The controller-lost event object triggers when 1787 the connectivity to the controller has been lost 1788 for at least 'controller-timeout' seconds."; 1789 } 1790 } 1792 case controller-connected { 1793 leaf controller-connected { 1794 type empty; 1795 mandatory true; 1796 description 1797 "The controller-connected event object triggers 1798 when the connectivity to the controller has been 1799 restored after it was lost for at least 1800 'controller-timeout' seconds."; 1801 } 1802 } 1803 } 1805 } 1806 } 1807 } 1808 } 1809 1811 4.3. LMAP Report YANG Module 1813 This module imports definitions from [RFC6536] and the common LMAP 1814 module. 1816 file "ietf-lmap-report@2017-04-21.yang" 1817 module ietf-lmap-report { 1819 yang-version 1.1; 1820 namespace "urn:ietf:params:xml:ns:yang:ietf-lmap-report"; 1821 prefix "lmapr"; 1823 import ietf-yang-types { 1824 prefix yang; 1825 } 1826 import ietf-lmap-common { 1827 prefix lmap; 1828 } 1830 organization 1831 "IETF Large-Scale Measurement Platforms Working Group"; 1833 contact 1834 "WG Web: 1835 WG List: 1837 Editor: Juergen Schoenwaelder 1838 1840 Editor: Vaibhav Bajpai 1841 "; 1843 description 1844 "This module defines a data model for reporting results from 1845 measurement agents, which are part of a Large-Scale Measurement 1846 Platform (LMAP), to result data collectors. This data model is 1847 expected to be implemented by a collector."; 1849 revision "2017-04-21" { 1850 description 1851 "Initial version"; 1852 reference 1853 "RFC XXXX: A YANG Data Model for LMAP Measurement Agents"; 1854 } 1856 rpc report { 1857 description 1858 "The report operation is used by an LMAP measurement agent to 1859 submit measurement results produced by measurement tasks to 1860 a collector."; 1862 input { 1864 leaf date { 1865 type yang:date-and-time; 1866 mandatory true; 1867 description 1868 "The date and time when this result report was sent to 1869 a collector."; 1870 } 1872 leaf agent-id { 1873 type yang:uuid; 1874 description 1875 "The agent-id of the agent from which this 1876 report originates."; 1877 } 1879 leaf group-id { 1880 type string; 1881 description 1882 "The group-id of the agent from which this 1883 report originates."; 1884 } 1886 leaf measurement-point { 1887 type string; 1888 description 1889 "The measurement-point of the agent from which this 1890 report originates."; 1891 } 1893 list result { 1894 description 1895 "The list of tasks for which results are reported."; 1897 leaf schedule { 1898 type lmap:identifier; 1899 description 1900 "The name of the schedule that produced the result."; 1901 } 1903 leaf action { 1904 type lmap:identifier; 1905 description 1906 "The name of the action in the schedule that produced 1907 the result."; 1908 } 1910 leaf task { 1911 type lmap:identifier; 1912 description 1913 "The name of the task that produced the result."; 1914 } 1916 container parameters { 1917 description 1918 "This container is a place-holder for run-time 1919 parameters defined in task-specific data models 1920 augmenting the base lmap report data model."; 1922 choice extension { 1923 description 1924 "This choice is provided to augment in different 1925 sets of parameters."; 1926 } 1927 } 1929 uses lmap:options-grouping { 1930 description 1931 "The list of options there were in use then the 1932 measurement was performed. This list must include 1933 both the task specific options as well as the action 1934 specific options."; 1935 } 1937 leaf-list tag { 1938 type lmap:tag; 1939 description 1940 "A tag contains additional information that is passed 1941 with the result record to the collector. This is the 1942 joined set of tags defined for the task object, the 1943 schedule object, and the action object. A tag can be 1944 used to carry the Measurement Cycle ID."; 1945 } 1947 leaf event { 1948 type yang:date-and-time; 1949 description 1950 "The date and time of the event that triggered the 1951 schedule of the action that produced the reported 1952 result values. The date and time does not include 1953 any added randomization."; 1954 } 1956 leaf start { 1957 type yang:date-and-time; 1958 mandatory true; 1959 description 1960 "The date and time when the task producing 1961 this result started."; 1962 } 1964 leaf end { 1965 type yang:date-and-time; 1966 description 1967 "The date and time when the task producing 1968 this result finished."; 1969 } 1971 leaf cycle-number { 1972 type lmap:cycle-number; 1973 description 1974 "The optional cycle number is the time closest to 1975 the time reported in the event leaf that is a multiple 1976 of the cycle-interval of the event that triggered the 1977 execution of the schedule. The value is only present 1978 if the event that triggered the execution of the 1979 schedule has a defined cycle-interval."; 1980 } 1982 leaf status { 1983 type lmap:status-code; 1984 mandatory true; 1985 description 1986 "The status code returned by the execution of this 1987 action."; 1988 } 1990 list conflict { 1991 description 1992 "The names of tasks overlapping with the execution 1993 of the task that has produced this result."; 1995 leaf schedule-name { 1996 type lmap:identifier; 1997 description 1998 "The name of a schedule that might have impacted 1999 the execution of the task that has produced this 2000 result."; 2001 } 2003 leaf action-name { 2004 type lmap:identifier; 2005 description 2006 "The name of an action within the schedule that 2007 might have impacted the execution of the task that 2008 has produced this result."; 2009 } 2011 leaf task-name { 2012 type lmap:identifier; 2013 description 2014 "The name of the task executed by an action within 2015 the schedule that might have impacted the execution 2016 of the task that has produced this result."; 2017 } 2018 } 2020 list table { 2021 description 2022 "A list of result tables."; 2024 uses lmap:registry-grouping; 2026 leaf-list column { 2027 type string; 2028 description 2029 "An ordered list of column labels. The order is 2030 determined by the system and must match the order 2031 of the columns in the result rows."; 2032 } 2034 list row { 2035 description 2036 "The rows of a result table."; 2038 leaf-list value { 2039 type string; 2040 description 2041 "The value of a cell in the result row."; 2042 } 2043 } 2044 } 2045 } 2046 } 2047 } 2048 } 2049 2051 5. Security Considerations 2053 The YANG module defined in this memo is designed to be accessed via 2054 the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the 2055 secure transport layer, and the mandatory to implement secure 2056 transport is SSH [RFC6242]. The lowest RESTCONF layer is HTTPS, and 2057 the mandatory-to-implement secure transport is TLS [RFC5246]. 2059 The NETCONF access control model [RFC6536] provides the means to 2060 restrict access for particular NETCONF or RESTCONF users to a pre- 2061 configured subset of all available NETCONF or RESTCONF protocol 2062 operations and content. 2064 There are a number of data nodes defined in this YANG module which 2065 are writable/creatable/deletable (i.e., config true, which is the 2066 default). These data nodes may be considered sensitive or vulnerable 2067 in some network environments. Write operations (e.g., edit-config) 2068 to these data nodes without proper protection can have a negative 2069 effect on network operations. These are the subtrees and data nodes 2070 and their sensitivity/vulnerability: 2072 /lmap/agent This subtree configures general properties of 2073 the measurement agent such as its identity, its 2074 measurement point or controller timeout. This 2075 subtree should only have write access for the 2076 system responsible to configure the measurement 2077 agent. 2079 /lmap/tasks This subtree configures the tasks that can be 2080 invoked by a controller. This subtree should 2081 only have write access for the system 2082 responsible to configure the measurement agent. 2083 Care must be taken to not expose tasks to a 2084 controller that can cause damage to the system 2085 or the network. 2087 /lmap/schedules This subtree is used by a controller to define 2088 the schedules and actions that are executed 2089 when certain events occur. Unauthorized access 2090 can cause unwanted load on the device or 2091 network or it might direct measurement traffic 2092 to targets that become victims of an attack. 2094 /lmap/suppressions This subtree is used by a controller to define 2095 suppressions that can temporarily disable the 2096 execution of schedules or actions. 2097 Unauthorized access can either disable 2098 measurements that should normally take place or 2099 it can cause measurements to take place during 2100 times when normally no measurements should take 2101 place. 2103 /lmap/events This subtree is used by a controller to define 2104 events that trigger the execution of schedules 2105 and actions. Unauthorized access can either 2106 disable measurements that should normally take 2107 place or it can cause measurements to take 2108 place during times when normally no 2109 measurements should take place or at frequency 2110 that is higher than normally expected. 2112 Some of the readable data nodes in this YANG module may be considered 2113 sensitive or vulnerable in some network environments. It is thus 2114 important to control read access (e.g., via get, get-config or 2115 notification) to these data nodes. These are the subtrees and data 2116 nodes and their sensitivity/vulnerability: 2118 /lmap/agent This subtree provides information about the 2119 measurement agent. This information may be 2120 used to select specific targets for attacks. 2122 /lmap/capabilities This subtree provides information about the 2123 capabilities of the measurement agent, 2124 including its software version number and the 2125 tasks that it supports. This information may 2126 be used to execute targeted attacks against 2127 specific implementations. 2129 /lmap/schedules This subtree provides information about the 2130 schedules and their associated actions executed 2131 on the measurement agent. This information may 2132 be used to check whether attacks against the 2133 implementation are effective. 2135 /lmap/suppressions This subtree provides information about the 2136 suppressions that can be active on the 2137 measurement agent. This information may be 2138 used to predict time periods where measurements 2139 take place (or do not take place). 2141 Some of the RPC operations in this YANG module may be considered 2142 sensitive or vulnerable in some network environments. It is thus 2143 important to control access to these operations. These are the 2144 operations and their sensitivity/vulnerability: 2146 /report The report operation is used to send locally collected 2147 measurement results to a remote collector. Unauthorized 2148 access may leak measurement results, including from passive 2149 measurements. 2151 The data model uses a number of identifiers that are set by the 2152 controller. Implementors may find these identifiers useful for the 2153 identification of resources, e.g., to identify objects in a 2154 filesystem providing temporary storage. Since the identifiers used 2155 by the YANG data model may allow characters that may be given special 2156 interpretation in a specific context, implementations must ensure 2157 that identifiers are properly mapped into safe identifiers. 2159 The data model allows to specify options in the form of name value 2160 pairs that are passed to programs. Implementers ought to take care 2161 that option names and values are passed literally to programs. In 2162 particular, shell expansions that may alter option names and values 2163 must not be performed. 2165 6. IANA Considerations 2167 This document registers three URIs in the "IETF XML Registry" 2168 [RFC3688]. Following the format in RFC 3688, the following 2169 registrations have been made. 2171 URI: urn:ietf:params:xml:ns:yang:ietf-lmap-common 2172 Registrant Contact: The IESG. 2173 XML: N/A; the requested URI is an XML namespace. 2175 URI: urn:ietf:params:xml:ns:yang:ietf-lmap-control 2176 Registrant Contact: The IESG. 2177 XML: N/A; the requested URI is an XML namespace. 2179 URI: urn:ietf:params:xml:ns:yang:ietf-lmap-report 2180 Registrant Contact: The IESG. 2181 XML: N/A; the requested URI is an XML namespace. 2183 This document registers three YANG modules in the "YANG Module Names" 2184 registry [RFC6020]. 2186 name: ietf-lmap-common 2187 namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-common 2188 prefix: lmap 2189 reference: RFC XXXX 2191 name: ietf-lmap-control 2192 namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-control 2193 prefix: lmapc 2194 reference: RFC XXXX 2196 name: ietf-lmap-report 2197 namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-report 2198 prefix: lmapr 2199 reference: RFC XXXX 2201 7. Acknowledgements 2203 Several people contributed to this specification by reviewing early 2204 versions and actively participating in the LMAP working group 2205 (apologies to those unintentionally omitted): Marcelo Bagnulo, Martin 2206 Bjorklund, Trevor Burbridge, Timothy Carey, Alissa Cooper, Philip 2207 Eardley, Al Morton, Dan Romascanu, Andrea Soppera, Barbara Stark, and 2208 Qin Wu. 2210 Juergen Schoenwaelder and Vaibhav Bajpai worked in part on the Leone 2211 research project, which received funding from the European Union 2212 Seventh Framework Programme [FP7/2007-2013] under grant agreement 2213 number 317647. 2215 Juergen Schoenwaelder and Vaibhav Bajpai were partly funded by 2216 Flamingo, a Network of Excellence project (ICT-318488) supported by 2217 the European Commission under its Seventh Framework Programme. 2219 8. References 2221 8.1. Normative References 2223 [I-D.ietf-lmap-information-model] 2224 Burbridge, T., Eardley, P., Bagnulo, M., and J. 2225 Schoenwaelder, "Information Model for Large-Scale 2226 Measurement Platforms (LMAP)", draft-ietf-lmap- 2227 information-model-16 (work in progress), January 2017. 2229 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2230 Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/ 2231 RFC2119, March 1997, 2232 . 2234 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2235 the Network Configuration Protocol (NETCONF)", RFC 6020, 2236 DOI 10.17487/RFC6020, October 2010, 2237 . 2239 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 2240 6991, DOI 10.17487/RFC6991, July 2013, 2241 . 2243 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 2244 RFC 7950, DOI 10.17487/RFC7950, August 2016, 2245 . 2247 8.2. Informative References 2249 [I-D.ietf-netconf-netconf-client-server] 2250 Watsen, K., Wu, G., and J. Schoenwaelder, "NETCONF Client 2251 and Server Models", draft-ietf-netconf-netconf-client- 2252 server-01 (work in progress), November 2016. 2254 [I-D.ietf-netmod-entity] 2255 Bierman, A., Bjorklund, M., Dong, J., and D. Romascanu, "A 2256 YANG Data Model for Hardware Management", draft-ietf- 2257 netmod-entity-02 (work in progress), January 2017. 2259 [ISO-8601] 2260 International Organization for Standardization, "Data 2261 elements and interchange formats -- Information 2262 interchange -- Representation of dates and times", ISO 2263 Standard 8601:2004, 2004. 2265 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 2266 DOI 10.17487/RFC3688, January 2004, 2267 . 2269 [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security 2270 (TLS) Protocol Version 1.2", RFC 5246, DOI 10.17487/ 2271 RFC5246, August 2008, 2272 . 2274 [RFC5424] Gerhards, R., "The Syslog Protocol", RFC 5424, DOI 10 2275 .17487/RFC5424, March 2009, 2276 . 2278 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 2279 and A. Bierman, Ed., "Network Configuration Protocol 2280 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 2281 . 2283 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 2284 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 2285 . 2287 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 2288 Protocol (NETCONF) Access Control Model", RFC 6536, DOI 10 2289 .17487/RFC6536, March 2012, 2290 . 2292 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 2293 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 2294 . 2296 [RFC7317] Bierman, A. and M. Bjorklund, "A YANG Data Model for 2297 System Management", RFC 7317, DOI 10.17487/RFC7317, August 2298 2014, . 2300 [RFC7398] Bagnulo, M., Burbridge, T., Crawford, S., Eardley, P., and 2301 A. Morton, "A Reference Path and Measurement Points for 2302 Large-Scale Measurement of Broadband Performance", RFC 2303 7398, DOI 10.17487/RFC7398, February 2015, 2304 . 2306 [RFC7594] Eardley, P., Morton, A., Bagnulo, M., Burbridge, T., 2307 Aitken, P., and A. Akhter, "A Framework for Large-Scale 2308 Measurement of Broadband Performance (LMAP)", RFC 7594, 2309 DOI 10.17487/RFC7594, September 2015, 2310 . 2312 Appendix A. Example Parameter Extension Module 2314 Sometimes tasks may require complicated parameters that cannot easily 2315 be fit into options, i.e., a list of name/value pairs. In such a 2316 situation, it is possible to augment the ietf-lmap-control.yang and 2317 ietf-lmap-report.yang data models with definitions for more complex 2318 parameters. The following example module demontrates this idea using 2319 the parameters of UDP latency metrics as an example (although UDP 2320 latency metric parameters do not really need such an extension 2321 module). 2323 module example-ietf-ippm-udp-latency { 2325 namespace "urn:example:ietf-ippm-udp-latency"; 2326 prefix "ippm-udp-latency"; 2328 import ietf-inet-types { 2329 prefix inet; 2330 } 2331 import ietf-lmap-control { 2332 prefix "lmapc"; 2333 } 2334 import ietf-lmap-report { 2335 prefix "lmapr"; 2336 } 2338 grouping ippm-udp-latency-parameter-grouping { 2339 leaf src-ip { 2340 type inet:ip-address; 2341 description 2342 "The source IP address of the UDP measurement traffic."; 2343 } 2345 leaf src-port { 2346 type inet:port-number; 2347 description 2348 "The source port number of the UDP measurement traffic."; 2349 } 2351 leaf dst-ip { 2352 type inet:ip-address; 2353 description 2354 "The destination IP address of the UDP measurement traffic."; 2355 } 2357 leaf dst-port { 2358 type inet:port-number; 2359 description 2360 "The destination port number of the UDP measurement traffic."; 2361 } 2363 leaf poisson-lambda { 2364 type decimal64 { 2365 fraction-digits 4; 2366 } 2367 units "seconds"; 2368 default 1.0000; 2369 description 2370 "The average interval for the poisson stream with a resolution 2371 of 0.0001 seconds (0.1 ms)."; 2372 } 2374 leaf poisson-limit { 2375 type decimal64 { 2376 fraction-digits 4; 2377 } 2378 units "seconds"; 2379 default 30.0000; 2380 description 2381 "The upper limit on the poisson distribution with a resolution 2382 of 0.0001 seconds (0.1 ms)."; 2383 } 2384 } 2386 augment "/lmapc:lmap/lmapc:schedules/lmapc:schedule/lmapc:action" 2387 + "/lmapc:parameters/lmapc:extension" { 2388 description 2389 "This augmentation adds parameters specific to IPPM UDP 2390 latency metrics to actions."; 2392 case "ietf-ippm-udp-latency" { 2393 uses ippm-udp-latency-parameter-grouping; 2394 } 2395 } 2397 augment "/lmapr:report/lmapr:input/lmapr:result" 2398 + "/lmapr:parameters/lmapr:extension" { 2399 description 2400 "This augmentation adds parameters specific to IPPM UDP 2401 latency metrics to reports."; 2403 case "ietf-ippm-udp-latency" { 2404 uses ippm-udp-latency-parameter-grouping; 2405 } 2406 } 2408 } 2410 Appendix B. Example Configuration 2412 2413 2415 2416 550e8400-e29b-41d4-a716-446655440000 2417 true 2418 2420 2421 2423 2424 S1 2425 E1 2426 sequential 2427 2428 A1 2429 update-ping-targets 2430 2431 2432 A2 2433 ping-all-targets 2434 S3 2435 2436 measurement:ping 2437 2438 2439 2440 S2 2441 E1 2442 parallel 2443 2444 A1 2445 traceroute 2446 2452 S3 2453 2454 2455 A2 2456 traceroute 2457 2462 S3 2463 2464 measurement:traceroute 2465 2466 2467 2468 S3 2469 E2 2470 2471 A1 2472 report 2473 2478 2479 2480 2482 2483 2484 2485 orphaned 2486 controller-lost 2487 controller-connected 2488 measurement:* 2489 2490 2492 2493 2494 2495 update-ping-targets 2496 fping-update-targets 2497 2498 2499 2500 ping-all-targets 2501 fping 2502 2503 2504 2505 traceroute 2506 mtr 2507 2511 2512 2513 2514 report 2515 lmap-report 2516 2518 2519 ippm-udp-latency-client 2520 ippm-udp-latency 2521 2522 urn:example:tbd 2523 client 2524 2525 active 2526 2527 2529 2530 2532 2533 E1 2534 60 2535 2536 3600000 2537 2016-09-01T00:00:00+00:00 2538 2016-11-01T00:00:00+00:00 2539 2540 2541 2542 2543 E2 2544 2545 * 2546 monday 2547 * 2548 4 2549 0 2550 0 2551 +00:00 2552 2553 2554 2556 2557 controller-lost 2558 2559 2560 2562 2563 controller-connected 2564 2565 2566 2567 2568 2570 Appendix C. Example Report 2572 2574 2575 2015-10-28T13:27:42+02:00 2576 550e8400-e29b-41d4-a716-446655440000 2577 2578 S1 2579 A1 2580 update-ping-targets 2581 2016-03-21T10:48:55+01:00 2582 2016-03-21T10:48:57+01:00 2583 0 2584 2585 2586 S1 2587 A2 2588 ping-all-targets 2589 2016-03-21T10:48:55+01:00 2590 2016-03-21T10:48:57+01:00 2591 0 2592 2593 target 2594 rtt 2595 2596 2001:db8::1 2597 42 2598 2599 2600 2001:db8::2 2601 24 2602 2603
2604
2605 2606 S2 2607 A1 2608 traceroute 2609 2614 2618 2016-03-21T10:48:55+01:00 2619 2016-03-21T10:48:57+01:00 2620 1 2621 2622 hop 2623 ip 2624 rtt 2625 2626 1 2627 2001:638:709:5::1 2628 10.5 2629 2630 2631 2 2632 ? 2633 2634 2635
2636
2637 2638 S2 2639 A2 2640 traceroute 2641 2646 2650 2016-03-21T10:48:55+01:00 2651 2016-03-21T10:48:57+01:00 2652 1 2653 2654 hop 2655 ip 2656 rtt 2657 2658 1 2659 2001:638:709:5::1 2660 11.8 2661 2662 2663 2 2664 ? 2665 2666 2667
2668
2669
2670
2672 Appendix D. Change History 2674 Note to the RFC Editor: this section should be removed on publication 2675 as an RFC. 2677 D.1. Non-editorial Changes since -07 2679 o Require yang-version 1.1 since we need leaf-lists supporting non- 2680 unique values in the report. 2682 o Merged the /lmap-state tree into the /lmap tree. 2684 o Marked state objects as mandatory. 2686 o Added /lmap/agent/report-group-id. 2688 D.2. Non-editorial Changes since -06 2690 o Removed /lmap/agent/device-id and /lmap-state/agent/device-id, 2691 added pointer to the ietf-hardware YANG model. 2693 o Removed /lmap-state/agent/{hardware,firmware}, added pointer to 2694 the ietf-system YANG model. 2696 D.3. Non-editorial Changes since -05 2698 o Update the example in an attempt to aligned it with the example in 2699 the information model. 2701 o Added an extension hook to reports so that task-specific 2702 parameters can be echoed back to the collector. Updated the 2703 example extension module accordingly. 2705 o Added text and Figure 1 to describe the function and purpose of 2706 the three YANG modules. 2708 o Added a cycle-number type definition. 2710 o Added the optional cycle-interval to event definitions. 2712 o Added tags that report additional capabilities of the measurement 2713 agent. 2715 o Added event time and cycle-number to the result report. 2717 o Renamed the metrics-grouping to registry-grouping. 2719 o Removed JSON encoding of the examples (they will go into the 2720 RESTCONF document). 2722 D.4. Non-editorial Changes since -04 2724 o Tagged /lmap/tasks/task/program with nacm:default-deny-write. 2726 o Added /lmap-state/schedules/schedule/storage and /lmap-state/ 2727 schedules/schedule/action/storage. 2729 o Removed suppress-by-default. 2731 o Moved the metric list from /report/result into /report/result/ 2732 table. 2734 o Conflicts are now reported as a triple (schedule, action, task). 2736 o Replaced IPv4 address in the examples with IPv6 addresses. 2738 o Added result/status. 2740 D.5. Non-editorial Changes since -03 2742 o Reworked the reporting data model to align it with the changes in 2743 the information model. 2745 D.6. Non-editorial Changes since -02 2747 o Added a mechanism to enforce a runtime limit for schedules. 2749 o Added security considerations text warning about possible shell 2750 expansions of options. 2752 o Restricted all user-defined names and tags to lmap:identifier. 2753 Added security considerations text to make implementors aware of 2754 possible security issues if identifiers are naively mapped to say 2755 filesystem paths. 2757 o Schedules and actions now have tags (echoed to the collector) and 2758 suppression tags (used for suppression selection). 2760 o Introduced glob-style pattern to match tags. 2762 o Added an example module for IPPM udp latency metrics to 2763 demonstrate the usage of the extension mechanism. 2765 o Introduced parameters, an extension point for task/metric specific 2766 parameters defined in augmenting YANG modules. 2768 o Introduced the typedefs event-ref, task-ref, and schedule-ref. 2770 o Changed schedule/event to schedule/start and added the optional 2771 schedule/stop and schedule/duration leafs. 2773 D.7. Non-editorial Changes since -01 2775 o Updated and split examples (config vs state vs report). 2777 o Refactored the definitions so that common definitions used by both 2778 the control and report data models are in the new module ietf- 2779 lmap-common. 2781 o A report is submitted via an RPC operation instead of using a 2782 notification. 2784 o The default execution mode is pipelined. 2786 o Clarified which action consumes data in sequential, pipelines, and 2787 parallel execution mode. 2789 o Added /lmap/agent/measurement-point, /lmap/agent/report- 2790 measurement-point, and /report/measurement-point to configure and 2791 report the measurement point. 2793 o Turned /lmap/suppression into a list /lmap/suppressions/ 2794 suppression that uses a start and stop event to define the 2795 beginning and end of a suppression period. 2797 o Added controller-lost an controller-ok event choices to /lmap/ 2798 events/event. 2800 o Added a metrics-grouping to identify entries in a metric registry 2801 and associated roles. 2803 o Added /lmap-state/schedules to report the status of schedules and 2804 their actions. Refactored /lmap-state/tasks to only report the 2805 task capabilities. 2807 D.8. Non-editorial Changes since -00 2809 o A task can now reference multiply registry entries. 2811 o Schedules are triggered by Events instead of Timings; Timings are 2812 just one of many possible event sources. 2814 o Actions feed into other Schedules (instead of Actions within other 2815 Schedules). 2817 o Removed the notion of multiple task outputs. 2819 o Support for sequential, parallel, and pipelined execution of 2820 Actions. 2822 Authors' Addresses 2824 Juergen Schoenwaelder 2825 Jacobs University Bremen 2827 Email: j.schoenwaelder@jacobs-university.de 2828 Vaibhav Bajpai 2829 Jacobs University Bremen 2831 Email: v.bajpai@jacobs-university.de