draft-ietf-lmap-yang-04.txt   draft-ietf-lmap-yang-05.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: September 22, 2016 March 21, 2016 Expires: January 9, 2017 July 8, 2016
A YANG Data Model for LMAP Measurement Agents A YANG Data Model for LMAP Measurement Agents
draft-ietf-lmap-yang-04.txt draft-ietf-lmap-yang-05.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 September 22, 2016. This Internet-Draft will expire on January 9, 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 13 skipping to change at page 2, line 13
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 . . . . . . . . . . . . 7 3. Relationship to the Information Model . . . . . . . . . . . . 7
4. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 8 4. YANG Modules . . . . . . . . . . . . . . . . . . . . . . . . 8
5. Security Considerations . . . . . . . . . . . . . . . . . . . 41 5. Security Considerations . . . . . . . . . . . . . . . . . . . 42
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 43 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 44
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 44 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 45
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 45 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 46
8.1. Normative References . . . . . . . . . . . . . . . . . . 45 8.1. Normative References . . . . . . . . . . . . . . . . . . 46
8.2. Informative References . . . . . . . . . . . . . . . . . 45 8.2. Informative References . . . . . . . . . . . . . . . . . 46
Appendix A. Open Issues . . . . . . . . . . . . . . . . . . . . 46 Appendix A. Open Issues . . . . . . . . . . . . . . . . . . . . 47
A.1. Purpose of /lmap-state/tasks . . . . . . . . . . . . . . 46 A.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
A.2. Streamline the reporting model . . . . . . . . . . . . . 46 A.2. Examples . . . . . . . . . . . . . . . . . . . . . . . . 47
A.3. Examples . . . . . . . . . . . . . . . . . . . . . . . . 46 Appendix B. Non-editorial Changes since -04 . . . . . . . . . . 47
Appendix B. Non-editorial Changes since -03 . . . . . . . . . . 47 Appendix C. Non-editorial Changes since -03 . . . . . . . . . . 48
Appendix C. Non-editorial Changes since -02 . . . . . . . . . . 47 Appendix D. Non-editorial Changes since -02 . . . . . . . . . . 48
Appendix D. Non-editorial Changes since -01 . . . . . . . . . . 47 Appendix E. Non-editorial Changes since -01 . . . . . . . . . . 48
Appendix E. Non-editorial Changes since -00 . . . . . . . . . . 48 Appendix F. Non-editorial Changes since -00 . . . . . . . . . . 49
Appendix F. Example IPPM Module for UDP Latency Metrics . . . . 48 Appendix G. Example IPPM Module for UDP Latency Metrics . . . . 50
Appendix G. Example Configuration (XML) . . . . . . . . . . . . 50 Appendix H. Example Configuration (XML) . . . . . . . . . . . . 51
Appendix H. Example Configuration (JSON) . . . . . . . . . . . . 56 Appendix I. Example Configuration (JSON) . . . . . . . . . . . . 58
Appendix I. Example State (XML) . . . . . . . . . . . . . . . . 65 Appendix J. Example State (XML) . . . . . . . . . . . . . . . . 67
Appendix J. Example State (JSON) . . . . . . . . . . . . . . . . 67 Appendix K. Example State (JSON) . . . . . . . . . . . . . . . . 68
Appendix K. Example Report (XML) . . . . . . . . . . . . . . . . 68 Appendix L. Example Report (XML) . . . . . . . . . . . . . . . . 70
Appendix L. Example Report (JSON) . . . . . . . . . . . . . . . 70 Appendix M. Example Report (JSON) . . . . . . . . . . . . . . . 71
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 72 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 73
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 3, line 43 skipping to change at page 3, line 43
+--rw agent +--rw agent
| +--rw agent-id? yang:uuid | +--rw agent-id? yang:uuid
| +--rw device-id? inet:uri | +--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
| | +--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 suppress-by-default? boolean | +--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
skipping to change at page 6, line 26 skipping to change at page 6, line 26
| +--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
| +--ro program? string | +--ro program? string
+--ro schedules +--ro schedules
| +--ro schedule* [name] | +--ro schedule* [name]
| +--ro name lmap:identifier | +--ro name lmap:identifier
| +--ro state? enumeration | +--ro state? enumeration
| +--ro storage? yang:gauge64
| +--ro invocations? yang:counter32 | +--ro invocations? yang:counter32
| +--ro suppressions? yang:counter32 | +--ro suppressions? yang:counter32
| +--ro overlaps? yang:counter32 | +--ro overlaps? yang:counter32
| +--ro failures? yang:counter32 | +--ro failures? yang:counter32
| +--ro last-invocation? yang:date-and-time | +--ro last-invocation? yang:date-and-time
| +--ro action* [name] | +--ro action* [name]
| +--ro name lmap:identifier | +--ro name lmap:identifier
| +--ro state? enumeration | +--ro state? enumeration
| +--ro storage? yang:gauge64
| +--ro invocations? yang:counter32 | +--ro invocations? yang:counter32
| +--ro suppressions? yang:counter32 | +--ro suppressions? yang:counter32
| +--ro overlaps? yang:counter32 | +--ro overlaps? yang:counter32
| +--ro failures? yang:counter32 | +--ro failures? yang:counter32
| +--ro last-invocation? yang:date-and-time | +--ro last-invocation? yang:date-and-time
| +--ro last-completion? yang:date-and-time | +--ro last-completion? yang:date-and-time
| +--ro last-status? lmap:status-code | +--ro last-status? lmap:status-code
| +--ro last-message? string | +--ro last-message? string
| +--ro last-failed-completion? yang:date-and-time | +--ro last-failed-completion? yang:date-and-time
| +--ro last-failed-status? lmap:status-code | +--ro last-failed-status? lmap:status-code
skipping to change at page 7, line 17 skipping to change at page 7, line 20
+---x report +---x report
+---w input +---w input
+---w date yang:date-and-time +---w date yang:date-and-time
+---w agent-id? yang:uuid +---w agent-id? yang:uuid
+---w group-id? string +---w group-id? string
+---w measurement-point? string +---w measurement-point? string
+---w result* +---w result*
+---w schedule-name? lmap:identifier +---w schedule-name? lmap:identifier
+---w action-name? lmap:identifier +---w action-name? lmap:identifier
+---w task-name? lmap:identifier +---w task-name? lmap:identifier
+---w metric* [uri]
| +---w uri inet:uri
| +---w role* string
+---w option* [id] +---w option* [id]
| +---w id lmap:identifier | +---w id lmap:identifier
| +---w name? string | +---w name? string
| +---w value? string | +---w value? string
+---w tag* lmap:tag +---w tag* lmap:tag
+---w start yang:date-and-time +---w start yang:date-and-time
+---w end? yang:date-and-time +---w end? yang:date-and-time
+---w conflict* lmap:identifier +---w status lmap:status-code
+---w conflict*
| +---w schedule-name? lmap:identifier
| +---w action-name? lmap:identifier
| +---w task-name? lmap:identifier
+---w table* +---w table*
+---w metric* [uri]
| +---w uri inet:uri
| +---w role* string
+---w column* string +---w column* string
+---w row* +---w row*
+---w value* string +---w value* string
3. Relationship to the Information Model 3. Relationship to the Information Model
The LMAP information model [I-D.ietf-lmap-information-model] is The LMAP information model [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:
skipping to change at page 8, line 15 skipping to change at page 8, line 21
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 status information
is modeled in the /lmap-state/agent subtree and teh /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 interfaces YANG data model [RFC7223]. The list
of supported tasks is modeled in the /lmap-state/tasks subtree. 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:
skipping to change at page 8, line 40 skipping to change at page 8, line 46
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
The modules import definitions from [RFC6991] and [RFC7223] and they The modules import definitions from [RFC6536], [RFC6991] and
reference [RFC7398]. [RFC7223] and they reference [RFC7398].
<CODE BEGINS> file "ietf-lmap-common@2016-03-15.yang" <CODE BEGINS> file "ietf-lmap-common@2016-07-07.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
"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>
skipping to change at page 9, line 23 skipping to change at page 9, line 30
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-03-15" { revision "2016-07-07" {
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 30 skipping to change at page 16, line 36
leaf value { leaf value {
type string; type string;
description description
"The value of the option."; "The value of the option.";
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-lmap-control@2016-03-15.yang" <CODE BEGINS> file "ietf-lmap-control@2016-07-07.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-inet-types {
prefix inet; prefix inet;
} }
import ietf-netconf-acm {
prefix nacm;
}
import ietf-lmap-common { import ietf-lmap-common {
prefix lmap; prefix lmap;
} }
organization organization
"IETF Large-Scale Measurement Platforms Working Group"; "IETF Large-Scale Measurement 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>
skipping to change at page 17, line 18 skipping to change at page 17, line 29
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-03-15" { revision "2016-07-07" {
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 21, line 4 skipping to change at page 21, line 14
list task { list task {
key name; key name;
description description
"The list of tasks configured on the LMAP agent."; "The list of tasks configured on the LMAP agent.";
leaf name { leaf name {
type lmap:identifier; type lmap:identifier;
description description
"The unique name of a task."; "The unique name of a task.";
} }
uses lmap:metrics-grouping; uses lmap:metrics-grouping;
leaf program { leaf program {
type string; type string;
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."; the task.";
} }
uses lmap:task-options-grouping { uses lmap:task-options-grouping {
description description
"The list of task specific options."; "The list of task specific options.";
} }
leaf suppress-by-default {
type boolean;
default true;
description
"Indicates whether the task will be suppressed by
a default supression.";
}
leaf-list tag { leaf-list tag {
type lmap:identifier; type lmap:identifier;
description description
"A tag contains additional information that is "A tag contains additional information that is
passed with the result record to the collector. passed with the result record to the 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.";
} }
} }
} }
skipping to change at page 26, line 18 skipping to change at page 26, line 21
apply to all schedules (and their actions) that 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
"Setting 'stop-running' to true will cause running "If 'stop-running' is true, running schedules and
tasks to be terminated if suppression is activated. actions matching the suppression will be terminated
Otherwise, running tasks will not be affected if when suppression is activated. If 'stop-running' is
suppression is activated."; false, running schedules and actions will not be
affected if suppression is activated.";
} }
} }
} }
/* /*
* Event Instructions * Event Instructions
*/ */
container events { container events {
description description
skipping to change at page 33, line 29 skipping to change at page 33, line 33
value 4; value 4;
description description
"The value 'suppressed' indicates that the "The value 'suppressed' indicates that the
schedule is currently suppressed."; schedule is currently suppressed.";
} }
} }
description description
"The current state of the schedule."; "The current state of the schedule.";
} }
leaf storage {
type yang:gauge64;
units "bytes";
description
"The amount of storage 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 { leaf invocations {
type yang:counter32; type yang:counter32;
description description
"Number of invocations of this schedule. This counter "Number of invocations of this schedule. This counter
does not include suppressed invocations or invocations does not include suppressed invocations or invocations
that were prevented due to an overlap with a previous that were prevented due to an overlap with a previous
invocation of this schedule."; invocation of this schedule.";
} }
leaf suppressions { leaf suppressions {
type yang:counter32; type yang:counter32;
description description
"Number of suppressed executions of this schedule."; "Number of suppressed executions of this schedule.";
} }
leaf overlaps { leaf overlaps {
type yang:counter32; type yang:counter32;
description description
"Number of executions prevented due to overlaps with "Number of executions prevented due to overlaps with
skipping to change at page 35, line 12 skipping to change at page 35, line 27
value 4; value 4;
description description
"The value 'suppressed' indicates that the "The value 'suppressed' indicates that the
action is currently suppressed."; action is currently suppressed.";
} }
} }
description description
"The current state of the action."; "The current state of the action.";
} }
leaf storage {
type yang:gauge64;
units "bytes";
description
"The amount of storage 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 { leaf invocations {
type yang:counter32; type yang:counter32;
description description
"Number of invocations of this action. This counter "Number of invocations of this action. This counter
does not include suppressed invocations or invocations does not include suppressed invocations or invocations
that were prevented due to an overlap with a previous that were prevented due to an overlap with a previous
invocation of this action."; invocation of this action.";
} }
leaf suppressions { leaf suppressions {
skipping to change at page 37, line 42 skipping to change at page 38, line 19
} }
description description
"The current state of the suppression."; "The current state of the suppression.";
} }
} }
} }
} }
} }
<CODE ENDS> <CODE ENDS>
<CODE BEGINS> file "ietf-lmap-report@2016-03-21.yang" <CODE BEGINS> file "ietf-lmap-report@2016-07-07.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 38, line 27 skipping to change at page 39, line 5
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-03-21" { revision "2016-07-07" {
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 39, line 30 skipping to change at page 40, line 8
report originates."; report originates.";
} }
list result { list result {
description description
"The list of tasks for which results are reported."; "The list of tasks for which results are reported.";
leaf schedule-name { leaf schedule-name {
type lmap:identifier; type lmap:identifier;
description description
"The name of the schedules that produced the result."; "The name of the schedule that produced the result.";
} }
leaf action-name { leaf action-name {
type lmap:identifier; type lmap:identifier;
description description
"The name of the action in the schedule that produced "The name of the action in the schedule that produced
the result."; the result.";
} }
leaf task-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.";
} }
uses lmap:metrics-grouping;
uses lmap:task-options-grouping { uses lmap:task-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
"A tag contains additional information that is passed "A tag contains additional information that is passed
with the result record to the collector. This is the with the result record to the collector. This is the
joined set of tags defined for the task object and the joined set of tags defined for the task object and the
skipping to change at page 40, line 23 skipping to change at page 40, line 46
with the result record to the collector. This is the with the result record to the collector. This is the
joined set of tags defined for the task object and the joined set of tags defined for the task object and the
action object. A tag can be used to carry the action object. A tag can be used to carry the
Measurement Cycle ID."; Measurement Cycle ID.";
} }
leaf start { leaf start {
type yang:date-and-time; type yang:date-and-time;
mandatory true; mandatory true;
description description
"The date and time when the measurement producing "The date and time when the task producing
this result started."; this result started.";
} }
leaf end { leaf end {
type yang:date-and-time; type yang:date-and-time;
description description
"The date and time when the measurement producing "The date and time when the task producing
this result stopped."; this result finished.";
} }
leaf-list conflict { leaf status {
type lmap:identifier; type lmap:status-code;
mandatory true;
description
"The status code returned by the execution of this
task.";
}
list conflict {
description description
"The names of tasks overlapping with the execution "The names of tasks overlapping with the execution
of the task that has produced this result."; of the task that has produced this result.";
leaf schedule-name {
type lmap:identifier;
description
"The name of a schedule that might have impacted
the execution of the task that has produced this
result.";
}
leaf action-name {
type lmap:identifier;
description
"The name of an action within the schedule that
might have impacted the execution of the task that
has produced this result.";
}
leaf task-name {
type lmap:identifier;
description
"The name of the task executed by an action within the
schedule that might have impacted the execution of the
task that has produced this result.";
}
} }
list table { list table {
description description
"A list of result tables."; "A list of result tables.";
uses lmap:metrics-grouping;
leaf-list column { leaf-list column {
type string; type string;
description description
"An ordered list of column labels. The order is "An ordered list of column labels. The order is
determined by the system and must match the order determined by the system and must match the order
of the columns in the result rows."; of the columns in the result rows.";
} }
list row { list row {
description description
"The rows of a result table."; "The rows of a result table.";
leaf-list value { leaf-list value {
type string; type string;
description description
"The value of a cell in the result row."; "The value of a cell in the result row.";
} }
} }
skipping to change at page 45, line 29 skipping to change at page 46, line 29
[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>.
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-08 (work in progress), March 2016. information-model-09 (work in progress), March 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.
[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 46, line 28 skipping to change at page 47, line 28
<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. Open Issues Appendix A. Open Issues
A.1. Purpose of /lmap-state/tasks A.1.
Proposal: Tasks are configured in /lmap/tasks and even marked as nacm
:default-deny-write (see RFC 6536) since configuring programs that
can be invoked by a controller is an operation that may impact the
security of the device. See also the related open issue on the
information model. If we do this, then /lmap-state/tasks should
probably only report the version number.
A.2. Streamline the reporting model
The reporting model is somewhat verbose; perhaps things can be The information model makes a distinction between control tasks and
streamlined and be made more efficient. Implementation experience schedules and instruction tasks and schedules. The YANG model kind
will help to work this out. of ignores this distinction. Should we have special subtrees to
separate control from instruction tasks and schedules? Or should we
somehow flag control tasks and schedules? It may be conceivable that
people want to apply different access control policies for control
schedules and for instruction schedules (which would favour a
solution that separates things into different subtrees).
A.3. Examples A.2. Examples
Do we want to keep the examples? If yes, they should be better Do we want to keep the examples? If yes, they should be better
aligned. If we keep the examples, do we need to keep both versions aligned. If we keep the examples, do we need to keep both versions
(XML and JSON)? (XML and JSON)?
Appendix B. Non-editorial Changes since -03 Appendix B. Non-editorial Changes since -04
o Tagged /lmap/tasks/task/program with nacm:default-deny-write.
o Added /lmap-state/schedules/schedule/storage and /lmap-state/
schedules/schedule/action/storage.
o Removed suppress-by-default.
o Moved the metric list from /report/result into /report/result/
table.
o Conflicts are now reported as a triple (schedule, action, task).
o Replaced IPv4 address in the examples with IPv6 addresses.
o Added result/status.
Appendix C. 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.
Appendix C. Non-editorial Changes since -02 Appendix D. 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 47, line 38 skipping to change at page 48, line 47
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.
Appendix D. Non-editorial Changes since -01 Appendix E. 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 48, line 23 skipping to change at page 49, line 35
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.
Appendix E. Non-editorial Changes since -00 Appendix F. 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.
o Support for sequential, parallel, and pipelined execution of o Support for sequential, parallel, and pipelined execution of
Actions. Actions.
Appendix F. Example IPPM Module for UDP Latency Metrics Appendix G. Example IPPM Module for UDP Latency Metrics
module example-ietf-ippm-udp-latency { module example-ietf-ippm-udp-latency {
namespace "urn:example:ietf-ippm-udp-latency"; namespace "urn:example:ietf-ippm-udp-latency";
prefix "ippm-udp-latency"; prefix "ippm-udp-latency";
import ietf-inet-types { import ietf-inet-types {
prefix inet; prefix inet;
} }
skipping to change at page 50, line 12 skipping to change at page 51, line 28
units "seconds"; units "seconds";
default 30.0000; default 30.0000;
description description
"The upper limit on the poisson distribution with a resolution "The upper limit on the poisson distribution with a resolution
of 0.0001 seconds (0.1 ms)."; of 0.0001 seconds (0.1 ms).";
} }
} }
} }
} }
Appendix G. Example Configuration (XML) Appendix H. Example Configuration (XML)
<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> <device-id>urn:dev:mac:0024befffe804ff1</device-id>
<group-id>network measurement at the north-pole</group-id> <group-id>network measurement at the north-pole</group-id>
<report-agent-id>true</report-agent-id> <report-agent-id>true</report-agent-id>
</agent> </agent>
skipping to change at page 53, line 27 skipping to change at page 54, line 44
<!-- IPPM udp latency measurement --> <!-- IPPM udp latency measurement -->
<schedule> <schedule>
<name>ippm-udp-latency</name> <name>ippm-udp-latency</name>
<start>hourly</start> <start>hourly</start>
<execution-mode>sequential</execution-mode> <execution-mode>sequential</execution-mode>
<action> <action>
<name>ippm-udp-latency</name> <name>ippm-udp-latency</name>
<task>ippm-udp-latency-client</task> <task>ippm-udp-latency-client</task>
<parameters xmlns:udp="urn:example:ietf-ippm-udp-latency"> <parameters xmlns:udp="urn:example:ietf-ippm-udp-latency">
<udp:src-ip>192.0.2.1</udp:src-ip> <udp:src-ip>2001:db8::1</udp:src-ip>
<udp:src-port>54321</udp:src-port> <udp:src-port>54321</udp:src-port>
<udp:dst-ip>192.0.2.2</udp:dst-ip> <udp:dst-ip>2001:db8::2</udp:dst-ip>
<udp:dst-port>12345</udp:dst-port> <udp:dst-port>12345</udp:dst-port>
<udp:poisson-lambda>42</udp:poisson-lambda> <udp:poisson-lambda>42</udp:poisson-lambda>
</parameters> </parameters>
</action> </action>
<action> <action>
<name>ippm-udp-latency-report</name> <name>ippm-udp-latency-report</name>
<task>lmap-reporting-task</task> <task>lmap-reporting-task</task>
<option> <option>
<id>collector-uri</id> <id>collector-uri</id>
<value>https://ippm.example.com/restconf/operations/ietf-lmap-report:report</value> <value>https://ippm.example.com/restconf/operations/ietf-lmap-report:report</value>
skipping to change at page 56, line 44 skipping to change at page 58, line 12
<event> <event>
<name>controller-connected</name> <name>controller-connected</name>
<controller-connected/> <controller-connected/>
<!-- avoid synchronization issues --> <!-- avoid synchronization issues -->
<random-spread>12345</random-spread> <random-spread>12345</random-spread>
</event> </event>
</events> </events>
</lmap> </lmap>
</config> </config>
Appendix H. Example Configuration (JSON) Appendix I. Example Configuration (JSON)
{ {
"ietf-lmap-control:lmap": { "ietf-lmap-control:lmap": {
"agent": { "agent": {
"agent-id": "550e8400-e29b-41d4-a716-446655440000", "agent-id": "550e8400-e29b-41d4-a716-446655440000",
"device-id": "urn:dev:mac:0024befffe804ff1", "device-id": "urn:dev:mac:0024befffe804ff1",
"group-id": "network measurement at the north-pole", "group-id": "network measurement at the north-pole",
"report-agent-id": true "report-agent-id": true
}, },
"tasks": { "tasks": {
skipping to change at page 60, line 32 skipping to change at page 61, line 48
}, },
{ {
"name": "ippm-udp-latency", "name": "ippm-udp-latency",
"start": "hourly", "start": "hourly",
"execution-mode": "sequential", "execution-mode": "sequential",
"action": [ "action": [
{ {
"name": "ippm-udp-latency", "name": "ippm-udp-latency",
"task": "ippm-udp-latency-client", "task": "ippm-udp-latency-client",
"parameters": { "parameters": {
"src-ip": "192.0.2.1", "src-ip": "2001:db8::1",
"src-port": 54321, "src-port": 54321,
"dst-ip": "192.0.2.2", "dst-ip": "2001:db8::2",
"dst-port": 12345, "dst-port": 12345,
"poisson-lambda": "42" "poisson-lambda": "42"
} }
}, },
{ {
"name": "ippm-udp-latency-report", "name": "ippm-udp-latency-report",
"task": "lmap-reporting-task", "task": "lmap-reporting-task",
"option": [ "option": [
{ {
"id": "collector-uri", "id": "collector-uri",
"value": "https://ippm.example.com/restconf/operations/ietf-lmap-report:report" "value": "https://ippm.example.com/restconf/operations/ietf-lmap-report:report"
} }
skipping to change at page 65, line 30 skipping to change at page 67, line 4
}, },
{ {
"name": "controller-connected", "name": "controller-connected",
"controller-connected": [null], "controller-connected": [null],
"random-spread": 12345 "random-spread": 12345
} }
] ]
} }
} }
} }
Appendix J. Example State (XML)
Appendix I. Example State (XML)
<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> <device-id>urn:dev:mac:0024befffe804ff1</device-id>
<hardware>ACME home router</hardware> <hardware>ACME home router</hardware>
<firmware>OpenWrt version 10.03.1</firmware> <firmware>OpenWrt version 10.03.1</firmware>
<version>Measurement Agent Daemon (MAD) 4.2</version> <version>Measurement Agent Daemon (MAD) 4.2</version>
skipping to change at page 67, line 4 skipping to change at page 68, line 24
</action> </action>
<action> <action>
<name>udp-latency-weekdays-hourly</name> <name>udp-latency-weekdays-hourly</name>
<last-invocation>2015-01-23T12:00:01+01:00</last-invocation> <last-invocation>2015-01-23T12:00:01+01:00</last-invocation>
<last-completion>2015-01-23T12:00:02+01:00</last-completion> <last-completion>2015-01-23T12:00:02+01:00</last-completion>
<last-status>0</last-status> <last-status>0</last-status>
<last-message>OK</last-message> <last-message>OK</last-message>
<last-failed-completion>2015-01-23T03:00:00+01:00</last-failed-completion> <last-failed-completion>2015-01-23T03:00:00+01:00</last-failed-completion>
<last-failed-status>42</last-failed-status> <last-failed-status>42</last-failed-status>
<last-failed-message>connection timed out</last-failed-message> <last-failed-message>connection timed out</last-failed-message>
</action> </action>
</schedule> </schedule>
</schedules> </schedules>
</lmap-state> </lmap-state>
</data> </data>
Appendix J. Example State (JSON) Appendix K. Example State (JSON)
{ {
"ietf-lmap-control:lmap-state": { "ietf-lmap-control:lmap-state": {
"agent": { "agent": {
"agent-id": "550e8400-e29b-41d4-a716-446655440000", "agent-id": "550e8400-e29b-41d4-a716-446655440000",
"device-id": "urn:dev:mac:0024befffe804ff1", "device-id": "urn:dev:mac:0024befffe804ff1",
"hardware": "ACME home router", "hardware": "ACME home router",
"firmware": "OpenWrt version 10.03.1", "firmware": "OpenWrt version 10.03.1",
"version": "Measurement Agent Daemon (MAD) 4.2", "version": "Measurement Agent Daemon (MAD) 4.2",
"last-started": "2015-04-10T17:24:42+02:00" "last-started": "2015-04-10T17:24:42+02:00"
skipping to change at page 68, line 43 skipping to change at page 70, line 15
"last-failed-status": 42, "last-failed-status": 42,
"last-failed-message": "connection timed out" "last-failed-message": "connection timed out"
} }
] ]
} }
] ]
} }
} }
} }
Appendix K. Example Report (XML) Appendix L. Example Report (XML)
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<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>
<group-id>wireless measurement at the north-pole</group-id> <group-id>wireless measurement at the north-pole</group-id>
<result> <result>
<schedule-name>pinger</schedule-name> <schedule-name>pinger</schedule-name>
<action-name>fping</action-name> <action-name>fping</action-name>
<task-name>fping</task-name> <task-name>fping</task-name>
<start>2016-03-21T10:48:55+01:00</start>
<start>2016-03-21T10:48:57+01:00</start>
<option> <option>
<id>display-address</id> <id>display-address</id>
<name>-A</name> <name>-A</name>
</option> </option>
<option> <option>
<id>display-DNS-lookup</id> <id>display-DNS-lookup</id>
<name>-d</name> <name>-d</name>
</option> </option>
<option> <option>
<id>number-of-packets</id> <id>number-of-packets</id>
skipping to change at page 69, line 37 skipping to change at page 71, line 7
<name>-q</name> <name>-q</name>
</option> </option>
<option> <option>
<id>www.example.org</id> <id>www.example.org</id>
<name>www.example.org</name> <name>www.example.org</name>
</option> </option>
<option> <option>
<id>mail.example.com</id> <id>mail.example.com</id>
<name>mail.example.com</name> <name>mail.example.com</name>
</option> </option>
<start>2016-03-21T10:48:55+01:00</start>
<end>2016-03-21T10:48:57+01:00</end>
<status>0</status>
<table> <table>
<column>target</column> <column>target</column>
<column>ip</column> <column>ip</column>
<column>rtt-1</column> <column>rtt-1</column>
<column>rtt-2</column> <column>rtt-2</column>
<column>rtt-3</column> <column>rtt-3</column>
<column>rtt-4</column> <column>rtt-4</column>
<column>rtt-5</column> <column>rtt-5</column>
<row> <row>
<value>www.example.org</value> <value>www.example.org</value>
<value>192.0.2.1</value> <value>2001:db8::1</value>
<value>14.15</value> <value>14.15</value>
<value>14.14</value> <value>14.14</value>
<value>14.09</value> <value>14.09</value>
<value>14.17</value> <value>14.17</value>
<value>14.51</value> <value>14.51</value>
</row> </row>
<row> <row>
<value>mail.example.org</value> <value>mail.example.org</value>
<value>192.0.2.2</value> <value>2001:db8::2</value>
<value>12.24</value> <value>12.24</value>
<value>11.99</value> <value>11.99</value>
<value>12.49</value> <value>12.49</value>
<value>11.87</value> <value>11.87</value>
<value>12.45</value> <value>12.45</value>
</row> </row>
</table> </table>
</result> </result>
</report> </report>
</rpc> </rpc>
Appendix L. Example Report (JSON) Appendix M. Example Report (JSON)
{ {
"report": { "report": {
"date": "2015-10-28T13:27:42+02:00", "date": "2015-10-28T13:27:42+02:00",
"agent-id": "550e8400-e29b-41d4-a716-446655440000", "agent-id": "550e8400-e29b-41d4-a716-446655440000",
"group-id": "wireless measurement at the north-pole", "group-id": "wireless measurement at the north-pole",
"result": [ "result": [
{ {
"schedule-name": "pinger", "schedule-name": "pinger",
"action-name": "fping", "action-name": "fping",
"task-name": "fping", "task-name": "fping",
"start": "2016-03-21T10:48:55+01:00",
"start": "2016-03-21T10:48:57+01:00",
"option": [ "option": [
{ {
"id": "display-address", "id": "display-address",
"name": "-A" "name": "-A"
}, },
{ {
"id": "display-DNS-lookup", "id": "display-DNS-lookup",
"name": "-d" "name": "-d"
}, },
{ {
skipping to change at page 71, line 15 skipping to change at page 72, line 34
}, },
{ {
"id": "www.example.org", "id": "www.example.org",
"name": "www.example.org" "name": "www.example.org"
}, },
{ {
"id": "mail.example.com", "id": "mail.example.com",
"name": "mail.example.com" "name": "mail.example.com"
} }
], ],
"start": "2016-03-21T10:48:55+01:00",
"end": "2016-03-21T10:48:57+01:00",
"status": 0,
"table": [ "table": [
{ {
"column": [ "column": [
"target", "target",
"ip", "ip",
"rtt-1", "rtt-1",
"rtt-2", "rtt-2",
"rtt-3", "rtt-3",
"rtt-4", "rtt-4",
"rtt-5" "rtt-5"
], ],
"row": [ "row": [
{ {
"value": [ "value": [
"www.example.org", "www.example.org",
"192.0.2.1", "2001:db8::1",
"14.15", "14.15",
"14.14", "14.14",
"14.09", "14.09",
"14.17", "14.17",
"14.51" "14.51"
] ]
}, },
{ {
"value": [ "value": [
"mail.example.org", "mail.example.org",
"192.0.2.2", "2001:db8::2",
"12.24", "12.24",
"11.99", "11.99",
"12.49", "12.49",
"11.87", "11.87",
"12.45" "12.45"
] ]
} }
] ]
} }
] ]
 End of changes. 68 change blocks. 
107 lines changed or deleted 173 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/