draft-ietf-lmap-yang-12.txt   rfc8194.txt 
Network Working Group J. Schoenwaelder Internet Engineering Task Force (IETF) J. Schoenwaelder
Internet-Draft V. Bajpai Request for Comments: 8194 Jacobs University Bremen
Intended status: Standards Track Jacobs University Bremen Category: Standards Track V. Bajpai
Expires: October 23, 2017 April 21, 2017 ISSN: 2070-1721 Technical University of Munich
August 2017
A YANG Data Model for LMAP Measurement Agents A YANG Data Model for LMAP Measurement Agents
draft-ietf-lmap-yang-12.txt
Abstract Abstract
This document defines a data model for Large-Scale Measurement This document defines a data model for Large-Scale Measurement
Platforms (LMAP). The data model is defined using the YANG data Platforms (LMAPs). The data model is defined using the YANG data
modeling language. modeling language.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This is an Internet Standards Track document.
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months This document is a product of the Internet Engineering Task Force
and may be updated, replaced, or obsoleted by other documents at any (IETF). It represents the consensus of the IETF community. It has
time. It is inappropriate to use Internet-Drafts as reference received public review and has been approved for publication by the
material or to cite them other than as "work in progress." Internet Engineering Steering Group (IESG). Further information on
Internet Standards is available in Section 2 of RFC 7841.
This Internet-Draft will expire on October 23, 2017. Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
http://www.rfc-editor.org/info/rfc8194.
Copyright Notice Copyright Notice
Copyright (c) 2017 IETF Trust and the persons identified as the Copyright (c) 2017 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 2 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 2
1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 3 1.2. Tree Diagrams . . . . . . . . . . . . . . . . . . . . . . 2
2. Data Model Overview . . . . . . . . . . . . . . . . . . . . . 3 2. Data Model Overview . . . . . . . . . . . . . . . . . . . . . 3
3. Relationship to the Information Model . . . . . . . . . . . . 8 3. Relationship to the Information Model . . . . . . . . . . . . 9
4. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 10 4. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1. LMAP Common YANG Module . . . . . . . . . . . . . . . . . 10 4.1. LMAP Common YANG Module . . . . . . . . . . . . . . . . . 10
4.2. LMAP Control YANG Module . . . . . . . . . . . . . . . . 18 4.2. LMAP Control YANG Module . . . . . . . . . . . . . . . . 18
4.3. LMAP Report YANG Module . . . . . . . . . . . . . . . . . 39 4.3. LMAP Report YANG Module . . . . . . . . . . . . . . . . . 40
5. Security Considerations . . . . . . . . . . . . . . . . . . . 44 5. Security Considerations . . . . . . . . . . . . . . . . . . . 45
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 47 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 48
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 48 7.1. Normative References . . . . . . . . . . . . . . . . . . 48
8.1. Normative References . . . . . . . . . . . . . . . . . . 48 7.2. Informative References . . . . . . . . . . . . . . . . . 49
8.2. Informative References . . . . . . . . . . . . . . . . . 48 Appendix A. Example Parameter Extension Module . . . . . . . . . 51
Appendix A. Example Parameter Extension Module . . . . . . . . . 50 Appendix B. Example Configuration . . . . . . . . . . . . . . . 53
Appendix B. Example Configuration . . . . . . . . . . . . . . . 52 Appendix C. Example Report . . . . . . . . . . . . . . . . . . . 56
Appendix C. Example Report . . . . . . . . . . . . . . . . . . . 55 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 59
Appendix D. Change History . . . . . . . . . . . . . . . . . . . 57 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 59
D.1. Non-editorial Changes since -07 . . . . . . . . . . . . . 57
D.2. Non-editorial Changes since -06 . . . . . . . . . . . . . 58
D.3. Non-editorial Changes since -05 . . . . . . . . . . . . . 58
D.4. Non-editorial Changes since -04 . . . . . . . . . . . . . 58
D.5. Non-editorial Changes since -03 . . . . . . . . . . . . . 59
D.6. Non-editorial Changes since -02 . . . . . . . . . . . . . 59
D.7. Non-editorial Changes since -01 . . . . . . . . . . . . . 59
D.8. Non-editorial Changes since -00 . . . . . . . . . . . . . 60
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 60
1. Introduction 1. Introduction
This document defines a data model for Large-Scale Measurement This document defines a data model for Large-Scale Measurement
Platforms (LMAP) [RFC7594]. The data model is defined using the YANG Platforms (LMAPs) [RFC7594]. The data model is defined using the
[RFC7950] data modeling language. It is based on the LMAP YANG [RFC7950] data modeling language. It is based on the LMAP
Information Model [I-D.ietf-lmap-information-model]. Information Model [RFC8193].
1.1. Terminology 1.1. Terminology
This document uses the LMAP terminology defined in [RFC7594]. This document uses the LMAP terminology defined in [RFC7594].
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
document are to be interpreted as described in [RFC2119]. "OPTIONAL" in this document are to be interpreted as described in BCP
14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
1.2. Tree Diagrams 1.2. Tree Diagrams
A simplified graphical representation of the data model is used in A simplified graphical representation of the data model is used in
this document. The meaning of the symbols in these diagrams is as this document. The meaning of the symbols in these diagrams is as
follows: follows:
o Brackets "[" and "]" enclose list keys. o Brackets "[" and "]" enclose list keys.
o Abbreviations before data node names: "rw" means configuration o Abbreviations before data node names: "rw" means configuration
skipping to change at page 3, line 28 skipping to change at page 3, line 20
means a presence container, and "*" denotes a list and leaf-list. means a presence container, and "*" denotes a list and leaf-list.
o Parentheses enclose choice and case nodes, and case nodes are also o Parentheses enclose choice and case nodes, and case nodes are also
marked with a colon (":"). marked with a colon (":").
o Ellipsis ("...") stands for contents of subtrees that are not o Ellipsis ("...") stands for contents of subtrees that are not
shown. shown.
2. Data Model Overview 2. Data Model Overview
The LMAP framework has three basic elements: Measurement Agents, The LMAP framework has three basic elements: Measurement Agents
Controllers, and Collectors. Measurement Agents initiate the actual (MAs), Controllers, and Collectors. Measurement Agents initiate the
measurements, which are called Measurement Tasks in the LMAP actual measurements, which are called Measurement Tasks in the LMAP
terminology. The Controller instructs one or more MAs and terminology. The Controller instructs one or more MAs and
communicates the set of Measurement Tasks an MA should perform and communicates the set of Measurement Tasks an MA should perform and
when. The Collector accepts Reports from the MAs with the Results when. The Collector accepts Reports from the MAs with the Results
from their Measurement Tasks. from their Measurement Tasks.
The YANG data model for LMAP has been split into three modules: The YANG data model for LMAP has been split into three modules:
1. The module ietf-lmap-common.yang provides common definitions such 1. The module ietf-lmap-common.yang provides common definitions such
as LMAP specific data types. as LMAP-specific data types.
2. The module ietf-lmap-control.yang defines the data structures 2. The module ietf-lmap-control.yang defines the data structures
exchanged between a Controller and Measurement Agents. exchanged between a Controller and Measurement Agents.
3. The module ietf-lmap-report.yang defines the data structures 3. The module ietf-lmap-report.yang defines the data structures
exchanged between Measurement Agents and Collectors. exchanged between Measurement Agents and Collectors.
As shown in Figure 1, a Controller, implementing ietf-lmap- As shown in Figure 1, a Controller, implementing
common.yang and ietf-lmap-control.yang as a client, will instruct ietf-lmap-common.yang and ietf-lmap-control.yang as a client, will
Measurement Agents, which implement ietf-lmap-common.yang and ietf- instruct Measurement Agents, which implement ietf-lmap-common.yang
lmap-control.yang as servers. A Measurement Agent, implementing and ietf-lmap-control.yang as servers. A Measurement Agent,
ietf-lmap-common.yang and ietf-lmap-report.yang, will send results to implementing ietf-lmap-common.yang and ietf-lmap-report.yang, will
a Collector, which implements ietf-lmap-common.yang and ietf-lmap- send results to a Collector, which implements ietf-lmap-common.yang
report.yang as a server. and ietf-lmap-report.yang as a server.
+------------------------+ +------------------------+
| LMAP Controller | | LMAP Controller |
| | | |
| Client: | | Client: |
| ietf-lmap-common.yang | | ietf-lmap-common.yang |
| ietf-lmap-control.yang | | ietf-lmap-control.yang |
+------------------------+ +------------------------+
+------------------------+ | +------------------------+ |
| LMAP Measurement Agent | | | LMAP Measurement Agent | |
skipping to change at page 4, line 34 skipping to change at page 4, line 32
| ietf-lmap-report.yang | | | ietf-lmap-report.yang | |
+------------------------+ v +------------------------+ v
+------------------------+ +------------------------+
| LMAP Collector | | LMAP Collector |
| | | |
| Server: | | Server: |
| ietf-lmap-common.yang | | ietf-lmap-common.yang |
| ietf-lmap-report.yang | | ietf-lmap-report.yang |
+------------------------+ +------------------------+
Figure 1: LMAP Controller, Measurement Agents, and Collector and the Figure 1: The LMAP Controller, Measurement Agent, and Collector and
YANG modules they implement as client or server the YANG Modules They Implement as Client or Server
The tree diagram below shows the structure of the control data model. The tree diagram below shows the structure of the control data model.
module: ietf-lmap-control module: ietf-lmap-control
+--rw lmap +--rw lmap
+--ro capabilities +--ro capabilities
| +--ro version string | +--ro version string
| +--ro tag* lmap:tag | +--ro tag* lmap:tag
| +--ro tasks | +--ro tasks
| +--ro task* [name] | +--ro task* [name]
skipping to change at page 8, line 44 skipping to change at page 9, line 7
+---w table* +---w table*
+---w function* [uri] +---w function* [uri]
| +---w uri inet:uri | +---w uri inet:uri
| +---w role* string | +---w role* string
+---w column* string +---w column* string
+---w row* +---w row*
+---w value* string +---w value* string
3. Relationship to the Information Model 3. Relationship to the Information Model
The LMAP information model [I-D.ietf-lmap-information-model] is The LMAP Information Model [RFC8193] is divided into six aspects.
divided into six aspects. They are mapped into the YANG data model They are mapped into the YANG data model as explained below:
as explained below:
o Pre-Configuration Information: This is not modeled explicitly o Preconfiguration Information: This is not modeled explicitly since
since bootstrapping information is outside the scope of this data bootstrapping information is outside the scope of this data model.
model. Implementations may use some of the Configuration Implementations may use some of the Configuration Information also
Information also for bootstrapping purposes. for bootstrapping purposes.
o Configuration Information: This is modeled in the /lmap/agent o Configuration Information: This is modeled in the /lmap/agent
subtree, the /lmap/schedules subtree, and the /lmap/tasks subtree subtree, the /lmap/schedules subtree, and the /lmap/tasks subtree
described below. Some items have been left out because they are described below. Some items have been left out because they are
expected to be dealt with by the underlying protocol. expected to be dealt with by the underlying protocol.
o Instruction Information: This is modeled in the /lmap/suppressions o Instruction Information: This is modeled in the /lmap/suppressions
subtree, the /lmap/schedules subtree, and the /lmap/tasks subtree subtree, the /lmap/schedules subtree, and the /lmap/tasks subtree
described below. described below.
o Logging Information: Some of the logging information, in o Logging Information: Some of the Logging Information, in
particular 'success/failure/warning messages in response to particular 'success/failure/warning messages in response to
information updates from the Controller', will be handled by the information updates from the Controller', will be handled by the
protocol used to manipulate the lmap specific configuration. The protocol used to manipulate the LMAP-specific configuration. The
LMAP data model defined in this document assumes that runtime LMAP data model defined in this document assumes that runtime
logging information will be communicated using protocols that do Logging Information will be communicated using protocols that do
not require a formal data model, e.g., the Syslog protocol defined not require a formal data model, e.g., the syslog protocol defined
in [RFC5424]. in [RFC5424].
o Capability and Status Information: Some of the capability and o Capability and Status Information: Some of the Capability and
status information is modeled in the /lmap/capability subtree. Status Information is modeled in the /lmap/capability subtree.
The list of supported tasks is modeled in the /lmap/capabilities/ The list of supported Tasks is modeled in the /lmap/capabilities/
task list. Status information about schedules and actions is task list. Status Information about Schedules and Actions is
included in the /lmap/schedules subtree. Information about included in the /lmap/schedules subtree. Information about
network interfaces can be obtained from the ietf-interfaces YANG network interfaces can be obtained from the ietf-interfaces YANG
data model [RFC7223]. Information about the hardware and the data model [RFC7223]. Information about the hardware and the
firmware can be obtained from the ietf-system YANG data model firmware can be obtained from the ietf-system YANG data model
[RFC7317]. A device identifier can be obtained from the ietf- [RFC7317]. A device identifier can be obtained from the ietf-
hardware YANG data model [I-D.ietf-netmod-entity]. hardware YANG data model [YANG-HARDWARE].
o Reporting Information: This is modeled by the report data model to o Reporting Information: This is modeled by the report data model to
be implemented by the Collector. Measurement Agents send results be implemented by the Collector. Measurement Agents send results
to the Collector by invoking an RPC on the Collector. to the Collector by invoking an RPC on the Collector.
These six information model aspects use a collection of common These six Information Model aspects use a collection of common
information objects. These common information objects are information objects. These common information objects are
represented in the YANG data model as follows: represented in the YANG data model as follows:
o Schedules: Schedules are modeled in the /lmap/schedules subtree. o Schedules: Schedules are modeled in the /lmap/schedules subtree.
o Channels: Channels are not modeled since the NETCONF server o Channels: Channels are not modeled since the NETCONF server
configuration data model [I-D.ietf-netconf-netconf-client-server] configuration data model [NETCONF-CLIENT-SERVER] already provides
already provides a mechanism to configure NETCONF server channels. a mechanism to configure NETCONF server Channels.
o Task Configurations: Configured tasks are modeled in the /lmap/ o Task Configurations: Configured Tasks are modeled in the /lmap/
tasks subtree. tasks subtree.
o Event Information: Event definitions are modeled in the /lmap/ o Event Information: Event definitions are modeled in the /lmap/
events subtree. events subtree.
4. YANG Modules 4. YANG Modules
4.1. LMAP Common YANG Module 4.1. LMAP Common YANG Module
This module imports definitions from [RFC6536] and it references This module imports definitions from [RFC6536], and it references
[ISO-8601]. [ISO-8601].
<CODE BEGINS> file "ietf-lmap-common@2017-04-21.yang" <CODE BEGINS> file "ietf-lmap-common@2017-08-08.yang"
module ietf-lmap-common { module ietf-lmap-common {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-lmap-common"; namespace "urn:ietf:params:xml:ns:yang:ietf-lmap-common";
prefix "lmap"; prefix "lmap";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
organization organization
"IETF Large-Scale Measurement Platforms Working Group"; "IETF Large-Scale Measurement of Broadband Performance
Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/lmap/> "WG Web: <https://datatracker.ietf.org/wg/lmap>
WG List: <mailto:lmap@ietf.org> WG List: <mailto:lmap@ietf.org>
Editor: Juergen Schoenwaelder Editor: Juergen Schoenwaelder
<j.schoenwaelder@jacobs-university.de> <j.schoenwaelder@jacobs-university.de>
Editor: Vaibhav Bajpai Editor: Vaibhav Bajpai
<v.bajpai@jacobs-university.de>"; <bajpaiv@in.tum.de>";
description description
"This module provides common definitions used by the data "This module provides common definitions used by the data
models written for Large-Scale Measurement Platforms (LMAP). models written for Large-Scale Measurement Platforms (LMAPs).
This module defines typedefs and groupings but no schema This module defines typedefs and groupings but no schema
tree elements."; tree elements.";
revision "2017-04-21" { revision "2017-08-08" {
description description
"Initial version"; "Initial version";
reference reference
"RFC XXXX: A YANG Data Model for LMAP Measurement Agents"; "RFC 8194: A YANG Data Model for LMAP Measurement Agents";
} }
/* /*
* Typedefs * Typedefs
*/ */
typedef identifier { typedef identifier {
type string { type string {
length "1..max"; length "1..max";
} }
description description
"An string value used to name something."; "A string value used to name something.";
} }
typedef tag { typedef tag {
type string { type string {
length "1..max"; length "1..max";
} }
description description
"A tag consists of at least one character."; "A tag consists of at least one character.";
} }
skipping to change at page 11, line 35 skipping to change at page 11, line 46
description description
'A glob style pattern (following POSIX.2 fnmatch() without 'A glob style pattern (following POSIX.2 fnmatch() without
special treatment of file paths): special treatment of file paths):
* matches a sequence of characters * matches a sequence of characters
? matches a single character ? matches a single character
[seq] matches any character in seq [seq] matches any character in seq
[!seq] matches any character not in seq [!seq] matches any character not in seq
A backslash followed by a character matches the following A backslash followed by a character matches the following
character. In particular: character. In particular:
\* matches * \* matches *
\? matches ? \? matches ?
\\ matches \ \\ matches \
A sequence seq may be a sequence of characters (e.g., [abc] A sequence seq may be a sequence of characters (e.g., [abc]
or a range of characters (e.g., [a-c]).'; or a range of characters (e.g., [a-c]).';
} }
typedef wildcard { typedef wildcard {
skipping to change at page 12, line 4 skipping to change at page 12, line 16
or a range of characters (e.g., [a-c]).'; or a range of characters (e.g., [a-c]).';
} }
typedef wildcard { typedef wildcard {
type string { type string {
pattern '\*'; pattern '\*';
} }
description description
"A wildcard for calendar scheduling entries."; "A wildcard for calendar scheduling entries.";
} }
typedef cycle-number { typedef cycle-number {
type string { type string {
pattern '[0-9]{8}\.[0-9]{6}'; pattern '[0-9]{8}\.[0-9]{6}';
} }
description description
"A cycle number represented in the format YYYYMMDD.HHMMSS "A cycle number represented in the format YYYYMMDD.HHMMSS
where YYYY represents the year, MM the month (1..12), DD where YYYY represents the year, MM the month (1..12), DD
the day of the months (01..31), HH the hour (00..23), MM the day of the months (01..31), HH the hour (00..23), MM
the minute (00..59), and SS the second (00..59). The cycle the minute (00..59), and SS the second (00..59). The cycle
number is using Coordinated Universal Time (UTC)."; number is using Coordinated Universal Time (UTC).";
} }
typedef month { typedef month {
type enumeration { type enumeration {
enum january { enum january {
value 1; value 1;
description description
"January of the Gregorian calendar."; "January of the Gregorian calendar.";
} }
skipping to change at page 14, line 8 skipping to change at page 14, line 25
description description
"A day of a month of the Gregorian calendar."; "A day of a month of the Gregorian calendar.";
} }
typedef day-of-months-or-all { typedef day-of-months-or-all {
type union { type union {
type day-of-month; type day-of-month;
type wildcard; type wildcard;
} }
description description
"A day of a months or a wildcard indicating all days "A day of a month or a wildcard indicating all days
of a month."; of a month.";
} }
typedef weekday { typedef weekday {
type enumeration { type enumeration {
enum monday { enum monday {
value 1; value 1;
description description
"Monday of the Gregorian calendar."; "Monday of the Gregorian calendar.";
} }
skipping to change at page 16, line 23 skipping to change at page 16, line 42
type wildcard; type wildcard;
} }
description description
"A second of a minute or a wildcard indicating all "A second of a minute or a wildcard indicating all
seconds of a minute."; seconds of a minute.";
} }
typedef status-code { typedef status-code {
type int32; type int32;
description description
"A status code returned by the execution of a task. Note "A status code returned by the execution of a Task. Note
that the actual range is implementation dependent but it that the actual range is implementation dependent, but it
should be portable to use values in the range 0..127 for should be portable to use values in the range 0..127 for
regular exit codes. By convention, 0 indicates successful regular exit codes. By convention, 0 indicates successful
termination. Negative values may be used to indicate termination. Negative values may be used to indicate
abnormal termination due to a signal; the absolute value abnormal termination due to a signal; the absolute value
may identify the signal number in this case."; may identify the signal number in this case.";
} }
typedef timezone-offset { typedef timezone-offset {
type string { type string {
pattern 'Z|[\+\-]\d{2}:\d{2}'; pattern 'Z|[\+\-]\d{2}:\d{2}';
} }
description description
"A timezone-offset as it is used by the date-and-time type "A time zone offset as it is used by the date-and-time type
defined in the ietf-yang-types module. The value Z is defined in the ietf-yang-types module. The value Z is
equivalent to +00:00. The value -00:00 indicates and equivalent to +00:00. The value -00:00 indicates an
unknown time-offset."; unknown time-offset.";
reference reference
"RFC 6991: Common YANG Data Types"; "RFC 6991: Common YANG Data Types";
} }
/* /*
* Groupings * Groupings
*/ */
grouping registry-grouping { grouping registry-grouping {
description description
"This grouping models a list of entries in a registry "This grouping models a list of entries in a registry
that identify functions of a tasks."; that identify functions of a Task.";
list function { list function {
key uri; key uri;
description description
"A list of entries in a registry identifying functions."; "A list of entries in a registry identifying functions.";
leaf uri { leaf uri {
type inet:uri; type inet:uri;
description description
"A URI identifying an entry in a registry."; "A URI identifying an entry in a registry.";
skipping to change at page 17, line 27 skipping to change at page 17, line 47
leaf-list role { leaf-list role {
type string; type string;
description description
"A set of roles for the identified registry entry."; "A set of roles for the identified registry entry.";
} }
} }
} }
grouping options-grouping { grouping options-grouping {
description description
"A list of options of a task. Each option is a name/value "A list of options of a Task. Each option is a name/value
pair (where the value may be absent)."; pair (where the value may be absent).";
list option { list option {
key "id"; key "id";
ordered-by user; ordered-by user;
description description
"A list of options passed to the task. It is a list of "A list of options passed to the Task. It is a list of
key / value pairs and may be used to model options. key/value pairs and may be used to model options.
Options may be used to identify the role of a task Options may be used to identify the role of a Task
or to pass a channel name to a task."; or to pass a Channel name to a Task.";
leaf id { leaf id {
type lmap:identifier; type lmap:identifier;
description description
"An identifier uniquely identifying an option. This "An identifier uniquely identifying an option. This
identifier is required by YANG to uniquely identify identifier is required by YANG to uniquely identify
a name value pair but it otherwise has no semantic a name/value pair, but it otherwise has no semantic
value"; value";
} }
leaf name { leaf name {
type string; type string;
description description
"The name of the option."; "The name of the option.";
} }
leaf value { leaf value {
type string; type string;
description description
"The value of the option."; "The value of the option.";
} }
} }
} }
} }
skipping to change at page 18, line 19 skipping to change at page 18, line 38
description description
"The value of the option."; "The value of the option.";
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
4.2. LMAP Control YANG Module 4.2. LMAP Control YANG Module
This module imports definitions from [RFC6536], [RFC6991] and the This module imports definitions from [RFC6536], [RFC6991], and the
common LMAP module and it references [RFC7398]. common LMAP module, and it references [RFC7398].
<CODE BEGINS> file "ietf-lmap-control@2017-04-21.yang" <CODE BEGINS> file "ietf-lmap-control@2017-08-08.yang"
module ietf-lmap-control { module ietf-lmap-control {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-lmap-control"; namespace "urn:ietf:params:xml:ns:yang:ietf-lmap-control";
prefix "lmapc"; prefix "lmapc";
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
} }
import ietf-netconf-acm { import ietf-netconf-acm {
prefix nacm; prefix nacm;
} }
import ietf-lmap-common { import ietf-lmap-common {
prefix lmap; prefix lmap;
} }
organization organization
"IETF Large-Scale Measurement Platforms Working Group"; "IETF Large-Scale Measurement of Broadband Performance
Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/lmap/> "WG Web: <https://datatracker.ietf.org/wg/lmap>
WG List: <mailto:lmap@ietf.org> WG List: <mailto:lmap@ietf.org>
Editor: Juergen Schoenwaelder Editor: Juergen Schoenwaelder
<j.schoenwaelder@jacobs-university.de> <j.schoenwaelder@jacobs-university.de>
Editor: Vaibhav Bajpai Editor: Vaibhav Bajpai
<v.bajpai@jacobs-university.de>"; <bajpaiv@in.tum.de>";
description description
"This module defines a data model for controlling measurement "This module defines a data model for controlling Measurement
agents that are part of a Large-Scale Measurement Platform Agents that are part of a Large-Scale Measurement Platform
(LMAP). This data model is expected to be implemented by a (LMAP). This data model is expected to be implemented by
measurement agent."; Measurement Agents.";
revision "2017-04-21" { revision "2017-08-08" {
description description
"Initial version"; "Initial version";
reference reference
"RFC XXXX: A YANG Data Model for LMAP Measurement Agents"; "RFC 8194: A YANG Data Model for LMAP Measurement Agents";
} }
/* /*
* Typedefs * Typedefs
*/ */
typedef event-ref { typedef event-ref {
type leafref { type leafref {
path "/lmap/events/event/name"; path "/lmap/events/event/name";
} }
skipping to change at page 19, line 37 skipping to change at page 20, line 8
"This type is used by data models that need to reference "This type is used by data models that need to reference
a configured event source."; a configured event source.";
} }
typedef task-ref { typedef task-ref {
type leafref { type leafref {
path "/lmap/tasks/task/name"; path "/lmap/tasks/task/name";
} }
description description
"This type is used by data models that need to reference "This type is used by data models that need to reference
a configured task."; a configured Task.";
} }
typedef schedule-ref { typedef schedule-ref {
type leafref { type leafref {
path "/lmap/schedules/schedule/name"; path "/lmap/schedules/schedule/name";
} }
description description
"This type is used by data models that need to reference "This type is used by data models that need to reference
a configured schedule."; a configured Schedule.";
} }
/* /*
* Groupings * Groupings
*/ */
grouping start-end-grouping { grouping start-end-grouping {
description description
"A grouping that provides start and end times for "A grouping that provides start and end times for
event objects."; Event objects.";
leaf start { leaf start {
type yang:date-and-time; type yang:date-and-time;
description description
"The date and time when the event object "The date and time when the Event object
starts to create triggers."; starts to create triggers.";
} }
leaf end { leaf end {
type yang:date-and-time; type yang:date-and-time;
description description
"The date and time when the event object "The date and time when the Event object
stops to create triggers. stops to create triggers.
It is generally a good idea to always configure It is generally a good idea to always configure
an end time and to refresh the end time as needed an end time and to refresh the end time as needed
to ensure that agents that lose connectivity to to ensure that agents that lose connectivity to
their controller do not continue executing schedules their Controller do not continue executing Schedules
forever."; forever.";
} }
} }
/* /*
* Capability, configuration and state data nodes * Capability, configuration, and state data nodes
*/ */
container lmap { container lmap {
description description
"Configuration and control of an LMAP agent."; "Configuration and control of a Measurement Agent.";
container capabilities { container capabilities {
config false; config false;
description description
"Agent capabilities including a list of supported tasks."; "Agent capabilities including a list of supported Tasks.";
leaf version { leaf version {
type string; type string;
config false; config false;
mandatory true; mandatory true;
description description
"A short description of the software implementing the "A short description of the software implementing the
measurement agent. This should include the version Measurement Agent. This should include the version
number of the measurement agent software."; number of the Measurement Agent software.";
} }
leaf-list tag { leaf-list tag {
type lmap:tag; type lmap:tag;
config false; config false;
description description
"An optional unordered set of tags that provide "An optional unordered set of tags that provide
additional information about the capabilities of additional information about the capabilities of
the measurement agent."; the Measurement Agent.";
} }
container tasks { container tasks {
description description
"A list of tasks that the measurement agent supports."; "A list of Tasks that the Measurement Agent supports.";
list task { list task {
key name; key name;
description description
"The list of tasks supported by the LMAP agent."; "The list of Tasks supported by the Measurement Agent.";
leaf name { leaf name {
type lmap:identifier; type lmap:identifier;
description description
"The unique name of a task capability."; "The unique name of a Task capability.";
} }
uses lmap:registry-grouping; uses lmap:registry-grouping;
leaf version { leaf version {
type string; type string;
description description
"A short description of the software implementing "A short description of the software implementing
the task. This should include the version the Task. This should include the version
number of the measurement task software."; number of the Measurement Task software.";
} }
leaf program { leaf program {
type string; type string;
description description
"The (local) program to invoke in order to execute "The (local) program to invoke in order to execute
the task."; the Task.";
} }
} }
} }
} }
/* /*
* Agent Configuration * Agent Configuration
*/ */
container agent { container agent {
description description
"Configuration of parameters affecting the whole "Configuration of parameters affecting the whole
measurement agent."; Measurement Agent.";
leaf agent-id { leaf agent-id {
type yang:uuid; type yang:uuid;
description description
"The agent-id identifies a measurement agent with "The agent-id identifies a Measurement Agent with
a very low probability of collision. In certain a very low probability of collision. In certain
deployments, the agent-id may be considered deployments, the agent-id may be considered
sensitive and hence this object is optional."; sensitive, and hence this object is optional.";
} }
leaf group-id { leaf group-id {
type string; type string;
description description
"The group-id identifies a group of measurement "The group-id identifies a group of Measurement
agents. In certain deployments, the group-id Agents. In certain deployments, the group-id
may be considered less sensitive than the may be considered less sensitive than the
agent-id."; agent-id.";
} }
leaf measurement-point { leaf measurement-point {
type string; type string;
description description
"The measurement point indicating where the "The measurement point indicating where the
measurement agent is located on a path."; Measurement Agent is located on a path.";
reference reference
"RFC 7398: A Reference Path and Measurement Points "RFC 7398: A Reference Path and Measurement Points
for Large-Scale Measurement of Broadband for Large-Scale Measurement of Broadband
Performance"; Performance";
} }
leaf report-agent-id { leaf report-agent-id {
type boolean; type boolean;
must '. != "true" or ../agent-id' { must '. != "true" or ../agent-id' {
description description
"An agent-id must exist for this to be set "An agent-id must exist for this to be set
to true."; to true.";
} }
default false; default false;
description description
"The 'report-agent-id' controls whether the "The 'report-agent-id' controls whether the
'agent-id' is reported to collectors."; 'agent-id' is reported to Collectors.";
} }
leaf report-group-id { leaf report-group-id {
type boolean; type boolean;
must '. != "true" or ../group-id' { must '. != "true" or ../group-id' {
description description
"A group-id must exist for this to be set "A group-id must exist for this to be set
to true."; to true.";
} }
default false; default false;
description description
"The 'report-group-id' controls whether the "The 'report-group-id' controls whether the
'group-id' is reported to collectors."; 'group-id' is reported to Collectors.";
} }
leaf report-measurement-point { leaf report-measurement-point {
type boolean; type boolean;
must '. != "true" or ../measurement-point' { must '. != "true" or ../measurement-point' {
description description
"A measurement-point must exist for this to be "A measurement-point must exist for this to be
set to true."; set to true.";
} }
default false; default false;
description description
"The 'report-measurement-point' controls whether "The 'report-measurement-point' controls whether
the 'measurement-point' is reported to collectors."; the 'measurement-point' is reported to Collectors.";
} }
leaf controller-timeout { leaf controller-timeout {
type uint32; type uint32;
units "seconds"; units "seconds";
description description
"A timer is started after each successful contact "A timer is started after each successful contact
with a controller. When the timer reaches the with a Controller. When the timer reaches the
controller-timeout, an event (controller-lost) is controller-timeout, an event (controller-lost) is
raised indicating that connectivity to the controller raised indicating that connectivity to the Controller
has been lost."; has been lost.";
} }
leaf last-started { leaf last-started {
type yang:date-and-time; type yang:date-and-time;
config false; config false;
mandatory true; mandatory true;
description description
"The date and time the measurement agent last started."; "The date and time the Measurement Agent last started.";
} }
} }
/* /*
* Task Configuration * Task Configuration
*/ */
container tasks { container tasks {
description description
"Configuration of LMAP tasks."; "Configuration of LMAP Tasks.";
list task { list task {
key name; key name;
description description
"The list of tasks configured on the LMAP agent. Note "The list of Tasks configured on the Measurement
that a configured task MUST resolve to a task listed Agent. Note that a configured Task MUST resolve to a
in the capabilities. Attempts to execute a configured Task listed in the capabilities. Attempts to execute
task that is not listed in the capabilities result in a configured Task that is not listed in the capabilities
a runtime execution error."; result in a runtime execution error.";
leaf name { leaf name {
type lmap:identifier; type lmap:identifier;
description description
"The unique name of a task."; "The unique name of a Task.";
} }
uses lmap:registry-grouping; uses lmap:registry-grouping;
leaf program { leaf program {
type string; type string;
nacm:default-deny-write; nacm:default-deny-write;
description description
"The (local) program to invoke in order to execute "The (local) program to invoke in order to execute
the task. If this leaf is not set, then the system the Task. If this leaf is not set, then the system
will try to identify a suitable program based on will try to identify a suitable program based on
the registry information present."; the registry information present.";
} }
uses lmap:options-grouping { uses lmap:options-grouping {
description description
"The list of task specific options."; "The list of Task-specific options.";
} }
leaf-list tag { leaf-list tag {
type lmap:identifier; type lmap:identifier;
description description
"A set of task specific tags that are reported "A set of Task-specific tags that are reported
together with the measurement results to a collector. together with the measurement results to a Collector.
A tag can be used, for example, to carry the A tag can be used, for example, to carry the
Measurement Cycle ID."; Measurement Cycle ID.";
} }
} }
} }
/* /*
* Schedule Instructions * Schedule Instructions
*/ */
container schedules { container schedules {
description description
"Configuration of LMAP schedules. Schedules control "Configuration of LMAP Schedules. Schedules control
which tasks are executed by the LMAP implementation."; which Tasks are executed by the LMAP implementation.";
list schedule { list schedule {
key name; key name;
description description
"Configuration of a particular schedule."; "Configuration of a particular Schedule.";
leaf name { leaf name {
type lmap:identifier; type lmap:identifier;
description description
"The locally-unique, administratively assigned name "The locally unique, administratively assigned name
for this schedule."; for this Schedule.";
} }
leaf start { leaf start {
type event-ref; type event-ref;
mandatory true; mandatory true;
description description
"The event source controlling the start of the "The event source controlling the start of the
scheduled actions."; scheduled Actions.";
} }
choice stop { choice stop {
description description
"This choice contains optional leafs that control the "This choice contains optional leafs that control the
graceful forced termination of scheduled actions. graceful forced termination of scheduled Actions.
When the end has been reached, the scheduled actions When the end has been reached, the scheduled Actions
should be forced to terminate the measurements. should be forced to terminate the measurements.
This may involve being active some additional time in This may involve being active some additional time in
order to properly finish the action's activity (e.g., order to properly finish the Action's activity (e.g.,
waiting for any still outstanding messages)."; waiting for any messages that are still outstanding).";
leaf end { leaf end {
type event-ref; type event-ref;
description description
"The event source controlling the graceful "The event source controlling the graceful
forced termination of the scheduled actions."; forced termination of the scheduled Actions.";
} }
leaf duration { leaf duration {
type uint32; type uint32;
units "seconds"; units "seconds";
description description
"The duration controlling the graceful forced "The duration controlling the graceful forced
termination of the scheduled actions."; termination of the scheduled Actions.";
} }
} }
leaf execution-mode { leaf execution-mode {
type enumeration { type enumeration {
enum sequential { enum sequential {
value 1; value 1;
description description
"The actions of the schedule are executed "The Actions of the Schedule are executed
sequentially."; sequentially.";
} }
enum parallel { enum parallel {
value 2; value 2;
description description
"The actions of the schedule are executed "The Actions of the Schedule are executed
concurrently"; concurrently.";
} }
enum pipelined { enum pipelined {
value 3; value 3;
description description
"The actions of the schedule are executed in a "The Actions of the Schedule are executed in a
pipelined mode. Output created by an action is pipelined mode. Output created by an Action is
passed as input to the subsequent action."; passed as input to the subsequent Action.";
} }
} }
default pipelined; default pipelined;
description description
"The execution mode of this schedule determines in "The execution mode of this Schedule determines in
which order the actions of the schedule are executed."; which order the Actions of the Schedule are executed.";
} }
leaf-list tag { leaf-list tag {
type lmap:tag; type lmap:tag;
description description
"A set of schedule specific tags that are reported "A set of Schedule-specific tags that are reported
together with the measurement results to a collector."; together with the measurement results to a Collector.";
} }
leaf-list suppression-tag { leaf-list suppression-tag {
type lmap:tag; type lmap:tag;
description description
"A set of suppression tags that are used to select "A set of Suppression tags that are used to select
schedules to be suppressed."; Schedules to be suppressed.";
} }
leaf state { leaf state {
type enumeration { type enumeration {
enum enabled { enum enabled {
value 1; value 1;
description description
"The value 'enabled' indicates that the "The value 'enabled' indicates that the
schedule is currently enabled."; Schedule is currently enabled.";
} }
enum disabled { enum disabled {
value 2; value 2;
description description
"The value 'disabled' indicates that the "The value 'disabled' indicates that the
schedule is currently disabled."; Schedule is currently disabled.";
} }
enum running { enum running {
value 3; value 3;
description description
"The value 'running' indicates that the "The value 'running' indicates that the
schedule is currently running."; Schedule is currently running.";
} }
enum suppressed { enum suppressed {
value 4; value 4;
description description
"The value 'suppressed' indicates that the "The value 'suppressed' indicates that the
schedule is currently suppressed."; Schedule is currently suppressed.";
} }
} }
config false; config false;
mandatory true; mandatory true;
description description
"The current state of the schedule."; "The current state of the Schedule.";
} }
leaf storage { leaf storage {
type yang:gauge64; type yang:gauge64;
units "bytes"; units "bytes";
config false; config false;
mandatory true; mandatory true;
description description
"The amount of secondary storage (e.g., allocated in a "The amount of secondary storage (e.g., allocated in a
file system) holding temporary data allocated to the file system) holding temporary data allocated to the
schedule in bytes. This object reports the amount of Schedule in bytes. This object reports the amount of
allocated physical storage and not the storage used allocated physical storage and not the storage used
by logical data records."; by logical data records.";
} }
leaf invocations { leaf invocations {
type yang:counter32; type yang:counter32;
config false; config false;
mandatory true; mandatory true;
description description
"Number of invocations of this schedule. This counter "Number of invocations of this Schedule. This counter
does not include suppressed invocations or invocations does not include suppressed invocations or invocations
that were prevented due to an overlap with a previous that were prevented due to an overlap with a previous
invocation of this schedule."; invocation of this Schedule.";
} }
leaf suppressions { leaf suppressions {
type yang:counter32; type yang:counter32;
config false; config false;
mandatory true; mandatory true;
description description
"Number of suppressed executions of this schedule."; "Number of suppressed executions of this Schedule.";
} }
leaf overlaps { leaf overlaps {
type yang:counter32; type yang:counter32;
config false; config false;
mandatory true; mandatory true;
description description
"Number of executions prevented due to overlaps with "Number of executions prevented due to overlaps with
a previous invocation of this schedule."; a previous invocation of this Schedule.";
} }
leaf failures { leaf failures {
type yang:counter32; type yang:counter32;
config false; config false;
mandatory true; mandatory true;
description description
"Number of failed executions of this schedule. A "Number of failed executions of this Schedule. A
failed execution is an execution where at least failed execution is an execution where at least
one action failed."; one Action failed.";
} }
leaf last-invocation { leaf last-invocation {
type yang:date-and-time; type yang:date-and-time;
config false; config false;
description description
"The date and time of the last invocation of "The date and time of the last invocation of
this schedule."; this Schedule.";
} }
list action { list action {
key name; key name;
description description
"An action describes a task that is invoked by the "An Action describes a Task that is invoked by the
schedule. Multiple actions are invoked according to Schedule. Multiple Actions are invoked according to
the execution-mode of the schedule."; the execution-mode of the Schedule.";
leaf name { leaf name {
type lmap:identifier; type lmap:identifier;
description description
"The unique identifier for this action."; "The unique identifier for this Action.";
} }
leaf task { leaf task {
type task-ref; type task-ref;
mandatory true; mandatory true;
description description
"The task invoked by this action."; "The Task invoked by this Action.";
} }
container parameters { container parameters {
description description
"This container is a place-holder for run-time "This container is a placeholder for runtime
parameters defined in task-specific data models parameters defined in Task-specific data models
augmenting the base lmap control data model."; augmenting the base LMAP control data model.";
choice extension { choice extension {
description description
"This choice is provided to augment in different "This choice is provided to augment in different
sets of parameters."; sets of parameters.";
} }
} }
uses lmap:options-grouping { uses lmap:options-grouping {
description description
"The list of action specific options that are "The list of Action-specific options that are
appended to the list of task specific options."; appended to the list of Task-specific options.";
} }
leaf-list destination { leaf-list destination {
type schedule-ref; type schedule-ref;
description description
"A set of schedules receiving the output produced "A set of Schedules receiving the output produced
by this action. The output is stored temporarily by this Action. The output is stored temporarily
since the destination schedules will in general since the Destination Schedules will in general
not be running when output is passed to them. The not be running when output is passed to them. The
behaviour of an action passing data to its own behavior of an Action passing data to its own
schedule is implementation specific. Schedule is implementation specific.
Data passed to a sequential or pipelined schedule Data passed to a sequential or pipelined Schedule
is received by the schedule's first action. Data is received by the Schedule's first Action. Data
passed to a parallel schedule is received by all passed to a parallel Schedule is received by all
actions of the schedule."; Actions of the Schedule.";
} }
leaf-list tag { leaf-list tag {
type lmap:tag; type lmap:tag;
description description
"A set of action specific tags that are reported "A set of Action-specific tags that are reported
together with the measurement results to a together with the measurement results to a
collector."; Collector.";
} }
leaf-list suppression-tag { leaf-list suppression-tag {
type lmap:tag; type lmap:tag;
description description
"A set of suppression tags that are used to select "A set of Suppression tags that are used to select
actions to be suppressed."; Actions to be suppressed.";
} }
leaf state { leaf state {
type enumeration { type enumeration {
enum enabled { enum enabled {
value 1; value 1;
description description
"The value 'enabled' indicates that the "The value 'enabled' indicates that the
action is currently enabled."; Action is currently enabled.";
} }
enum disabled { enum disabled {
value 2; value 2;
description description
"The value 'disabled' indicates that the "The value 'disabled' indicates that the
action is currently disabled."; Action is currently disabled.";
} }
enum running { enum running {
value 3; value 3;
description description
"The value 'running' indicates that the "The value 'running' indicates that the
action is currently runnning."; Action is currently running.";
} }
enum suppressed { enum suppressed {
value 4; value 4;
description description
"The value 'suppressed' indicates that the "The value 'suppressed' indicates that the
action is currently suppressed."; Action is currently suppressed.";
} }
} }
config false; config false;
mandatory true; mandatory true;
description description
"The current state of the action."; "The current state of the Action.";
} }
leaf storage { leaf storage {
type yang:gauge64; type yang:gauge64;
units "bytes"; units "bytes";
config false; config false;
mandatory true; mandatory true;
description description
"The amount of secondary storage (e.g., allocated in a "The amount of secondary storage (e.g., allocated in a
file system) holding temporary data allocated to the file system) holding temporary data allocated to the
schedule in bytes. This object reports the amount of Schedule in bytes. This object reports the amount of
allocated physical storage and not the storage used allocated physical storage and not the storage used
by logical data records."; by logical data records.";
} }
leaf invocations { leaf invocations {
type yang:counter32; type yang:counter32;
config false; config false;
mandatory true; mandatory true;
description description
"Number of invocations of this action. This counter "Number of invocations of this Action. This counter
does not include suppressed invocations or invocations does not include suppressed invocations or invocations
that were prevented due to an overlap with a previous that were prevented due to an overlap with a previous
invocation of this action."; invocation of this Action.";
} }
leaf suppressions { leaf suppressions {
type yang:counter32; type yang:counter32;
config false; config false;
mandatory true; mandatory true;
description description
"Number of suppressed executions of this action."; "Number of suppressed executions of this Action.";
} }
leaf overlaps { leaf overlaps {
type yang:counter32; type yang:counter32;
config false; config false;
mandatory true; mandatory true;
description description
"Number of executions prevented due to overlaps with "Number of executions prevented due to overlaps with
a previous invocation of this action."; a previous invocation of this Action.";
} }
leaf failures { leaf failures {
type yang:counter32; type yang:counter32;
config false; config false;
mandatory true; mandatory true;
description description
"Number of failed executions of this action."; "Number of failed executions of this Action.";
} }
leaf last-invocation { leaf last-invocation {
type yang:date-and-time; type yang:date-and-time;
config false; config false;
mandatory true; mandatory true;
description description
"The date and time of the last invocation of "The date and time of the last invocation of
this action."; this Action.";
} }
leaf last-completion { leaf last-completion {
type yang:date-and-time; type yang:date-and-time;
config false; config false;
mandatory true; mandatory true;
description description
"The date and time of the last completion of "The date and time of the last completion of
this action."; this Action.";
} }
leaf last-status { leaf last-status {
type lmap:status-code; type lmap:status-code;
config false; config false;
mandatory true; mandatory true;
description description
"The status code returned by the last execution of "The status code returned by the last execution of
this action."; this Action.";
} }
leaf last-message { leaf last-message {
type string; type string;
config false; config false;
mandatory true; mandatory true;
description description
"The status message produced by the last execution "The status message produced by the last execution
of this action."; of this Action.";
} }
leaf last-failed-completion { leaf last-failed-completion {
type yang:date-and-time; type yang:date-and-time;
config false; config false;
mandatory true; mandatory true;
description description
"The date and time of the last failed completion "The date and time of the last failed completion
of this action."; of this Action.";
} }
leaf last-failed-status { leaf last-failed-status {
type lmap:status-code; type lmap:status-code;
config false; config false;
mandatory true; mandatory true;
description description
"The status code returned by the last failed "The status code returned by the last failed
execution of this action."; execution of this Action.";
} }
leaf last-failed-message { leaf last-failed-message {
type string; type string;
config false; config false;
mandatory true; mandatory true;
description description
"The status message produced by the last failed "The status message produced by the last failed
execution of this action."; execution of this Action.";
} }
} }
} }
} }
/* /*
* Suppression Instructions * Suppression Instructions
*/ */
container suppressions { container suppressions {
description description
"Suppression information to prevent schedules or "Suppression information to prevent Schedules or
certain actions from starting."; certain Actions from starting.";
list suppression { list suppression {
key name; key name;
description description
"Configuration of a particular suppression."; "Configuration of a particular Suppression.";
leaf name { leaf name {
type lmap:identifier; type lmap:identifier;
description description
"The locally-unique, administratively assigned name "The locally unique, administratively assigned name
for this suppression."; for this Suppression.";
} }
leaf start { leaf start {
type event-ref; type event-ref;
description description
"The event source controlling the start of the "The event source controlling the start of the
suppression period."; Suppression period.";
} }
leaf end { leaf end {
type event-ref; type event-ref;
description description
"The event source controlling the end of the "The event source controlling the end of the
suppression period. If not present, supression Suppression period. If not present, Suppression
continues indefinitely."; continues indefinitely.";
} }
leaf-list match { leaf-list match {
type lmap:glob-pattern; type lmap:glob-pattern;
description description
"A set of suppression match pattern. The suppression "A set of Suppression match patterns. The Suppression
will apply to all schedules (and their actions) that will apply to all Schedules (and their Actions) that
have a matching value in their suppression-tags have a matching value in their suppression-tags
and to all actions that have a matching value in and to all Actions that have a matching value in
their suppression-tags."; their suppression-tags.";
} }
leaf stop-running { leaf stop-running {
type boolean; type boolean;
default false; default false;
description description
"If 'stop-running' is true, running schedules and "If 'stop-running' is true, running Schedules and
actions matching the suppression will be terminated Actions matching the Suppression will be terminated
when suppression is activated. If 'stop-running' is when Suppression is activated. If 'stop-running' is
false, running schedules and actions will not be false, running Schedules and Actions will not be
affected if suppression is activated."; affected if Suppression is activated.";
} }
leaf state { leaf state {
type enumeration { type enumeration {
enum enabled { enum enabled {
value 1; value 1;
description description
"The value 'enabled' indicates that the "The value 'enabled' indicates that the
suppression is currently enabled."; Suppression is currently enabled.";
} }
enum disabled { enum disabled {
value 2; value 2;
description description
"The value 'disabled' indicates that the "The value 'disabled' indicates that the
suppression is currently disabled."; Suppression is currently disabled.";
} }
enum active { enum active {
value 3; value 3;
description description
"The value 'active' indicates that the "The value 'active' indicates that the
suppression is currently active."; Suppression is currently active.";
} }
} }
config false; config false;
mandatory true; mandatory true;
description description
"The current state of the suppression."; "The current state of the Suppression.";
} }
} }
} }
/* /*
* Event Instructions * Event Instructions
*/ */
container events { container events {
description description
"Configuration of LMAP events. "Configuration of LMAP events.
Implementations may be forced to delay acting Implementations may be forced to delay acting
upon the occurance of events in the face of local upon the occurrence of events in the face of local
constraints. An action triggered by an event constraints. An Action triggered by an event
therefore should not rely on the accuracy therefore should not rely on the accuracy
provided by the scheduler implementation."; provided by the scheduler implementation.";
list event { list event {
key name; key name;
description description
"The list of event sources configured on the "The list of event sources configured on the
LMAP agent."; Measurement Agent.";
leaf name { leaf name {
type lmap:identifier; type lmap:identifier;
description description
"The unique name of an event source."; "The unique name of an event source.";
} }
leaf random-spread { leaf random-spread {
type uint32; type uint32;
units seconds; units seconds;
description description
"This optional leaf adds a random spread to the "This optional leaf adds a random spread to the
computation of the event's trigger time. The computation of the event's trigger time. The
random spread is a uniformly distributed random random spread is a uniformly distributed random
number taken from the interval [0:random-spread]."; number taken from the interval [0:random-spread].";
} }
leaf cycle-interval { leaf cycle-interval {
type uint32; type uint32;
units seconds; units seconds;
description description
"The optional cycle-interval defines the duration "The optional cycle-interval defines the duration
of the time interval in seconds that is used to of the time interval in seconds that is used to
calculate cycle numbers. No cycle number is calculate cycle numbers. No cycle number is
calculated if the optional cycle-interval does calculated if the optional cycle-interval does
not exist."; not exist.";
} }
choice event-type { choice event-type {
description description
"Different types of events are handled by "Different types of events are handled by
different branches of this choice. Note that different branches of this choice. Note that
this choice can be extended via augmentations."; this choice can be extended via augmentations.";
case periodic { case periodic {
container periodic { container periodic {
description description
"A periodic timing object triggers periodically "A periodic timing object triggers periodically
according to a regular interval."; according to a regular interval.";
leaf interval { leaf interval {
type uint32 { type uint32 {
skipping to change at page 36, line 50 skipping to change at page 37, line 33
container calendar { container calendar {
description description
"A calendar timing object triggers based on the "A calendar timing object triggers based on the
current calendar date and time."; current calendar date and time.";
leaf-list month { leaf-list month {
type lmap:month-or-all; type lmap:month-or-all;
min-elements 1; min-elements 1;
description description
"A set of months at which this calendar timing "A set of months at which this calendar timing
will trigger. The wildcard means all months."; will trigger. The wildcard means all months.";
} }
leaf-list day-of-month { leaf-list day-of-month {
type lmap:day-of-months-or-all; type lmap:day-of-months-or-all;
min-elements 1; min-elements 1;
description description
"A set of days of the month at which this "A set of days of the month at which this
calendar timing will trigger. The wildcard means calendar timing will trigger. The wildcard means
all days of a month."; all days of a month.";
} }
leaf-list day-of-week { leaf-list day-of-week {
type lmap:weekday-or-all; type lmap:weekday-or-all;
min-elements 1; min-elements 1;
description description
"A set of weekdays at which this calendar timing "A set of weekdays at which this calendar timing
will trigger. The wildcard means all weekdays."; will trigger. The wildcard means all weekdays.";
} }
leaf-list hour { leaf-list hour {
type lmap:hour-or-all; type lmap:hour-or-all;
min-elements 1; min-elements 1;
description description
"A set of hours at which this calendar timing will "A set of hours at which this calendar timing will
trigger. The wildcard means all hours of a day."; trigger. The wildcard means all hours of a day.";
} }
leaf-list minute { leaf-list minute {
type lmap:minute-or-all; type lmap:minute-or-all;
min-elements 1; min-elements 1;
description description
"A set of minutes at which this calendar timing "A set of minutes at which this calendar timing
will trigger. The wildcard means all minutes of will trigger. The wildcard means all minutes of
an hour."; an hour.";
} }
leaf-list second { leaf-list second {
type lmap:second-or-all; type lmap:second-or-all;
min-elements 1; min-elements 1;
description description
"A set of seconds at which this calendar timing "A set of seconds at which this calendar timing
will trigger. The wildcard means all seconds of will trigger. The wildcard means all seconds of
a minute."; a minute.";
} }
leaf timezone-offset { leaf timezone-offset {
type lmap:timezone-offset; type lmap:timezone-offset;
description description
"The timezone in which this calendar timing "The time zone in which this calendar timing
object will be evaluated. If not present, object will be evaluated. If not present,
the systems' local timezone will be used."; the system's local time zone will be used.";
} }
uses start-end-grouping; uses start-end-grouping;
} }
} }
case one-off { case one-off {
container one-off { container one-off {
description description
"A one-off timing object triggers exactly once."; "A one-off timing object triggers exactly once.";
skipping to change at page 38, line 21 skipping to change at page 39, line 4
container one-off { container one-off {
description description
"A one-off timing object triggers exactly once."; "A one-off timing object triggers exactly once.";
leaf time { leaf time {
type yang:date-and-time; type yang:date-and-time;
mandatory true; mandatory true;
description description
"This one-off timing object triggers once at "This one-off timing object triggers once at
the configured date and time."; the configured date and time.";
} }
} }
} }
case immediate { case immediate {
leaf immediate { leaf immediate {
type empty; type empty;
mandatory true; mandatory true;
description description
"This immediate event object triggers immediately "This immediate Event object triggers immediately
when it is configured."; when it is configured.";
} }
} }
case startup { case startup {
leaf startup { leaf startup {
type empty; type empty;
mandatory true; mandatory true;
description description
"This startup event object triggers whenever the "This startup Event object triggers whenever the
LMAP agent (re)starts."; Measurement Agent (re)starts.";
} }
} }
case controller-lost { case controller-lost {
leaf controller-lost { leaf controller-lost {
type empty; type empty;
mandatory true; mandatory true;
description description
"The controller-lost event object triggers when "The controller-lost Event object triggers when
the connectivity to the controller has been lost the connectivity to the Controller has been lost
for at least 'controller-timeout' seconds."; for at least 'controller-timeout' seconds.";
} }
} }
case controller-connected { case controller-connected {
leaf controller-connected { leaf controller-connected {
type empty; type empty;
mandatory true; mandatory true;
description description
"The controller-connected event object triggers "The controller-connected Event object triggers
when the connectivity to the controller has been when the connectivity to the Controller has been
restored after it was lost for at least restored after it was lost for at least
'controller-timeout' seconds."; 'controller-timeout' seconds.";
} }
} }
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
4.3. LMAP Report YANG Module 4.3. LMAP Report YANG Module
This module imports definitions from [RFC6536] and the common LMAP This module imports definitions from [RFC6536] and the common LMAP
module. module.
<CODE BEGINS> file "ietf-lmap-report@2017-04-21.yang" <CODE BEGINS> file "ietf-lmap-report@2017-08-08.yang"
module ietf-lmap-report { module ietf-lmap-report {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-lmap-report"; namespace "urn:ietf:params:xml:ns:yang:ietf-lmap-report";
prefix "lmapr"; prefix "lmapr";
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
} }
import ietf-lmap-common { import ietf-lmap-common {
prefix lmap; prefix lmap;
} }
organization organization
"IETF Large-Scale Measurement Platforms Working Group"; "IETF Large-Scale Measurement of Broadband Performance
Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/lmap/> "WG Web: <https://datatracker.ietf.org/wg/lmap>
WG List: <mailto:lmap@ietf.org> WG List: <mailto:lmap@ietf.org>
Editor: Juergen Schoenwaelder Editor: Juergen Schoenwaelder
<j.schoenwaelder@jacobs-university.de> <j.schoenwaelder@jacobs-university.de>
Editor: Vaibhav Bajpai Editor: Vaibhav Bajpai
<v.bajpai@jacobs-university.de>"; <bajpaiv@in.tum.de>";
description description
"This module defines a data model for reporting results from "This module defines a data model for reporting results from
measurement agents, which are part of a Large-Scale Measurement Measurement Agents, which are part of a Large-Scale Measurement
Platform (LMAP), to result data collectors. This data model is Platform (LMAP), to result data Collectors. This data model is
expected to be implemented by a collector."; expected to be implemented by a Collector.";
revision "2017-04-21" { revision "2017-08-08" {
description description
"Initial version"; "Initial version";
reference reference
"RFC XXXX: A YANG Data Model for LMAP Measurement Agents"; "RFC 8194: A YANG Data Model for LMAP Measurement Agents";
} }
rpc report { rpc report {
description description
"The report operation is used by an LMAP measurement agent to "The report operation is used by a Measurement Agent to
submit measurement results produced by measurement tasks to submit measurement results produced by Measurement Tasks to
a collector."; a Collector.";
input { input {
leaf date { leaf date {
type yang:date-and-time; type yang:date-and-time;
mandatory true; mandatory true;
description description
"The date and time when this result report was sent to "The date and time when this result report was sent to
a collector."; a Collector.";
} }
leaf agent-id { leaf agent-id {
type yang:uuid; type yang:uuid;
description description
"The agent-id of the agent from which this "The agent-id of the agent from which this
report originates."; report originates.";
} }
leaf group-id { leaf group-id {
skipping to change at page 41, line 16 skipping to change at page 41, line 48
leaf measurement-point { leaf measurement-point {
type string; type string;
description description
"The measurement-point of the agent from which this "The measurement-point of the agent from which this
report originates."; report originates.";
} }
list result { list result {
description description
"The list of tasks for which results are reported."; "The list of Tasks for which results are reported.";
leaf schedule { leaf schedule {
type lmap:identifier; type lmap:identifier;
description description
"The name of the schedule that produced the result."; "The name of the Schedule that produced the result.";
} }
leaf action { leaf action {
type lmap:identifier; type lmap:identifier;
description description
"The name of the action in the schedule that produced "The name of the Action in the Schedule that produced
the result."; the result.";
} }
leaf task { leaf task {
type lmap:identifier; type lmap:identifier;
description description
"The name of the task that produced the result."; "The name of the Task that produced the result.";
} }
container parameters { container parameters {
description description
"This container is a place-holder for run-time "This container is a placeholder for runtime
parameters defined in task-specific data models parameters defined in Task-specific data models
augmenting the base lmap report data model."; augmenting the base LMAP report data model.";
choice extension { choice extension {
description description
"This choice is provided to augment in different "This choice is provided to augment in different
sets of parameters."; sets of parameters.";
} }
} }
uses lmap:options-grouping { uses lmap:options-grouping {
description description
"The list of options there were in use then the "The list of options there were in use when the
measurement was performed. This list must include measurement was performed. This list must include
both the task specific options as well as the action both the Task-specific options as well as the
specific options."; Action-specific options.";
} }
leaf-list tag { leaf-list tag {
type lmap:tag; type lmap:tag;
description description
"A tag contains additional information that is passed "A tag contains additional information that is passed
with the result record to the collector. This is the with the result record to the Collector. This is the
joined set of tags defined for the task object, the joined set of tags defined for the Task object, the
schedule object, and the action object. A tag can be Schedule object, and the Action object. A tag can be
used to carry the Measurement Cycle ID."; used to carry the Measurement Cycle ID.";
} }
leaf event { leaf event {
type yang:date-and-time; type yang:date-and-time;
description description
"The date and time of the event that triggered the "The date and time of the event that triggered the
schedule of the action that produced the reported Schedule of the Action that produced the reported
result values. The date and time does not include result values. The date and time does not include
any added randomization."; any added randomization.";
} }
leaf start { leaf start {
type yang:date-and-time; type yang:date-and-time;
mandatory true; mandatory true;
description description
"The date and time when the task producing "The date and time when the Task producing
this result started."; this result started.";
} }
leaf end { leaf end {
type yang:date-and-time; type yang:date-and-time;
description description
"The date and time when the task producing "The date and time when the Task producing
this result finished."; this result finished.";
} }
leaf cycle-number { leaf cycle-number {
type lmap:cycle-number; type lmap:cycle-number;
description description
"The optional cycle number is the time closest to "The optional cycle number is the time closest to
the time reported in the event leaf that is a multiple the time reported in the event leaf that is a multiple
of the cycle-interval of the event that triggered the of the cycle-interval of the event that triggered the
execution of the schedule. The value is only present execution of the Schedule. The value is only present
if the event that triggered the execution of the if the event that triggered the execution of the
schedule has a defined cycle-interval."; Schedule has a defined cycle-interval.";
} }
leaf status { leaf status {
type lmap:status-code; type lmap:status-code;
mandatory true; mandatory true;
description description
"The status code returned by the execution of this "The status code returned by the execution of this
action."; Action.";
} }
list conflict { list conflict {
description description
"The names of tasks overlapping with the execution "The names of Tasks overlapping with the execution
of the task that has produced this result."; of the Task that has produced this result.";
leaf schedule-name { leaf schedule-name {
type lmap:identifier; type lmap:identifier;
description description
"The name of a schedule that might have impacted "The name of a Schedule that might have impacted
the execution of the task that has produced this the execution of the Task that has produced this
result."; result.";
} }
leaf action-name { leaf action-name {
type lmap:identifier; type lmap:identifier;
description description
"The name of an action within the schedule that "The name of an Action within the Schedule that
might have impacted the execution of the task that might have impacted the execution of the Task that
has produced this result."; has produced this result.";
} }
leaf task-name { leaf task-name {
type lmap:identifier; type lmap:identifier;
description description
"The name of the task executed by an action within "The name of the Task executed by an Action within
the schedule that might have impacted the execution the Schedule that might have impacted the execution
of the task that has produced this result."; of the Task that has produced this result.";
} }
} }
list table { list table {
description description
"A list of result tables."; "A list of result tables.";
uses lmap:registry-grouping; uses lmap:registry-grouping;
leaf-list column { leaf-list column {
type string; type string;
description description
"An ordered list of column labels. The order is "An ordered list of column labels. The order is
determined by the system and must match the order determined by the system and must match the order
of the columns in the result rows."; of the columns in the result rows.";
} }
list row { list row {
description description
"The rows of a result table."; "The rows of a result table.";
leaf-list value { leaf-list value {
type string; type string;
skipping to change at page 44, line 30 skipping to change at page 45, line 15
} }
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
5. Security Considerations 5. Security Considerations
The YANG module defined in this memo is designed to be accessed via The YANG module defined in this document is designed to be accessed
the NETCONF protocol [RFC6241]. The lowest NETCONF layer is the via network management protocols such as NETCONF [RFC6241] or
secure transport layer, and the mandatory to implement secure RESTCONF [RFC8040]. The lowest NETCONF layer is the secure transport
transport is SSH [RFC6242]. The lowest RESTCONF layer is HTTPS, and layer, and the mandatory-to-implement secure transport is Secure
the mandatory-to-implement secure transport is TLS [RFC5246]. Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and the
mandatory-to-implement secure transport is Transport Layer Security
(TLS) [RFC5246].
The NETCONF access control model [RFC6536] provides the means to The NETCONF access control model [RFC6536] provides the means to
restrict access for particular NETCONF or RESTCONF users to a pre- restrict access for particular NETCONF or RESTCONF users to a
configured subset of all available NETCONF or RESTCONF protocol preconfigured subset of all available NETCONF or RESTCONF protocol
operations and content. operations and content.
There are a number of data nodes defined in this YANG module which There are a number of data nodes defined in this YANG module that are
are writable/creatable/deletable (i.e., config true, which is the writable/creatable/deletable (i.e., config true, which is the
default). These data nodes may be considered sensitive or vulnerable default). These data nodes may be considered sensitive or vulnerable
in some network environments. Write operations (e.g., edit-config) in some network environments. Write operations (e.g., edit-config)
to these data nodes without proper protection can have a negative to these data nodes without proper protection can have a negative
effect on network operations. These are the subtrees and data nodes effect on network operations. These are the subtrees and data nodes
and their sensitivity/vulnerability: and their sensitivity/vulnerability:
/lmap/agent This subtree configures general properties of /lmap/agent This subtree configures general properties of
the measurement agent such as its identity, its the Measurement Agent such as its identity,
measurement point or controller timeout. This measurement point, or Controller timeout. This
subtree should only have write access for the subtree should only have write access for the
system responsible to configure the measurement system responsible for configuring the
agent. Measurement Agent.
/lmap/tasks This subtree configures the tasks that can be /lmap/tasks This subtree configures the Tasks that can be
invoked by a controller. This subtree should invoked by a Controller. This subtree should
only have write access for the system only have write access for the system
responsible to configure the measurement agent. responsible for configuring the Measurement
Care must be taken to not expose tasks to a Agent. Care must be taken to not expose Tasks
controller that can cause damage to the system to a Controller that can cause damage to the
or the network. system or the network.
/lmap/schedules This subtree is used by a controller to define /lmap/schedules This subtree is used by a Controller to define
the schedules and actions that are executed the Schedules and Actions that are executed
when certain events occur. Unauthorized access when certain events occur. Unauthorized access
can cause unwanted load on the device or can cause unwanted load on the device or
network or it might direct measurement traffic network, or it might direct measurement traffic
to targets that become victims of an attack. to targets that become victims of an attack.
/lmap/suppressions This subtree is used by a controller to define /lmap/suppressions This subtree is used by a Controller to define
suppressions that can temporarily disable the Suppressions that can temporarily disable the
execution of schedules or actions. execution of Schedules or Actions.
Unauthorized access can either disable Unauthorized access can either disable
measurements that should normally take place or measurements that should normally take place or
it can cause measurements to take place during cause measurements to take place during times
times when normally no measurements should take when normally no measurements should take
place. place.
/lmap/events This subtree is used by a controller to define /lmap/events This subtree is used by a Controller to define
events that trigger the execution of schedules events that trigger the execution of Schedules
and actions. Unauthorized access can either and Actions. Unauthorized access can either
disable measurements that should normally take disable measurements that should normally take
place or it can cause measurements to take place or cause measurements to take place
place during times when normally no during times when normally no measurements
measurements should take place or at frequency should take place or at a frequency that is
that is higher than normally expected. higher than normally expected.
Some of the readable data nodes in this YANG module may be considered Some of the readable data nodes in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus sensitive or vulnerable in some network environments. It is thus
important to control read access (e.g., via get, get-config or important to control read access (e.g., via get, get-config, or
notification) to these data nodes. These are the subtrees and data notification) to these data nodes. These are the subtrees and data
nodes and their sensitivity/vulnerability: nodes and their sensitivity/vulnerability:
/lmap/agent This subtree provides information about the /lmap/agent This subtree provides information about the
measurement agent. This information may be Measurement Agent. This information may be
used to select specific targets for attacks. used to select specific targets for attacks.
/lmap/capabilities This subtree provides information about the /lmap/capabilities This subtree provides information about the
capabilities of the measurement agent, capabilities of the Measurement Agent,
including its software version number and the including its software version number and the
tasks that it supports. This information may Tasks that it supports. This information may
be used to execute targeted attacks against be used to execute targeted attacks against
specific implementations. specific implementations.
/lmap/schedules This subtree provides information about the /lmap/schedules This subtree provides information about the
schedules and their associated actions executed Schedules and their associated Actions executed
on the measurement agent. This information may on the Measurement Agent. This information may
be used to check whether attacks against the be used to check whether attacks against the
implementation are effective. implementation are effective.
/lmap/suppressions This subtree provides information about the /lmap/suppressions This subtree provides information about the
suppressions that can be active on the Suppressions that can be active on the
measurement agent. This information may be Measurement Agent. This information may be
used to predict time periods where measurements used to predict time periods where measurements
take place (or do not take place). take place (or do not take place).
Some of the RPC operations in this YANG module may be considered Some of the RPC operations in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus sensitive or vulnerable in some network environments. It is thus
important to control access to these operations. These are the important to control access to these operations. These are the
operations and their sensitivity/vulnerability: operations and their sensitivity/vulnerability:
/report The report operation is used to send locally collected /report The report operation is used to send locally collected
measurement results to a remote collector. Unauthorized measurement results to a remote Collector. Unauthorized
access may leak measurement results, including from passive access may leak measurement results, including those from
measurements. passive measurements.
The data model uses a number of identifiers that are set by the The data model uses a number of identifiers that are set by the
controller. Implementors may find these identifiers useful for the Controller. Implementors may find these identifiers useful for the
identification of resources, e.g., to identify objects in a identification of resources, e.g., to identify objects in a file
filesystem providing temporary storage. Since the identifiers used system providing temporary storage. Since the identifiers used by
by the YANG data model may allow characters that may be given special the YANG data model may allow characters that may be given special
interpretation in a specific context, implementations must ensure interpretation in a specific context, implementations must ensure
that identifiers are properly mapped into safe identifiers. that identifiers are properly mapped into safe identifiers.
The data model allows to specify options in the form of name value The data model allows specifying options in the form of name/value
pairs that are passed to programs. Implementers ought to take care pairs that are passed to programs. Implementors ought to take care
that option names and values are passed literally to programs. In that option names and values are passed literally to programs. In
particular, shell expansions that may alter option names and values particular, shell expansions that may alter option names and values
must not be performed. must not be performed.
6. IANA Considerations 6. IANA Considerations
This document registers three URIs in the "IETF XML Registry" This document registers three URIs in the "IETF XML Registry"
[RFC3688]. Following the format in RFC 3688, the following [RFC3688]. Following the format in RFC 3688, the following
registrations have been made. registrations have been made.
skipping to change at page 47, line 20 skipping to change at page 48, line 8
Registrant Contact: The IESG. Registrant Contact: The IESG.
XML: N/A; the requested URI is an XML namespace. XML: N/A; the requested URI is an XML namespace.
URI: urn:ietf:params:xml:ns:yang:ietf-lmap-report URI: urn:ietf:params:xml:ns:yang:ietf-lmap-report
Registrant Contact: The IESG. Registrant Contact: The IESG.
XML: N/A; the requested URI is an XML namespace. XML: N/A; the requested URI is an XML namespace.
This document registers three YANG modules in the "YANG Module Names" This document registers three YANG modules in the "YANG Module Names"
registry [RFC6020]. registry [RFC6020].
name: ietf-lmap-common Name: ietf-lmap-common
namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-common Namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-common
prefix: lmap Prefix: lmap
reference: RFC XXXX Reference: RFC 8194
name: ietf-lmap-control
namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-control
prefix: lmapc
reference: RFC XXXX
name: ietf-lmap-report
namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-report
prefix: lmapr
reference: RFC XXXX
7. Acknowledgements
Several people contributed to this specification by reviewing early
versions and actively participating in the LMAP working group
(apologies to those unintentionally omitted): Marcelo Bagnulo, Martin
Bjorklund, Trevor Burbridge, Timothy Carey, Alissa Cooper, Philip
Eardley, Al Morton, Dan Romascanu, Andrea Soppera, Barbara Stark, and
Qin Wu.
Juergen Schoenwaelder and Vaibhav Bajpai worked in part on the Leone
research project, which received funding from the European Union
Seventh Framework Programme [FP7/2007-2013] under grant agreement
number 317647.
Juergen Schoenwaelder and Vaibhav Bajpai were partly funded by Name: ietf-lmap-control
Flamingo, a Network of Excellence project (ICT-318488) supported by Namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-control
the European Commission under its Seventh Framework Programme. Prefix: lmapc
Reference: RFC 8194
8. References Name: ietf-lmap-report
Namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-report
Prefix: lmapr
Reference: RFC 8194
8.1. Normative References 7. References
[I-D.ietf-lmap-information-model] 7.1. Normative References
Burbridge, T., Eardley, P., Bagnulo, M., and J.
Schoenwaelder, "Information Model for Large-Scale
Measurement Platforms (LMAP)", draft-ietf-lmap-
information-model-16 (work in progress), January 2017.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/ Requirement Levels", BCP 14, RFC 2119,
RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246,
DOI 10.17487/RFC5246, August 2008,
<https://www.rfc-editor.org/info/rfc5246>.
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
the Network Configuration Protocol (NETCONF)", RFC 6020, the Network Configuration Protocol (NETCONF)", RFC 6020,
DOI 10.17487/RFC6020, October 2010, DOI 10.17487/RFC6020, October 2010,
<http://www.rfc-editor.org/info/rfc6020>. <https://www.rfc-editor.org/info/rfc6020>.
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
6991, DOI 10.17487/RFC6991, July 2013, and A. Bierman, Ed., "Network Configuration Protocol
<http://www.rfc-editor.org/info/rfc6991>. (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
<https://www.rfc-editor.org/info/rfc6241>.
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
<https://www.rfc-editor.org/info/rfc6242>.
[RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration
Protocol (NETCONF) Access Control Model", RFC 6536,
DOI 10.17487/RFC6536, March 2012,
<https://www.rfc-editor.org/info/rfc6536>.
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
RFC 6991, DOI 10.17487/RFC6991, July 2013,
<https://www.rfc-editor.org/info/rfc6991>.
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, DOI 10.17487/RFC7950, August 2016, RFC 7950, DOI 10.17487/RFC7950, August 2016,
<http://www.rfc-editor.org/info/rfc7950>. <https://www.rfc-editor.org/info/rfc7950>.
8.2. Informative References [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
<https://www.rfc-editor.org/info/rfc8040>.
[I-D.ietf-netconf-netconf-client-server] [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
Watsen, K., Wu, G., and J. Schoenwaelder, "NETCONF Client 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
and Server Models", draft-ietf-netconf-netconf-client- May 2017, <https://www.rfc-editor.org/info/rfc8174>.
server-01 (work in progress), November 2016.
[I-D.ietf-netmod-entity] [RFC8193] Burbridge, T., Eardley, P., Bagnulo, M., and J.
Bierman, A., Bjorklund, M., Dong, J., and D. Romascanu, "A Schoenwaelder, "Information Model for Large-Scale
YANG Data Model for Hardware Management", draft-ietf- Measurement Platforms (LMAPs)", DOI 10.17487/RFC8193,
netmod-entity-02 (work in progress), January 2017. RFC 8193, August 2017,
<http://www.rfc-editor.org/info/rfc8193>.
7.2. Informative References
[ISO-8601] [ISO-8601]
International Organization for Standardization, "Data International Organization for Standardization, "Data
elements and interchange formats -- Information elements and interchange formats -- Information
interchange -- Representation of dates and times", ISO interchange -- Representation of dates and times", ISO
Standard 8601:2004, 2004. Standard 8601:2004, December 2004.
[NETCONF-CLIENT-SERVER]
Watsen, K., Wu, G., and J. Schoenwaelder, "NETCONF Client
and Server Models", Work in Progress, draft-ietf-netconf-
netconf-client-server-04, July 2017.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
DOI 10.17487/RFC3688, January 2004, DOI 10.17487/RFC3688, January 2004,
<http://www.rfc-editor.org/info/rfc3688>. <https://www.rfc-editor.org/info/rfc3688>.
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246, DOI 10.17487/
RFC5246, August 2008,
<http://www.rfc-editor.org/info/rfc5246>.
[RFC5424] Gerhards, R., "The Syslog Protocol", RFC 5424, DOI 10
.17487/RFC5424, March 2009,
<http://www.rfc-editor.org/info/rfc5424>.
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
and A. Bierman, Ed., "Network Configuration Protocol
(NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
<http://www.rfc-editor.org/info/rfc6241>.
[RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
<http://www.rfc-editor.org/info/rfc6242>.
[RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration [RFC5424] Gerhards, R., "The Syslog Protocol", RFC 5424,
Protocol (NETCONF) Access Control Model", RFC 6536, DOI 10 DOI 10.17487/RFC5424, March 2009,
.17487/RFC6536, March 2012, <https://www.rfc-editor.org/info/rfc5424>.
<http://www.rfc-editor.org/info/rfc6536>.
[RFC7223] Bjorklund, M., "A YANG Data Model for Interface [RFC7223] Bjorklund, M., "A YANG Data Model for Interface
Management", RFC 7223, DOI 10.17487/RFC7223, May 2014, Management", RFC 7223, DOI 10.17487/RFC7223, May 2014,
<http://www.rfc-editor.org/info/rfc7223>. <https://www.rfc-editor.org/info/rfc7223>.
[RFC7317] Bierman, A. and M. Bjorklund, "A YANG Data Model for [RFC7317] Bierman, A. and M. Bjorklund, "A YANG Data Model for
System Management", RFC 7317, DOI 10.17487/RFC7317, August System Management", RFC 7317, DOI 10.17487/RFC7317, August
2014, <http://www.rfc-editor.org/info/rfc7317>. 2014, <https://www.rfc-editor.org/info/rfc7317>.
[RFC7398] Bagnulo, M., Burbridge, T., Crawford, S., Eardley, P., and [RFC7398] Bagnulo, M., Burbridge, T., Crawford, S., Eardley, P., and
A. Morton, "A Reference Path and Measurement Points for A. Morton, "A Reference Path and Measurement Points for
Large-Scale Measurement of Broadband Performance", RFC Large-Scale Measurement of Broadband Performance",
7398, DOI 10.17487/RFC7398, February 2015, RFC 7398, DOI 10.17487/RFC7398, February 2015,
<http://www.rfc-editor.org/info/rfc7398>. <https://www.rfc-editor.org/info/rfc7398>.
[RFC7594] Eardley, P., Morton, A., Bagnulo, M., Burbridge, T., [RFC7594] Eardley, P., Morton, A., Bagnulo, M., Burbridge, T.,
Aitken, P., and A. Akhter, "A Framework for Large-Scale Aitken, P., and A. Akhter, "A Framework for Large-Scale
Measurement of Broadband Performance (LMAP)", RFC 7594, Measurement of Broadband Performance (LMAP)", RFC 7594,
DOI 10.17487/RFC7594, September 2015, DOI 10.17487/RFC7594, September 2015,
<http://www.rfc-editor.org/info/rfc7594>. <https://www.rfc-editor.org/info/rfc7594>.
[W3C.REC-xml-20081126]
Bray, T., Paoli, J., Sperberg-McQueen, M., Maler, E., and
F. Yergeau, "Extensible Markup Language (XML) 1.0 (Fifth
Edition)", World Wide Web Consortium Recommendation REC-
xml-20081126, November 2008,
<http://www.w3.org/TR/2008/REC-xml-20081126>.
[YANG-HARDWARE]
Bierman, A., Bjorklund, M., Dong, J., and D. Romascanu, "A
YANG Data Model for Hardware Management", Work in
Progress, draft-ietf-netmod-entity-03, March 2017.
Appendix A. Example Parameter Extension Module Appendix A. Example Parameter Extension Module
Sometimes tasks may require complicated parameters that cannot easily Sometimes Tasks may require complicated parameters that cannot easily
be fit into options, i.e., a list of name/value pairs. In such a be fit into options, i.e., a list of name/value pairs. In such a
situation, it is possible to augment the ietf-lmap-control.yang and situation, it is possible to augment the ietf-lmap-control.yang and
ietf-lmap-report.yang data models with definitions for more complex ietf-lmap-report.yang data models with definitions for more complex
parameters. The following example module demontrates this idea using parameters. The following example module demonstrates this idea
the parameters of UDP latency metrics as an example (although UDP using the parameters of UDP latency metrics as an example (although
latency metric parameters do not really need such an extension UDP latency metric parameters do not really need such an extension
module). module).
module example-ietf-ippm-udp-latency { module example-ietf-ippm-udp-latency {
namespace "urn:example:ietf-ippm-udp-latency"; namespace "urn:example:ietf-ippm-udp-latency";
prefix "ippm-udp-latency"; prefix "ippm-udp-latency";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
skipping to change at page 51, line 39 skipping to change at page 52, line 36
default 30.0000; default 30.0000;
description description
"The upper limit on the poisson distribution with a resolution "The upper limit on the poisson distribution with a resolution
of 0.0001 seconds (0.1 ms)."; of 0.0001 seconds (0.1 ms).";
} }
} }
augment "/lmapc:lmap/lmapc:schedules/lmapc:schedule/lmapc:action" augment "/lmapc:lmap/lmapc:schedules/lmapc:schedule/lmapc:action"
+ "/lmapc:parameters/lmapc:extension" { + "/lmapc:parameters/lmapc:extension" {
description description
"This augmentation adds parameters specific to IPPM UDP "This augmentation adds parameters specific to IP Performance
latency metrics to actions."; Metrics (IPPM) and UDP latency metrics to Actions.";
case "ietf-ippm-udp-latency" { case "ietf-ippm-udp-latency" {
uses ippm-udp-latency-parameter-grouping; uses ippm-udp-latency-parameter-grouping;
} }
} }
augment "/lmapr:report/lmapr:input/lmapr:result" augment "/lmapr:report/lmapr:input/lmapr:result"
+ "/lmapr:parameters/lmapr:extension" { + "/lmapr:parameters/lmapr:extension" {
description description
"This augmentation adds parameters specific to IPPM UDP "This augmentation adds parameters specific to IPPM and
latency metrics to reports."; UDP latency metrics to reports.";
case "ietf-ippm-udp-latency" { case "ietf-ippm-udp-latency" {
uses ippm-udp-latency-parameter-grouping; uses ippm-udp-latency-parameter-grouping;
} }
} }
} }
Appendix B. Example Configuration Appendix B. Example Configuration
The configuration below is in XML [W3C.REC-xml-20081126].
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<lmap xmlns="urn:ietf:params:xml:ns:yang:ietf-lmap-control"> <lmap xmlns="urn:ietf:params:xml:ns:yang:ietf-lmap-control">
<agent> <agent>
<agent-id>550e8400-e29b-41d4-a716-446655440000</agent-id> <agent-id>550e8400-e29b-41d4-a716-446655440000</agent-id>
<report-agent-id>true</report-agent-id> <report-agent-id>true</report-agent-id>
</agent> </agent>
<schedules> <schedules>
<!-- The schedule S1 first updates a list of ping targets <!-- The Schedule S1 first updates a list of ping targets
and subsequently sends a ping to all targets. --> and subsequently sends a ping to all targets. -->
<schedule> <schedule>
<name>S1</name> <name>S1</name>
<start>E1</start> <start>E1</start>
<execution-mode>sequential</execution-mode> <execution-mode>sequential</execution-mode>
<action> <action>
<name>A1</name> <name>A1</name>
<task>update-ping-targets</task> <task>update-ping-targets</task>
</action> </action>
<action> <action>
<name>A2</name> <name>A2</name>
<task>ping-all-targets</task> <task>ping-all-targets</task>
<destination>S3</destination> <destination>S3</destination>
</action> </action>
<suppression-tag>measurement:ping</suppression-tag> <suppression-tag>measurement:ping</suppression-tag>
</schedule> </schedule>
<!-- The schedule S2 executes two traceroutes concurrently. --> <!-- The Schedule S2 executes two traceroutes concurrently. -->
<schedule> <schedule>
<name>S2</name> <name>S2</name>
<start>E1</start> <start>E1</start>
<execution-mode>parallel</execution-mode> <execution-mode>parallel</execution-mode>
<action> <action>
<name>A1</name> <name>A1</name>
<task>traceroute</task> <task>traceroute</task>
<option> <option>
<id>target</id> <id>target</id>
<name>target</name> <name>target</name>
skipping to change at page 53, line 20 skipping to change at page 54, line 26
<task>traceroute</task> <task>traceroute</task>
<option> <option>
<id>target</id> <id>target</id>
<name>target</name> <name>target</name>
<value>2001:db8::2</value> <value>2001:db8::2</value>
</option> </option>
<destination>S3</destination> <destination>S3</destination>
</action> </action>
<suppression-tag>measurement:traceroute</suppression-tag> <suppression-tag>measurement:traceroute</suppression-tag>
</schedule> </schedule>
<!-- The schedule S3 sends measurement data to a collector. --> <!-- The Schedule S3 sends measurement data to a Collector. -->
<schedule> <schedule>
<name>S3</name> <name>S3</name>
<start>E2</start> <start>E2</start>
<action> <action>
<name>A1</name> <name>A1</name>
<task>report</task> <task>report</task>
<option> <option>
<id>collector</id> <id>collector</id>
<name>collector</name> <name>collector</name>
<value>https://collector.example.com/</value> <value>https://collector.example.com/</value>
</option> </option>
</action> </action>
</schedule> </schedule>
</schedules> </schedules>
<suppressions> <suppressions>
<!-- stop all measurements if we got orphaned --> <!-- Stop all measurements if we got orphaned. -->
<suppression> <suppression>
<name>orphaned</name> <name>orphaned</name>
<start>controller-lost</start> <start>controller-lost</start>
<end>controller-connected</end> <end>controller-connected</end>
<match>measurement:*</match> <match>measurement:*</match>
</suppression> </suppression>
</suppressions> </suppressions>
<tasks> <tasks>
<!-- configuration of an update-ping-targets task --> <!-- configuration of an update-ping-targets task -->
<task> <task>
<name>update-ping-targets</name> <name>update-ping-targets</name>
<program>fping-update-targets</program> <program>fping-update-targets</program>
</task> </task>
<!-- configuration of a ping-all-targets task --> <!-- configuration of a ping-all-targets task -->
<task> <task>
<name>ping-all-targets</name> <name>ping-all-targets</name>
<program>fping</program> <program>fping</program>
skipping to change at page 55, line 11 skipping to change at page 56, line 19
<calendar> <calendar>
<month>*</month> <month>*</month>
<day-of-week>monday</day-of-week> <day-of-week>monday</day-of-week>
<day-of-month>*</day-of-month> <day-of-month>*</day-of-month>
<hour>4</hour> <hour>4</hour>
<minute>0</minute> <minute>0</minute>
<second>0</second> <second>0</second>
<timezone-offset>+00:00</timezone-offset> <timezone-offset>+00:00</timezone-offset>
</calendar> </calendar>
</event> </event>
<!-- The event contoller-lost triggers when we lost <!-- The event controller-lost triggers when we lost
connectivity with the controller. --> connectivity with the Controller. -->
<event> <event>
<name>controller-lost</name> <name>controller-lost</name>
<controller-lost/> <controller-lost/>
</event> </event>
<!-- The event contoller-connected triggers when we <!-- The event contoller-connected triggers when we
(re)established connectivity with the controller. --> established or re-established connectivity with
the Controller. -->
<event> <event>
<name>controller-connected</name> <name>controller-connected</name>
<controller-connected/> <controller-connected/>
</event> </event>
</events> </events>
</lmap> </lmap>
</config> </config>
Appendix C. Example Report Appendix C. Example Report
The report below is in XML [W3C.REC-xml-20081126].
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" <rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
message-id="1"> message-id="1">
<report xmlns="urn:ietf:params:xml:ns:yang:ietf-lmap-report"> <report xmlns="urn:ietf:params:xml:ns:yang:ietf-lmap-report">
<date>2015-10-28T13:27:42+02:00</date> <date>2015-10-28T13:27:42+02:00</date>
<agent-id>550e8400-e29b-41d4-a716-446655440000</agent-id> <agent-id>550e8400-e29b-41d4-a716-446655440000</agent-id>
<result> <result>
<schedule>S1</schedule> <schedule>S1</schedule>
<action>A1</action> <action>A1</action>
<task>update-ping-targets</task> <task>update-ping-targets</task>
<start>2016-03-21T10:48:55+01:00</start> <start>2016-03-21T10:48:55+01:00</start>
skipping to change at page 57, line 34 skipping to change at page 59, line 5
<row> <row>
<value>2</value> <value>2</value>
<value>?</value> <value>?</value>
<value></value> <value></value>
</row> </row>
</table> </table>
</result> </result>
</report> </report>
</rpc> </rpc>
Appendix D. Change History Acknowledgements
Note to the RFC Editor: this section should be removed on publication
as an RFC.
D.1. Non-editorial Changes since -07
o Require yang-version 1.1 since we need leaf-lists supporting non-
unique values in the report.
o Merged the /lmap-state tree into the /lmap tree.
o Marked state objects as mandatory.
o Added /lmap/agent/report-group-id.
D.2. Non-editorial Changes since -06
o Removed /lmap/agent/device-id and /lmap-state/agent/device-id,
added pointer to the ietf-hardware YANG model.
o Removed /lmap-state/agent/{hardware,firmware}, added pointer to
the ietf-system YANG model.
D.3. Non-editorial Changes since -05
o Update the example in an attempt to aligned it with the example in
the information model.
o Added an extension hook to reports so that task-specific
parameters can be echoed back to the collector. Updated the
example extension module accordingly.
o Added text and Figure 1 to describe the function and purpose of
the three YANG modules.
o Added a cycle-number type definition.
o Added the optional cycle-interval to event definitions.
o Added tags that report additional capabilities of the measurement
agent.
o Added event time and cycle-number to the result report.
o Renamed the metrics-grouping to registry-grouping.
o Removed JSON encoding of the examples (they will go into the
RESTCONF document).
D.4. Non-editorial Changes since -04
o Tagged /lmap/tasks/task/program with nacm:default-deny-write.
o Added /lmap-state/schedules/schedule/storage and /lmap-state/
schedules/schedule/action/storage.
o Removed suppress-by-default.
o Moved the metric list from /report/result into /report/result/
table.
o Conflicts are now reported as a triple (schedule, action, task).
o Replaced IPv4 address in the examples with IPv6 addresses.
o Added result/status.
D.5. Non-editorial Changes since -03
o Reworked the reporting data model to align it with the changes in
the information model.
D.6. Non-editorial Changes since -02
o Added a mechanism to enforce a runtime limit for schedules.
o Added security considerations text warning about possible shell
expansions of options.
o Restricted all user-defined names and tags to lmap:identifier.
Added security considerations text to make implementors aware of
possible security issues if identifiers are naively mapped to say
filesystem paths.
o Schedules and actions now have tags (echoed to the collector) and
suppression tags (used for suppression selection).
o Introduced glob-style pattern to match tags.
o Added an example module for IPPM udp latency metrics to
demonstrate the usage of the extension mechanism.
o Introduced parameters, an extension point for task/metric specific
parameters defined in augmenting YANG modules.
o Introduced the typedefs event-ref, task-ref, and schedule-ref.
o Changed schedule/event to schedule/start and added the optional
schedule/stop and schedule/duration leafs.
D.7. Non-editorial Changes since -01
o Updated and split examples (config vs state vs report).
o Refactored the definitions so that common definitions used by both
the control and report data models are in the new module ietf-
lmap-common.
o A report is submitted via an RPC operation instead of using a
notification.
o The default execution mode is pipelined.
o Clarified which action consumes data in sequential, pipelines, and
parallel execution mode.
o Added /lmap/agent/measurement-point, /lmap/agent/report-
measurement-point, and /report/measurement-point to configure and
report the measurement point.
o Turned /lmap/suppression into a list /lmap/suppressions/
suppression that uses a start and stop event to define the
beginning and end of a suppression period.
o Added controller-lost an controller-ok event choices to /lmap/
events/event.
o Added a metrics-grouping to identify entries in a metric registry
and associated roles.
o Added /lmap-state/schedules to report the status of schedules and
their actions. Refactored /lmap-state/tasks to only report the
task capabilities.
D.8. Non-editorial Changes since -00
o A task can now reference multiply registry entries.
o Schedules are triggered by Events instead of Timings; Timings are
just one of many possible event sources.
o Actions feed into other Schedules (instead of Actions within other Several people contributed to this specification by reviewing early
Schedules). draft versions and actively participating in the LMAP Working Group
(apologies to those unintentionally omitted): Marcelo Bagnulo, Martin
Bjorklund, Trevor Burbridge, Timothy Carey, Alissa Cooper, Philip
Eardley, Al Morton, Dan Romascanu, Andrea Soppera, Barbara Stark, and
Qin Wu.
o Removed the notion of multiple task outputs. Juergen Schoenwaelder and Vaibhav Bajpai worked in part on the Leone
research project, which received funding from the European Union
Seventh Framework Programme [FP7/2007-2013] under grant agreement
number 317647.
o Support for sequential, parallel, and pipelined execution of Juergen Schoenwaelder and Vaibhav Bajpai were partly funded by
Actions. Flamingo, a Network of Excellence project (ICT-318488) supported by
the European Commission under its Seventh Framework Programme.
Authors' Addresses Authors' Addresses
Juergen Schoenwaelder Juergen Schoenwaelder
Jacobs University Bremen Jacobs University Bremen
Email: j.schoenwaelder@jacobs-university.de Email: j.schoenwaelder@jacobs-university.de
Vaibhav Bajpai Vaibhav Bajpai
Jacobs University Bremen Technical University of Munich
Email: v.bajpai@jacobs-university.de Email: bajpaiv@in.tum.de
 End of changes. 271 change blocks. 
629 lines changed or deleted 496 lines changed or added

This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/