idnits 2.17.1 draft-ietf-lmap-yang-08.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 188 has weird spacing: '...version str...' == Line 250 has weird spacing: '...pletion yan...' == Line 269 has weird spacing: '...nterval uin...' == Line 285 has weird spacing: '...rw time yan...' == Line 293 has weird spacing: '...nnected emp...' -- The document date (November 20, 2016) is 2713 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-13 == 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-01 -- 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: May 24, 2017 November 20, 2016 7 A YANG Data Model for LMAP Measurement Agents 8 draft-ietf-lmap-yang-08.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 May 24, 2017. 33 Copyright Notice 35 Copyright (c) 2016 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 . . . . . . . . . . . . . . . . . . . . . . . . . 47 63 8.1. Normative References . . . . . . . . . . . . . . . . . . 47 64 8.2. Informative References . . . . . . . . . . . . . . . . . 48 65 Appendix A. Example Parameter Extension Module . . . . . . . . . 49 66 Appendix B. Example Configuration . . . . . . . . . . . . . . . 51 67 Appendix C. Example Report . . . . . . . . . . . . . . . . . . . 54 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 . . . . . . . . . . . . . 57 72 D.4. Non-editorial Changes since -04 . . . . . . . . . . . . . 58 73 D.5. Non-editorial Changes since -03 . . . . . . . . . . . . . 58 74 D.6. Non-editorial Changes since -02 . . . . . . . . . . . . . 58 75 D.7. Non-editorial Changes since -01 . . . . . . . . . . . . . 59 76 D.8. Non-editorial Changes since -00 . . . . . . . . . . . . . 59 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-config.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 +--rw agent 179 | +--rw agent-id? yang:uuid 180 | +--rw group-id? string 181 | +--rw measurement-point? string 182 | +--rw report-agent-id? boolean 183 | +--rw report-group-id? boolean 184 | +--rw report-measurement-point? boolean 185 | +--rw controller-timeout? uint32 186 | +--ro last-started yang:date-and-time 187 +--ro capabilities 188 | +--ro version string 189 | +--ro tag* lmap:tag 190 | +--ro task* [name] 191 | +--ro name lmap:identifier 192 | +--ro function* [uri] 193 | | +--ro uri inet:uri 194 | | +--ro role* string 195 | +--ro version? string 196 | +--ro program? string 197 +--rw tasks 198 | +--rw task* [name] 199 | +--rw name lmap:identifier 200 | +--rw function* [uri] 201 | | +--rw uri inet:uri 202 | | +--rw role* string 203 | +--rw program? string 204 | +--rw option* [id] 205 | | +--rw id lmap:identifier 206 | | +--rw name? string 207 | | +--rw value? string 208 | +--rw tag* lmap:identifier 209 +--rw schedules 210 | +--rw schedule* [name] 211 | +--rw name lmap:identifier 212 | +--rw start event-ref 213 | +--rw (stop)? 214 | | +--:(end) 215 | | | +--rw end? event-ref 216 | | +--:(duration) 217 | | +--rw duration? uint32 218 | +--rw execution-mode? enumeration 219 | +--rw tag* lmap:tag 220 | +--rw suppression-tag* lmap:tag 221 | +--ro state enumeration 222 | +--ro storage yang:gauge64 223 | +--ro invocations yang:counter32 224 | +--ro suppressions yang:counter32 225 | +--ro overlaps yang:counter32 226 | +--ro failures yang:counter32 227 | +--ro last-invocation? yang:date-and-time 228 | +--rw action* [name] 229 | +--rw name lmap:identifier 230 | +--rw task task-ref 231 | +--rw parameters 232 | | +--rw (extension)? 233 | +--rw option* [id] 234 | | +--rw id lmap:identifier 235 | | +--rw name? string 236 | | +--rw value? string 237 | +--rw destination* schedule-ref 238 | +--rw tag* lmap:tag 239 | +--rw suppression-tag* lmap:tag 240 | +--ro state enumeration 241 | +--ro storage yang:gauge64 242 | +--ro invocations yang:counter32 243 | +--ro suppressions yang:counter32 244 | +--ro overlaps yang:counter32 245 | +--ro failures yang:counter32 246 | +--ro last-invocation yang:date-and-time 247 | +--ro last-completion yang:date-and-time 248 | +--ro last-status lmap:status-code 249 | +--ro last-message string 250 | +--ro last-failed-completion yang:date-and-time 251 | +--ro last-failed-status lmap:status-code 252 | +--ro last-failed-message string 253 +--rw suppressions 254 | +--rw suppression* [name] 255 | +--rw name lmap:identifier 256 | +--rw start? event-ref 257 | +--rw end? event-ref 258 | +--rw match* lmap:glob-pattern 259 | +--rw stop-running? boolean 260 | +--ro state enumeration 261 +--rw events 262 +--rw event* [name] 263 +--rw name lmap:identifier 264 +--rw random-spread? uint32 265 +--rw cycle-interval? uint32 266 +--rw (event-type)? 267 +--:(periodic) 268 | +--rw periodic 269 | +--rw interval uint32 270 | +--rw start? yang:date-and-time 271 | +--rw end? yang:date-and-time 272 +--:(calendar) 273 | +--rw calendar 274 | +--rw month* lmap:month-or-all 275 | +--rw day-of-month* lmap:day-of-months-or-all 276 | +--rw day-of-week* lmap:weekday-or-all 277 | +--rw hour* lmap:hour-or-all 278 | +--rw minute* lmap:minute-or-all 279 | +--rw second* lmap:second-or-all 280 | +--rw timezone-offset? lmap:timezone-offset 281 | +--rw start? yang:date-and-time 282 | +--rw end? yang:date-and-time 283 +--:(one-off) 284 | +--rw one-off 285 | +--rw time yang:date-and-time 286 +--:(immediate) 287 | +--rw immediate empty 288 +--:(startup) 289 | +--rw startup empty 290 +--:(controller-lost) 291 | +--rw controller-lost empty 292 +--:(controller-connected) 293 +--rw controller-connected empty 295 The tree diagram below shows the structure of the reporting data 296 model. 298 module: ietf-lmap-report 300 rpcs: 301 +---x report 302 +---w input 303 +---w date yang:date-and-time 304 +---w agent-id? yang:uuid 305 +---w group-id? string 306 +---w measurement-point? string 307 +---w result* 308 +---w schedule-name? lmap:identifier 309 +---w action-name? lmap:identifier 310 +---w task-name? lmap:identifier 311 +---w parameters 312 | +---w (extension)? 313 +---w option* [id] 314 | +---w id lmap:identifier 315 | +---w name? string 316 | +---w value? string 317 +---w tag* lmap:tag 318 +---w event? yang:date-and-time 319 +---w start yang:date-and-time 320 +---w end? yang:date-and-time 321 +---w cycle-number? lmap:cycle-number 322 +---w status lmap:status-code 323 +---w conflict* 324 | +---w schedule-name? lmap:identifier 325 | +---w action-name? lmap:identifier 326 | +---w task-name? lmap:identifier 327 +---w table* 328 +---w function* [uri] 329 | +---w uri inet:uri 330 | +---w role* string 331 +---w column* string 332 +---w row* 333 +---w value* string 335 3. Relationship to the Information Model 337 The LMAP information model [I-D.ietf-lmap-information-model] is 338 devided into six sections. They are mapped into the YANG data model 339 as explained below: 341 o Pre-Configuration Information: This is not modeled explicitly 342 since bootstrapping information is outside the scope of this data 343 model. Implementations may use some of the Configuration 344 Information also for bootstrapping purposes. 346 o Configuration Information: This is modeled in the /lmap/agent 347 subtree, the /lmap/schedules subtree, and the /lmap/tasks subtree 348 described below. Some items have been left out because they are 349 expected to be dealt with by the underlying protocol. 351 o Instruction Information: This is modeled in the /lmap/suppressions 352 subtree, the /lmap/schedules subtree, and the /lmap/tasks subtree 353 described below. 355 o Logging Information: Some of the logging information, in 356 particular 'success/failure/warning messages in response to 357 information updates from the Controller', will be handled by the 358 protocol used to manipulate the lmap specific configuration. For 359 the first version of the LMAP data models, it is assumed that 360 runtime logging information will be dealt with using protocols 361 that do not require a formal data model, e.g., the Syslog protocol 362 defined in [RFC5424]. 364 o Capability and Status Information: Some of the capability and 365 status information is modeled in the /lmap/capability subtree. 366 The list of supported tasks is modeled in the /lmap/capabilities/ 367 task list. Status information about schedules and actions is 368 included in the /lmap/schedules subtree. Information about 369 network interfaces can be obtained from the ietf-interfaces YANG 370 data model [RFC7223]. Information about the hardware and the 371 firmware can be obtained from the ietf-system YANG data model 372 [RFC7317]. A device identifier can be obtained from the ietf- 373 hardware YANG data model [I-D.ietf-netmod-entity]. 375 o Reporting Information: This is modeled by the report data model to 376 be implemented by the Collector. Measurement Agents send results 377 to the Collector by invoking an RPC on the Collector. 379 These six information model sections use a collection of common 380 information objects. These common information objects are 381 represented in the YANG data model as follows: 383 o Schedules: Schedules are modeled in the /lmap/schedules subtree. 385 o Channels: Channels are not modeled since the NETCONF server 386 configuration data model [I-D.ietf-netconf-netconf-client-server] 387 already provides a mechanism to configure NETCONF server channels. 389 o Task Configurations: Configured tasks are modeled in the /lmap/ 390 tasks subtree. 392 o Event Information: Event definitions are modeled in the /lmap/ 393 events subtree. 395 4. YANG Modules 397 4.1. LMAP Common YANG Module 399 This module imports definitions from [RFC6536]. 401 file "ietf-lmap-common@2016-11-20.yang" 402 module ietf-lmap-common { 404 yang-version 1.1; 405 namespace "urn:ietf:params:xml:ns:yang:ietf-lmap-common"; 406 prefix "lmap"; 408 import ietf-inet-types { 409 prefix inet; 410 } 412 organization 413 "IETF Large-Scale Measurement Platforms Working Group"; 415 contact 416 "WG Web: 417 WG List: 419 Editor: Juergen Schoenwaelder 420 422 Editor: Vaibhav Bajpai 423 "; 425 description 426 "This module provides common definitions used by the data 427 models written for Large-Scale Measurement Platforms (LMAP). 428 This module defines typedefs and groupings but no schema 429 tree elements."; 431 revision "2016-11-20" { 432 description 433 "Initial version"; 434 reference 435 "RFC XXX: A YANG Data Model for LMAP Measurement Agents"; 436 } 438 /* 439 * Typedefs 440 */ 442 typedef identifier { 443 type string { 444 length "1..max"; 445 } 446 description 447 "An string value used to name something."; 448 } 450 typedef tag { 451 type string { 452 length "1..max"; 453 } 454 description 455 "A tag consists of at least one character."; 456 } 458 typedef glob-pattern { 459 type string { 460 length "1..max"; 461 } 462 description 463 'A glob style pattern (following POSIX.2 fnmatch() without 464 special treatment of file paths): 466 * matches a sequence of characters 467 ? matches a single character 468 [seq] matches any character in seq 469 [!seq] matches any character not in seq 471 A backslash followed by a character matches the following 472 character. In particular: 474 \* matches * 475 \? matches ? 476 \\ matches \ 478 A sequence seq may be a sequence of characters (e.g., [abc] 479 or a range of characters (e.g., [a-c]).'; 480 } 482 typedef wildcard { 483 type string { 484 pattern '\*'; 485 } 486 description 487 "A wildcard for calendar scheduling entries."; 488 } 490 typedef cycle-number { 491 type string { 492 pattern '[0-9]{8}\.[0-9]{6}'; 493 } 494 description 495 "A cycle number represented in the format YYYYMMDD.HHMMSS 496 where YYYY represents the year, MM the month (1..12), DD 497 the day of the months (01..31), HH the hour (00..23), MM 498 the minute (00..59), and SS the second (00..59)."; 499 } 501 typedef month { 502 type enumeration { 503 enum january { 504 value 1; 505 description 506 "January of the Gregorian calendar."; 507 } 508 enum february { 509 value 2; 510 description 511 "February of the Gregorian calendar."; 512 } 513 enum march { 514 value 3; 515 description 516 "March of the Gregorian calendar."; 517 } 518 enum april { 519 value 4; 520 description 521 "April of the Gregorian calendar."; 522 } 523 enum may { 524 value 5; 525 description 526 "May of the Gregorian calendar."; 527 } 528 enum june { 529 value 6; 530 description 531 "June of the Gregorian calendar."; 532 } 533 enum july { 534 value 7; 535 description 536 "July of the Gregorian calendar."; 537 } 538 enum august { 539 value 8; 540 description 541 "August of the Gregorian calendar."; 542 } 543 enum september { 544 value 9; 545 description 546 "September of the Gregorian calendar."; 547 } 548 enum october { 549 value 10; 550 description 551 "October of the Gregorian calendar."; 552 } 553 enum november { 554 value 11; 555 description 556 "November of the Gregorian calendar."; 557 } 558 enum december { 559 value 12; 560 description 561 "December of the Gregorian calendar."; 562 } 563 } 564 description 565 "A type modeling the month in the Gregorian calendar."; 566 } 568 typedef month-or-all { 569 type union { 570 type month; 571 type wildcard; 572 } 573 description 574 "A month or a wildcard indicating all twelve months."; 575 } 577 typedef day-of-month { 578 type uint8 { range "1..31"; } 579 description 580 "A day of a month of the Gregorian calendar."; 581 } 583 typedef day-of-months-or-all { 584 type union { 585 type day-of-month; 586 type wildcard; 588 } 589 description 590 "A day of a months or a wildcard indicating all days 591 of a month."; 592 } 594 typedef weekday { 595 type enumeration { 596 enum monday { 597 value 1; 598 description 599 "Monday of the Gregorian calendar."; 600 } 601 enum tuesday { 602 value 2; 603 description 604 "Tuesday of the Gregorian calendar."; 605 } 606 enum wednesday { 607 value 3; 608 description 609 "Wednesday of the Gregorian calendar."; 610 } 611 enum thursday { 612 value 4; 613 description 614 "Thursday of the Gregorian calendar."; 615 } 616 enum friday { 617 value 5; 618 description 619 "Friday of the Gregorian calendar."; 620 } 621 enum saturday { 622 value 6; 623 description 624 "Saturday of the Gregorian calendar."; 625 } 626 enum sunday { 627 value 7; 628 description 629 "Sunday of the Gregorian calendar."; 630 } 631 } 632 description 633 "A type modeling the weekdays in the Gregorian calendar. 634 The numbering follows the ISO 8601 scheme."; 635 } 636 typedef weekday-or-all { 637 type union { 638 type weekday; 639 type wildcard; 640 } 641 description 642 "A weekday or a wildcard indicating all seven weekdays."; 643 } 645 typedef hour { 646 type uint8 { range "0..23"; } 647 description 648 "An hour of a day."; 649 } 651 typedef hour-or-all { 652 type union { 653 type hour; 654 type wildcard; 655 } 656 description 657 "An hour of a day or a wildcard indicating all hours 658 of a day."; 659 } 661 typedef minute { 662 type uint8 { range "0..59"; } 663 description 664 "A minute of an hour."; 665 } 667 typedef minute-or-all { 668 type union { 669 type minute; 670 type wildcard; 671 } 672 description 673 "A minute of an hour or a wildcard indicating all 674 minutes of an hour."; 675 } 677 typedef second { 678 type uint8 { range "0..59"; } 679 description 680 "A second of a minute."; 681 } 683 typedef second-or-all { 684 type union { 685 type second; 686 type wildcard; 687 } 688 description 689 "A second of a minute or a wildcard indicating all 690 seconds of a minute."; 691 } 693 typedef status-code { 694 type int32; 695 description 696 "A status code returned by the execution of a task. Note 697 that the actual range is implementation dependent but it 698 should be portable to use values in the range 0..127 for 699 regular exit codes. By convention, 0 indicates successful 700 termination. Negative values may be used to indicate 701 abnormal termination due to a signal; the absolute value 702 may identify the signal number in this case."; 703 } 705 typedef timezone-offset { 706 type string { 707 pattern 'Z|[\+\-]\d{2}:\d{2}'; 708 } 709 description 710 "A timezone-offset as it is used by the date-and-time type 711 defined in the ietf-yang-types module. The value Z is 712 equivalent to +00:00. The value -00:00 indicates and 713 unknown time-offset."; 714 reference 715 "RFC 6991: Common YANG Data Types"; 716 } 718 /* 719 * Groupings 720 */ 722 grouping registry-grouping { 723 description 724 "This grouping models a list of entries in a registry 725 that identify functions of a tasks."; 727 list function { 728 key uri; 729 description 730 "A list of entries in a registry identifying functions."; 732 leaf uri { 733 type inet:uri; 734 description 735 "A URI identifying an entry in a registry."; 736 } 738 leaf-list role { 739 type string; 740 description 741 "A set of roles for the identified registry entry."; 742 } 743 } 744 } 746 grouping options-grouping { 747 description 748 "A list of options of a task. Each option is a name/value 749 pair (where the value may be absent)."; 751 list option { 752 key "id"; 753 ordered-by user; 754 description 755 "A list of options passed to the task. It is a list of 756 key / value pairs and may be used to model options. 757 Options may be used to identify the role of a task 758 or to pass a channel name to a task."; 760 leaf id { 761 type lmap:identifier; 762 description 763 "An identifier uniquely identifying an option. This 764 identifier is required by YANG to uniquely identify 765 a name value pair but it otherwise has no semantic 766 value"; 767 } 769 leaf name { 770 type string; 771 description 772 "The name of the option."; 773 } 775 leaf value { 776 type string; 777 description 778 "The value of the option."; 779 } 781 } 782 } 783 } 784 786 4.2. LMAP Control YANG Module 788 This module imports definitions from [RFC6536], [RFC6991] and the 789 common LMAP module and it references [RFC7398]. 791 file "ietf-lmap-control@2016-11-20.yang" 792 module ietf-lmap-control { 794 yang-version 1.1; 795 namespace "urn:ietf:params:xml:ns:yang:ietf-lmap-control"; 796 prefix "lmapc"; 798 import ietf-yang-types { 799 prefix yang; 800 } 801 import ietf-netconf-acm { 802 prefix nacm; 803 } 804 import ietf-lmap-common { 805 prefix lmap; 806 } 808 organization 809 "IETF Large-Scale Measurement Platforms Working Group"; 811 contact 812 "WG Web: 813 WG List: 815 Editor: Juergen Schoenwaelder 816 818 Editor: Vaibhav Bajpai 819 "; 821 description 822 "This module defines a data model for controlling measurement 823 agents that are part of a Large-Scale Measurement Platform 824 (LMAP). This data model is expected to be implemented by a 825 measurement agent."; 827 revision "2016-11-20" { 828 description 829 "Initial version"; 830 reference 831 "RFC XXX: A YANG Data Model for LMAP Measurement Agents"; 832 } 834 /* 835 * Typedefs 836 */ 838 typedef event-ref { 839 type leafref { 840 path "/lmap/events/event/name"; 841 } 842 description 843 "This type is used by data models that need to reference 844 a configured event source."; 845 } 847 typedef task-ref { 848 type leafref { 849 path "/lmap/tasks/task/name"; 850 } 851 description 852 "This type is used by data models that need to reference 853 a configured task."; 854 } 856 typedef schedule-ref { 857 type leafref { 858 path "/lmap/schedules/schedule/name"; 859 } 860 description 861 "This type is used by data models that need to reference 862 a configured schedule."; 863 } 865 /* 866 * Groupings 867 */ 869 grouping start-end-grouping { 870 description 871 "A grouping that provides start and end times for 872 event objects."; 873 leaf start { 874 type yang:date-and-time; 875 description 876 "The date and time when the event object 877 starts to create triggers."; 878 } 879 leaf end { 880 type yang:date-and-time; 881 description 882 "The date and time when the event object 883 stops to create triggers. 885 It is generally a good idea to always configure 886 an end time and to refresh the configuration 887 of event object as needed to ensure that agents 888 that loose connectivity to their controller 889 do not continue their tasks forever."; 890 } 891 } 893 /* 894 * Configuration data nodes 895 */ 897 container lmap { 898 description 899 "Configuration of the LMAP agent."; 901 /* 902 * Agent Configuration 903 */ 905 container agent { 906 description 907 "Configuration of parameters affecting the whole 908 measurement agent."; 910 leaf agent-id { 911 type yang:uuid; 912 description 913 "The agent-id identifies a measurement agent with 914 a very low probability of collision. In certain 915 deployments, the agent-id may be considered 916 sensitive and hence this object is optional."; 917 } 919 leaf group-id { 920 type string; 921 description 922 "The group-id identifies a group of measurement 923 agents. In certain deployments, the group-id 924 may be considered less sensitive than the 925 agent-id."; 926 } 928 leaf measurement-point { 929 type string; 930 description 931 "The measurement point indicating where the 932 measurement agent is located on a path."; 933 reference 934 "RFC 7398: A Reference Path and Measurement Points 935 for Large-Scale Measurement of Broadband 936 Performance"; 937 } 939 leaf report-agent-id { 940 type boolean; 941 must '. != "true" or ../agent-id' { 942 description 943 "An agent-id must exist for this to be set 944 to true."; 945 } 946 default false; 947 description 948 "The 'report-agent-id' controls whether the 949 'agent-id' is reported to collectors."; 950 } 952 leaf report-group-id { 953 type boolean; 954 must '. != "true" or ../group-id' { 955 description 956 "A group-id must exist for this to be set 957 to true."; 958 } 959 default false; 960 description 961 "The 'report-group-id' controls whether the 962 'group-id' is reported to collectors."; 963 } 965 leaf report-measurement-point { 966 type boolean; 967 must '. != "true" or ../measurement-point' { 968 description 969 "A measurement-point must exist for this to be 970 set to true."; 971 } 972 default false; 973 description 974 "The 'report-measurement-point' controls whether 975 the 'measurement-point' is reported to collectors."; 976 } 978 leaf controller-timeout { 979 type uint32; 980 units "seconds"; 981 description 982 "A timer is started after each successful contact 983 with a controller. When the timer reaches the 984 controller-timeout, an event (controller-lost) is 985 raised indicating that connectivity to the controller 986 has been lost."; 987 } 989 leaf last-started { 990 type yang:date-and-time; 991 config false; 992 mandatory true; 993 description 994 "The date and time the measurement agent last started."; 995 } 996 } 998 container capabilities { 999 config false; 1000 description 1001 "Capabilities such as available LMAP tasks."; 1003 leaf version { 1004 type string; 1005 config false; 1006 mandatory true; 1007 description 1008 "A short description of the software implementing the 1009 measurement agent. This should include the version 1010 number of the measurement agent software."; 1011 } 1013 leaf-list tag { 1014 type lmap:tag; 1015 config false; 1016 description 1017 "An optional unordered set of tags that provide 1018 additional information about the capabilities of 1019 the measurement agent."; 1021 } 1023 list task { 1024 key name; 1025 description 1026 "The list of tasks available on the LMAP agent."; 1028 leaf name { 1029 type lmap:identifier; 1030 description 1031 "The unique name of a task."; 1032 } 1034 uses lmap:registry-grouping; 1036 leaf version { 1037 type string; 1038 description 1039 "A short description of the software implementing 1040 the task. This should include the version 1041 number of the measurement task software."; 1042 } 1044 leaf program { 1045 type string; 1046 description 1047 "The (local) program to invoke in order to execute 1048 the task."; 1049 } 1050 } 1051 } 1053 /* 1054 * Task Configuration 1055 */ 1057 container tasks { 1058 description 1059 "Configuration of LMAP tasks."; 1061 list task { 1062 key name; 1063 description 1064 "The list of tasks configured on the LMAP agent."; 1066 leaf name { 1067 type lmap:identifier; 1068 description 1069 "The unique name of a task."; 1070 } 1072 uses lmap:registry-grouping; 1074 leaf program { 1075 type string; 1076 nacm:default-deny-write; 1077 description 1078 "The (local) program to invoke in order to execute 1079 the task. If this leaf is not set, then the system 1080 will try to identify a suitable program based on 1081 the registry information present."; 1082 } 1084 uses lmap:options-grouping { 1085 description 1086 "The list of task specific options."; 1087 } 1089 leaf-list tag { 1090 type lmap:identifier; 1091 description 1092 "A set of task specific tags that are reported 1093 together with the measurement results to a collector. 1094 A tag can be used, for example, to carry the 1095 Measurement Cycle ID."; 1096 } 1097 } 1098 } 1100 /* 1101 * Schedule Instructions 1102 */ 1104 container schedules { 1105 description 1106 "Configuration of LMAP schedules. Schedules control 1107 which tasks are executed by the LMAP implementation."; 1109 list schedule { 1110 key name; 1111 description 1112 "Configuration of a particular schedule."; 1114 leaf name { 1115 type lmap:identifier; 1116 description 1117 "The locally-unique, administratively assigned name 1118 for this schedule."; 1119 } 1121 leaf start { 1122 type event-ref; 1123 mandatory true; 1124 description 1125 "The event source controlling the start of the 1126 scheduled actions."; 1127 } 1129 choice stop { 1130 description 1131 "This choice contains optional leafs that control the 1132 graceful forced termination of scheduled actions. 1133 When the end has been reached, the scheduled actions 1134 should be forced to terminate the measurements. 1135 This may involve being active some additional time in 1136 order to properly finish the action's activity (e.g., 1137 waiting for any still outstanding messages)."; 1139 leaf end { 1140 type event-ref; 1141 description 1142 "The event source controlling the graceful 1143 forced termination of the scheduled actions."; 1144 } 1146 leaf duration { 1147 type uint32; 1148 units "seconds"; 1149 description 1150 "The duration controlling the graceful forced 1151 termination of the scheduled actions."; 1152 } 1153 } 1155 leaf execution-mode { 1156 type enumeration { 1157 enum sequential { 1158 value 1; 1159 description 1160 "The actions of the schedule are executed 1161 sequentially."; 1162 } 1163 enum parallel { 1164 value 2; 1165 description 1166 "The actions of the schedule are executed 1167 concurrently"; 1168 } 1169 enum pipelined { 1170 value 3; 1171 description 1172 "The actions of the schedule are executed in a 1173 pipelined mode. Output created by an action is 1174 passed as input to the subsequent action."; 1175 } 1176 } 1177 default pipelined; 1178 description 1179 "The execution mode of this schedule determins in 1180 which order the actions of the schedule are executed."; 1181 } 1183 leaf-list tag { 1184 type lmap:tag; 1185 description 1186 "A set of schedule specific tags that are reported 1187 together with the measurement results to a collector."; 1188 } 1190 leaf-list suppression-tag { 1191 type lmap:tag; 1192 description 1193 "A set of suppression tags that are used to select 1194 schedules to be suppressed."; 1195 } 1197 leaf state { 1198 type enumeration { 1199 enum enabled { 1200 value 1; 1201 description 1202 "The value 'enabled' indicates that the 1203 schedule is currently enabled."; 1204 } 1205 enum disabled { 1206 value 2; 1207 description 1208 "The value 'disabled' indicates that the 1209 schedule is currently disabled."; 1210 } 1211 enum running { 1212 value 3; 1213 description 1214 "The value 'running' indicates that the 1215 schedule is currently running."; 1216 } 1217 enum suppressed { 1218 value 4; 1219 description 1220 "The value 'suppressed' indicates that the 1221 schedule is currently suppressed."; 1222 } 1223 } 1224 config false; 1225 mandatory true; 1226 description 1227 "The current state of the schedule."; 1228 } 1230 leaf storage { 1231 type yang:gauge64; 1232 units "bytes"; 1233 config false; 1234 mandatory true; 1235 description 1236 "The amount of secondary storage (e.g., allocated in a 1237 file system) holding temporary data allocated to the 1238 schedule in bytes. This object reports the amount of 1239 allocated physical storage and not the storage used 1240 by logical data records."; 1241 } 1243 leaf invocations { 1244 type yang:counter32; 1245 config false; 1246 mandatory true; 1247 description 1248 "Number of invocations of this schedule. This counter 1249 does not include suppressed invocations or invocations 1250 that were prevented due to an overlap with a previous 1251 invocation of this schedule."; 1252 } 1254 leaf suppressions { 1255 type yang:counter32; 1256 config false; 1257 mandatory true; 1258 description 1259 "Number of suppressed executions of this schedule."; 1260 } 1261 leaf overlaps { 1262 type yang:counter32; 1263 config false; 1264 mandatory true; 1265 description 1266 "Number of executions prevented due to overlaps with 1267 a previous invocation of this schedule."; 1268 } 1270 leaf failures { 1271 type yang:counter32; 1272 config false; 1273 mandatory true; 1274 description 1275 "Number of failed executions of this schedule. A 1276 failed execution is an execution where at least 1277 one action failed."; 1278 } 1280 leaf last-invocation { 1281 type yang:date-and-time; 1282 config false; 1283 description 1284 "The date and time of the last invocation of 1285 this schedule."; 1286 } 1288 list action { 1289 key name; 1290 description 1291 "An action describes a task that is invoked by the 1292 schedule. Multiple actions are invoked sequentially."; 1294 leaf name { 1295 type lmap:identifier; 1296 description 1297 "The unique identifier for this action."; 1298 } 1300 leaf task { 1301 type task-ref; 1302 mandatory true; 1303 description 1304 "The task invoked by this action."; 1305 } 1307 container parameters { 1308 description 1309 "This container is a place-holder for run-time 1310 parameters defined in task-specific data models 1311 augmenting the base lmap control data model."; 1313 choice extension { 1314 description 1315 "This choice is provided to augment in different 1316 sets of parameters."; 1317 } 1318 } 1320 uses lmap:options-grouping { 1321 description 1322 "The list of action specific options that are 1323 appended to the list of task specific options."; 1324 } 1326 leaf-list destination { 1327 type schedule-ref; 1328 description 1329 "A set of schedules receiving the output produced 1330 by this action. A queue is internally used to pass 1331 results to another schedule. The behaviour of 1332 an action passing data to its own schedule is 1333 implementation specific. 1335 Data passed to a sequential or pipelined schedule 1336 is received by the schedule's first action. Data 1337 passed to a parallel schedule is received by all 1338 actions of the schedule."; 1339 } 1341 leaf-list tag { 1342 type lmap:tag; 1343 description 1344 "A set of action specific tags that are reported 1345 together with the measurement results to a 1346 collector."; 1347 } 1349 leaf-list suppression-tag { 1350 type lmap:tag; 1351 description 1352 "A set of suppression tags that are used to select 1353 actions to be suppressed."; 1354 } 1356 leaf state { 1357 type enumeration { 1358 enum enabled { 1359 value 1; 1360 description 1361 "The value 'enabled' indicates that the 1362 action is currently enabled."; 1363 } 1364 enum disabled { 1365 value 2; 1366 description 1367 "The value 'disabled' indicates that the 1368 action is currently disabled."; 1369 } 1370 enum running { 1371 value 3; 1372 description 1373 "The value 'running' indicates that the 1374 action is currently runnning."; 1375 } 1376 enum suppressed { 1377 value 4; 1378 description 1379 "The value 'suppressed' indicates that the 1380 action is currently suppressed."; 1381 } 1382 } 1383 config false; 1384 mandatory true; 1385 description 1386 "The current state of the action."; 1387 } 1389 leaf storage { 1390 type yang:gauge64; 1391 units "bytes"; 1392 config false; 1393 mandatory true; 1394 description 1395 "The amount of secondary storage (e.g., allocated in a 1396 file system) holding temporary data allocated to the 1397 schedule in bytes. This object reports the amount of 1398 allocated physical storage and not the storage used 1399 by logical data records."; 1400 } 1402 leaf invocations { 1403 type yang:counter32; 1404 config false; 1405 mandatory true; 1406 description 1407 "Number of invocations of this action. This counter 1408 does not include suppressed invocations or invocations 1409 that were prevented due to an overlap with a previous 1410 invocation of this action."; 1411 } 1413 leaf suppressions { 1414 type yang:counter32; 1415 config false; 1416 mandatory true; 1417 description 1418 "Number of suppressed executions of this action."; 1419 } 1421 leaf overlaps { 1422 type yang:counter32; 1423 config false; 1424 mandatory true; 1425 description 1426 "Number of executions prevented due to overlaps with 1427 a previous invocation of this action."; 1428 } 1430 leaf failures { 1431 type yang:counter32; 1432 config false; 1433 mandatory true; 1434 description 1435 "Number of failed executions of this action."; 1436 } 1438 leaf last-invocation { 1439 type yang:date-and-time; 1440 config false; 1441 mandatory true; 1442 description 1443 "The date and time of the last invocation of 1444 this action."; 1445 } 1447 leaf last-completion { 1448 type yang:date-and-time; 1449 config false; 1450 mandatory true; 1451 description 1452 "The date and time of the last completion of 1453 this action."; 1454 } 1456 leaf last-status { 1457 type lmap:status-code; 1458 config false; 1459 mandatory true; 1460 description 1461 "The status code returned by the last execution of 1462 this action."; 1463 } 1465 leaf last-message { 1466 type string; 1467 config false; 1468 mandatory true; 1469 description 1470 "The status message produced by the last execution 1471 of this action."; 1472 } 1474 leaf last-failed-completion { 1475 type yang:date-and-time; 1476 config false; 1477 mandatory true; 1478 description 1479 "The date and time of the last failed completion 1480 of this action."; 1481 } 1483 leaf last-failed-status { 1484 type lmap:status-code; 1485 config false; 1486 mandatory true; 1487 description 1488 "The status code returned by the last failed 1489 execution of this action."; 1490 } 1492 leaf last-failed-message { 1493 type string; 1494 config false; 1495 mandatory true; 1496 description 1497 "The status message produced by the last failed 1498 execution of this action."; 1499 } 1500 } 1502 } 1503 } 1505 /* 1506 * Suppression Instructions 1507 */ 1509 container suppressions { 1510 description 1511 "Suppression information to prevent schedules or 1512 certain actions from starting."; 1514 list suppression { 1515 key name; 1516 description 1517 "Configuration of a particular suppression."; 1519 leaf name { 1520 type lmap:identifier; 1521 description 1522 "The locally-unique, administratively assigned name 1523 for this suppression."; 1524 } 1526 leaf start { 1527 type event-ref; 1528 description 1529 "The event source controlling the start of the 1530 suppression period."; 1531 } 1533 leaf end { 1534 type event-ref; 1535 description 1536 "The event source controlling the end of the 1537 suppression period. If not present, supression 1538 continues indefinitely."; 1539 } 1541 leaf-list match { 1542 type lmap:glob-pattern; 1543 description 1544 "A set of suppression match pattern. The suppression 1545 will apply to all schedules (and their actions) that 1546 have a matching value in their suppression-tags 1547 and to all actions that have a matching value in 1548 their suppression-tags."; 1549 } 1550 leaf stop-running { 1551 type boolean; 1552 default false; 1553 description 1554 "If 'stop-running' is true, running schedules and 1555 actions matching the suppression will be terminated 1556 when suppression is activated. If 'stop-running' is 1557 false, running schedules and actions will not be 1558 affected if suppression is activated."; 1559 } 1561 leaf state { 1562 type enumeration { 1563 enum enabled { 1564 value 1; 1565 description 1566 "The value 'enabled' indicates that the 1567 suppression is currently enabled."; 1568 } 1569 enum disabled { 1570 value 2; 1571 description 1572 "The value 'disabled' indicates that the 1573 suppression is currently disabled."; 1574 } 1575 enum active { 1576 value 3; 1577 description 1578 "The value 'active' indicates that the 1579 suppression is currently active."; 1580 } 1581 } 1582 config false; 1583 mandatory true; 1584 description 1585 "The current state of the suppression."; 1586 } 1587 } 1588 } 1590 /* 1591 * Event Instructions 1592 */ 1594 container events { 1595 description 1596 "Configuration of LMAP events. 1598 Implementations may be forced to delay acting 1599 upon the occurance of events in the face of local 1600 constraints. An action triggered by an event 1601 therefore should not rely on the accuracy 1602 provided by the scheduler implementation."; 1604 list event { 1605 key name; 1606 description 1607 "The list of event sources configured on the 1608 LMAP agent."; 1610 leaf name { 1611 type lmap:identifier; 1612 description 1613 "The unique name of an event source."; 1614 } 1616 leaf random-spread { 1617 type uint32; 1618 units seconds; 1619 description 1620 "This optional leaf adds a random spread to the 1621 computation of the event's trigger time. The 1622 random spread is a uniformly distributed random 1623 number taken from the interval [0:random-spread]."; 1624 } 1626 leaf cycle-interval { 1627 type uint32; 1628 units seconds; 1629 description 1630 "The optional cycle-interval defines the duration 1631 of the time interval in seconds that is used to 1632 calculate cycle numbers. No cycle number is 1633 calculated if the optional cycle-interval does 1634 not exist."; 1635 } 1637 choice event-type { 1638 description 1639 "Different types of events are handled by 1640 different branches of this choice. Note that 1641 this choice can be extended via augmentations."; 1643 case periodic { 1644 container periodic { 1645 description 1646 "A periodic timing object triggers periodically 1647 according to a regular interval."; 1649 leaf interval { 1650 type uint32 { 1651 range "1..max"; 1652 } 1653 units "seconds"; 1654 mandatory true; 1655 description 1656 "The number of seconds between two triggers 1657 generated by this periodic timing object."; 1658 } 1659 uses start-end-grouping; 1660 } 1661 } 1663 case calendar { 1664 container calendar { 1665 description 1666 "A calendar timing object triggers based on the 1667 current calendar date and time."; 1669 leaf-list month { 1670 type lmap:month-or-all; 1671 min-elements 1; 1672 description 1673 "A set of month at which this calendar timing 1674 will trigger. The wildcard means all months."; 1675 } 1677 leaf-list day-of-month { 1678 type lmap:day-of-months-or-all; 1679 min-elements 1; 1680 description 1681 "A set of days of the month at which this 1682 calendar timing will trigger. The wildcard means 1683 all days of a month."; 1684 } 1686 leaf-list day-of-week { 1687 type lmap:weekday-or-all; 1688 min-elements 1; 1689 description 1690 "A set of weekdays at which this calendar timing 1691 will trigger. The wildcard means all weekdays."; 1692 } 1693 leaf-list hour { 1694 type lmap:hour-or-all; 1695 min-elements 1; 1696 description 1697 "A set of hours at which this calendar timing will 1698 trigger. The wildcard means all hours of a day."; 1699 } 1701 leaf-list minute { 1702 type lmap:minute-or-all; 1703 min-elements 1; 1704 description 1705 "A set of minutes at which this calendar timing 1706 will trigger. The wildcard means all minutes of 1707 an hour."; 1708 } 1710 leaf-list second { 1711 type lmap:second-or-all; 1712 min-elements 1; 1713 description 1714 "A set of second at which this calendar timing 1715 will trigger. The wildcard means all seconds of 1716 a minute."; 1717 } 1719 leaf timezone-offset { 1720 type lmap:timezone-offset; 1721 description 1722 "The timezone in which this calendar timing 1723 object will be evaluated. If not present, 1724 the systems' local timezone will be used."; 1725 } 1726 uses start-end-grouping; 1727 } 1728 } 1730 case one-off { 1731 container one-off { 1732 description 1733 "A one-off timing object triggers exactly once."; 1735 leaf time { 1736 type yang:date-and-time; 1737 mandatory true; 1738 description 1739 "This one-off timing object triggers once at 1740 the configured date and time."; 1742 } 1743 } 1744 } 1746 case immediate { 1747 leaf immediate { 1748 type empty; 1749 mandatory true; 1750 description 1751 "This immediate event object triggers immediately 1752 when it is configured."; 1753 } 1754 } 1756 case startup { 1757 leaf startup { 1758 type empty; 1759 mandatory true; 1760 description 1761 "This startup event object triggers whenever the 1762 LMAP agent (re)starts."; 1763 } 1764 } 1766 case controller-lost { 1767 leaf controller-lost { 1768 type empty; 1769 mandatory true; 1770 description 1771 "The controller-lost event object triggers when 1772 the connectivity to the controller has been lost 1773 for at least 'controller-timeout' seconds."; 1774 } 1775 } 1777 case controller-connected { 1778 leaf controller-connected { 1779 type empty; 1780 mandatory true; 1781 description 1782 "The controller-connected event object triggers 1783 when the connectivity to the controller has been 1784 restored after it was lost for at least 1785 'controller-timeout' seconds."; 1786 } 1787 } 1788 } 1790 } 1791 } 1792 } 1793 } 1794 1796 4.3. LMAP Report YANG Module 1798 This module imports definitions from [RFC6536] and the common LMAP 1799 module. 1801 file "ietf-lmap-report@2016-11-20.yang" 1802 module ietf-lmap-report { 1804 yang-version 1.1; 1805 namespace "urn:ietf:params:xml:ns:yang:ietf-lmap-report"; 1806 prefix "lmapr"; 1808 import ietf-yang-types { 1809 prefix yang; 1810 } 1811 import ietf-lmap-common { 1812 prefix lmap; 1813 } 1815 organization 1816 "IETF Large-Scale Measurement Platforms Working Group"; 1818 contact 1819 "WG Web: 1820 WG List: 1822 Editor: Juergen Schoenwaelder 1823 1825 Editor: Vaibhav Bajpai 1826 "; 1828 description 1829 "This module defines a data model for reporting results from 1830 measurement agents, which are part of a Large-Scale Measurement 1831 Platform (LMAP), to result data collectors. This data model is 1832 expected to be implemented by a collector."; 1834 revision "2016-11-20" { 1835 description 1836 "Initial version"; 1838 reference 1839 "RFC XXX: A YANG Data Model for LMAP Measurement Agents"; 1840 } 1842 rpc report { 1843 description 1844 "The report operation is used by an LMAP measurement agent to 1845 submit measurement results produced by measurement tasks to 1846 a collector."; 1848 input { 1850 leaf date { 1851 type yang:date-and-time; 1852 mandatory true; 1853 description 1854 "The date and time when this result report was sent to 1855 a collector."; 1856 } 1858 leaf agent-id { 1859 type yang:uuid; 1860 description 1861 "The agent-id of the agent from which this 1862 report originates."; 1863 } 1865 leaf group-id { 1866 type string; 1867 description 1868 "The group-id of the agent from which this 1869 report originates."; 1870 } 1872 leaf measurement-point { 1873 type string; 1874 description 1875 "The measurement-point of the agent from which this 1876 report originates."; 1877 } 1879 list result { 1880 description 1881 "The list of tasks for which results are reported."; 1883 leaf schedule-name { 1884 type lmap:identifier; 1885 description 1886 "The name of the schedule that produced the result."; 1887 } 1889 leaf action-name { 1890 type lmap:identifier; 1891 description 1892 "The name of the action in the schedule that produced 1893 the result."; 1894 } 1896 leaf task-name { 1897 type lmap:identifier; 1898 description 1899 "The name of the task that produced the result."; 1900 } 1902 container parameters { 1903 description 1904 "This container is a place-holder for run-time 1905 parameters defined in task-specific data models 1906 augmenting the base lmap report data model."; 1908 choice extension { 1909 description 1910 "This choice is provided to augment in different 1911 sets of parameters."; 1912 } 1913 } 1915 uses lmap:options-grouping { 1916 description 1917 "The list of options there were in use then the 1918 measurement was performed. This list must include 1919 both the task specific options as well as the action 1920 specific options."; 1921 } 1923 leaf-list tag { 1924 type lmap:tag; 1925 description 1926 "A tag contains additional information that is passed 1927 with the result record to the collector. This is the 1928 joined set of tags defined for the task object and the 1929 action object. A tag can be used to carry the 1930 Measurement Cycle ID."; 1931 } 1933 leaf event { 1934 type yang:date-and-time; 1935 description 1936 "The date and time of the event that triggered the 1937 schedule of the action that produced the reported 1938 result values. The date and time does not include 1939 any added randomization."; 1940 } 1942 leaf start { 1943 type yang:date-and-time; 1944 mandatory true; 1945 description 1946 "The date and time when the task producing 1947 this result started."; 1948 } 1950 leaf end { 1951 type yang:date-and-time; 1952 description 1953 "The date and time when the task producing 1954 this result finished."; 1955 } 1957 leaf cycle-number { 1958 type lmap:cycle-number; 1959 description 1960 "The optional cycle number is the time closest to 1961 the time reported in the event leaf that is a multiple 1962 of the cycle-interval of the event that triggered the 1963 execution of the schedule. The value is only present 1964 if the event that triggered the execution of the 1965 schedule has a defined cycle-interval."; 1966 } 1968 leaf status { 1969 type lmap:status-code; 1970 mandatory true; 1971 description 1972 "The status code returned by the execution of this 1973 action."; 1974 } 1976 list conflict { 1977 description 1978 "The names of tasks overlapping with the execution 1979 of the task that has produced this result."; 1981 leaf schedule-name { 1982 type lmap:identifier; 1983 description 1984 "The name of a schedule that might have impacted 1985 the execution of the task that has produced this 1986 result."; 1987 } 1989 leaf action-name { 1990 type lmap:identifier; 1991 description 1992 "The name of an action within the schedule that 1993 might have impacted the execution of the task that 1994 has produced this result."; 1995 } 1997 leaf task-name { 1998 type lmap:identifier; 1999 description 2000 "The name of the task executed by an action within 2001 the schedule that might have impacted the execution 2002 of the task that has produced this result."; 2003 } 2004 } 2006 list table { 2007 description 2008 "A list of result tables."; 2010 uses lmap:registry-grouping; 2012 leaf-list column { 2013 type string; 2014 description 2015 "An ordered list of column labels. The order is 2016 determined by the system and must match the order 2017 of the columns in the result rows."; 2018 } 2020 list row { 2021 description 2022 "The rows of a result table."; 2024 leaf-list value { 2025 type string; 2026 description 2027 "The value of a cell in the result row."; 2028 } 2029 } 2031 } 2032 } 2033 } 2034 } 2035 } 2036 2038 5. Security Considerations 2040 The YANG module defined in this memo is designed to be accessed via 2041 the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the 2042 secure transport layer and the mandatory to implement secure 2043 transport is SSH [RFC6242]. The NETCONF access control model 2044 [RFC6536] provides the means to restrict access for particular 2045 NETCONF users to a pre-configured subset of all available NETCONF 2046 protocol operations and content. 2048 There are a number of data nodes defined in this YANG module which 2049 are writable/creatable/deletable (i.e., config true, which is the 2050 default). These data nodes may be considered sensitive or vulnerable 2051 in some network environments. Write operations (e.g., edit-config) 2052 to these data nodes without proper protection can have a negative 2053 effect on network operations. These are the subtrees and data nodes 2054 and their sensitivity/vulnerability: 2056 /lmap/agent This subtree configures general properties of 2057 the measurement agent such as its identity, its 2058 measurement point or controller timeout. This 2059 subtree should only have write access for the 2060 system responsible to configure the measurement 2061 agent. 2063 /lmap/tasks This subtree configures the tasks that can be 2064 invoked by a controller. This subtree should 2065 only have write access for the system 2066 responsible to configure the measurement agent. 2067 Care must be taken to not expose tasks to a 2068 controller that can cause damage to the system 2069 or the network. 2071 /lmap/schedules This subtree is used by a controller to define 2072 the schedules and actions that are executed 2073 when certain events occur. Unauthorized access 2074 can cause unwanted load on the device or 2075 network or it might direct measurement traffic 2076 to targets that become victims of an attack. 2078 /lmap/suppressions This subtree is used by a controller to define 2079 suppressions that can temporarily disable the 2080 execution of schedules or actions. 2081 Unauthorized access can either disable 2082 measurements that should normally take place or 2083 it can cause measurements to take place during 2084 times when normally no measurements should take 2085 place. 2087 /lmap/events This subtree is used by a controller to define 2088 events that trigger the execution of schedules 2089 and actions. Unauthorized access can either 2090 disable measurements that should normally take 2091 place or it can cause measurements to take 2092 place during times when normally no 2093 measurements should take place or at frequency 2094 that is higher than normally expected. 2096 Some of the readable data nodes in this YANG module may be considered 2097 sensitive or vulnerable in some network environments. It is thus 2098 important to control read access (e.g., via get, get-config or 2099 notification) to these data nodes. These are the subtrees and data 2100 nodes and their sensitivity/vulnerability: 2102 /lmap/agent This subtree provides information about the 2103 measurement agent. This information may be 2104 used to select specific targets for attacks. 2106 /lmap/capabilities This subtree provides information about the 2107 capabilities of the measurement agent, 2108 including its software version number and the 2109 tasks that it supports. This information may 2110 be used to execute targeted attacks against 2111 specific implementations. 2113 /lmap/schedules This subtree provides information about the 2114 schedules and their associated actions executed 2115 on the measurement agent. This information may 2116 be used to check whether attacks against the 2117 implementation are effective. 2119 /lmap/suppressions This subtree provides information about the 2120 suppressions that can be active on the 2121 measurement agent. This information may be 2122 used to predict time periods where measurements 2123 take place (or do not take place). 2125 Some of the RPC operations in this YANG module may be considered 2126 sensitive or vulnerable in some network environments. It is thus 2127 important to control access to these operations. These are the 2128 operations and their sensitivity/vulnerability: 2130 /report The report operation is used to send locally collected 2131 measurement results to a remote collector. Unauthorized 2132 access may leak measurement results. 2134 The data model uses a number of identifiers that are set by the 2135 controller. Implementors may find these identifiers useful for the 2136 identification of resources, e.g., to identify objects in a 2137 filesystem providing temporary storage. Since the identifiers used 2138 by the YANG data model may allow characters that may be given special 2139 interpretation in a specific context, implementations MUST ensure 2140 that identifiers are properly mapped into safe identifiers. 2142 The data model allows to specify options in the form of name value 2143 pairs that are passed to programs. Implementers MUST taken care that 2144 option names and values are passed literally to programs. In 2145 particular, it MUST be avoided that any shell expansions are 2146 performed that may alter the option names and values. 2148 6. IANA Considerations 2150 This document registers a URI in the "IETF XML Registry" [RFC3688]. 2151 Following the format in RFC 3688, the following registrations have 2152 been made. 2154 URI: urn:ietf:params:xml:ns:yang:ietf-lmap-common 2155 Registrant Contact: The IESG. 2156 XML: N/A; the requested URI is an XML namespace. 2158 URI: urn:ietf:params:xml:ns:yang:ietf-lmap-control 2159 Registrant Contact: The IESG. 2160 XML: N/A; the requested URI is an XML namespace. 2162 URI: urn:ietf:params:xml:ns:yang:ietf-lmap-report 2163 Registrant Contact: The IESG. 2164 XML: N/A; the requested URI is an XML namespace. 2166 This document registers a YANG module in the "YANG Module Names" 2167 registry [RFC6020]. 2169 name: ietf-lmap-common 2170 namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-common 2171 prefix: lmap 2172 reference: RFC XXXX 2174 name: ietf-lmap-control 2175 namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-control 2176 prefix: lmapc 2177 reference: RFC XXXX 2179 name: ietf-lmap-report 2180 namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-report 2181 prefix: lmapr 2182 reference: RFC XXXX 2184 7. Acknowledgements 2186 Several people contributed to this specification by reviewing early 2187 versions and actively participating in the LMAP working group 2188 (apologies to those unintentionally omitted): Marcelo Bagnulo, Martin 2189 Bjorklund, Trevor Burbridge, Timothy Carey, Philip Eardley, Al 2190 Morton, Dan Romascanu, Andrea Soppera, and Barbara Stark. 2192 Juergen Schoenwaelder and Vaibhav Bajpai worked in part on the Leone 2193 research project, which received funding from the European Union 2194 Seventh Framework Programme [FP7/2007-2013] under grant agreement 2195 number 317647. 2197 Juergen Schoenwaelder and Vaibhav Bajpai were partly funded by 2198 Flamingo, a Network of Excellence project (ICT-318488) supported by 2199 the European Commission under its Seventh Framework Programme. 2201 8. References 2203 8.1. Normative References 2205 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 2206 Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/ 2207 RFC2119, March 1997, 2208 . 2210 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 2211 the Network Configuration Protocol (NETCONF)", RFC 6020, 2212 DOI 10.17487/RFC6020, October 2010, 2213 . 2215 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 2216 6991, DOI 10.17487/RFC6991, July 2013, 2217 . 2219 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 2220 RFC 7950, DOI 10.17487/RFC7950, August 2016, 2221 . 2223 8.2. Informative References 2225 [I-D.ietf-lmap-information-model] 2226 Burbridge, T., Eardley, P., Bagnulo, M., and J. 2227 Schoenwaelder, "Information Model for Large-Scale 2228 Measurement Platforms (LMAP)", draft-ietf-lmap- 2229 information-model-13 (work in progress), November 2016. 2231 [I-D.ietf-netconf-netconf-client-server] 2232 Watsen, K., Wu, G., and J. Schoenwaelder, "NETCONF Client 2233 and Server Models", draft-ietf-netconf-netconf-client- 2234 server-01 (work in progress), November 2016. 2236 [I-D.ietf-netmod-entity] 2237 Bierman, A., Bjorklund, M., Dong, J., and D. Romascanu, "A 2238 YANG Data Model for Hardware Management", draft-ietf- 2239 netmod-entity-01 (work in progress), October 2016. 2241 [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, 2242 DOI 10.17487/RFC3688, January 2004, 2243 . 2245 [RFC5424] Gerhards, R., "The Syslog Protocol", RFC 5424, DOI 10 2246 .17487/RFC5424, March 2009, 2247 . 2249 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 2250 and A. Bierman, Ed., "Network Configuration Protocol 2251 (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, 2252 . 2254 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 2255 Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, 2256 . 2258 [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration 2259 Protocol (NETCONF) Access Control Model", RFC 6536, DOI 10 2260 .17487/RFC6536, March 2012, 2261 . 2263 [RFC7223] Bjorklund, M., "A YANG Data Model for Interface 2264 Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, 2265 . 2267 [RFC7317] Bierman, A. and M. Bjorklund, "A YANG Data Model for 2268 System Management", RFC 7317, DOI 10.17487/RFC7317, August 2269 2014, . 2271 [RFC7398] Bagnulo, M., Burbridge, T., Crawford, S., Eardley, P., and 2272 A. Morton, "A Reference Path and Measurement Points for 2273 Large-Scale Measurement of Broadband Performance", RFC 2274 7398, DOI 10.17487/RFC7398, February 2015, 2275 . 2277 [RFC7594] Eardley, P., Morton, A., Bagnulo, M., Burbridge, T., 2278 Aitken, P., and A. Akhter, "A Framework for Large-Scale 2279 Measurement of Broadband Performance (LMAP)", RFC 7594, 2280 DOI 10.17487/RFC7594, September 2015, 2281 . 2283 Appendix A. Example Parameter Extension Module 2285 Sometimes tasks may require complicated parameters that cannot easily 2286 be fit into options, i.e., a list of name/value pairs. In such a 2287 situation, it is possible to augment the ietf-lmap-control.yang and 2288 ietf-lmap-report.yang data models with definitions for more complex 2289 parameters. The following example module demontrates this idea using 2290 the parameters of UDP latency metrics as an example (although UDP 2291 latency metric parameters do not really need such an extension 2292 module). 2294 module example-ietf-ippm-udp-latency { 2296 namespace "urn:example:ietf-ippm-udp-latency"; 2297 prefix "ippm-udp-latency"; 2299 import ietf-inet-types { 2300 prefix inet; 2301 } 2302 import ietf-lmap-control { 2303 prefix "lmapc"; 2304 } 2305 import ietf-lmap-report { 2306 prefix "lmapr"; 2307 } 2309 grouping ippm-udp-latency-parameter-grouping { 2310 leaf src-ip { 2311 type inet:ip-address; 2312 description 2313 "The source IP address of the UDP measurement traffic."; 2314 } 2316 leaf src-port { 2317 type inet:port-number; 2318 description 2319 "The source port number of the UDP measurement traffic."; 2320 } 2322 leaf dst-ip { 2323 type inet:ip-address; 2324 description 2325 "The destination IP address of the UDP measurement traffic."; 2326 } 2328 leaf dst-port { 2329 type inet:port-number; 2330 description 2331 "The destination port number of the UDP measurement traffic."; 2332 } 2334 leaf poisson-lambda { 2335 type decimal64 { 2336 fraction-digits 4; 2337 } 2338 units "seconds"; 2339 default 1.0000; 2340 description 2341 "The average interval for the poisson stream with a resolution 2342 of 0.0001 seconds (0.1 ms)."; 2343 } 2345 leaf poisson-limit { 2346 type decimal64 { 2347 fraction-digits 4; 2348 } 2349 units "seconds"; 2350 default 30.0000; 2351 description 2352 "The upper limit on the poisson distribution with a resolution 2353 of 0.0001 seconds (0.1 ms)."; 2354 } 2355 } 2357 augment "/lmapc:lmap/lmapc:schedules/lmapc:schedule/lmapc:action" 2358 + "/lmapc:parameters/lmapc:extension" { 2360 description 2361 "This augmentation adds parameters specific to IPPM UDP 2362 latency metrics to actions."; 2364 case "ietf-ippm-udp-latency" { 2365 uses ippm-udp-latency-parameter-grouping; 2366 } 2367 } 2369 augment "/lmapr:report/lmapr:input/lmapr:result" 2370 + "/lmapr:parameters/lmapr:extension" { 2371 description 2372 "This augmentation adds parameters specific to IPPM UDP 2373 latency metrics to reports."; 2375 case "ietf-ippm-udp-latency" { 2376 uses ippm-udp-latency-parameter-grouping; 2377 } 2378 } 2380 } 2382 Appendix B. Example Configuration 2384 2385 2387 2388 550e8400-e29b-41d4-a716-446655440000 2389 true 2390 2392 2393 2395 2396 S1 2397 E1 2398 sequential 2399 2400 A1 2401 update-ping-targets 2402 2403 2404 A2 2405 ping-all-targets 2406 S3 2408 2409 measurement:ping 2410 2411 2412 2413 S2 2414 E1 2415 parallel 2416 2417 A1 2418 traceroute 2419 2424 S3 2425 2426 2427 A2 2428 traceroute 2429 2434 S3 2435 2436 measurement:traceroute 2437 2438 2439 2440 S3 2441 E2 2442 2443 A1 2444 report 2445 2450 2451 2452 2454 2455 2456 2457 orphaned 2458 controller-lost 2459 controller-connected 2460 measurement:* 2461 2462 2464 2465 2466 2467 update-ping-targets 2468 /usr/bin/fping-update-targets 2469 2470 2471 2472 ping-all-targets 2473 /usr/bin/fping 2474 2475 2476 2477 traceroute 2478 /usr/bin/mtr 2479 2483 2484 2485 2486 report 2487 /usr/bin/lmap-report 2488 2490 2491 ippm-udp-latency-client 2492 /usr/bin/ippm-udp-latency 2493 2494 urn:example:tbd 2495 client 2496 2497 active 2498 2499 2501 2502 2505 2506 E1 2507 60 2508 2509 3600000 2510 2016-09-01T00:00:00+00:00 2511 2016-11-01T00:00:00+00:00 2512 2513 2514 2515 2516 E2 2517 2518 * 2519 monday 2520 * 2521 4 2522 0 2523 0 2524 +00:00 2525 2526 2527 2529 2530 controller-lost 2531 2532 2533 2535 2536 controller-connected 2537 2538 2539 2540 2541 2543 Appendix C. Example Report 2545 2547 2548 2015-10-28T13:27:42+02:00 2549 550e8400-e29b-41d4-a716-446655440000 2550 2551 S1 2552 A1 2553 update-ping-targets 2554 2016-03-21T10:48:55+01:00 2555 2016-03-21T10:48:57+01:00 2556 0 2557 2558 2559 S1 2560 A2 2561 ping-all-targets 2562 2016-03-21T10:48:55+01:00 2563 2016-03-21T10:48:57+01:00 2564 0 2565 2566 target 2567 rtt 2568 2569 2001:db8::1 2570 42 2571 2572 2573 2001:db8::2 2574 24 2575 2576
2577
2578 2579 S2 2580 A1 2581 traceroute 2582 2587 2591 2016-03-21T10:48:55+01:00 2592 2016-03-21T10:48:57+01:00 2593 1 2594 2595 hop 2596 ip 2597 rtt 2598 2599 1 2600 2001:638:709:5::1 2601 10.5 2602 2603 2604 2 2605 ? 2606 2607 2608
2609
2610 2611 S2 2612 A2 2613 traceroute 2614 2619 2623 2016-03-21T10:48:55+01:00 2624 2016-03-21T10:48:57+01:00 2625 1 2626 2627 hop 2628 ip 2629 rtt 2630 2631 1 2632 2001:638:709:5::1 2633 11.8 2634 2635 2636 2 2637 ? 2638 2639 2640
2641
2642
2643
2645 Appendix D. Change History 2647 Note to the RFC Editor: this section should be removed on publication 2648 as an RFC. 2650 D.1. Non-editorial Changes since -07 2652 o Require yang-version 1.1 since we need leaf-lists supporting non- 2653 unique values in the report. 2655 o Merged the /lmap-state tree into the /lmap tree. 2657 o Marked state objects as mandatory. 2659 o Added /lmap/agent/report-group-id. 2661 D.2. Non-editorial Changes since -06 2663 o Removed /lmap/agent/device-id and /lmap-state/agent/device-id, 2664 added pointer to the ietf-hardware YANG model. 2666 o Removed /lmap-state/agent/{hardware,firmware}, added pointer to 2667 the ietf-system YANG model. 2669 D.3. Non-editorial Changes since -05 2671 o Update the example in an attempt to aligned it with the example in 2672 the information model. 2674 o Added an extension hook to reports so that task-specific 2675 parameters can be echoed back to the collector. Updated the 2676 example extension module accordingly. 2678 o Added text and Figure 1 to describe the function and purpose of 2679 the three YANG modules. 2681 o Added a cycle-number type definition. 2683 o Added the optional cycle-interval to event definitions. 2685 o Added tags that report additional capabilities of the measurement 2686 agent. 2688 o Added event time and cycle-number to the result report. 2690 o Renamed the metrics-grouping to registry-grouping. 2692 o Removed JSON encoding of the examples (they will go into the 2693 RESTCONF document). 2695 D.4. Non-editorial Changes since -04 2697 o Tagged /lmap/tasks/task/program with nacm:default-deny-write. 2699 o Added /lmap-state/schedules/schedule/storage and /lmap-state/ 2700 schedules/schedule/action/storage. 2702 o Removed suppress-by-default. 2704 o Moved the metric list from /report/result into /report/result/ 2705 table. 2707 o Conflicts are now reported as a triple (schedule, action, task). 2709 o Replaced IPv4 address in the examples with IPv6 addresses. 2711 o Added result/status. 2713 D.5. Non-editorial Changes since -03 2715 o Reworked the reporting data model to align it with the changes in 2716 the information model. 2718 D.6. Non-editorial Changes since -02 2720 o Added a mechanism to enforce a runtime limit for schedules. 2722 o Added security considerations text warning about possible shell 2723 expansions of options. 2725 o Restricted all user-defined names and tags to lmap:identifier. 2726 Added security considerations text to make implementors aware of 2727 possible security issues if identifiers are naively mapped to say 2728 filesystem paths. 2730 o Schedules and actions now have tags (echoed to the collector) and 2731 suppression tags (used for suppression selection). 2733 o Introduced glob-style pattern to match tags. 2735 o Added an example module for IPPM udp latency metrics to 2736 demonstrate the usage of the extension mechanism. 2738 o Introduced parameters, an extension point for task/metric specific 2739 parameters defined in augmenting YANG modules. 2741 o Introduced the typedefs event-ref, task-ref, and schedule-ref. 2743 o Changed schedule/event to schedule/start and added the optional 2744 schedule/stop and schedule/duration leafs. 2746 D.7. Non-editorial Changes since -01 2748 o Updated and split examples (config vs state vs report). 2750 o Refactored the definitions so that common definitions used by both 2751 the control and report data models are in the new module ietf- 2752 lmap-common. 2754 o A report is submitted via an RPC operation instead of using a 2755 notification. 2757 o The default execution mode is pipelined. 2759 o Clarified which action consumes data in sequential, pipelines, and 2760 parallel execution mode. 2762 o Added /lmap/agent/measurement-point, /lmap/agent/report- 2763 measurement-point, and /report/measurement-point to configure and 2764 report the measurement point. 2766 o Turned /lmap/suppression into a list /lmap/suppressions/ 2767 suppression that uses a start and stop event to define the 2768 beginning and end of a suppression period. 2770 o Added controller-lost an controller-ok event choices to /lmap/ 2771 events/event. 2773 o Added a metrics-grouping to identify entries in a metric registry 2774 and associated roles. 2776 o Added /lmap-state/schedules to report the status of schedules and 2777 their actions. Refactored /lmap-state/tasks to only report the 2778 task capabilities. 2780 D.8. Non-editorial Changes since -00 2782 o A task can now reference multiply registry entries. 2784 o Schedules are triggered by Events instead of Timings; Timings are 2785 just one of many possible event sources. 2787 o Actions feed into other Schedules (instead of Actions within other 2788 Schedules). 2790 o Removed the notion of multiple task outputs. 2792 o Support for sequential, parallel, and pipelined execution of 2793 Actions. 2795 Authors' Addresses 2797 Juergen Schoenwaelder 2798 Jacobs University Bremen 2800 Email: j.schoenwaelder@jacobs-university.de 2802 Vaibhav Bajpai 2803 Jacobs University Bremen 2805 Email: v.bajpai@jacobs-university.de