Internet DRAFT - draft-oslebo-lmap-control-yang

draft-oslebo-lmap-control-yang







Network Working Group                                          A. Oslebo
Internet-Draft                                                   UNINETT
Intended status: Standards Track                        October 27, 2014
Expires: April 30, 2015


            A YANG based Data Model for the LMAP Controller
                 draft-oslebo-lmap-control-yang-01.txt

Abstract

   This document defines a YANG data model for the LMAP controller.  The
   measurement agents can poll configuration data from the controller
   using RESTCONF.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on April 30, 2015.

Copyright Notice

   Copyright (c) 2014 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.





Oslebo                   Expires April 30, 2015                 [Page 1]

Internet-Draft           LMAP Control Data Model            October 2014


Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
     1.1.  Requirements notation . . . . . . . . . . . . . . . . . .   3
     1.2.  Tree Diagrams . . . . . . . . . . . . . . . . . . . . . .   3
   2.  Data Model Overview . . . . . . . . . . . . . . . . . . . . .   3
   3.  YANG module . . . . . . . . . . . . . . . . . . . . . . . . .   6
   4.  Security Considerations . . . . . . . . . . . . . . . . . . .  22
   5.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .  22
   6.  Normative References  . . . . . . . . . . . . . . . . . . . .  22
   Appendix A.  Open issues  . . . . . . . . . . . . . . . . . . . .  22
   Appendix B.  Example configuration  . . . . . . . . . . . . . . .  22
   Appendix C.  RESTCONF queries . . . . . . . . . . . . . . . . . .  25
     C.1.  Get configuration - XML format  . . . . . . . . . . . . .  25
     C.2.  Get schedules - JSON format . . . . . . . . . . . . . . .  26
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  26

1.  Introduction

   The LMAP framework[I-D.ietf-lmap-framework] defines three main
   components:

   o  Measurement Agents (MAs) - initiates the actual measurements.

   o  Controller - controls one or more MAs.  It instructs them when to
      do measurements and when and how to report the results.

   o  Collector - accepts measurement results from MAs

   This document defines a YANG data model for the LMAP controller.  The
   model can be used by operators to configure all the MAs that are
   controlled by the controller and by MAs to retrieve the configuration
   data.  The MAs will poll the information stored on the controller
   using the RESTCONF protocol[I-D.ietf-netconf-restconf].  A future
   draft will define a YANG model for the collector that can be used by
   the MAs to report the results.

   RESTCONF is a protocol currently being standardized in the NETCONF
   working group.  It is a HTTP based protocol that defines a standard
   mechansism for accessing data defined in YANG, using datastores
   defined in NETCONF.  All the basic features needed for the LMAP
   control protocol is covered by RESTCONF:

   o  Full support for Create, Retrieve, Update and Delete (CRUD)
      operations.

   o  Support for both XML and JSON format.




Oslebo                   Expires April 30, 2015                 [Page 2]

Internet-Draft           LMAP Control Data Model            October 2014


   o  Formal validation based on YANG model.

   o  Filter mechanisms to request a subset of the target resource
      contents.

   o  Notification support for controller initiated messages

1.1.  Requirements notation

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119].

1.2.  Tree Diagrams

   A simplified graphical representation of the data model is used in
   this document.  The meaning of the symbols in these diagrams is as
   follows:

   o  Brackets "[" and "]" enclose list keys.

   o  Abbreviations before data node names: "rw" means configuration
      (read-write), and "ro" means state data (read-only).

   o  Symbols after data node names: "?" means an optional node, "!"
      means a presence container, and "*" denotes a list and leaf-list.

   o  Parentheses enclose choice and case nodes, and case nodes are also
      marked with a colon (":").

   o  Ellipsis ("...") stands for contents of subtrees that are not
      shown.

2.  Data Model Overview

   The data model first defines a set of common objects for tasks,
   channels, schedules, and timing definitions that are shared among all
   the MAs that are controlled by the controller.  It then defines a
   list of MA objects that contains configuration specific for each MA.
   In the MA object there is a list of references to the common
   schedules and each reference represents an active schedule for this
   specific MA.

   The model also contains a notification that tells the MA to contact
   the controller and download new configuration.

   module: lmap-control
      +--rw lmap-control



Oslebo                   Expires April 30, 2015                 [Page 3]

Internet-Draft           LMAP Control Data Model            October 2014


         +--rw tasks
         |  +--rw task* [name]
         |     +--rw name                   string
         |     +--rw registry-entry         inet:uri
         |     +--rw role?                  string
         |     +--rw options
         |     |  +--rw option* [name]
         |     |     +--rw name     string
         |     |     +--rw value*   string
         |     +--rw suppress-by-default?   boolean
         |     +--rw cycle-id?              string
         +--rw channels
         |  +--rw channel* [name]
         |     +--rw name           string
         |     +--rw target         inet:uri
         |     +--rw credentials    string
         |     +--rw interface?     leafref
         +--rw schedules
         |  +--rw schedule* [name]
         |     +--rw name      string
         |     +--rw tasks
         |     |  +--rw task* [name]
         |     |     +--rw name                leafref
         |     |     +--rw channels
         |     |     |  +--rw channel*   leafref
         |     |     +--rw downstream-tasks
         |     |        +--rw downstream-task* [schedule]
         |     |           +--rw schedule    leafref
         |     |           +--rw task?       leafref
         |     |           +--rw outputs
         |     |              +--rw output*   int32
         |     +--rw timing?   leafref
         +--rw timings
         |  +--rw timing* [name]
         |     +--rw name             string
         |     +--rw (timing-type)
         |     |  +--:(periodic)
         |     |  |  +--rw periodic
         |     |  |     +--rw interval    uint32
         |     |  |     +--rw start?      yang:date-and-time
         |     |  |     +--rw end?        yang:date-and-time
         |     |  +--:(calendar)
         |     |  |  +--rw calendar
         |     |  |     +--rw month*             month
         |     |  |     +--rw weekday*           weekday
         |     |  |     +--rw day-of-months*     int8
         |     |  |     +--rw hour*              int8
         |     |  |     +--rw minute*            int8



Oslebo                   Expires April 30, 2015                 [Page 4]

Internet-Draft           LMAP Control Data Model            October 2014


         |     |  |     +--rw second*            int8
         |     |  |     +--rw timezone-offset?   timezone-offset
         |     |  |     +--rw start?             yang:date-and-time
         |     |  |     +--rw end?               yang:date-and-time
         |     |  +--:(one-off)
         |     |  |  +--rw one-off-time     yang:date-and-time
         |     |  +--:(immediate)
         |     |  |  +--rw immediate        empty
         |     |  +--:(startup)
         |     |     +--rw startup          empty
         |     +--rw random-spread?   int32
         +--rw log
         |  +--rw log-entry* [agent-id event-time]
         |     +--rw agent-id       leafref
         |     +--rw event-time     int64
         |     +--rw code           int32
         |     +--rw description    string
         +--rw measurement-agents
            +--rw ma* [agent-id]
               +--rw agent-id                   yang:uuid
               +--rw config
               |  +--rw device-id?                           inet:uri
               |  +--rw credentials                          string
               |  +--rw group-id?                            string
               |  +--rw report-id-flag?                      boolean
               |  +--rw control-channel-failure-threshold?   int32
               +--rw schedules
               |  +--rw schedule*   leafref
               +--rw suppressions
               |  +--rw enabled?              boolean
               |  +--rw stop-ongoing-tasks?   boolean
               |  +--rw start?                yang:date-and-time
               |  +--rw stop?                 yang:date-and-time
               |  +--rw tasks
               |  |  +--rw task*   leafref
               |  +--rw schedules
               |     +--rw schedule*   leafref
               +--rw status-and-capabilities
                  +--rw hardware?             string
                  +--rw firmware?             string
                  +--rw version?              string
                  +--rw interfaces
                  |  +--rw interface*   leafref
                  +--rw last-measurement?     yang:date-and-time
                  +--rw last-report?          yang:date-and-time
                  +--rw last-instruction?     yang:date-and-time
                  +--rw last-configuration?   yang:date-and-time
                  +--rw supported-tasks



Oslebo                   Expires April 30, 2015                 [Page 5]

Internet-Draft           LMAP Control Data Model            October 2014


                  |  +--rw supported-task* [name]
                  |     +--rw name        string
                  |     +--rw registry    inet:uri
                  |     +--rw role?       string
                  +--rw conditions
                     +--rw condition* [code]
                        +--rw code    string
                        +--rw text?   string
   notifications:
      +---n update-config

3.  YANG module


   <CODE BEGINS> file "lmap-control@2014-10-27.yang

   module lmap-control {

     namespace "urn:ietf:params:xml:ns:yang:lmap-control";

     prefix "lmap-control";

     import ietf-yang-types {
       prefix "yang";
     }

     import ietf-inet-types {
       prefix "inet";
     }

     import ietf-interfaces {
       prefix "if";
     }

     organization
       "IETF Large-Scale Measurement Platforms Working Group";

     contact
       "WG Web: <http://tools.ietf.org/wg/lmap/> WG List:
        <mailto:lmap@ietf.org> Editor: Arne Oslebo
        <arne.oslebo@uninett.no>";

     description
       "This YANG module defines a data model for the control protocol
        for Large-Scale Measurement Platforms (LMAP). The information is
        stored on a LMAP controller and Measurement Agents will pull
        this information from the controller at predefined intervals.";




Oslebo                   Expires April 30, 2015                 [Page 6]

Internet-Draft           LMAP Control Data Model            October 2014


     revision 2014-09-09 {
       description
         "Initial revision.";
       reference
         "RFC XXX: A YANG Data Model for the LMAP control protocol";
     }

     typedef weekday {
       type enumeration {
         enum sunday {
           description
             "Sunday of the week";
         }
         enum monday {
           description
             "Monday of the week";
         }
         enum tuesday {
           description
             "Tuesday of the week";
         }
         enum wednesday {
           description
             "Wednesday of the week";
         }
         enum thursday {
           description
             "Thursday of the week";
         }
         enum friday {
           description
             "Friday of the week";
         }
         enum saturdary {
           description
             "Saturday of the week";
         }
       }
       description
         "A type modeling the weekdays in the Greco-Roman tradition.";
     }

     typedef month {
       type enumeration {
         enum january {
           description
             "January of the Julian and Gregorian calendar";
         }



Oslebo                   Expires April 30, 2015                 [Page 7]

Internet-Draft           LMAP Control Data Model            October 2014


         enum february {
           description
             "February of the Julian and Gregorian calendar";
         }
         enum march {
           description
             "March of the Julian and Gregorian calendar";
         }
         enum april {
           description
             "April of the Julian and Gregorian calendar";
         }
         enum may {
           description
             "May of the Julian and Gregorian calendar";
         }
         enum june {
           description
             "June of the Julian and Gregorian calendar";
         }
         enum july {
           description
             "July of the Julian and Gregorian calendar";
         }
         enum august {
           description
             "August of the Julian and Gregorian calendar";
         }
         enum september {
           description
             "September of the Julian and Gregorian calendar";
         }
         enum october {
           description
             "October of the Julian and Gregorian calendar";
         }
         enum november {
           description
             "November of the Julian and Gregorian calendar";
         }
         enum december {
           description
             "December of the Julian and Gregorian calendar";
         }
       }
       description
         "A type modeling the month in the Julian and Gregorian
          tradition.";



Oslebo                   Expires April 30, 2015                 [Page 8]

Internet-Draft           LMAP Control Data Model            October 2014


     }

     typedef timezone-offset {
       type string {
         pattern "Z|[\+\-]\d{2}:\d{2}";
       }
       description
         "A timezone-offset as it is use in the yang:date-and-time type.
          The value Z is equivalent to +00:00. The value -00:00
          indicates and unknown time-offset.";
     }

     grouping timing-start-end-grouping {
       description
         "A grouping that provides start and end times for timing
          objects.";
       leaf start {
         type yang:date-and-time;
         description
           "The date and time when the timing object starts to create
            triggers.";
       }
       leaf end {
         type yang:date-and-time;
         description
           "The date and time when the timing object stops to create
            triggers. It is generally a good idea to always configure an
            end time and to refresh the configuration of timing object
            as needed to ensure that agents that loose connectivity to
            their controller do not continue their tasks forever.";
       }
     }

     container lmap-control {
       description
         "LMAP Control configuration";
       container tasks {
         description
           "Task configuration";
         list task {
           key "name";
           description
             "List of available tasks.";
           leaf name {
             type string;
             mandatory "true";
             description
               "The unique name of the task.";



Oslebo                   Expires April 30, 2015                 [Page 9]

Internet-Draft           LMAP Control Data Model            October 2014


           }
           leaf registry-entry {
             type inet:uri;
             mandatory "true";
             description
               "Registry URI identifying the task.";
           }
           leaf role {
             type string;
             description
               "Measurement Agent role.";
           }
           container options {
             description
               "Configuration of options passed to the task.";
             list option {
               key "name";
               description
                 "List of options.";
               leaf name {
                 type string;
                 description
                   "Option name.";
               }
               leaf-list value {
                 type string;
                 description
                   "Option value.";
               }
             }
           }
           leaf suppress-by-default {
             type boolean;
             default "true";
             description
               "Indicates the behavior of the default suppress
                instruction for this task. If FALSE then the Task will
                not be suppressed.";
           }
           leaf cycle-id {
             type string;
             description
               "Measurement Cycle ID that can be used to easily identify
                a set of measurement results. The ID should be
                incremented or changed when a task option is changed so
                that two sets of results can no longer be directly
                compared.";
           }



Oslebo                   Expires April 30, 2015                [Page 10]

Internet-Draft           LMAP Control Data Model            October 2014


         }
       }
       container channels {
         description
           "Channel configuration";
         list channel {
           key "name";
           description
             "The list of available channels";
           leaf name {
             type string;
             description
               "The unique name of the channel";
           }
           leaf target {
             type inet:uri;
             mandatory "true";
             description
               "The remote endpoint of the channel.";
           }
           leaf credentials {
             type string;
             mandatory "true";
             description
               "The security credentials to establish a secure
                channel.";
           }
           leaf interface {
             type leafref {
               path "/if:interfaces/if:interface/if:name";
             }
             description
               "Name of interface to use when MA has multiple
                interfaces.";
           }
         }
       }
       container schedules {
         description
           "Schedules configuration";
         list schedule {
           key "name";
           description
             "The list of available schedules.";
           leaf name {
             type string;
             description
               "The unique name of the schedule.";



Oslebo                   Expires April 30, 2015                [Page 11]

Internet-Draft           LMAP Control Data Model            October 2014


           }
           container tasks {
             description
               "The configuration of tasks that are executed as part of
                this schedule.";
             list task {
               key "name";
               description
                 "The list of the tasks.";
               leaf name {
                 type leafref {
                   path "/lmap-control/tasks/task/name";
                 }
                 description
                   "The reference to a named task that will be
                    executed";
               }
               container channels {
                 description
                   "Configuration of channels used by the task.";
                 leaf-list channel {
                   type leafref {
                     path "/lmap-control/channels/channel/name";
                   }
                   description
                     "List of channels used by the task.";
                 }
               }
               container downstream-tasks {
                 description
                   "Configuration of downstream tasks. The output from
                    this task is sendt to the selected task.";
                 list downstream-task {
                   key "schedule";
                   description
                     "";
                   leaf schedule {
                     type leafref {
                       path "/lmap-control/schedules/schedule/name";
                     }
                     description
                       "Name of downstream schedule.";
                   }
                   leaf task {
                     type leafref {
                       path "/lmap-control/schedules/"
                          + "schedule[name=current()/../schedule]/"
                          + "tasks/task/name";



Oslebo                   Expires April 30, 2015                [Page 12]

Internet-Draft           LMAP Control Data Model            October 2014


                     }
                     description
                       "Name of downstream task that is part of the
                        above downstream schedule.";
                   }
                   container outputs {
                     description
                       "Configuration of task outputs";
                     leaf-list output {
                       type int32;
                       description
                         "List of task outputs that will be sendt to
                          this downstream task.";
                     }
                   }
                 }
               }
             }
           }
           leaf timing {
             type leafref {
               path "/lmap-control/timings/timing/name";
             }
             description
               "The timing of the schedule.";
           }
         }
       }
       container timings {
         description
           "Configuration of LMAP timings. Implementations may be forced
            to delay acting upon triggers in the face of local
            constraints. A task triggered therefore not rely on the
            accuracy provided by the scheduler implementation.";
         list timing {
           key "name";
           description
             "The list of timings configured on the LMAP agent.";
           leaf name {
             type string;
             description
               "The unique name of a timing.";
           }
           choice timing-type {
             mandatory "true";
             description
               "Different types of timing objects are handled by
                different branches of this choices.";



Oslebo                   Expires April 30, 2015                [Page 13]

Internet-Draft           LMAP Control Data Model            October 2014


             case periodic {
               container periodic {
                 description
                   "A periodic timing object triggers periodically
                    driven by a regular interval.";
                 leaf interval {
                   type uint32;
                   units "milliseconds";
                   mandatory "true";
                   description
                     "The number of milliseconds between two triggers
                      generated by this periodic timing object. The
                      execution system must not generate triggers for
                      periodic timing objects that have a interval value
                      of 0. A timing object with an interval of 0
                      milliseconds will therefore never trigger.";
                 }
                 uses timing-start-end-grouping;
               }
             }
             case calendar {
               container calendar {
                 description
                   "A calendar timing object trigger based on the
                    current calendar date and time.";
                 leaf-list month {
                   type month;
                   description
                     "A month at which this calendar timing will
                      trigger.";
                 }
                 leaf-list weekday {
                   type weekday;
                   description
                     "A weekday at which this calendar timing will
                      trigger.";
                 }
                 leaf-list day-of-months {
                   type int8 {
                     range "-31..-1 | 1..31";
                   }
                   description
                     "A day in the months at which this calendar timing
                      will trigger. Negative numbers indicate days
                      counted backwards from the end of the months.";
                 }
                 leaf-list hour {
                   type int8 {



Oslebo                   Expires April 30, 2015                [Page 14]

Internet-Draft           LMAP Control Data Model            October 2014


                     range "0..23";
                   }
                   description
                     "An hour at which this calendar timing will
                      trigger.";
                 }
                 leaf-list minute {
                   type int8 {
                     range "0..59";
                   }
                   description
                     "A minute at which this calendar timing will
                      trigger.";
                 }
                 leaf-list second {
                   type int8 {
                     range "0..59";
                   }
                   description
                     "A second at which this calendar timing will
                      trigger.";
                 }
                 leaf timezone-offset {
                   type timezone-offset;
                   description
                     "The timezone in which this calendar timing object
                      will be evaluated.";
                 }
                 uses timing-start-end-grouping;
               }
             }
             case one-off {
               leaf one-off-time {
                 type yang:date-and-time;
                 mandatory "true";
                 description
                   "This one-off timing object triggers once at the
                    configured one-off-time.";
               }
             }
             case immediate {
               leaf immediate {
                 type empty;
                 mandatory "true";
                 description
                   "This immediate timing object triggers immediately
                    when it is configured.";
               }



Oslebo                   Expires April 30, 2015                [Page 15]

Internet-Draft           LMAP Control Data Model            October 2014


             }
             case startup {
               leaf startup {
                 type empty;
                 mandatory "true";
                 description
                   "This startup timing object triggers whenever the
                    LMAP agent (re)starts.";
               }
             }
           }
           leaf random-spread {
             type int32;
             units "milliseconds";
             description
               "This optional leaf adds a random spread to the
                computation of the trigger.";
           }
         }
       }
       container log {
         description
           "";
         list log-entry {
           key "agent-id event-time";
           description
             "";
           leaf agent-id {
             type leafref {
               path "/lmap-control/measurement-agents/ma/agent-id";
             }
             description
               "";
           }
           leaf event-time {
             type int64;
             description
               "Timestamp (number of ms since January 1, 1970, 00:00:00
                GMT) of the log event";
           }
           leaf code {
             type int32;
             mandatory "true";
             description
               "";
           }
           leaf description {
             type string;



Oslebo                   Expires April 30, 2015                [Page 16]

Internet-Draft           LMAP Control Data Model            October 2014


             mandatory "true";
             description
               "";
           }
         }
       }
       container measurement-agents {
         description
           "Configuration of Measurement Agents.";
         list ma {
           key "agent-id";
           description
             "List of Mesurement Agents that are controlled by a
              controller.";
           leaf agent-id {
             type yang:uuid;
             mandatory "true";
             description
               "The unique ID of the MA";
           }
           container config {
             description
               "Configuration of a Measurement Agent.";
             leaf device-id {
               type inet:uri;
               description
                 "Optional device ID that can be used to identify the MA
                  before an agent ID is assigned.";
             }
             leaf credentials {
               type string;
               mandatory "true";
               description
                 "The credentials of the agent.";
             }
             leaf group-id {
               type string;
               description
                 "Optional group ID of the agent";
             }
             leaf report-id-flag {
               type boolean;
               default "false";
               description
                 "If true then the agent ID will be reported to the
                  collectors.";
             }
             leaf control-channel-failure-threshold {



Oslebo                   Expires April 30, 2015                [Page 17]

Internet-Draft           LMAP Control Data Model            October 2014


               type int32;
               description
                 "";
             }
           }
           container schedules {
             description
               "Configuration of active schedules for this MA.";
             leaf-list schedule {
               type leafref {
                 path "/lmap-control/schedules/schedule/name";
               }
               description
                 "List of active schedules.";
             }
           }
           container suppressions {
             description
               "Configuration of suppressions";
             leaf enabled {
               type boolean;
               default "false";
               description
                 "Setting this to true will suppress all tasks where
                  suppress-by-default is true.";
             }
             leaf stop-ongoing-tasks {
               type boolean;
               default "false";
               description
                 "Setting this to true will terminate all running tasks
                  when enabled is also set to true.";
             }
             leaf start {
               type yang:date-and-time;
               description
                 "The date and time when suppression should start. If
                  not present then suppression will start
                  immediately.";
             }
             leaf stop {
               type yang:date-and-time;
               description
                 "The date and time when suppression should stop. If not
                  present the suppression will continue until 'enabled'
                  is set to false.";
             }
             container tasks {



Oslebo                   Expires April 30, 2015                [Page 18]

Internet-Draft           LMAP Control Data Model            October 2014


               description
                 "Configuration of tasks that will be suppressed.";
               leaf-list task {
                 type leafref {
                   path "/lmap-control/tasks/task/name";
                 }
                 description
                   "The list of tasks that will be suppressed. If the
                    list is empty, then all tasks will be suppressed.";
               }
             }
             container schedules {
               description
                 "Configuration of schedules that will be suppressed.";
               leaf-list schedule {
                 type leafref {
                   path "/lmap-control/schedules/schedule/name";
                 }
                 description
                   "The list of schedules that will be suppressed. If
                    the list is empyt, then all schedules will be
                    suppressed.";
               }
             }
           }
           container status-and-capabilities {
             description
               "Operational status and capabilities of the measurement
                agent.";
             leaf hardware {
               type string;
               default "true";
               description
                 "A short description of the hardware that the
                  measurement agent is running on.";
             }
             leaf firmware {
               type string;
               description
                 "The firmware version that the measurement agent is
                  running on";
             }
             leaf version {
               type string;
               description
                 "The version number of the measurement agent
                  software.";
             }



Oslebo                   Expires April 30, 2015                [Page 19]

Internet-Draft           LMAP Control Data Model            October 2014


             container interfaces {
               description
                 "Interfaces available for measurements.";
               leaf-list interface {
                 type leafref {
                   path "/if:interfaces/if:interface/if:name";
                 }
                 description
                   "List of interfaces";
               }
             }
             leaf last-measurement {
               type yang:date-and-time;
               description
                 "The date and time of the last performed measurement
                  task.";
             }
             leaf last-report {
               type yang:date-and-time;
               description
                 "The date and time of the last reporting task.";
             }
             leaf last-instruction {
               type yang:date-and-time;
               description
                 "The date and time for when the measurement agent last
                  received new instructions.";
             }
             leaf last-configuration {
               type yang:date-and-time;
               description
                 "The date and time for when the measurement agent last
                  received new configuration data.";
             }
             container supported-tasks {
               description
                 "Supported tasks.";
               list supported-task {
                 key "name";
                 description
                   "The list of tasks supported by the measurement
                    agent.";
                 leaf name {
                   type string;
                   description
                     "The name of the supported task.";
                 }
                 leaf registry {



Oslebo                   Expires April 30, 2015                [Page 20]

Internet-Draft           LMAP Control Data Model            October 2014


                   type inet:uri;
                   mandatory "true";
                   description
                     "The registry entry of the supported task.";
                 }
                 leaf role {
                   type string;
                   description
                     "The role of the measurement agent in the in the
                      supported task.";
                 }
               }
             }
             container conditions {
               description
                 "";
               list condition {
                 key "code";
                 description
                   "";
                 leaf code {
                   type string;
                   description
                     "";
                 }
                 leaf text {
                   type string;
                   description
                     "";
                 }
               }
             }
           }
         }
       }
     }

     notification update-config {
       description
         "Notification telling the MA to contact the controller and
          download new configuration.";
     }
   }


   <CODE ENDS>





Oslebo                   Expires April 30, 2015                [Page 21]

Internet-Draft           LMAP Control Data Model            October 2014


4.  Security Considerations

   TBD

5.  Acknowledgements

   Some parts of the YANG model was copied from [I-D.schoenw-lmap-yang].

6.  Normative References

   [I-D.ietf-lmap-framework]
              Eardley, P., Morton, A., Bagnulo, M., Burbridge, T.,
              Aitken, P., and A. Akhter, "A framework for large-scale
              measurement platforms (LMAP)", draft-ietf-lmap-
              framework-08 (work in progress), August 2014.

   [I-D.ietf-netconf-restconf]
              Bierman, A., Bjorklund, M., Watsen, K., and R. Fernando,
              "RESTCONF Protocol", draft-ietf-netconf-restconf-01 (work
              in progress), July 2014.

   [I-D.schoenw-lmap-yang]
              Schoenwaelder, J. and V. Bajpai, "A YANG Data Model for
              LMAP Measurement Agents", draft-schoenw-lmap-yang-01 (work
              in progress), September 2014.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

Appendix A.  Open issues

   The traditional usage of both NETCONF and RESTCONF is to push
   configuration to the managed agents.  Using the proposal described in
   this draft the operator will push the configuration to the LMAP
   controller, but the MAs will pull the configuration from the
   controller.  At the interim meeting in Dublin September 15 some
   concern was raised for using RESTCONF in a scenario like this.  The
   question was posted to the NETCONF mailing list and one answer said
   that the preferred way would be to use the call-home strategy of TLS.
   The reason for this is to preserve the direction of the
   authentication mechanisms.  So far it has been decided not to include
   any call-home functionality in RESTCONF, only in NETCONF.

Appendix B.  Example configuration

     <lmap-control>
       <tasks>
         <task>



Oslebo                   Expires April 30, 2015                [Page 22]

Internet-Draft           LMAP Control Data Model            October 2014


       <name>Configuration</name>
       <registry-entry>urn:..:configuration</registry-entry>
         </task>
         <task>
       <name>Report</name>
       <registry-entry>urn:..:report</registry-entry>
         </task>
         <task>
       <name>Ping</name>
       <options>
         <option>
           <name>destination</name>
           <value>127.0.0.1</value>
         </option>
       </options>
       <registry-entry>urn:ping</registry-entry>
         </task>
       </tasks>
       <channels>
         <channel>
       <name>Control channel</name>
       <target>http://www.example.com:5000</target>
       <credentials></credentials>
         </channel>
         <channel>
       <name>Report channel</name>
       <target>http://www.example.com:5001</target>
       <credentials></credentials>
         </channel>
       </channels>
       <schedules>
         <schedule>
       <name>Configuration</name>
       <tasks>
         <task>
           <name>Configuration</name>
           <channels>
             <channel>Control channel</channel>
           </channels>
         </task>
       </tasks>
       <timing>Hourly</timing>
         </schedule>
         <schedule>
       <name>Ping</name>
       <tasks>
         <task>
           <name>Ping</name>



Oslebo                   Expires April 30, 2015                [Page 23]

Internet-Draft           LMAP Control Data Model            October 2014


           <downstream-tasks>
             <downstream-task>
           <schedule>Report daily</schedule>
           <task>Report</task>
           <outputs>
             <output>1</output>
           </outputs>
             </downstream-task>
           </downstream-tasks>
         </task>
       </tasks>
       <timing>Hourly</timing>
         </schedule>
         <schedule>
       <name>Report daily</name>
       <tasks>
         <task>
           <name>Report</name>
           <channels>
             <channel>Report channel</channel>
           </channels>
         </task>
       </tasks>
       <timing>Daily</timing>
         </schedule>
       </schedules>

       <timings>
         <timing>
       <name>Hourly</name>
       <periodic>
         <interval>60000</interval>
       </periodic>
         </timing>
         <timing>
       <name>Daily</name>
       <periodic>
         <interval>1440000</interval>
       </periodic>
         </timing>
       </timings>

       <measurement-agents>
         <ma>
       <agent-id>00000000-0000-0000-0000-000000000001</agent-id>
       <config>
         <device-id>Device ID 1</device-id>
         <credentials></credentials>



Oslebo                   Expires April 30, 2015                [Page 24]

Internet-Draft           LMAP Control Data Model            October 2014


         <group-id>1</group-id>
         <control-channel-failure-threshold>
           5
             </control-channel-failure-threshold>
       </config>
       <schedules>
         <schedule>Configuration</schedule>
       </schedules>
         </ma>
         <ma>
       <agent-id>00000000-0000-0000-0000-000000000002</agent-id>
       <config>
         <device-id>Device ID 2</device-id>
         <credentials></credentials>
         <group-id>1</group-id>
         <control-channel-failure-threshold>
           5
         </control-channel-failure-threshold>
       </config>
       <schedules>
         <schedule>Configuration</schedule>
         <schedule>Ping</schedule>
       </schedules>
         </ma>
       </measurement-agents>
     </lmap-control>


Appendix C.  RESTCONF queries

C.1.  Get configuration - XML format

   This example shows how a MA can retrieve the configuration
   information from the controller in XML format.  Note that some lines
   are wrapped for display purposes only.

   GET /restconf/data/lmap-control:lmap-control/measurement-agents/
   ma=00000000-0000-0000-0000-000000000001/config HTTP/1.1
   Host: 127.0.0.1:5000
   Accept: application/yang.data+xml,
       application/yang.errors+xml

   The server might respond as follows.








Oslebo                   Expires April 30, 2015                [Page 25]

Internet-Draft           LMAP Control Data Model            October 2014


   HTTP/1.0 200 OK
   Content-Type: application/yang.data+xml
   Server: example-server
   Date: Fri, 12 Sep 2014 11:56:42 GMT

   <config>
     <credentials/>
     <group-id>1</group-id>
   </config>

C.2.  Get schedules - JSON format

   This example shows how a MA can retrieve a list of active schedules
   from the controller in JSON format.

   GET /restconf/data/lmap-control:lmap-control/measurement-agents/
   ma=00000000-0000-0000-0000-000000000002/schedules HTTP/1.1
   Host: 127.0.0.1:5000
   Accept: application/yang.data+json,
       application/yang.errors+json

   The server might respond as follows.

   HTTP/1.0 200 OK
   Content-Type: application/yang.data+json
   Server: example-server
   Date: Fri, 12 Sep 2014 12:14:15 GMT

   {
       "schedules": {
           "schedule": [
               "Configuration",
               "Ping"
           ]
       }
   }

Author's Address

   Arne Oslebo
   UNINETT

   Email: arne.oslebo@uninett.no








Oslebo                   Expires April 30, 2015                [Page 26]