Internet DRAFT - draft-kwatsen-conditional-enablement

draft-kwatsen-conditional-enablement






Network Configuration Working Group                            K. Watsen
Internet-Draft                                          Juniper Networks
Expires: August 22, 2013                               February 18, 2013


             Conditional Enablement of Configuration Nodes
                draft-kwatsen-conditional-enablement-00

Abstract

   This memo presents a cross-cutting technique whereby a NETCONF server
   can support conditional enablement of configuration nodes.  That is,
   whether the node is active or not depends on the evaluation of an
   expression.  Two expression types are defined herein, one for latent
   configuration (present but not actualized) and another for temporal
   configuration (actualized based on time).  This soluton presented is
   extensible so that additional expression types may be added in the
   future.

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 August 22, 2013.

Copyright Notice

   Copyright (c) 2013 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



Watsen                   Expires August 22, 2013                [Page 1]

Internet-Draft   Conditional Enablement of Config Nodes    February 2013


   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Requirements Terminology  . . . . . . . . . . . . . . . . . . . 3
   2.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . . . 3
   3.  Motivation  . . . . . . . . . . . . . . . . . . . . . . . . . . 3
     3.1.  Explicit Nodes Defined in NETMOD Drafts . . . . . . . . . . 3
     3.2.  Precendent in Juniper's JUNOS-Based Products  . . . . . . . 4
     3.3.  Use-Cases Scoped By I2RS Working Group  . . . . . . . . . . 5
   4.  Expression Types  . . . . . . . . . . . . . . . . . . . . . . . 5
     4.1.  Overview  . . . . . . . . . . . . . . . . . . . . . . . . . 5
     4.2.  Simple Expressions  . . . . . . . . . . . . . . . . . . . . 5
     4.3.  Complex Expressions . . . . . . . . . . . . . . . . . . . . 5
   5.  Feature Types . . . . . . . . . . . . . . . . . . . . . . . . . 6
     5.1.  Overview  . . . . . . . . . . . . . . . . . . . . . . . . . 6
     5.2.  Simple  . . . . . . . . . . . . . . . . . . . . . . . . . . 6
     5.3.  Time  . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
   6.  Conditional Enablement Capability . . . . . . . . . . . . . . . 7
     6.1.  Overview  . . . . . . . . . . . . . . . . . . . . . . . . . 7
     6.2.  Dependencies  . . . . . . . . . . . . . . . . . . . . . . . 7
     6.3.  Capability Identifier . . . . . . . . . . . . . . . . . . . 7
     6.4.  New Operations  . . . . . . . . . . . . . . . . . . . . . . 7
     6.5.  Modifications to Existing Operations  . . . . . . . . . . . 7
     6.6.  Interactions with Other Capabilities  . . . . . . . . . . . 8
   7.  Security Considerations . . . . . . . . . . . . . . . . . . . . 8
   8.  IANA Considerations . . . . . . . . . . . . . . . . . . . . . . 8
   9.  Normative References  . . . . . . . . . . . . . . . . . . . . . 8






















Watsen                   Expires August 22, 2013                [Page 2]

Internet-Draft   Conditional Enablement of Config Nodes    February 2013


1.  Requirements Terminology

   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 RFC 2119 [RFC2119].

2.  Introduction

   This memo presents a cross-cutting technique whereby a NETCONF server
   can support conditional enablement of configuration nodes.  That is,
   whether the node is active or not depends on the evaluation of an
   expression.  Two expression types are defined herein, one for latent
   configuration (present but not actualized) and another for temporal
   configuration (actualized based on time).  This soluton presented is
   extensible so that additional expression types may be added in the
   future.

3.  Motivation

3.1.  Explicit Nodes Defined in NETMOD Drafts

   Two separate drafts presented during the NETMOD meeting and IETF 85
   had data-models with explicit "enabled" leaves (see examples below).
   One of the questions asked during the sessions was if cross-cutting
   concerns, such as if a node were enabled, wouldn't be better
   supported via meta-data, to which there was general agreement.

   Example of an "enabled" leaf from
   draft-ietf-netmod-routing-cfg-06.txt:

       leaf enabled {
           type boolean;
           default "true";
           description
               "Enable/disable the router instance.

               If this parameter is false, the parent router instance is
               disabled, despite any other configuration that might be
               present.";
       }

                                 Figure 1









Watsen                   Expires August 22, 2013                [Page 3]

Internet-Draft   Conditional Enablement of Config Nodes    February 2013


   Example of an "enabled" leaf from
   draft-ietf-netmod-system-mgmt-04.txt:

     leaf enabled {
         type boolean;
         default true;
         description
             "Indicates whether this server is enabled for use or not.";
     }

                                 Figure 2

3.2.  Precendent in Juniper's JUNOS-Based Products

   Further, there is already a precendent for this strategy in Juniper's
   JUNOS-based products, where any configuration node can be flagged
   with an XML attribute stating that it is inactive.

   Example of a JUNOS "inactive" statement:

       <interface inactive="inactive">...<interface>

                                 Figure 3

   Additionally, JUNOS also supports the notion of a list of
   conditionals that must all be satisfied for an associated
   configuration to be applied.  JUNOS supports the conditionals to be
   based on chassis type, model type, routing engine, member, and time.

   Example of a JUNOS "when" statement (this is not YANG):

       groups {
           my-group-g1 {
               system {
                   hostname xyz;
               }
           when {
               model tx1000;
               routing-engine re0;
               time 2am to 4am;
           }
         }
       }

                                 Figure 4






Watsen                   Expires August 22, 2013                [Page 4]

Internet-Draft   Conditional Enablement of Config Nodes    February 2013


3.3.  Use-Cases Scoped By I2RS Working Group

   Lastly, discusions with the I2RS Working Group have revealed that
   they believe they have a need for a device to autonomously switch
   configuration settings based on time.

4.  Expression Types

4.1.  Overview

   Conditional expressions are boolean expressions that evaluate to
   either "true" or "false".

   Expressions are contained inside an XML attribute called "enabled".
   An expression that evaluates to "true" enables the associated node,
   whereas an expression that evaluates to "false" disables it.

   A configuration node having no expression set is equivalent to an
   expression evaluating to "true".  That is, all nodes are enabled by
   default.

   Example usage:

       <foobar enabled="<expression>"/>

4.2.  Simple Expressions

   Simple expressions are the most trivial expressions possible; they
   are simply either the constant value "true" or "false".

     expressions = "true" / "false";

   Simple expressions are useful to disable a configuration node until
   it is explicitly reenabled.  Since this is such a common use-case,
   this draft enables simple expressions to be supported without having
   to implement support for complex expressions.

   A device advertises support for simple expressions using the feature
   "simple" in its capability string:

     <capability string>?features=simple

4.3.  Complex Expressions

   All expressions that are not "simple" are "complex".  These
   expressions require being able to compare values and evaluate logical
   expressions; they do not need to perform arithmetic, bitwise
   operations, or assignments.



Watsen                   Expires August 22, 2013                [Page 5]

Internet-Draft   Conditional Enablement of Config Nodes    February 2013


   The grammer is the same for all complex expresssions, the only thing
   that varies is what variable assignments the device supports (e.g.
   time, reference to a statistical value, etc.).

   A device does not explicitly advertise support for complex
   expressions.  Support for complex expressions are implicit when any
   feature depending on complex expressions (e.g. time) is advertized.
   For instance:

     <capability string>?features=time

   Complex expressions use the following grammer:

   <expression>  = [ <paren-expr> / <and-expr> / <or-expr> /
                     <not-expr> / <static-expr> / <simple-expr> ]
   <paren-expr>  = "(" <expression> ")"
   <and-expr>    = <expression> " && " <expression>
   <or-expr>     = <expression> " || " <expression>
   <not-expr>    = " ! " <expression>
   <static-expr> = "true" / "false"
   <simple-expr> = <variable> <operator> <value>
   <variable>    = *char
   <operator>    = " == " / " != " / " > " / " < " / " <= " / " >= "
   <value>       = *char

   # NOTES
   #
   # Valid <variables> values dependent on what the device advertises
   # support for.  # Similarly, valid <value> values are dependent on
   # the <variable> used in the expression.  For instance, the "time"
   # feature defines the variables "dayofweek" and "houe", each of which
   # can only be compared to specific values.  For instance: ((dayofweek
   # >= "Mon" && <= "Fri) && (hour >= 9am && hour <= 5pm))


5.  Feature Types

5.1.  Overview

   The types of expressions a device supports is advertised as a list of
   "features" in the capability identifier string.

5.2.  Simple

   The "simple" feature defines support for constant boolean values
   "true" and "false".  Simple expressions are useful to disable a node
   until it is explicitly reenabled.




Watsen                   Expires August 22, 2013                [Page 6]

Internet-Draft   Conditional Enablement of Config Nodes    February 2013


5.3.  Time

   The "time" feature defines support for complex expressions using
   time-oriented values such as "dayofweek" and "hour".  Time
   expressions are useful to implement policies that depend on time.

6.  Conditional Enablement Capability

6.1.  Overview

   The :conditional-enablement capability advertises that the NETCONF
   server supports the ability for nodes in its to be annotated with
   metadata specifying conditions when it is enabled or its values vary.

6.2.  Dependencies

   None.

6.3.  Capability Identifier

   The :conditional-enablement capability is identified by the following
   capability string:

     urn:ietf:params:netconf:capability:conditional-enablement:1.0? \
     features={name,...}

   The :conditional-enablement capability URI MUST contain a "features"
   argument assigned a comma-separated list of names indicating which
   expression-types the NETCONF peer supports.  For example:

     urn:ietf:params:netconf:capability:conditional-enablement:1.0? \
     features=simple,time

6.4.  New Operations

   None.

6.5.  Modifications to Existing Operations

   The :conditional-enablement capability modifies any operation that
   transmits configuration, including:

      <get-config>

      <edit-config>

      <copy-config>




Watsen                   Expires August 22, 2013                [Page 7]

Internet-Draft   Conditional Enablement of Config Nodes    February 2013


   A NETCONF server advertising the :conditional capability indicates
   that any node in its configuration MAY contain XML attributes defined
   in the "Overview" section of this capability, even though those
   attributes were not explicitly defined in its YANG module.

6.6.  Interactions with Other Capabilities

   None.

7.  Security Considerations

   There are no known security considerations at this time.

8.  IANA Considerations

   There are no IANA directives.

9.  Normative References

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

Author's Address

   Kent Watsen
   Juniper Networks

   EMail: kwatsen@juniper.net























Watsen                   Expires August 22, 2013                [Page 8]