idnits 2.17.1 draft-ietf-lmap-yang-11.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 (February 22, 2017) is 2618 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 6536 (Obsoleted by RFC 8341) -- Obsolete informational reference (is this intentional?): RFC 7223 (Obsoleted by RFC 8343) Summary: 0 errors (**), 0 flaws (~~), 9 warnings (==), 3 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: August 26, 2017 February 22, 2017 7 A YANG Data Model for LMAP Measurement Agents 8 draft-ietf-lmap-yang-11.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 August 26, 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 . . . . . . . . . 49 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 . . . . . . . . . . . . . 57 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 aims to be consistent with the 84 LMAP 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 date (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-comman.yang | 149 | ietf-lmap-control.yang | 150 +------------------------+ 151 +------------------------+ | 152 | LMAP Measurement Agent | | 153 | | <- request | 154 | Server: |<---------------------' 155 | ietf-lmap-comman.yang | response -> 156 | ietf-lmap-control.yang | 157 | | 158 | | request -> 159 | Client: |----------------------. 160 | ietf-lmap-comman.yang | <- response | 161 | ietf-lmap-report.yang | | 162 +------------------------+ v 163 +------------------------+ 164 | LMAP Collector | 165 | | 166 | Server: | 167 | ietf-lmap-comman.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 devided into six sections. 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. For 360 the first version of the LMAP data models, it is assumed that 361 runtime logging information will be dealt with using protocols 362 that do not require a formal data model, e.g., the Syslog protocol 363 defined 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 sections 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-02-22.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-02-22" { 434 description 435 "Initial version"; 436 reference 437 "RFC XXX: 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-02-22.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-02-22" { 835 description 836 "Initial version"; 837 reference 838 "RFC XXX: 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-02-22.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-02-22" { 1850 description 1851 "Initial version"; 1852 reference 1853 "RFC XXX: 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 NETCONF access control model 2057 [RFC6536] provides the means to restrict access for particular 2058 NETCONF users to a pre-configured subset of all available NETCONF 2059 protocol operations and content. 2061 There are a number of data nodes defined in this YANG module which 2062 are writable/creatable/deletable (i.e., config true, which is the 2063 default). These data nodes may be considered sensitive or vulnerable 2064 in some network environments. Write operations (e.g., edit-config) 2065 to these data nodes without proper protection can have a negative 2066 effect on network operations. These are the subtrees and data nodes 2067 and their sensitivity/vulnerability: 2069 /lmap/agent This subtree configures general properties of 2070 the measurement agent such as its identity, its 2071 measurement point or controller timeout. This 2072 subtree should only have write access for the 2073 system responsible to configure the measurement 2074 agent. 2076 /lmap/tasks This subtree configures the tasks that can be 2077 invoked by a controller. This subtree should 2078 only have write access for the system 2079 responsible to configure the measurement agent. 2080 Care must be taken to not expose tasks to a 2081 controller that can cause damage to the system 2082 or the network. 2084 /lmap/schedules This subtree is used by a controller to define 2085 the schedules and actions that are executed 2086 when certain events occur. Unauthorized access 2087 can cause unwanted load on the device or 2088 network or it might direct measurement traffic 2089 to targets that become victims of an attack. 2091 /lmap/suppressions This subtree is used by a controller to define 2092 suppressions that can temporarily disable the 2093 execution of schedules or actions. 2094 Unauthorized access can either disable 2095 measurements that should normally take place or 2096 it can cause measurements to take place during 2097 times when normally no measurements should take 2098 place. 2100 /lmap/events This subtree is used by a controller to define 2101 events that trigger the execution of schedules 2102 and actions. Unauthorized access can either 2103 disable measurements that should normally take 2104 place or it can cause measurements to take 2105 place during times when normally no 2106 measurements should take place or at frequency 2107 that is higher than normally expected. 2109 Some of the readable data nodes in this YANG module may be considered 2110 sensitive or vulnerable in some network environments. It is thus 2111 important to control read access (e.g., via get, get-config or 2112 notification) to these data nodes. These are the subtrees and data 2113 nodes and their sensitivity/vulnerability: 2115 /lmap/agent This subtree provides information about the 2116 measurement agent. This information may be 2117 used to select specific targets for attacks. 2119 /lmap/capabilities This subtree provides information about the 2120 capabilities of the measurement agent, 2121 including its software version number and the 2122 tasks that it supports. This information may 2123 be used to execute targeted attacks against 2124 specific implementations. 2126 /lmap/schedules This subtree provides information about the 2127 schedules and their associated actions executed 2128 on the measurement agent. This information may 2129 be used to check whether attacks against the 2130 implementation are effective. 2132 /lmap/suppressions This subtree provides information about the 2133 suppressions that can be active on the 2134 measurement agent. This information may be 2135 used to predict time periods where measurements 2136 take place (or do not take place). 2138 Some of the RPC operations in this YANG module may be considered 2139 sensitive or vulnerable in some network environments. It is thus 2140 important to control access to these operations. These are the 2141 operations and their sensitivity/vulnerability: 2143 /report The report operation is used to send locally collected 2144 measurement results to a remote collector. Unauthorized 2145 access may leak measurement results, including from passive 2146 measurements. 2148 The data model uses a number of identifiers that are set by the 2149 controller. Implementors may find these identifiers useful for the 2150 identification of resources, e.g., to identify objects in a 2151 filesystem providing temporary storage. Since the identifiers used 2152 by the YANG data model may allow characters that may be given special 2153 interpretation in a specific context, implementations must ensure 2154 that identifiers are properly mapped into safe identifiers. 2156 The data model allows to specify options in the form of name value 2157 pairs that are passed to programs. Implementers ought to take care 2158 that option names and values are passed literally to programs. In 2159 particular, shell expansions that may alter option names and values 2160 must not be performed. 2162 6. IANA Considerations 2164 This document registers a URI in the "IETF XML Registry" [RFC3688]. 2165 Following the format in RFC 3688, the following registrations have 2166 been made. 2168 URI: urn:ietf:params:xml:ns:yang:ietf-lmap-common 2169 Registrant Contact: The IESG. 2170 XML: N/A; the requested URI is an XML namespace. 2172 URI: urn:ietf:params:xml:ns:yang:ietf-lmap-control 2173 Registrant Contact: The IESG. 2174 XML: N/A; the requested URI is an XML namespace. 2176 URI: urn:ietf:params:xml:ns:yang:ietf-lmap-report 2177 Registrant Contact: The IESG. 2178 XML: N/A; the requested URI is an XML namespace. 2180 This document registers a YANG module in the "YANG Module Names" 2181 registry [RFC6020]. 2183 name: ietf-lmap-common 2184 namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-common 2185 prefix: lmap 2186 reference: RFC XXXX 2188 name: ietf-lmap-control 2189 namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-control 2190 prefix: lmapc 2191 reference: RFC XXXX 2193 name: ietf-lmap-report 2194 namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-report 2195 prefix: lmapr 2196 reference: RFC XXXX 2198 7. Acknowledgements 2200 Several people contributed to this specification by reviewing early 2201 versions and actively participating in the LMAP working group 2202 (apologies to those unintentionally omitted): Marcelo Bagnulo, Martin 2203 Bjorklund, Trevor Burbridge, Timothy Carey, Alissa Cooper, Philip 2204 Eardley, Al Morton, Dan Romascanu, Andrea Soppera, and Barbara Stark. 2206 Juergen Schoenwaelder and Vaibhav Bajpai worked in part on the Leone 2207 research project, which received funding from the European Union 2208 Seventh Framework Programme [FP7/2007-2013] under grant agreement 2209 number 317647. 2211 Juergen Schoenwaelder and Vaibhav Bajpai were partly funded by 2212 Flamingo, a Network of Excellence project (ICT-318488) supported by 2213 the European Commission under its Seventh Framework Programme. 2215 8. References 2217 8.1. Normative References 2219 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2220 Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/ 2221 RFC2119, March 1997, 2222 . 2224 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2225 the Network Configuration Protocol (NETCONF)", RFC 6020, 2226 DOI 10.17487/RFC6020, October 2010, 2227 . 2229 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 2230 6991, DOI 10.17487/RFC6991, July 2013, 2231 . 2233 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 2234 RFC 7950, DOI 10.17487/RFC7950, August 2016, 2235 . 2237 8.2. Informative References 2239 [I-D.ietf-lmap-information-model] 2240 Burbridge, T., Eardley, P., Bagnulo, M., and J. 2241 Schoenwaelder, "Information Model for Large-Scale 2242 Measurement Platforms (LMAP)", draft-ietf-lmap- 2243 information-model-16 (work in progress), January 2017. 2245 [I-D.ietf-netconf-netconf-client-server] 2246 Watsen, K., Wu, G., and J. Schoenwaelder, "NETCONF Client 2247 and Server Models", draft-ietf-netconf-netconf-client- 2248 server-01 (work in progress), November 2016. 2250 [I-D.ietf-netmod-entity] 2251 Bierman, A., Bjorklund, M., Dong, J., and D. Romascanu, "A 2252 YANG Data Model for Hardware Management", draft-ietf- 2253 netmod-entity-02 (work in progress), January 2017. 2255 [ISO-8601] 2256 International Organization for Standardization, "Data 2257 elements and interchange formats -- Information 2258 interchange -- Representation of dates and times", ISO 2259 Standard 8601:2004, 2004. 2261 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 2262 DOI 10.17487/RFC3688, January 2004, 2263 . 2265 [RFC5424] Gerhards, R., "The Syslog Protocol", RFC 5424, DOI 10 2266 .17487/RFC5424, March 2009, 2267 . 2269 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 2270 and A. Bierman, Ed., "Network Configuration Protocol 2271 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 2272 . 2274 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 2275 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 2276 . 2278 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 2279 Protocol (NETCONF) Access Control Model", RFC 6536, DOI 10 2280 .17487/RFC6536, March 2012, 2281 . 2283 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 2284 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 2285 . 2287 [RFC7317] Bierman, A. and M. Bjorklund, "A YANG Data Model for 2288 System Management", RFC 7317, DOI 10.17487/RFC7317, August 2289 2014, . 2291 [RFC7398] Bagnulo, M., Burbridge, T., Crawford, S., Eardley, P., and 2292 A. Morton, "A Reference Path and Measurement Points for 2293 Large-Scale Measurement of Broadband Performance", RFC 2294 7398, DOI 10.17487/RFC7398, February 2015, 2295 . 2297 [RFC7594] Eardley, P., Morton, A., Bagnulo, M., Burbridge, T., 2298 Aitken, P., and A. Akhter, "A Framework for Large-Scale 2299 Measurement of Broadband Performance (LMAP)", RFC 7594, 2300 DOI 10.17487/RFC7594, September 2015, 2301 . 2303 Appendix A. Example Parameter Extension Module 2305 Sometimes tasks may require complicated parameters that cannot easily 2306 be fit into options, i.e., a list of name/value pairs. In such a 2307 situation, it is possible to augment the ietf-lmap-control.yang and 2308 ietf-lmap-report.yang data models with definitions for more complex 2309 parameters. The following example module demontrates this idea using 2310 the parameters of UDP latency metrics as an example (although UDP 2311 latency metric parameters do not really need such an extension 2312 module). 2314 module example-ietf-ippm-udp-latency { 2316 namespace "urn:example:ietf-ippm-udp-latency"; 2317 prefix "ippm-udp-latency"; 2319 import ietf-inet-types { 2320 prefix inet; 2321 } 2322 import ietf-lmap-control { 2323 prefix "lmapc"; 2324 } 2325 import ietf-lmap-report { 2326 prefix "lmapr"; 2327 } 2329 grouping ippm-udp-latency-parameter-grouping { 2330 leaf src-ip { 2331 type inet:ip-address; 2332 description 2333 "The source IP address of the UDP measurement traffic."; 2334 } 2336 leaf src-port { 2337 type inet:port-number; 2338 description 2339 "The source port number of the UDP measurement traffic."; 2340 } 2342 leaf dst-ip { 2343 type inet:ip-address; 2344 description 2345 "The destination IP address of the UDP measurement traffic."; 2346 } 2348 leaf dst-port { 2349 type inet:port-number; 2350 description 2351 "The destination port number of the UDP measurement traffic."; 2352 } 2354 leaf poisson-lambda { 2355 type decimal64 { 2356 fraction-digits 4; 2358 } 2359 units "seconds"; 2360 default 1.0000; 2361 description 2362 "The average interval for the poisson stream with a resolution 2363 of 0.0001 seconds (0.1 ms)."; 2364 } 2366 leaf poisson-limit { 2367 type decimal64 { 2368 fraction-digits 4; 2369 } 2370 units "seconds"; 2371 default 30.0000; 2372 description 2373 "The upper limit on the poisson distribution with a resolution 2374 of 0.0001 seconds (0.1 ms)."; 2375 } 2376 } 2378 augment "/lmapc:lmap/lmapc:schedules/lmapc:schedule/lmapc:action" 2379 + "/lmapc:parameters/lmapc:extension" { 2380 description 2381 "This augmentation adds parameters specific to IPPM UDP 2382 latency metrics to actions."; 2384 case "ietf-ippm-udp-latency" { 2385 uses ippm-udp-latency-parameter-grouping; 2386 } 2387 } 2389 augment "/lmapr:report/lmapr:input/lmapr:result" 2390 + "/lmapr:parameters/lmapr:extension" { 2391 description 2392 "This augmentation adds parameters specific to IPPM UDP 2393 latency metrics to reports."; 2395 case "ietf-ippm-udp-latency" { 2396 uses ippm-udp-latency-parameter-grouping; 2397 } 2398 } 2400 } 2402 Appendix B. Example Configuration 2404 2405 2407 2408 550e8400-e29b-41d4-a716-446655440000 2409 true 2410 2412 2413 2415 2416 S1 2417 E1 2418 sequential 2419 2420 A1 2421 update-ping-targets 2422 2423 2424 A2 2425 ping-all-targets 2426 S3 2427 2428 measurement:ping 2429 2430 2431 2432 S2 2433 E1 2434 parallel 2435 2436 A1 2437 traceroute 2438 2443 S3 2444 2445 2446 A2 2447 traceroute 2448 2453 S3 2454 2455 measurement:traceroute 2456 2457 2458 2459 S3 2460 E2 2461 2462 A1 2463 report 2464 2469 2470 2471 2473 2474 2475 2476 orphaned 2477 controller-lost 2478 controller-connected 2479 measurement:* 2480 2481 2483 2484 2485 2486 update-ping-targets 2487 fping-update-targets 2488 2489 2490 2491 ping-all-targets 2492 fping 2493 2494 2495 2496 traceroute 2497 mtr 2498 2502 2503 2504 2505 report 2506 lmap-report 2507 2509 2510 ippm-udp-latency-client 2511 ippm-udp-latency 2512 2513 urn:example:tbd 2514 client 2515 2516 active 2517 2518 2520 2521 2523 2524 E1 2525 60 2526 2527 3600000 2528 2016-09-01T00:00:00+00:00 2529 2016-11-01T00:00:00+00:00 2530 2531 2532 2533 2534 E2 2535 2536 * 2537 monday 2538 * 2539 4 2540 0 2541 0 2542 +00:00 2543 2544 2545 2547 2548 controller-lost 2549 2550 2551 2553 2554 controller-connected 2555 2556 2557 2558 2559 2561 Appendix C. Example Report 2563 2565 2566 2015-10-28T13:27:42+02:00 2567 550e8400-e29b-41d4-a716-446655440000 2568 2569 S1 2570 A1 2571 update-ping-targets 2572 2016-03-21T10:48:55+01:00 2573 2016-03-21T10:48:57+01:00 2574 0 2575 2576 2577 S1 2578 A2 2579 ping-all-targets 2580 2016-03-21T10:48:55+01:00 2581 2016-03-21T10:48:57+01:00 2582 0 2583 2584 target 2585 rtt 2586 2587 2001:db8::1 2588 42 2589 2590 2591 2001:db8::2 2592 24 2594 2595
2596
2597 2598 S2 2599 A1 2600 traceroute 2601 2606 2610 2016-03-21T10:48:55+01:00 2611 2016-03-21T10:48:57+01:00 2612 1 2613 2614 hop 2615 ip 2616 rtt 2617 2618 1 2619 2001:638:709:5::1 2620 10.5 2621 2622 2623 2 2624 ? 2625 2626 2627
2628
2629 2630 S2 2631 A2 2632 traceroute 2633 2638 2642 2016-03-21T10:48:55+01:00 2643 2016-03-21T10:48:57+01:00 2644 1 2645 2646 hop 2647 ip 2648 rtt 2649 2650 1 2651 2001:638:709:5::1 2652 11.8 2653 2654 2655 2 2656 ? 2657 2658 2659
2660
2661
2662
2664 Appendix D. Change History 2666 Note to the RFC Editor: this section should be removed on publication 2667 as an RFC. 2669 D.1. Non-editorial Changes since -07 2671 o Require yang-version 1.1 since we need leaf-lists supporting non- 2672 unique values in the report. 2674 o Merged the /lmap-state tree into the /lmap tree. 2676 o Marked state objects as mandatory. 2678 o Added /lmap/agent/report-group-id. 2680 D.2. Non-editorial Changes since -06 2682 o Removed /lmap/agent/device-id and /lmap-state/agent/device-id, 2683 added pointer to the ietf-hardware YANG model. 2685 o Removed /lmap-state/agent/{hardware,firmware}, added pointer to 2686 the ietf-system YANG model. 2688 D.3. Non-editorial Changes since -05 2690 o Update the example in an attempt to aligned it with the example in 2691 the information model. 2693 o Added an extension hook to reports so that task-specific 2694 parameters can be echoed back to the collector. Updated the 2695 example extension module accordingly. 2697 o Added text and Figure 1 to describe the function and purpose of 2698 the three YANG modules. 2700 o Added a cycle-number type definition. 2702 o Added the optional cycle-interval to event definitions. 2704 o Added tags that report additional capabilities of the measurement 2705 agent. 2707 o Added event time and cycle-number to the result report. 2709 o Renamed the metrics-grouping to registry-grouping. 2711 o Removed JSON encoding of the examples (they will go into the 2712 RESTCONF document). 2714 D.4. Non-editorial Changes since -04 2716 o Tagged /lmap/tasks/task/program with nacm:default-deny-write. 2718 o Added /lmap-state/schedules/schedule/storage and /lmap-state/ 2719 schedules/schedule/action/storage. 2721 o Removed suppress-by-default. 2723 o Moved the metric list from /report/result into /report/result/ 2724 table. 2726 o Conflicts are now reported as a triple (schedule, action, task). 2728 o Replaced IPv4 address in the examples with IPv6 addresses. 2730 o Added result/status. 2732 D.5. Non-editorial Changes since -03 2734 o Reworked the reporting data model to align it with the changes in 2735 the information model. 2737 D.6. Non-editorial Changes since -02 2739 o Added a mechanism to enforce a runtime limit for schedules. 2741 o Added security considerations text warning about possible shell 2742 expansions of options. 2744 o Restricted all user-defined names and tags to lmap:identifier. 2745 Added security considerations text to make implementors aware of 2746 possible security issues if identifiers are naively mapped to say 2747 filesystem paths. 2749 o Schedules and actions now have tags (echoed to the collector) and 2750 suppression tags (used for suppression selection). 2752 o Introduced glob-style pattern to match tags. 2754 o Added an example module for IPPM udp latency metrics to 2755 demonstrate the usage of the extension mechanism. 2757 o Introduced parameters, an extension point for task/metric specific 2758 parameters defined in augmenting YANG modules. 2760 o Introduced the typedefs event-ref, task-ref, and schedule-ref. 2762 o Changed schedule/event to schedule/start and added the optional 2763 schedule/stop and schedule/duration leafs. 2765 D.7. Non-editorial Changes since -01 2767 o Updated and split examples (config vs state vs report). 2769 o Refactored the definitions so that common definitions used by both 2770 the control and report data models are in the new module ietf- 2771 lmap-common. 2773 o A report is submitted via an RPC operation instead of using a 2774 notification. 2776 o The default execution mode is pipelined. 2778 o Clarified which action consumes data in sequential, pipelines, and 2779 parallel execution mode. 2781 o Added /lmap/agent/measurement-point, /lmap/agent/report- 2782 measurement-point, and /report/measurement-point to configure and 2783 report the measurement point. 2785 o Turned /lmap/suppression into a list /lmap/suppressions/ 2786 suppression that uses a start and stop event to define the 2787 beginning and end of a suppression period. 2789 o Added controller-lost an controller-ok event choices to /lmap/ 2790 events/event. 2792 o Added a metrics-grouping to identify entries in a metric registry 2793 and associated roles. 2795 o Added /lmap-state/schedules to report the status of schedules and 2796 their actions. Refactored /lmap-state/tasks to only report the 2797 task capabilities. 2799 D.8. Non-editorial Changes since -00 2801 o A task can now reference multiply registry entries. 2803 o Schedules are triggered by Events instead of Timings; Timings are 2804 just one of many possible event sources. 2806 o Actions feed into other Schedules (instead of Actions within other 2807 Schedules). 2809 o Removed the notion of multiple task outputs. 2811 o Support for sequential, parallel, and pipelined execution of 2812 Actions. 2814 Authors' Addresses 2816 Juergen Schoenwaelder 2817 Jacobs University Bremen 2819 Email: j.schoenwaelder@jacobs-university.de 2821 Vaibhav Bajpai 2822 Jacobs University Bremen 2824 Email: v.bajpai@jacobs-university.de