draft-ietf-lmap-yang-06.txt   draft-ietf-lmap-yang-07.txt 
Network Working Group J. Schoenwaelder Network Working Group J. Schoenwaelder
Internet-Draft V. Bajpai Internet-Draft V. Bajpai
Intended status: Standards Track Jacobs University Bremen Intended status: Standards Track Jacobs University Bremen
Expires: May 4, 2017 October 31, 2016 Expires: May 21, 2017 November 17, 2016
A YANG Data Model for LMAP Measurement Agents A YANG Data Model for LMAP Measurement Agents
draft-ietf-lmap-yang-06.txt draft-ietf-lmap-yang-07.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 (LMAP). 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 Internet-Draft is submitted in full conformance with the
skipping to change at page 1, line 32 skipping to change at page 1, line 32
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on May 4, 2017. This Internet-Draft will expire on May 21, 2017.
Copyright Notice Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the Copyright (c) 2016 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
skipping to change at page 2, line 12 skipping to change at page 2, line 12
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 . . . . . . . . . . . . . . . . . . . . . . 3
2. Data Model Overview . . . . . . . . . . . . . . . . . . . . . 3 2. Data Model Overview . . . . . . . . . . . . . . . . . . . . . 3
3. Relationship to the Information Model . . . . . . . . . . . . 8 3. Relationship to the Information Model . . . . . . . . . . . . 8
4. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 9 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 . . . . . . . . . . . . . . . . . 40 4.3. LMAP Report YANG Module . . . . . . . . . . . . . . . . . 39
5. Security Considerations . . . . . . . . . . . . . . . . . . . 45 5. Security Considerations . . . . . . . . . . . . . . . . . . . 44
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 48 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 47
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 48 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 48
8.1. Normative References . . . . . . . . . . . . . . . . . . 48 8.1. Normative References . . . . . . . . . . . . . . . . . . 48
8.2. Informative References . . . . . . . . . . . . . . . . . 49 8.2. Informative References . . . . . . . . . . . . . . . . . 48
Appendix A. Example IPPM Extension Module for UDP Latency Appendix A. Example IPPM Extension Module for UDP Latency
Metrics . . . . . . . . . . . . . . . . . . . . . . 50 Metrics . . . . . . . . . . . . . . . . . . . . . . 49
Appendix B. Example Configuration . . . . . . . . . . . . . . . 52 Appendix B. Example Configuration . . . . . . . . . . . . . . . 51
Appendix C. Example State . . . . . . . . . . . . . . . . . . . 55 Appendix C. Example State . . . . . . . . . . . . . . . . . . . 55
Appendix D. Example Report . . . . . . . . . . . . . . . . . . . 58 Appendix D. Example Report . . . . . . . . . . . . . . . . . . . 57
Appendix E. Open Issues . . . . . . . . . . . . . . . . . . . . 60 Appendix E. Change History . . . . . . . . . . . . . . . . . . . 59
E.1. Martin's Review Comments . . . . . . . . . . . . . . . . 60 E.1. Non-editorial Changes since -06 . . . . . . . . . . . . . 59
Appendix F. Change History . . . . . . . . . . . . . . . . . . . 60 E.2. Non-editorial Changes since -05 . . . . . . . . . . . . . 60
F.1. Non-editorial Changes since -05 . . . . . . . . . . . . . 60 E.3. Non-editorial Changes since -04 . . . . . . . . . . . . . 60
F.2. Non-editorial Changes since -04 . . . . . . . . . . . . . 61 E.4. Non-editorial Changes since -03 . . . . . . . . . . . . . 61
F.3. Non-editorial Changes since -03 . . . . . . . . . . . . . 61 E.5. Non-editorial Changes since -02 . . . . . . . . . . . . . 61
F.4. Non-editorial Changes since -02 . . . . . . . . . . . . . 62 E.6. Non-editorial Changes since -01 . . . . . . . . . . . . . 61
F.5. Non-editorial Changes since -01 . . . . . . . . . . . . . 62 E.7. Non-editorial Changes since -00 . . . . . . . . . . . . . 62
F.6. Non-editorial Changes since -00 . . . . . . . . . . . . . 63 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 62
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 63
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 (LMAP) [RFC7594]. The data model is defined using the YANG
[RFC6020] data modeling language. It aims to be consistent with the [RFC6020] data modeling language. It aims to be consistent with the
LMAP Information Model [I-D.ietf-lmap-information-model]. LMAP Information Model [I-D.ietf-lmap-information-model].
1.1. Terminology 1.1. Terminology
skipping to change at page 4, line 44 skipping to change at page 4, line 44
Figure 1: LMAP Controller, Measurement Agents, and Collector and the Figure 1: LMAP Controller, Measurement Agents, and Collector and the
YANG modules they implement as client or server YANG modules they implement as client or server
The tree diagram below shows the structure of the configuration data The tree diagram below shows the structure of the configuration data
model. model.
module: ietf-lmap-control module: ietf-lmap-control
+--rw lmap +--rw lmap
+--rw agent +--rw agent
| +--rw agent-id? yang:uuid | +--rw agent-id? yang:uuid
| +--rw device-id? inet:uri
| +--rw group-id? string | +--rw group-id? string
| +--rw measurement-point? string | +--rw measurement-point? string
| +--rw report-agent-id? boolean | +--rw report-agent-id? boolean
| +--rw report-measurement-point? boolean | +--rw report-measurement-point? boolean
| +--rw controller-timeout? uint32 | +--rw controller-timeout? uint32
+--rw tasks +--rw tasks
| +--rw task* [name] | +--rw task* [name]
| +--rw name lmap:identifier | +--rw name lmap:identifier
| +--rw metric* [uri] | +--rw metric* [uri]
| | +--rw uri inet:uri | | +--rw uri inet:uri
skipping to change at page 7, line 9 skipping to change at page 7, line 9
| +--rw controller-connected empty | +--rw controller-connected empty
+--rw random-spread? uint32 +--rw random-spread? uint32
+--rw cycle-interval? uint32 +--rw cycle-interval? uint32
The tree diagram below shows the structure of the state data model. The tree diagram below shows the structure of the state data model.
module: ietf-lmap-control module: ietf-lmap-control
+--ro lmap-state +--ro lmap-state
+--ro agent +--ro agent
| +--ro agent-id? yang:uuid | +--ro agent-id? yang:uuid
| +--ro device-id? inet:uri
| +--ro hardware string
| +--ro firmware string
| +--ro version string | +--ro version string
| +--ro tag* lmap:tag | +--ro tag* lmap:tag
| +--ro last-started yang:date-and-time | +--ro last-started yang:date-and-time
+--ro tasks +--ro tasks
| +--ro task* [name] | +--ro task* [name]
| +--ro name lmap:identifier | +--ro name lmap:identifier
| +--ro metric* [uri] | +--ro metric* [uri]
| | +--ro uri inet:uri | | +--ro uri inet:uri
| | +--ro role* string | | +--ro role* string
| +--ro version? string | +--ro version? string
skipping to change at page 8, line 51 skipping to change at page 8, line 48
+---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 [I-D.ietf-lmap-information-model] is
devided into six sections. They are mapped into the YANG data model devided into six sections. They are mapped into the YANG data model
as explained below: as explained below:
o Pre-Configuration Information: This is not modeled explicitly o Pre-Configuration Information: This is not modeled explicitly
since it is a subset of the configuration information. since bootstrapping information is outside the scope of this data
model. Implementations may use some of the Configuration
Information also 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.
skipping to change at page 9, line 26 skipping to change at page 9, line 26
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. For protocol used to manipulate the lmap specific configuration. For
the first version of the LMAP data models, it is assumed that the first version of the LMAP data models, it is assumed that
runtime logging information will be dealt with using protocols runtime logging information will be dealt with using protocols
that do not require a formal data model, e.g., the Syslog protocol that do not require a formal data model, e.g., the Syslog protocol
defined in [RFC5424]. defined in [RFC5424].
o Capability and Status Information: Some of the status information o Capability and Status Information: Some of the status information
is modeled in the /lmap-state/agent subtree and the /lmap-state/ is modeled in the /lmap-state/agent subtree and the /lmap-state/
schedules subtree. Information about network interfaces can be schedules subtree. Information about network interfaces can be
obtained from the interfaces YANG data model [RFC7223]. The list obtained from the ietf-interfaces YANG data model [RFC7223].
of supported tasks is modeled in the /lmap-state/tasks subtree. Information about the hardware and the firmware can be obtained
from the ietf-system YANG data model [RFC7317]. A device
identifier can be obtained from the ietf-hardware YANG data model
[I-D.ietf-netmod-entity]. The list of supported tasks is modeled
in the /lmap-state/tasks subtree.
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 via an RPC operation. to the Collector via an RPC operation.
These six sections are build on the following common information These six sections are build on the following common information
objects: objects:
o Schedules: This is modeled in the /lmap/schedules subtree. o Schedules: This is modeled in the /lmap/schedules subtree.
skipping to change at page 10, line 4 skipping to change at page 10, line 6
o Channels: Channels are not modeled since the NETCONF and RESTCONF o Channels: Channels are not modeled since the NETCONF and RESTCONF
server configuration data model [I-D.ietf-netconf-server-model] server configuration data model [I-D.ietf-netconf-server-model]
already provides a mechanism to configure NETCONF and RESTCONF already provides a mechanism to configure NETCONF and RESTCONF
server channels. server channels.
o Task Configurations: This is modeled in the /lmap/tasks subtree. o Task Configurations: This is modeled in the /lmap/tasks subtree.
o Event Information: This is modeled in the /lmap/events subtree. o Event Information: This is modeled in the /lmap/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]. This module imports definitions from [RFC6536].
<CODE BEGINS> file "ietf-lmap-common@2016-10-10.yang" <CODE BEGINS> file "ietf-lmap-common@2016-11-17.yang"
module ietf-lmap-common { module 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";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
organization organization
skipping to change at page 10, line 37 skipping to change at page 10, line 40
Editor: Vaibhav Bajpai Editor: Vaibhav Bajpai
<v.bajpai@jacobs-university.de>"; <v.bajpai@jacobs-university.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 (LMAP).
This module defines typedefs and groupings but no schema This module defines typedefs and groupings but no schema
tree elements."; tree elements.";
revision "2016-10-10" { revision "2016-11-17" {
description description
"Initial version"; "Initial version";
reference reference
"RFC XXX: A YANG Data Model for LMAP Measurement Agents"; "RFC XXX: A YANG Data Model for LMAP Measurement Agents";
} }
/* /*
* Typedefs * Typedefs
*/ */
skipping to change at page 17, line 50 skipping to change at page 18, line 4
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.";
} }
} }
} }
} }
<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@2016-10-10.yang" <CODE BEGINS> file "ietf-lmap-control@2016-11-17.yang"
module ietf-lmap-control { module ietf-lmap-control {
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-inet-types { import ietf-netconf-acm {
prefix inet; prefix nacm;
} }
import ietf-netconf-acm { import ietf-lmap-common {
prefix nacm; prefix lmap;
} }
import ietf-lmap-common {
prefix lmap;
}
organization organization
"IETF Large-Scale Measurement Platforms Working Group"; "IETF Large-Scale Measurement Platforms Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/lmap/> "WG Web: <http://tools.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>"; <v.bajpai@jacobs-university.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 a
measurement agent."; measurement agent.";
revision "2016-10-10" { revision "2016-11-17" {
description description
"Initial version"; "Initial version";
reference reference
"RFC XXX: A YANG Data Model for LMAP Measurement Agents"; "RFC XXX: 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";
} }
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 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 timing-start-end-grouping { grouping timing-start-end-grouping {
description description
"A grouping that provides start and end times for "A grouping that provides start and end times for
timing objects."; timing objects.";
leaf start { leaf start {
type yang:date-and-time; type yang:date-and-time;
description description
"The date and time when the timing object "The date and time when the timing 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 timing object "The date and time when the timing 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 configuration an end time and to refresh the configuration
of timing object as needed to ensure that agents of timing object as needed to ensure that agents
that loose connectivity to their controller that loose connectivity to their controller
do not continue their tasks forever."; do not continue their tasks forever.";
} }
} }
/* /*
* Configuration data nodes * Configuration data nodes
*/ */
container lmap { container lmap {
description description
"Configuration of the LMAP agent."; "Configuration of the LMAP agent.";
/* /*
* 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 device-id { leaf group-id {
type inet:uri; type string;
description description
"The device-id identifies the device running the "The group-id identifies a group of measurement
measurement agent. In certain deployments, the agents. In certain deployments, the group-id
device-id may be considered sensitive and hence may be considered less sensitive than the
this object is optional."; agent-id.";
} }
leaf group-id { leaf measurement-point {
type string; type string;
description description
"The group-id identifies a group of measurement "The measurement point indicating where the
agents. In certain deployments, the group-id measurement agent is located on a path.";
may be considered less sensitive than the reference
agent-id."; "RFC 7398: A Reference Path and Measurement Points
} for Large-Scale Measurement of Broadband
Performance";
}
leaf measurement-point { leaf report-agent-id {
type string; type boolean;
description must '. != "true" or ../agent-id' {
"The measurement point indicating where the description
measurement agent is located on a path."; "An agent-id must exist for this to be set
reference to true.";
"RFC 7398: A Reference Path and Measurement Points }
for Large-Scale Measurement of Broadband default false;
Performance"; description
} "The 'report-agent-id' controls whether the
'agent-id' is reported to collectors if the
'group-id' is configured. If the 'group-id'
is not configured, the agent-id is always
reported.";
}
leaf report-agent-id { leaf report-measurement-point {
type boolean; type boolean;
must '. != "true" or ../agent-id' { must '. != "true" or ../measurement-point' {
description description
"An agent-id must exist for this to be set "A measurement-point must exist for this to be
to true."; set to true.";
} }
default false; default false;
description description
"The 'report-agent-id' controls whether the "The 'report-measurement-point' controls whether
'agent-id' is reported to collectors if the the 'measurement-point' is reported to collectors
'group-id' is configured. If the 'group-id' if the 'measurement-point' is configured.";
is not configured, the agent-id is always }
reported.";
}
leaf report-measurement-point { leaf controller-timeout {
type boolean; type uint32;
must '. != "true" or ../measurement-point' { units "seconds";
description description
"A measurement-point must exist for this to be "A timer is started after each successful contact
set to true."; with a controller. When the timer reaches the
} controller-timeout, an event (controller-lost) is
default false; raised indicating that connectivity to the controller
description has been lost.";
"The 'report-measurement-point' controls whether }
the 'measurement-point' is reported to collectors }
if the 'measurement-point' is configured.";
}
leaf controller-timeout { /*
type uint32; * Task Configuration
units "seconds"; */
description
"A timer is started after each successful contact
with a controller. When the timer reaches the
controller-timeout, an event (controller-lost) is
raised indicating that connectivity to the controller
has been lost.";
}
}
/* container tasks {
* Task Configuration description
*/ "Configuration of LMAP tasks.";
container tasks { list task {
description key name;
"Configuration of LMAP tasks."; description
"The list of tasks configured on the LMAP agent.";
list task { leaf name {
key name; type lmap:identifier;
description description
"The list of tasks configured on the LMAP agent."; "The unique name of a task.";
}
leaf name { uses lmap:registry-grouping;
type lmap:identifier;
description
"The unique name of a task.";
}
uses lmap:registry-grouping; leaf program {
type string;
nacm:default-deny-write;
description
"The (local) program to invoke in order to execute
the task. If this leaf is not set, then the system
will try to identify a suitable program based on
the registry information present.";
}
leaf program { uses lmap:task-options-grouping {
type string; description
nacm:default-deny-write; "The list of task specific options.";
description }
"The (local) program to invoke in order to execute
the task. If this leaf is not set, then the system
will try to identify a suitable program based on
the registry information present.";
}
uses lmap:task-options-grouping {
description
"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 still outstanding messages).";
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 determins in "The execution mode of this schedule determins 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 {
type lmap:tag;
description
"A set of suppression tags that are used to select
schedules to be suppressed.";
}
leaf-list suppression-tag { list action {
type lmap:tag; key name;
description description
"A set of suppression tags that are used to select "An action describes a task that is invoked by the
schedules to be suppressed."; schedule. Multiple actions are invoked sequentially.";
}
list action { leaf name {
key name; type lmap:identifier;
description description
"An action describes a task that is invoked by the "The unique identifier for this action.";
schedule. Multiple actions are invoked sequentially."; }
leaf name { leaf task {
type lmap:identifier; type task-ref;
description mandatory true;
"The unique identifier for this action."; description
} "The task invoked by this action.";
}
leaf task { container parameters {
type task-ref; description
mandatory true; "This container is a place-holder for run-time
description parameters defined in task-specific data models
"The task invoked by this action."; augmenting the base lmap control data model.";
}
container parameters { choice extension {
description description
"This container is a place-holder for run-time "This choice is provided to augment in different
parameters defined in task-specific data models sets of parameters.";
augmenting the base lmap control data model."; }
}
choice extension { uses lmap:task-options-grouping {
description description
"This choice is provided to augment in different "The list of action specific options that are
sets of parameters."; appended to the list of task specific options.";
} }
}
uses lmap:task-options-grouping {
description
"The list of action specific options that are
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. A queue is internally used to pass by this action. A queue is internally used to pass
results to another schedule. The behaviour of results to another schedule. The behaviour of
an action passing data to its own schedule is an action passing data to its own schedule is
implementation specific. 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 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
actions to be suppressed."; actions to be suppressed.";
} }
} }
} }
} }
/* /*
* 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, supression
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 pattern. 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.";
} }
} }
} }
/*
* Event Instructions
*/
container events { /*
description * Event Instructions
"Configuration of LMAP events. */
Implementations may be forced to delay acting container events {
upon the occurance of events in the face of local description
constraints. An action triggered by an event "Configuration of LMAP events.
therefore should not rely on the accuracy
provided by the scheduler implementation.";
list event { Implementations may be forced to delay acting
key name; upon the occurance of events in the face of local
description constraints. An action triggered by an event
"The list of event sources configured on the therefore should not rely on the accuracy
LMAP agent."; provided by the scheduler implementation.";
leaf name { list event {
type lmap:identifier; key name;
description description
"The unique name of an event source."; "The list of event sources configured on the
} LMAP agent.";
choice event-type { leaf name {
description type lmap:identifier;
"Different types of events are handled by description
different branches of this choice. Note that "The unique name of an event source.";
this choice can be extended via augmentations."; }
case periodic { choice event-type {
container periodic { description
description "Different types of events are handled by
"A periodic timing object triggers periodically different branches of this choice. Note that
according to a regular interval."; this choice can be extended via augmentations.";
leaf interval { case periodic {
type uint32 { container periodic {
range "1..max"; description
} "A periodic timing object triggers periodically
units "seconds"; according to a regular interval.";
mandatory true;
description
"The number of seconds between two triggers
generated by this periodic timing object.";
}
uses timing-start-end-grouping;
}
}
case calendar { leaf interval {
container calendar { type uint32 {
description range "1..max";
"A calendar timing object triggers based on the }
current calendar date and time."; units "seconds";
mandatory true;
description
"The number of seconds between two triggers
generated by this periodic timing object.";
}
uses timing-start-end-grouping;
}
}
leaf-list month { case calendar {
type lmap:month-or-all; container calendar {
min-elements 1; description
description "A calendar timing object triggers based on the
"A set of month at which this calendar timing current calendar date and time.";
will trigger. The wildcard means all months.";
}
leaf-list day-of-month { leaf-list month {
type lmap:day-of-months-or-all; type lmap:month-or-all;
min-elements 1; min-elements 1;
description description
"A set of days of the month at which this "A set of month at which this calendar timing
calendar timing will trigger. The wildcard means will trigger. The wildcard means all months.";
all days of a month."; }
}
leaf-list day-of-week { leaf-list day-of-month {
type lmap:weekday-or-all; type lmap:day-of-months-or-all;
min-elements 1; min-elements 1;
description description
"A set of weekdays at which this calendar timing "A set of days of the month at which this
will trigger. The wildcard means all weekdays."; calendar timing will trigger. The wildcard means
} all days of a month.";
}
leaf-list hour { leaf-list day-of-week {
type lmap:hour-or-all; type lmap:weekday-or-all;
min-elements 1; min-elements 1;
description description
"A set of hours at which this calendar timing will "A set of weekdays at which this calendar timing
trigger. The wildcard means all hours of a day."; will trigger. The wildcard means all weekdays.";
} }
leaf-list minute { leaf-list hour {
type lmap:minute-or-all; type lmap:hour-or-all;
min-elements 1; min-elements 1;
description description
"A set of minutes at which this calendar timing "A set of hours at which this calendar timing will
will trigger. The wildcard means all minutes of trigger. The wildcard means all hours of a day.";
an hour."; }
}
leaf-list second { leaf-list minute {
type lmap:second-or-all; type lmap:minute-or-all;
min-elements 1; min-elements 1;
description description
"A set of second at which this calendar timing "A set of minutes at which this calendar timing
will trigger. The wildcard means all seconds of will trigger. The wildcard means all minutes of
a minute."; an hour.";
} }
leaf timezone-offset { leaf-list second {
type lmap:timezone-offset; type lmap:second-or-all;
description min-elements 1;
"The timezone in which this calendar timing description
object will be evaluated. If not present, "A set of second at which this calendar timing
the systems' local timezone will be used."; will trigger. The wildcard means all seconds of
} a minute.";
uses timing-start-end-grouping; }
}
}
case one-off { leaf timezone-offset {
container one-off { type lmap:timezone-offset;
description description
"A one-off timing object triggers exactly once."; "The timezone in which this calendar timing
object will be evaluated. If not present,
the systems' local timezone will be used.";
}
uses timing-start-end-grouping;
}
}
leaf time { case one-off {
type yang:date-and-time; container one-off {
mandatory true; description
description "A one-off timing object triggers exactly once.";
"This one-off timing object triggers once at
the configured date and time.";
}
}
}
case immediate { leaf time {
leaf immediate { type yang:date-and-time;
type empty; mandatory true;
mandatory true; description
description "This one-off timing object triggers once at
"This immediate event object triggers immediately the configured date and time.";
when it is configured."; }
} }
} }
case startup {
leaf startup {
type empty;
mandatory true;
description
"This startup event object triggers whenever the
LMAP agent (re)starts.";
}
}
case controller-lost { case immediate {
leaf controller-lost { leaf immediate {
type empty; type empty;
mandatory true; mandatory true;
description description
"The controller-lost event object triggers when "This immediate event object triggers immediately
the connectivity to the controller has been lost when it is configured.";
for at least 'controller-timeout' seconds."; }
} }
}
case controller-connected { case startup {
leaf controller-connected { leaf startup {
type empty; type empty;
mandatory true; mandatory true;
description description
"The controller-connected event object triggers "This startup event object triggers whenever the
when the connectivity to the controller has been LMAP agent (re)starts.";
restored after it was lost for at least
'controller-timeout' seconds.";
}
}
}
leaf random-spread { }
type uint32; }
units seconds;
description
"This optional leaf adds a random spread to the
computation of the event's trigger time. The
random spread is a uniformly distributed random
number taken from the interval [0:random-spread].";
}
leaf cycle-interval { case controller-lost {
type uint32; leaf controller-lost {
units seconds; type empty;
description mandatory true;
"The optional cycle-interval defines the duration description
of the time interval in seconds that is used to "The controller-lost event object triggers when
calculate cycle numbers. No cycle number is the connectivity to the controller has been lost
calculated if the optional cycle-interval does for at least 'controller-timeout' seconds.";
not exist."; }
} }
}
}
}
/* case controller-connected {
* The state subtree provides information about the capabilities leaf controller-connected {
* and the current status of the MA. type empty;
*/ mandatory true;
description
"The controller-connected event object triggers
when the connectivity to the controller has been
restored after it was lost for at least
'controller-timeout' seconds.";
}
}
}
container lmap-state { leaf random-spread {
config false; type uint32;
description units seconds;
"A tree exporting state information about the LMAP agent."; description
"This optional leaf adds a random spread to the
computation of the event's trigger time. The
random spread is a uniformly distributed random
number taken from the interval [0:random-spread].";
}
container agent { leaf cycle-interval {
description type uint32;
"Operations state of the measurement agent."; units seconds;
description
"The optional cycle-interval defines the duration
of the time interval in seconds that is used to
calculate cycle numbers. No cycle number is
calculated if the optional cycle-interval does
not exist.";
}
}
leaf agent-id { }
type yang:uuid; }
description
"The agent-id identifies a measurement agent with
a very low probability of collision. In certain
deployments, the agent-id may be considered
sensitive and hence this object is optional.";
}
leaf device-id { /*
type inet:uri; * The state subtree provides information about the capabilities
description * and the current status of the MA.
"The device-id identifies the device running the */
measurement agent. In certain deployments, the
device-id may be considered sensitive and hence
this object is optional.";
}
leaf hardware {
type string;
mandatory true;
description
"A short description of the hardware the measurement
agent is running on. This should include the version
number of the hardware";
} container lmap-state {
leaf firmware { config false;
type string; description
mandatory true; "A tree exporting state information about the LMAP agent.";
description
"A short description of the firmware the measurement
agent is running on. This should include the version
number of the firmware.";
}
leaf version {
type string;
mandatory true;
description
"A short description of the software implementing the
measurement agent. This should include the version
number of the measurement agent software.";
}
leaf-list tag {
type lmap:tag;
description
"An optional unordered set of tags that provide
additional information about the capabilities of
the measurement agent.";
}
leaf last-started {
type yang:date-and-time;
mandatory true;
description
"The date and time the measurement agent last started.";
}
}
container tasks { container agent {
description description
"Available LMAP tasks, including information about their "Operations state of the measurement agent.";
last execution and their last failed execution.";
list task { leaf agent-id {
key name; type yang:uuid;
description description
"The list of tasks available on the LMAP agent."; "The agent-id identifies a measurement agent with
a very low probability of collision. In certain
deployments, the agent-id may be considered
sensitive and hence this object is optional.";
}
leaf name { leaf version {
type lmap:identifier; type string;
description mandatory true;
"The unique name of a task."; description
} "A short description of the software implementing the
uses lmap:registry-grouping; measurement agent. This should include the version
number of the measurement agent software.";
}
leaf version { leaf-list tag {
type string; type lmap:tag;
description description
"A short description of the software implementing "An optional unordered set of tags that provide
the task. This should include the version additional information about the capabilities of
number of the measurement task software."; the measurement agent.";
} }
leaf program { leaf last-started {
type string; type yang:date-and-time;
description mandatory true;
"The (local) program to invoke in order to execute description
the task."; "The date and time the measurement agent last started.";
}
}
}
container schedules { }
description }
"State of LMAP schedules.";
list schedule { container tasks {
key name; description
description "Available LMAP tasks, including information about their
"State of a particular schedule."; last execution and their last failed execution.";
leaf name { list task {
type lmap:identifier; key name;
description description
"The locally-unique, administratively assigned name "The list of tasks available on the LMAP agent.";
for this schedule.";
}
leaf state { leaf name {
type enumeration { type lmap:identifier;
enum enabled { description
value 1; "The unique name of a task.";
description }
"The value 'enabled' indicates that the
schedule is currently enabled.";
}
enum disabled {
value 2;
description
"The value 'disabled' indicates that the
schedule is currently disabled.";
} uses lmap:registry-grouping;
enum running {
value 3;
description
"The value 'running' indicates that the
schedule is currently running.";
}
enum suppressed {
value 4;
description
"The value 'suppressed' indicates that the
schedule is currently suppressed.";
}
}
description
"The current state of the schedule.";
}
leaf storage { leaf version {
type yang:gauge64; type string;
units "bytes"; description
description "A short description of the software implementing
"The amount of secondary storage (e.g., allocated in a the task. This should include the version
file system) holding temporary data allocated to the number of the measurement task software.";
schedule in bytes. This object reports the amount of }
allocated physical storage and not the storage used
by logical data records.";
}
leaf invocations { leaf program {
type yang:counter32; type string;
description description
"Number of invocations of this schedule. This counter "The (local) program to invoke in order to execute
does not include suppressed invocations or invocations the task.";
that were prevented due to an overlap with a previous }
invocation of this schedule."; }
} }
leaf suppressions { container schedules {
type yang:counter32; description
description "State of LMAP schedules.";
"Number of suppressed executions of this schedule.";
}
leaf overlaps { list schedule {
type yang:counter32; key name;
description description
"Number of executions prevented due to overlaps with "State of a particular schedule.";
a previous invocation of this schedule.";
}
leaf failures { leaf name {
type yang:counter32; type lmap:identifier;
description description
"Number of failed executions of this schedule. A "The locally-unique, administratively assigned name
failed execution is an execution where at least for this schedule.";
one action failed."; }
}
leaf last-invocation { leaf state {
type yang:date-and-time; type enumeration {
description enum enabled {
"The date and time of the last invocation of value 1;
this schedule."; description
} "The value 'enabled' indicates that the
schedule is currently enabled.";
}
enum disabled {
value 2;
description
"The value 'disabled' indicates that the
schedule is currently disabled.";
}
enum running {
value 3;
description
"The value 'running' indicates that the
schedule is currently running.";
}
enum suppressed {
value 4;
description
"The value 'suppressed' indicates that the
schedule is currently suppressed.";
}
}
description
"The current state of the schedule.";
}
list action { leaf storage {
key name; type yang:gauge64;
description units "bytes";
"The state of the actions associated with this description
schedule entry."; "The amount of secondary storage (e.g., allocated in a
file system) holding temporary data allocated to the
schedule in bytes. This object reports the amount of
allocated physical storage and not the storage used
by logical data records.";
}
leaf invocations {
type yang:counter32;
description
"Number of invocations of this schedule. This counter
does not include suppressed invocations or invocations
that were prevented due to an overlap with a previous
invocation of this schedule.";
}
leaf name { leaf suppressions {
type lmap:identifier; type yang:counter32;
description description
"The unique identifier for this action."; "Number of suppressed executions of this schedule.";
} }
leaf state { leaf overlaps {
type enumeration { type yang:counter32;
enum enabled { description
value 1; "Number of executions prevented due to overlaps with
description a previous invocation of this schedule.";
"The value 'enabled' indicates that the }
action is currently enabled.";
}
enum disabled {
value 2;
description
"The value 'disabled' indicates that the
action is currently disabled.";
}
enum running {
value 3;
description
"The value 'running' indicates that the
action is currently runnning.";
}
enum suppressed {
value 4;
description
"The value 'suppressed' indicates that the
action is currently suppressed.";
}
}
description
"The current state of the action.";
}
leaf storage { leaf failures {
type yang:gauge64; type yang:counter32;
units "bytes"; description
description "Number of failed executions of this schedule. A
"The amount of secondary storage (e.g., allocated in a failed execution is an execution where at least
file system) holding temporary data allocated to the one action failed.";
schedule in bytes. This object reports the amount of }
allocated physical storage and not the storage used
by logical data records.";
}
leaf invocations { leaf last-invocation {
type yang:counter32; type yang:date-and-time;
description description
"Number of invocations of this action. This counter "The date and time of the last invocation of
does not include suppressed invocations or invocations this schedule.";
that were prevented due to an overlap with a previous }
invocation of this action.";
}
leaf suppressions { list action {
type yang:counter32; key name;
description description
"Number of suppressed executions of this action."; "The state of the actions associated with this
} schedule entry.";
leaf overlaps { leaf name {
type yang:counter32; type lmap:identifier;
description description
"Number of executions prevented due to overlaps with "The unique identifier for this action.";
a previous invocation of this action."; }
} leaf state {
type enumeration {
enum enabled {
value 1;
description
"The value 'enabled' indicates that the
action is currently enabled.";
}
enum disabled {
value 2;
description
"The value 'disabled' indicates that the
action is currently disabled.";
}
enum running {
value 3;
description
"The value 'running' indicates that the
action is currently runnning.";
}
enum suppressed {
value 4;
description
"The value 'suppressed' indicates that the
action is currently suppressed.";
}
}
description
"The current state of the action.";
}
leaf failures { leaf storage {
type yang:counter32; type yang:gauge64;
description units "bytes";
"Number of failed executions of this action."; description
} "The amount of secondary storage (e.g., allocated in a
file system) holding temporary data allocated to the
schedule in bytes. This object reports the amount of
allocated physical storage and not the storage used
by logical data records.";
}
leaf last-invocation { leaf invocations {
type yang:date-and-time; type yang:counter32;
description description
"The date and time of the last invocation of "Number of invocations of this action. This counter
this action."; does not include suppressed invocations or invocations
} that were prevented due to an overlap with a previous
invocation of this action.";
}
leaf last-completion { leaf suppressions {
type yang:date-and-time; type yang:counter32;
description description
"The date and time of the last completion of "Number of suppressed executions of this action.";
this action."; }
}
leaf last-status { leaf overlaps {
type lmap:status-code; type yang:counter32;
description description
"The status code returned by the last execution of "Number of executions prevented due to overlaps with
this action."; a previous invocation of this action.";
} }
leaf last-message { leaf failures {
type string; type yang:counter32;
description description
"The status message produced by the last execution "Number of failed executions of this action.";
of this action."; }
}
leaf last-failed-completion { leaf last-invocation {
type yang:date-and-time; type yang:date-and-time;
description description
"The date and time of the last failed completion "The date and time of the last invocation of
of this action."; this action.";
} }
leaf last-failed-status { leaf last-completion {
type lmap:status-code; type yang:date-and-time;
description description
"The status code returned by the last failed "The date and time of the last completion of
execution of this action."; this action.";
} }
leaf last-failed-message { leaf last-status {
type string; type lmap:status-code;
description description
"The status message produced by the last failed "The status code returned by the last execution of
execution of this action."; this action.";
} }
}
}
}
container suppressions { leaf last-message {
description type string;
"State of LMAP suppressions."; description
"The status message produced by the last execution
of this action.";
list suppression { }
key name;
description
"State of a particular suppression.";
leaf name { leaf last-failed-completion {
type lmap:identifier; type yang:date-and-time;
description description
"The locally-unique, administratively assigned name "The date and time of the last failed completion
for this suppression."; of this action.";
} }
leaf state { leaf last-failed-status {
type enumeration { type lmap:status-code;
enum enabled { description
value 1; "The status code returned by the last failed
description execution of this action.";
"The value 'enabled' indicates that the }
suppression is currently enabled.";
}
enum disabled {
value 2;
description
"The value 'disabled' indicates that the
suppression is currently disabled.";
}
enum active {
value 3;
description
"The value 'active' indicates that the
suppression is currently active.";
}
}
description
"The current state of the suppression.";
}
} leaf last-failed-message {
} type string;
} description
} "The status message produced by the last failed
<CODE ENDS> execution of this action.";
}
}
}
}
container suppressions {
description
"State of LMAP suppressions.";
list suppression {
key name;
description
"State of a particular suppression.";
leaf name {
type lmap:identifier;
description
"The locally-unique, administratively assigned name
for this suppression.";
}
leaf state {
type enumeration {
enum enabled {
value 1;
description
"The value 'enabled' indicates that the
suppression is currently enabled.";
}
enum disabled {
value 2;
description
"The value 'disabled' indicates that the
suppression is currently disabled.";
}
enum active {
value 3;
description
"The value 'active' indicates that the
suppression is currently active.";
}
}
description
"The current state of the suppression.";
}
}
}
}
}
<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@2016-10-10.yang" <CODE BEGINS> file "ietf-lmap-report@2016-11-17.yang"
module ietf-lmap-report { module ietf-lmap-report {
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;
skipping to change at page 40, line 48 skipping to change at page 40, line 18
Editor: Vaibhav Bajpai Editor: Vaibhav Bajpai
<v.bajpai@jacobs-university.de>"; <v.bajpai@jacobs-university.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 "2016-10-10" { revision "2016-11-17" {
description description
"Initial version"; "Initial version";
reference reference
"RFC XXX: A YANG Data Model for LMAP Measurement Agents"; "RFC XXX: 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 an LMAP measurement agent to
submit measurement results produced by measurement tasks to submit measurement results produced by measurement tasks to
skipping to change at page 48, line 24 skipping to change at page 47, line 39
name: ietf-lmap-report name: ietf-lmap-report
namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-report namespace: urn:ietf:params:xml:ns:yang:ietf-lmap-report
prefix: lmapr prefix: lmapr
reference: RFC XXXX reference: RFC XXXX
7. Acknowledgements 7. Acknowledgements
Several people contributed to this specification by reviewing early Several people contributed to this specification by reviewing early
versions and actively participating in the LMAP working group versions and actively participating in the LMAP working group
(apologies to those unintentionally omitted): Timothy Carey, Al (apologies to those unintentionally omitted): Marcelo Bagnulo, Martin
Morton, Dan Romascanu, Andrea Soppera, and Barbara Stark. (XXX: Bjorklund, Trevor Burbridge, Timothy Carey, Philip Eardley, Al
complete this list) Morton, Dan Romascanu, Andrea Soppera, and Barbara Stark.
Juergen Schoenwaelder and Vaibhav Bajpai worked in part on the Leone Juergen Schoenwaelder and Vaibhav Bajpai worked in part on the Leone
research project, which received funding from the European Union research project, which received funding from the European Union
Seventh Framework Programme [FP7/2007-2013] under grant agreement Seventh Framework Programme [FP7/2007-2013] under grant agreement
number 317647. number 317647.
Juergen Schoenwaelder and Vaibhav Bajpai were partly funded by Juergen Schoenwaelder and Vaibhav Bajpai were partly funded by
Flamingo, a Network of Excellence project (ICT-318488) supported by Flamingo, a Network of Excellence project (ICT-318488) supported by
the European Commission under its Seventh Framework Programme. the European Commission under its Seventh Framework Programme.
skipping to change at page 49, line 22 skipping to change at page 48, line 36
Burbridge, T., Eardley, P., Bagnulo, M., and J. Burbridge, T., Eardley, P., Bagnulo, M., and J.
Schoenwaelder, "Information Model for Large-Scale Schoenwaelder, "Information Model for Large-Scale
Measurement Platforms (LMAP)", draft-ietf-lmap- Measurement Platforms (LMAP)", draft-ietf-lmap-
information-model-11 (work in progress), August 2016. information-model-11 (work in progress), August 2016.
[I-D.ietf-netconf-server-model] [I-D.ietf-netconf-server-model]
Watsen, K. and J. Schoenwaelder, "NETCONF Server and Watsen, K. and J. Schoenwaelder, "NETCONF Server and
RESTCONF Server Configuration Models", draft-ietf-netconf- RESTCONF Server Configuration Models", draft-ietf-netconf-
server-model-09 (work in progress), March 2016. server-model-09 (work in progress), March 2016.
[I-D.ietf-netmod-entity]
Bierman, A., Bjorklund, M., Dong, J., and D. Romascanu, "A
YANG Data Model for Hardware Management", draft-ietf-
netmod-entity-01 (work in progress), October 2016.
[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>. <http://www.rfc-editor.org/info/rfc3688>.
[RFC5424] Gerhards, R., "The Syslog Protocol", RFC 5424, DOI 10 [RFC5424] Gerhards, R., "The Syslog Protocol", RFC 5424, DOI 10
.17487/RFC5424, March 2009, .17487/RFC5424, March 2009,
<http://www.rfc-editor.org/info/rfc5424>. <http://www.rfc-editor.org/info/rfc5424>.
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
and A. Bierman, Ed., "Network Configuration Protocol and A. Bierman, Ed., "Network Configuration Protocol
skipping to change at page 49, line 48 skipping to change at page 49, line 18
[RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration [RFC6536] Bierman, A. and M. Bjorklund, "Network Configuration
Protocol (NETCONF) Access Control Model", RFC 6536, DOI 10 Protocol (NETCONF) Access Control Model", RFC 6536, DOI 10
.17487/RFC6536, March 2012, .17487/RFC6536, March 2012,
<http://www.rfc-editor.org/info/rfc6536>. <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>. <http://www.rfc-editor.org/info/rfc7223>.
[RFC7317] Bierman, A. and M. Bjorklund, "A YANG Data Model for
System Management", RFC 7317, DOI 10.17487/RFC7317, August
2014, <http://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", RFC
7398, DOI 10.17487/RFC7398, February 2015, 7398, DOI 10.17487/RFC7398, February 2015,
<http://www.rfc-editor.org/info/rfc7398>. <http://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,
skipping to change at page 52, line 19 skipping to change at page 51, line 42
} }
Appendix B. Example Configuration Appendix B. Example Configuration
<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>
<device-id>urn:dev:mac:0024befffe804ff1</device-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>
skipping to change at page 55, line 30 skipping to change at page 55, line 7
<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 State Appendix C. Example State
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<lmap-state xmlns="urn:ietf:params:xml:ns:yang:ietf-lmap-control"> <lmap-state 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>
<device-id>urn:dev:mac:0024befffe804ff1</device-id> <version>lmapd version 0.3</version>
<hardware>Linux x86_64</hardware> <last-started>2016-10-31T21:26:06+01:00</last-started>
<firmware>#1 SMP Debian 3.16.7-ckt9-3~deb8u1 (2015-04-24)</firmware> </agent>
<version>lmapd version 0.3</version>
<last-started>2016-10-31T21:26:06+01:00</last-started>
</agent>
<tasks> <tasks>
<task> <task>
<name>fping-update-targets</name> <name>fping-update-targets</name>
<program>/usr/bin/fping-update-targets</program> <program>/usr/bin/fping-update-targets</program>
</task> </task>
<task> <task>
<name>fping</name> <name>fping</name>
<program>/usr/bin/fping</program> <program>/usr/bin/fping</program>
</task> </task>
<task> <task>
<name>mtr</name> <name>mtr</name>
<program>/usr/bin/mtr</program> <program>/usr/bin/mtr</program>
</task> </task>
<task> <task>
<name>report</name> <name>report</name>
<program>/usr/bin/lmap-report</program> <program>/usr/bin/lmap-report</program>
</task> </task>
<task> <task>
<name>ippm-udp-latency-client</name> <name>ippm-udp-latency-client</name>
<program>/usr/bin/ippm-udp-latency</program> <program>/usr/bin/ippm-udp-latency</program>
<metric> <metric>
<uri>urn:example:tbd</uri> <uri>urn:example:tbd</uri>
<role>client</role> <role>client</role>
</metric> </metric>
</task> </task>
</tasks> </tasks>
<schedules> <schedules>
<schedule> <schedule>
<name>S1</name> <name>S1</name>
<state>enabled</state> <state>enabled</state>
<storage>0</storage> <storage>0</storage>
<invocations>0</invocations> <invocations>0</invocations>
<suppressions>0</suppressions> <suppressions>0</suppressions>
<overlaps>0</overlaps> <overlaps>0</overlaps>
<failures>0</failures> <failures>0</failures>
<action> <action>
<name>A1</name> <name>A1</name>
<state>enabled</state> <state>enabled</state>
<storage>0</storage> <storage>0</storage>
<invocations>0</invocations> <invocations>0</invocations>
<suppressions>0</suppressions> <suppressions>0</suppressions>
<overlaps>0</overlaps> <overlaps>0</overlaps>
<failures>0</failures> <failures>0</failures>
</action> </action>
<action> <action>
<name>A2</name> <name>A2</name>
<state>enabled</state> <state>enabled</state>
<storage>0</storage> <storage>0</storage>
<invocations>0</invocations> <invocations>0</invocations>
<suppressions>0</suppressions> <suppressions>0</suppressions>
<overlaps>0</overlaps> <overlaps>0</overlaps>
<failures>0</failures> <failures>0</failures>
</action> </action>
</schedule> </schedule>
<schedule> <schedule>
<name>S2</name> <name>S2</name>
<state>enabled</state> <state>enabled</state>
<storage>0</storage> <storage>0</storage>
<invocations>0</invocations> <invocations>0</invocations>
<suppressions>0</suppressions> <suppressions>0</suppressions>
<overlaps>0</overlaps> <overlaps>0</overlaps>
<failures>0</failures> <failures>0</failures>
<action> <action>
<name>A1</name> <name>A1</name>
<state>enabled</state> <state>enabled</state>
<storage>0</storage> <storage>0</storage>
<invocations>0</invocations> <invocations>0</invocations>
<suppressions>0</suppressions> <suppressions>0</suppressions>
<overlaps>0</overlaps> <overlaps>0</overlaps>
<failures>0</failures> <failures>0</failures>
</action> </action>
<action> <action>
<name>A2</name> <name>A2</name>
<state>enabled</state> <state>enabled</state>
<storage>0</storage> <storage>0</storage>
<invocations>0</invocations> <invocations>0</invocations>
<suppressions>0</suppressions> <suppressions>0</suppressions>
<overlaps>0</overlaps> <overlaps>0</overlaps>
<failures>0</failures> <failures>0</failures>
</action> </action>
</schedule> </schedule>
<schedule> <schedule>
<name>S3</name> <name>S3</name>
<state>enabled</state> <state>enabled</state>
<storage>0</storage> <storage>0</storage>
<invocations>0</invocations> <invocations>0</invocations>
<suppressions>0</suppressions> <suppressions>0</suppressions>
<overlaps>0</overlaps> <overlaps>0</overlaps>
<failures>0</failures> <failures>0</failures>
<action> <action>
<name>A1</name> <name>A1</name>
<state>enabled</state> <state>enabled</state>
<storage>0</storage> <storage>0</storage>
<invocations>0</invocations> <invocations>0</invocations>
<suppressions>0</suppressions> <suppressions>0</suppressions>
<overlaps>0</overlaps> <overlaps>0</overlaps>
<failures>0</failures> <failures>0</failures>
</action> </action>
</schedule> </schedule>
</schedules> </schedules>
<suppressions> <suppressions>
<suppression> <suppression>
<name>orphaned</name> <name>orphaned</name>
<state>enabled</state> <state>enabled</state>
</suppression> </suppression>
</suppressions> </suppressions>
</lmap-state> </lmap-state>
</data> </data>
Appendix D. Example Report Appendix D. Example Report
<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-name>S1</schedule-name> <schedule-name>S1</schedule-name>
skipping to change at page 60, line 17 skipping to change at page 59, line 37
<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 E. Open Issues Appendix E. Change History
Note to the RFC Editor: this section should be removed on publication Note to the RFC Editor: this section should be removed on publication
as an RFC. as an RFC.
E.1. Martin's Review Comments E.1. Non-editorial Changes since -06
o Why is the device-id configurable? Should the device not report
its own id without explicitely configuring it? Note, this would
also be a change of the information model.
o Some objects in the information model (e.g., agent-id) are marked
optional because of sensitivity considerations. Since there is an
access control model, it would feel more natural to make these
objects mandatory in YANG and leave it to the access control model
to prevent access to them in deployments where this is needed.
o /lmap-state/agent/{hardware,firmware,device-id} overlap with
/system-state/platform/{machine,os-release/os-version} and the
upcoming entity (aka hardware) model provide a URI for hardware
components. Shall we remove the {hardware,firmware,device-id}
objects and instead add text to section 3 pointing to the places
where these objects can be found?
Appendix F. Change History o Removed /lmap/agent/device-id and /lmap-state/agent/device-id,
added pointer to the ietf-hardware YANG model.
Note to the RFC Editor: this section should be removed on publication o Removed /lmap-state/agent/{hardware,firmware}, added pointer to
as an RFC. the ietf-system YANG model.
F.1. Non-editorial Changes since -05 E.2. Non-editorial Changes since -05
o Update the example in an attempt to aligned it with the example in o Update the example in an attempt to aligned it with the example in
the information model. the information model.
o Added an extension hook to reports so that task-specific o Added an extension hook to reports so that task-specific
parameters can be echoed back to the collector. Updated the parameters can be echoed back to the collector. Updated the
example extension module accordingly. example extension module accordingly.
o Added text and Figure 1 to describe the function and purpose of o Added text and Figure 1 to describe the function and purpose of
the three YANG modules. the three YANG modules.
skipping to change at page 61, line 26 skipping to change at page 60, line 31
o Added tags that report additional capabilities of the measurement o Added tags that report additional capabilities of the measurement
agent. agent.
o Added event time and cycle-number to the result report. o Added event time and cycle-number to the result report.
o Renamed the metrics-grouping to registry-grouping. o Renamed the metrics-grouping to registry-grouping.
o Removed JSON encoding of the examples (they will go into the o Removed JSON encoding of the examples (they will go into the
RESTCONF document). RESTCONF document).
F.2. Non-editorial Changes since -04 E.3. Non-editorial Changes since -04
o Tagged /lmap/tasks/task/program with nacm:default-deny-write. o Tagged /lmap/tasks/task/program with nacm:default-deny-write.
o Added /lmap-state/schedules/schedule/storage and /lmap-state/ o Added /lmap-state/schedules/schedule/storage and /lmap-state/
schedules/schedule/action/storage. schedules/schedule/action/storage.
o Removed suppress-by-default. o Removed suppress-by-default.
o Moved the metric list from /report/result into /report/result/ o Moved the metric list from /report/result into /report/result/
table. table.
o Conflicts are now reported as a triple (schedule, action, task). o Conflicts are now reported as a triple (schedule, action, task).
o Replaced IPv4 address in the examples with IPv6 addresses. o Replaced IPv4 address in the examples with IPv6 addresses.
o Added result/status. o Added result/status.
F.3. Non-editorial Changes since -03 E.4. Non-editorial Changes since -03
o Reworked the reporting data model to align it with the changes in o Reworked the reporting data model to align it with the changes in
the information model. the information model.
F.4. Non-editorial Changes since -02 E.5. Non-editorial Changes since -02
o Added a mechanism to enforce a runtime limit for schedules. o Added a mechanism to enforce a runtime limit for schedules.
o Added security considerations text warning about possible shell o Added security considerations text warning about possible shell
expansions of options. expansions of options.
o Restricted all user-defined names and tags to lmap:identifier. o Restricted all user-defined names and tags to lmap:identifier.
Added security considerations text to make implementors aware of Added security considerations text to make implementors aware of
possible security issues if identifiers are naively mapped to say possible security issues if identifiers are naively mapped to say
filesystem paths. filesystem paths.
skipping to change at page 62, line 33 skipping to change at page 61, line 38
demonstrate the usage of the extension mechanism. demonstrate the usage of the extension mechanism.
o Introduced parameters, an extension point for task/metric specific o Introduced parameters, an extension point for task/metric specific
parameters defined in augmenting YANG modules. parameters defined in augmenting YANG modules.
o Introduced the typedefs event-ref, task-ref, and schedule-ref. o Introduced the typedefs event-ref, task-ref, and schedule-ref.
o Changed schedule/event to schedule/start and added the optional o Changed schedule/event to schedule/start and added the optional
schedule/stop and schedule/duration leafs. schedule/stop and schedule/duration leafs.
F.5. Non-editorial Changes since -01 E.6. Non-editorial Changes since -01
o Updated and split examples (config vs state vs report). o Updated and split examples (config vs state vs report).
o Refactored the definitions so that common definitions used by both o Refactored the definitions so that common definitions used by both
the control and report data models are in the new module ietf- the control and report data models are in the new module ietf-
lmap-common. lmap-common.
o A report is submitted via an RPC operation instead of using a o A report is submitted via an RPC operation instead of using a
notification. notification.
skipping to change at page 63, line 19 skipping to change at page 62, line 23
o Added controller-lost an controller-ok event choices to /lmap/ o Added controller-lost an controller-ok event choices to /lmap/
events/event. events/event.
o Added a metrics-grouping to identify entries in a metric registry o Added a metrics-grouping to identify entries in a metric registry
and associated roles. and associated roles.
o Added /lmap-state/schedules to report the status of schedules and o Added /lmap-state/schedules to report the status of schedules and
their actions. Refactored /lmap-state/tasks to only report the their actions. Refactored /lmap-state/tasks to only report the
task capabilities. task capabilities.
F.6. Non-editorial Changes since -00 E.7. Non-editorial Changes since -00
o A task can now reference multiply registry entries. o A task can now reference multiply registry entries.
o Schedules are triggered by Events instead of Timings; Timings are o Schedules are triggered by Events instead of Timings; Timings are
just one of many possible event sources. just one of many possible event sources.
o Actions feed into other Schedules (instead of Actions within other o Actions feed into other Schedules (instead of Actions within other
Schedules). Schedules).
o Removed the notion of multiple task outputs. o Removed the notion of multiple task outputs.
 End of changes. 164 change blocks. 
1113 lines changed or deleted 1074 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/