draft-ietf-lmap-yang-07.txt   draft-ietf-lmap-yang-08.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 21, 2017 November 17, 2016 Expires: May 24, 2017 November 20, 2016
A YANG Data Model for LMAP Measurement Agents A YANG Data Model for LMAP Measurement Agents
draft-ietf-lmap-yang-07.txt draft-ietf-lmap-yang-08.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 21, 2017. This Internet-Draft will expire on May 24, 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 19 skipping to change at page 2, line 19
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 . . . . . . . . . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . 39
5. Security Considerations . . . . . . . . . . . . . . . . . . . 44 5. Security Considerations . . . . . . . . . . . . . . . . . . . 44
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 47 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 47
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 48 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 47
8.1. Normative References . . . . . . . . . . . . . . . . . . 48 8.1. Normative References . . . . . . . . . . . . . . . . . . 47
8.2. Informative References . . . . . . . . . . . . . . . . . 48 8.2. Informative References . . . . . . . . . . . . . . . . . 48
Appendix A. Example IPPM Extension Module for UDP Latency Appendix A. Example Parameter Extension Module . . . . . . . . . 49
Metrics . . . . . . . . . . . . . . . . . . . . . . 49
Appendix B. Example Configuration . . . . . . . . . . . . . . . 51 Appendix B. Example Configuration . . . . . . . . . . . . . . . 51
Appendix C. Example State . . . . . . . . . . . . . . . . . . . 55 Appendix C. Example Report . . . . . . . . . . . . . . . . . . . 54
Appendix D. Example Report . . . . . . . . . . . . . . . . . . . 57 Appendix D. Change History . . . . . . . . . . . . . . . . . . . 57
Appendix E. Change History . . . . . . . . . . . . . . . . . . . 59 D.1. Non-editorial Changes since -07 . . . . . . . . . . . . . 57
E.1. Non-editorial Changes since -06 . . . . . . . . . . . . . 59 D.2. Non-editorial Changes since -06 . . . . . . . . . . . . . 57
E.2. Non-editorial Changes since -05 . . . . . . . . . . . . . 60 D.3. Non-editorial Changes since -05 . . . . . . . . . . . . . 57
E.3. Non-editorial Changes since -04 . . . . . . . . . . . . . 60 D.4. Non-editorial Changes since -04 . . . . . . . . . . . . . 58
E.4. Non-editorial Changes since -03 . . . . . . . . . . . . . 61 D.5. Non-editorial Changes since -03 . . . . . . . . . . . . . 58
E.5. Non-editorial Changes since -02 . . . . . . . . . . . . . 61 D.6. Non-editorial Changes since -02 . . . . . . . . . . . . . 58
E.6. Non-editorial Changes since -01 . . . . . . . . . . . . . 61 D.7. Non-editorial Changes since -01 . . . . . . . . . . . . . 59
E.7. Non-editorial Changes since -00 . . . . . . . . . . . . . 62 D.8. Non-editorial Changes since -00 . . . . . . . . . . . . . 59
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 62 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 (LMAP) [RFC7594]. The data model is defined using the YANG
[RFC6020] data modeling language. It aims to be consistent with the [RFC7950] 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
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", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119]. document are to be interpreted as described in [RFC2119].
skipping to change at page 3, line 49 skipping to change at page 3, line 49
as LMAP specific data types. as LMAP specific data types.
2. The module ietf-lmap-config.yang defines the data structures 2. The module ietf-lmap-config.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 ietf-lmap-
common.yang and ietf-lmap-control.yang as a client, will instruct common.yang and ietf-lmap-control.yang as a client, will instruct
Measurement Agents, implementing ietf-lmap-common.yang and ietf-lmap- Measurement Agents, which implement ietf-lmap-common.yang and ietf-
control.yang as servers. A Measurement Agent, implementing ietf- lmap-control.yang as servers. A Measurement Agent, implementing
lmap-common.yang and ietf-lmap-report.yang, will send results to a ietf-lmap-common.yang and ietf-lmap-report.yang, will send results to
Collector, implementing ietf-lmap-common.yang and ietf-lmap- a Collector, which implements ietf-lmap-common.yang and ietf-lmap-
report.yang as a server. report.yang as a server.
+------------------------+ +------------------------+
| LMAP Controller | | LMAP Controller |
| | | |
| Client: | | Client: |
| ietf-lmap-comman.yang | | ietf-lmap-comman.yang |
| ietf-lmap-control.yang | | ietf-lmap-control.yang |
+------------------------+ +------------------------+
+------------------------+ | +------------------------+ |
skipping to change at page 4, line 37 skipping to change at page 4, line 37
| LMAP Collector | | LMAP Collector |
| | | |
| Server: | | Server: |
| ietf-lmap-comman.yang | | ietf-lmap-comman.yang |
| ietf-lmap-report.yang | | ietf-lmap-report.yang |
+------------------------+ +------------------------+
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 control 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 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-group-id? boolean
| +--rw report-measurement-point? boolean | +--rw report-measurement-point? boolean
| +--rw controller-timeout? uint32 | +--rw controller-timeout? uint32
| +--ro last-started yang:date-and-time
+--ro capabilities
| +--ro version string
| +--ro tag* lmap:tag
| +--ro task* [name]
| +--ro name lmap:identifier
| +--ro function* [uri]
| | +--ro uri inet:uri
| | +--ro role* string
| +--ro version? string
| +--ro program? string
+--rw tasks +--rw tasks
| +--rw task* [name] | +--rw task* [name]
| +--rw name lmap:identifier | +--rw name lmap:identifier
| +--rw metric* [uri] | +--rw function* [uri]
| | +--rw uri inet:uri | | +--rw uri inet:uri
| | +--rw role* string | | +--rw role* string
| +--rw program? string | +--rw program? string
| +--rw option* [id] | +--rw option* [id]
| | +--rw id lmap:identifier | | +--rw id lmap:identifier
| | +--rw name? string | | +--rw name? string
| | +--rw value? string | | +--rw value? string
| +--rw tag* lmap:identifier | +--rw tag* lmap:identifier
+--rw schedules +--rw schedules
| +--rw schedule* [name] | +--rw schedule* [name]
| +--rw name lmap:identifier | +--rw name lmap:identifier
| +--rw start event-ref | +--rw start event-ref
| +--rw (stop)? | +--rw (stop)?
| | +--:(end) | | +--:(end)
| | | +--rw end? event-ref | | | +--rw end? event-ref
| | +--:(duration) | | +--:(duration)
| | +--rw duration? uint32 | | +--rw duration? uint32
| +--rw execution-mode? enumeration | +--rw execution-mode? enumeration
| +--rw tag* lmap:tag | +--rw tag* lmap:tag
| +--rw suppression-tag* lmap:tag | +--rw suppression-tag* lmap:tag
| +--ro state enumeration
| +--ro storage yang:gauge64
| +--ro invocations yang:counter32
| +--ro suppressions yang:counter32
| +--ro overlaps yang:counter32
| +--ro failures yang:counter32
| +--ro last-invocation? yang:date-and-time
| +--rw action* [name] | +--rw action* [name]
| +--rw name lmap:identifier | +--rw name lmap:identifier
| +--rw task task-ref | +--rw task task-ref
| +--rw parameters | +--rw parameters
| | +--rw (extension)? | | +--rw (extension)?
| +--rw option* [id] | +--rw option* [id]
| | +--rw id lmap:identifier | | +--rw id lmap:identifier
| | +--rw name? string | | +--rw name? string
| | +--rw value? string | | +--rw value? string
| +--rw destination* schedule-ref | +--rw destination* schedule-ref
| +--rw tag* lmap:tag | +--rw tag* lmap:tag
| +--rw suppression-tag* lmap:tag | +--rw suppression-tag* lmap:tag
| +--ro state enumeration
| +--ro storage yang:gauge64
| +--ro invocations yang:counter32
| +--ro suppressions yang:counter32
| +--ro overlaps yang:counter32
| +--ro failures yang:counter32
| +--ro last-invocation yang:date-and-time
| +--ro last-completion yang:date-and-time
| +--ro last-status lmap:status-code
| +--ro last-message string
| +--ro last-failed-completion yang:date-and-time
| +--ro last-failed-status lmap:status-code
| +--ro last-failed-message string
+--rw suppressions +--rw suppressions
| +--rw suppression* [name] | +--rw suppression* [name]
| +--rw name lmap:identifier | +--rw name lmap:identifier
| +--rw start? event-ref | +--rw start? event-ref
| +--rw end? event-ref | +--rw end? event-ref
| +--rw match* lmap:glob-pattern | +--rw match* lmap:glob-pattern
| +--rw stop-running? boolean | +--rw stop-running? boolean
| +--ro state enumeration
+--rw events +--rw events
+--rw event* [name] +--rw event* [name]
+--rw name lmap:identifier +--rw name lmap:identifier
+--rw (event-type)?
| +--:(periodic)
| | +--rw periodic
| | +--rw interval uint32
| | +--rw start? yang:date-and-time
| | +--rw end? yang:date-and-time
| +--:(calendar)
| | +--rw calendar
| | +--rw month* lmap:month-or-all
| | +--rw day-of-month* lmap:day-of-months-or-all
| | +--rw day-of-week* lmap:weekday-or-all
| | +--rw hour* lmap:hour-or-all
| | +--rw minute* lmap:minute-or-all
| | +--rw second* lmap:second-or-all
| | +--rw timezone-offset? lmap:timezone-offset
| | +--rw start? yang:date-and-time
| | +--rw end? yang:date-and-time
| +--:(one-off)
| | +--rw one-off
| | +--rw time yang:date-and-time
| +--:(immediate)
| | +--rw immediate empty
| +--:(startup)
| | +--rw startup empty
| +--:(controller-lost)
| | +--rw controller-lost empty
| +--:(controller-connected)
| +--rw controller-connected empty
+--rw random-spread? uint32 +--rw random-spread? uint32
+--rw cycle-interval? uint32 +--rw cycle-interval? uint32
+--rw (event-type)?
The tree diagram below shows the structure of the state data model. +--:(periodic)
| +--rw periodic
module: ietf-lmap-control | +--rw interval uint32
+--ro lmap-state | +--rw start? yang:date-and-time
+--ro agent | +--rw end? yang:date-and-time
| +--ro agent-id? yang:uuid +--:(calendar)
| +--ro version string | +--rw calendar
| +--ro tag* lmap:tag | +--rw month* lmap:month-or-all
| +--ro last-started yang:date-and-time | +--rw day-of-month* lmap:day-of-months-or-all
+--ro tasks | +--rw day-of-week* lmap:weekday-or-all
| +--ro task* [name] | +--rw hour* lmap:hour-or-all
| +--ro name lmap:identifier | +--rw minute* lmap:minute-or-all
| +--ro metric* [uri] | +--rw second* lmap:second-or-all
| | +--ro uri inet:uri | +--rw timezone-offset? lmap:timezone-offset
| | +--ro role* string | +--rw start? yang:date-and-time
| +--ro version? string | +--rw end? yang:date-and-time
| +--ro program? string +--:(one-off)
+--ro schedules | +--rw one-off
| +--ro schedule* [name] | +--rw time yang:date-and-time
| +--ro name lmap:identifier +--:(immediate)
| +--ro state? enumeration | +--rw immediate empty
| +--ro storage? yang:gauge64 +--:(startup)
| +--ro invocations? yang:counter32 | +--rw startup empty
| +--ro suppressions? yang:counter32 +--:(controller-lost)
| +--ro overlaps? yang:counter32 | +--rw controller-lost empty
| +--ro failures? yang:counter32 +--:(controller-connected)
| +--ro last-invocation? yang:date-and-time +--rw controller-connected empty
| +--ro action* [name]
| +--ro name lmap:identifier
| +--ro state? enumeration
| +--ro storage? yang:gauge64
| +--ro invocations? yang:counter32
| +--ro suppressions? yang:counter32
| +--ro overlaps? yang:counter32
| +--ro failures? yang:counter32
| +--ro last-invocation? yang:date-and-time
| +--ro last-completion? yang:date-and-time
| +--ro last-status? lmap:status-code
| +--ro last-message? string
| +--ro last-failed-completion? yang:date-and-time
| +--ro last-failed-status? lmap:status-code
| +--ro last-failed-message? string
+--ro suppressions
+--ro suppression* [name]
+--ro name lmap:identifier
+--ro state? enumeration
The tree diagram below shows the structure of the reporting data The tree diagram below shows the structure of the reporting data
model. model.
module: ietf-lmap-report module: ietf-lmap-report
rpcs:
+---x report rpcs:
+---w input +---x report
+---w date yang:date-and-time +---w input
+---w agent-id? yang:uuid +---w date yang:date-and-time
+---w group-id? string +---w agent-id? yang:uuid
+---w measurement-point? string +---w group-id? string
+---w result* +---w measurement-point? string
+---w schedule-name? lmap:identifier +---w result*
+---w action-name? lmap:identifier +---w schedule-name? lmap:identifier
+---w task-name? lmap:identifier +---w action-name? lmap:identifier
+---w parameters +---w task-name? lmap:identifier
| +---w (extension)? +---w parameters
+---w option* [id] | +---w (extension)?
| +---w id lmap:identifier +---w option* [id]
| +---w name? string | +---w id lmap:identifier
| +---w value? string | +---w name? string
+---w tag* lmap:tag | +---w value? string
+---w event? yang:date-and-time +---w tag* lmap:tag
+---w start yang:date-and-time +---w event? yang:date-and-time
+---w end? yang:date-and-time +---w start yang:date-and-time
+---w cycle-number? lmap:cycle-number +---w end? yang:date-and-time
+---w status lmap:status-code +---w cycle-number? lmap:cycle-number
+---w conflict* +---w status lmap:status-code
| +---w schedule-name? lmap:identifier +---w conflict*
| +---w action-name? lmap:identifier | +---w schedule-name? lmap:identifier
| +---w task-name? lmap:identifier | +---w action-name? lmap:identifier
+---w table* | +---w task-name? lmap:identifier
+---w metric* [uri] +---w table*
| +---w uri inet:uri +---w function* [uri]
| +---w role* string | +---w uri inet:uri
+---w column* string | +---w role* string
+---w row* +---w column* string
+---w value* string +---w row*
+---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 bootstrapping information is outside the scope of this data since bootstrapping information is outside the scope of this data
model. Implementations may use some of the Configuration model. Implementations may use some of the Configuration
skipping to change at page 9, line 23 skipping to change at page 9, line 23
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. 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 capability and
is modeled in the /lmap-state/agent subtree and the /lmap-state/ status information is modeled in the /lmap/capability subtree.
schedules subtree. Information about network interfaces can be The list of supported tasks is modeled in the /lmap/capabilities/
obtained from the ietf-interfaces YANG data model [RFC7223]. task list. Status information about schedules and actions is
Information about the hardware and the firmware can be obtained included in the /lmap/schedules subtree. Information about
from the ietf-system YANG data model [RFC7317]. A device network interfaces can be obtained from the ietf-interfaces YANG
identifier can be obtained from the ietf-hardware YANG data model data model [RFC7223]. Information about the hardware and the
[I-D.ietf-netmod-entity]. The list of supported tasks is modeled firmware can be obtained from the ietf-system YANG data model
in the /lmap-state/tasks subtree. [RFC7317]. A device identifier can be obtained from the ietf-
hardware YANG data model [I-D.ietf-netmod-entity].
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 by invoking an RPC on the Collector.
These six sections are build on the following common information These six information model sections use a collection of common
objects: information objects. These common information objects are
represented in the YANG data model as follows:
o Schedules: This is 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 and RESTCONF o Channels: Channels are not modeled since the NETCONF server
server configuration data model [I-D.ietf-netconf-server-model] configuration data model [I-D.ietf-netconf-netconf-client-server]
already provides a mechanism to configure NETCONF and RESTCONF already provides a mechanism to configure NETCONF server channels.
server channels.
o Task Configurations: This is modeled in the /lmap/tasks subtree. o Task Configurations: Configured tasks are modeled in the /lmap/
tasks subtree.
o Event Information: This is modeled in the /lmap/events subtree. o Event Information: Event definitions are 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-11-17.yang" <CODE BEGINS> file "ietf-lmap-common@2016-11-20.yang"
module ietf-lmap-common { module ietf-lmap-common {
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 Platforms Working Group";
skipping to change at page 10, line 40 skipping to change at page 10, line 41
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-11-17" { revision "2016-11-20" {
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 16, line 47 skipping to change at page 16, line 47
/* /*
* 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 tasks.";
list metric { 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.";
} }
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 task-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.
skipping to change at page 18, line 15 skipping to change at page 18, line 15
} }
} }
} }
<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-11-17.yang" <CODE BEGINS> file "ietf-lmap-control@2016-11-20.yang"
module ietf-lmap-control { module ietf-lmap-control {
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 {
skipping to change at page 18, line 50 skipping to change at page 18, line 51
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-11-17" { revision "2016-11-20" {
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 19, line 44 skipping to change at page 19, line 45
} }
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 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."; event 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 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 timing 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 configuration an end time and to refresh the configuration
of timing object as needed to ensure that agents of event 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 {
skipping to change at page 21, line 28 skipping to change at page 21, line 29
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 if the 'agent-id' is reported to collectors.";
'group-id' is configured. If the 'group-id' }
is not configured, the agent-id is always
reported."; leaf report-group-id {
type boolean;
must '. != "true" or ../group-id' {
description
"A group-id must exist for this to be set
to true.";
}
default false;
description
"The 'report-group-id' controls whether the
'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.";
if the 'measurement-point' is configured.";
} }
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 {
type yang:date-and-time;
config false;
mandatory true;
description
"The date and time the measurement agent last started.";
}
}
container capabilities {
config false;
description
"Capabilities such as available LMAP tasks.";
leaf version {
type string;
config false;
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;
config false;
description
"An optional unordered set of tags that provide
additional information about the capabilities of
the measurement agent.";
}
list task {
key name;
description
"The list of tasks available on the LMAP agent.";
leaf name {
type lmap:identifier;
description
"The unique name of a task.";
}
uses lmap:registry-grouping;
leaf version {
type string;
description
"A short description of the software implementing
the task. This should include the version
number of the measurement task software.";
}
leaf program {
type string;
description
"The (local) program to invoke in order to execute
the task.";
}
}
} }
/* /*
* Task Configuration * Task Configuration
*/ */
container tasks { container tasks {
description description
"Configuration of LMAP tasks."; "Configuration of LMAP tasks.";
skipping to change at page 22, line 43 skipping to change at page 24, line 19
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:task-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
skipping to change at page 25, line 4 skipping to change at page 26, line 28
"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 { 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 {
type enumeration {
enum enabled {
value 1;
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.";
}
}
config false;
mandatory true;
description
"The current state of the schedule.";
}
leaf storage {
type yang:gauge64;
units "bytes";
config false;
mandatory true;
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 invocations {
type yang:counter32;
config false;
mandatory true;
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 suppressions {
type yang:counter32;
config false;
mandatory true;
description
"Number of suppressed executions of this schedule.";
}
leaf overlaps {
type yang:counter32;
config false;
mandatory true;
description
"Number of executions prevented due to overlaps with
a previous invocation of this schedule.";
}
leaf failures {
type yang:counter32;
config false;
mandatory true;
description
"Number of failed executions of this schedule. A
failed execution is an execution where at least
one action failed.";
}
leaf last-invocation {
type yang:date-and-time;
config false;
description
"The date and time of the last invocation of
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 sequentially."; schedule. Multiple actions are invoked sequentially.";
leaf name { leaf name {
type lmap:identifier; type lmap:identifier;
description description
"The unique identifier for this action."; "The unique identifier for this action.";
skipping to change at page 25, line 34 skipping to change at page 29, line 6
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 place-holder for run-time
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:task-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. A queue is internally used to pass by this action. A queue is internally used to pass
skipping to change at page 26, line 30 skipping to change at page 29, line 50
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 {
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.";
}
}
config false;
mandatory true;
description
"The current state of the action.";
}
leaf storage {
type yang:gauge64;
units "bytes";
config false;
mandatory true;
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 invocations {
type yang:counter32;
config false;
mandatory true;
description
"Number of invocations of this action. This counter
does not include suppressed invocations or invocations
that were prevented due to an overlap with a previous
invocation of this action.";
}
leaf suppressions {
type yang:counter32;
config false;
mandatory true;
description
"Number of suppressed executions of this action.";
}
leaf overlaps {
type yang:counter32;
config false;
mandatory true;
description
"Number of executions prevented due to overlaps with
a previous invocation of this action.";
}
leaf failures {
type yang:counter32;
config false;
mandatory true;
description
"Number of failed executions of this action.";
}
leaf last-invocation {
type yang:date-and-time;
config false;
mandatory true;
description
"The date and time of the last invocation of
this action.";
}
leaf last-completion {
type yang:date-and-time;
config false;
mandatory true;
description
"The date and time of the last completion of
this action.";
}
leaf last-status {
type lmap:status-code;
config false;
mandatory true;
description
"The status code returned by the last execution of
this action.";
}
leaf last-message {
type string;
config false;
mandatory true;
description
"The status message produced by the last execution
of this action.";
}
leaf last-failed-completion {
type yang:date-and-time;
config false;
mandatory true;
description
"The date and time of the last failed completion
of this action.";
}
leaf last-failed-status {
type lmap:status-code;
config false;
mandatory true;
description
"The status code returned by the last failed
execution of this action.";
}
leaf last-failed-message {
type string;
config false;
mandatory true;
description
"The status message produced by the last failed
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
skipping to change at page 27, line 42 skipping to change at page 34, line 14
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 {
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.";
}
}
config false;
mandatory true;
description
"The current state of the suppression.";
}
} }
} }
/* /*
* Event Instructions * Event Instructions
*/ */
container events { container events {
description description
"Configuration of LMAP events. "Configuration of LMAP events.
skipping to change at page 28, line 23 skipping to change at page 35, line 23
description description
"The list of event sources configured on the "The list of event sources configured on the
LMAP agent."; LMAP 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 {
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 {
type uint32;
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.";
}
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
skipping to change at page 28, line 45 skipping to change at page 36, line 17
leaf interval { leaf interval {
type uint32 { type uint32 {
range "1..max"; range "1..max";
} }
units "seconds"; units "seconds";
mandatory true; mandatory true;
description description
"The number of seconds between two triggers "The number of seconds between two triggers
generated by this periodic timing object."; generated by this periodic timing object.";
} }
uses timing-start-end-grouping; uses start-end-grouping;
} }
} }
case calendar { case calendar {
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 {
skipping to change at page 30, line 16 skipping to change at page 37, line 37
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 timezone 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 systems' local timezone will be used.";
} }
uses timing-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.";
leaf time { leaf time {
type yang:date-and-time; type yang:date-and-time;
skipping to change at page 31, line 32 skipping to change at page 39, line 5
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.";
} }
} }
} }
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 {
type uint32;
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.";
}
}
}
}
/*
* The state subtree provides information about the capabilities
* and the current status of the MA.
*/
container lmap-state {
config false;
description
"A tree exporting state information about the LMAP agent.";
container agent {
description
"Operations state of the measurement agent.";
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 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 {
description
"Available LMAP tasks, including information about their
last execution and their last failed execution.";
list task {
key name;
description
"The list of tasks available on the LMAP agent.";
leaf name {
type lmap:identifier;
description
"The unique name of a task.";
}
uses lmap:registry-grouping;
leaf version {
type string;
description
"A short description of the software implementing
the task. This should include the version
number of the measurement task software.";
}
leaf program {
type string;
description
"The (local) program to invoke in order to execute
the task.";
}
}
}
container schedules {
description
"State of LMAP schedules.";
list schedule {
key name;
description
"State of a particular schedule.";
leaf name {
type lmap:identifier;
description
"The locally-unique, administratively assigned name
for this schedule.";
}
leaf state {
type enumeration {
enum enabled {
value 1;
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.";
}
leaf storage {
type yang:gauge64;
units "bytes";
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 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 suppressions {
type yang:counter32;
description
"Number of suppressed executions of this schedule.";
}
leaf overlaps {
type yang:counter32;
description
"Number of executions prevented due to overlaps with
a previous invocation of this schedule.";
}
leaf failures {
type yang:counter32;
description
"Number of failed executions of this schedule. A
failed execution is an execution where at least
one action failed.";
}
leaf last-invocation {
type yang:date-and-time;
description
"The date and time of the last invocation of
this schedule.";
}
list action {
key name;
description
"The state of the actions associated with this
schedule entry.";
leaf name {
type lmap:identifier;
description
"The unique identifier for 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 storage {
type yang:gauge64;
units "bytes";
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 invocations {
type yang:counter32;
description
"Number of invocations of this action. This counter
does not include suppressed invocations or invocations
that were prevented due to an overlap with a previous
invocation of this action.";
}
leaf suppressions {
type yang:counter32;
description
"Number of suppressed executions of this action.";
}
leaf overlaps {
type yang:counter32;
description
"Number of executions prevented due to overlaps with
a previous invocation of this action.";
}
leaf failures {
type yang:counter32;
description
"Number of failed executions of this action.";
}
leaf last-invocation {
type yang:date-and-time;
description
"The date and time of the last invocation of
this action.";
}
leaf last-completion {
type yang:date-and-time;
description
"The date and time of the last completion of
this action.";
}
leaf last-status {
type lmap:status-code;
description
"The status code returned by the last execution of
this action.";
}
leaf last-message {
type string;
description
"The status message produced by the last execution
of this action.";
}
leaf last-failed-completion {
type yang:date-and-time;
description
"The date and time of the last failed completion
of this action.";
}
leaf last-failed-status {
type lmap:status-code;
description
"The status code returned by the last failed
execution of this action.";
}
leaf last-failed-message {
type string;
description
"The status message produced by the last failed
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> <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-11-17.yang" <CODE BEGINS> file "ietf-lmap-report@2016-11-20.yang"
module ietf-lmap-report { module ietf-lmap-report {
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;
} }
skipping to change at page 40, line 18 skipping to change at page 39, line 49
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-11-17" { revision "2016-11-20" {
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
a collector."; a collector.";
skipping to change at page 41, line 41 skipping to change at page 41, line 24
leaf task-name { leaf task-name {
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 place-holder for run-time
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:task-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 then 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 action
specific options."; specific options.";
} }
leaf-list tag { leaf-list tag {
type lmap:tag; type lmap:tag;
description description
skipping to change at page 45, line 46 skipping to change at page 45, line 29
place during times when normally no place during times when normally no
measurements should take place or at frequency measurements should take place or at frequency
that is higher than normally expected. that is 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-state/agent This subtree provides information about the /lmap/agent This subtree provides information about the
implementation (including version numbers). measurement agent. This information may be
This information may be used to mount used to select specific targets for attacks.
targeted attacks against the
implementation.
/lmap-state/tasks This subtree provides information about the /lmap/capabilities This subtree provides information about the
tasks (including version numbers). This capabilities of the measurement agent,
information may be used to mount targeted including its software version number and the
attacks against the implementation. tasks that it supports. This information may
be used to execute targeted attacks against
specific implementations.
/lmap-state/schedules This subtree provides information about the /lmap/schedules This subtree provides information about the
schedules executed on the system. This schedules and their associated actions executed
information may be used to check whether on the measurement agent. This information may
attacks against the implementation are be used to check whether attacks against the
effective. implementation are effective.
/lmap-state/suppressions This subtree provides information about the /lmap/suppressions This subtree provides information about the
suppressions executed on the system. This suppressions that can be active on the
information may be used to predict time measurement agent. This information may be
periods where measurements take place (or used to predict time periods where measurements
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. access may leak measurement results.
skipping to change at page 48, line 23 skipping to change at page 48, line 9
[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>. <http://www.rfc-editor.org/info/rfc6020>.
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC
6991, DOI 10.17487/RFC6991, July 2013, 6991, DOI 10.17487/RFC6991, July 2013,
<http://www.rfc-editor.org/info/rfc6991>. <http://www.rfc-editor.org/info/rfc6991>.
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, DOI 10.17487/RFC7950, August 2016,
<http://www.rfc-editor.org/info/rfc7950>.
8.2. Informative References 8.2. Informative References
[I-D.ietf-lmap-information-model] [I-D.ietf-lmap-information-model]
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-13 (work in progress), November 2016.
[I-D.ietf-netconf-server-model] [I-D.ietf-netconf-netconf-client-server]
Watsen, K. and J. Schoenwaelder, "NETCONF Server and Watsen, K., Wu, G., and J. Schoenwaelder, "NETCONF Client
RESTCONF Server Configuration Models", draft-ietf-netconf- and Server Models", draft-ietf-netconf-netconf-client-
server-model-09 (work in progress), March 2016. server-01 (work in progress), November 2016.
[I-D.ietf-netmod-entity] [I-D.ietf-netmod-entity]
Bierman, A., Bjorklund, M., Dong, J., and D. Romascanu, "A Bierman, A., Bjorklund, M., Dong, J., and D. Romascanu, "A
YANG Data Model for Hardware Management", draft-ietf- YANG Data Model for Hardware Management", draft-ietf-
netmod-entity-01 (work in progress), October 2016. 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>.
skipping to change at page 49, line 34 skipping to change at page 49, line 25
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,
<http://www.rfc-editor.org/info/rfc7594>. <http://www.rfc-editor.org/info/rfc7594>.
Appendix A. Example IPPM Extension Module for UDP Latency Metrics 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 demontrates this idea using
the parameters of UDP latency metrics as an example (although UDP the parameters of UDP latency metrics as an example (although UDP
latency metric parameters do not really need such an extension latency metric parameters do not really need such an extension
module). module).
skipping to change at page 53, line 50 skipping to change at page 53, line 41
</task> </task>
<!-- configuration of a reporter task --> <!-- configuration of a reporter 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> <function>
<uri>urn:example:tbd</uri> <uri>urn:example:tbd</uri>
<role>client</role> <role>client</role>
</metric> </function>
<tag>active</tag> <tag>active</tag>
</task> </task>
</tasks> </tasks>
<events> <events>
<!-- The event E1 triggers every hour during September 2016 <!-- The event E1 triggers every hour during September 2016
with a random spread of one minute. --> with a random spread of one minute. -->
<event> <event>
<name>E1</name> <name>E1</name>
<random-spread>60</random-spread> <!-- seconds -->
<periodic> <periodic>
<interval>3600000</interval> <interval>3600000</interval>
<start>2016-09-01T00:00:00+00:00</start> <start>2016-09-01T00:00:00+00:00</start>
<end>2016-11-01T00:00:00+00:00</end> <end>2016-11-01T00:00:00+00:00</end>
</periodic> </periodic>
<random-spread>60</random-spread> <!-- seconds -->
</event> </event>
<!-- The event E2 triggers on Mondays at 4am UTC --> <!-- The event E2 triggers on Mondays at 4am UTC -->
<event> <event>
<name>E2</name> <name>E2</name>
<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>
skipping to change at page 55, line 5 skipping to change at page 54, line 43
<!-- The event contoller-connected triggers when we <!-- The event contoller-connected triggers when we
(re)established connectivity with the controller. --> (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 State Appendix C. Example Report
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<lmap-state xmlns="urn:ietf:params:xml:ns:yang:ietf-lmap-control">
<agent>
<agent-id>550e8400-e29b-41d4-a716-446655440000</agent-id>
<version>lmapd version 0.3</version>
<last-started>2016-10-31T21:26:06+01:00</last-started>
</agent>
<tasks>
<task>
<name>fping-update-targets</name>
<program>/usr/bin/fping-update-targets</program>
</task>
<task>
<name>fping</name>
<program>/usr/bin/fping</program>
</task>
<task>
<name>mtr</name>
<program>/usr/bin/mtr</program>
</task>
<task>
<name>report</name>
<program>/usr/bin/lmap-report</program>
</task>
<task>
<name>ippm-udp-latency-client</name>
<program>/usr/bin/ippm-udp-latency</program>
<metric>
<uri>urn:example:tbd</uri>
<role>client</role>
</metric>
</task>
</tasks>
<schedules>
<schedule>
<name>S1</name>
<state>enabled</state>
<storage>0</storage>
<invocations>0</invocations>
<suppressions>0</suppressions>
<overlaps>0</overlaps>
<failures>0</failures>
<action>
<name>A1</name>
<state>enabled</state>
<storage>0</storage>
<invocations>0</invocations>
<suppressions>0</suppressions>
<overlaps>0</overlaps>
<failures>0</failures>
</action>
<action>
<name>A2</name>
<state>enabled</state>
<storage>0</storage>
<invocations>0</invocations>
<suppressions>0</suppressions>
<overlaps>0</overlaps>
<failures>0</failures>
</action>
</schedule>
<schedule>
<name>S2</name>
<state>enabled</state>
<storage>0</storage>
<invocations>0</invocations>
<suppressions>0</suppressions>
<overlaps>0</overlaps>
<failures>0</failures>
<action>
<name>A1</name>
<state>enabled</state>
<storage>0</storage>
<invocations>0</invocations>
<suppressions>0</suppressions>
<overlaps>0</overlaps>
<failures>0</failures>
</action>
<action>
<name>A2</name>
<state>enabled</state>
<storage>0</storage>
<invocations>0</invocations>
<suppressions>0</suppressions>
<overlaps>0</overlaps>
<failures>0</failures>
</action>
</schedule>
<schedule>
<name>S3</name>
<state>enabled</state>
<storage>0</storage>
<invocations>0</invocations>
<suppressions>0</suppressions>
<overlaps>0</overlaps>
<failures>0</failures>
<action>
<name>A1</name>
<state>enabled</state>
<storage>0</storage>
<invocations>0</invocations>
<suppressions>0</suppressions>
<overlaps>0</overlaps>
<failures>0</failures>
</action>
</schedule>
</schedules>
<suppressions>
<suppression>
<name>orphaned</name>
<state>enabled</state>
</suppression>
</suppressions>
</lmap-state>
</data>
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>
<action-name>A1</action-name> <action-name>A1</action-name>
<task-name>update-ping-targets</task-name> <task-name>update-ping-targets</task-name>
skipping to change at page 59, line 37 skipping to change at page 57, 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 E. Change History Appendix D. 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. Non-editorial Changes since -06 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, o Removed /lmap/agent/device-id and /lmap-state/agent/device-id,
added pointer to the ietf-hardware YANG model. added pointer to the ietf-hardware YANG model.
o Removed /lmap-state/agent/{hardware,firmware}, added pointer to o Removed /lmap-state/agent/{hardware,firmware}, added pointer to
the ietf-system YANG model. the ietf-system YANG model.
E.2. Non-editorial Changes since -05 D.3. 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 60, line 31 skipping to change at page 58, line 8
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).
E.3. Non-editorial Changes since -04 D.4. 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.
E.4. Non-editorial Changes since -03 D.5. 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.
E.5. Non-editorial Changes since -02 D.6. 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 61, line 38 skipping to change at page 59, line 10
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.
E.6. Non-editorial Changes since -01 D.7. 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 62, line 23 skipping to change at page 59, line 44
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.
E.7. Non-editorial Changes since -00 D.8. 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. 85 change blocks. 
725 lines changed or deleted 592 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/