Internet DRAFT - draft-tp-i2rs-yang

draft-tp-i2rs-yang







I2RS                                                            T. Petch
Internet-Draft                                  Engineering Networks Ltd
Intended status: Standards Track                             May 8, 2014
Expires: November 9, 2014


               Interactions of I2RS with NETCONF and YANG
                       draft-tp-i2rs-yang-00.txt

Abstract

   This memo looks at some possible interactions between the
   requirements of I2RS and the current capabilities (and data models)
   of YANG and NETCONF.

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 November 9, 2014.

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.





Petch                   Expires November 9, 2014                [Page 1]

Internet-Draft Interactions of I2RS with NETCONF and YANG       May 2014


Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Operational State . . . . . . . . . . . . . . . . . . . . . .   2
   3.  Instantiation . . . . . . . . . . . . . . . . . . . . . . . .   3
   4.  Defaults  . . . . . . . . . . . . . . . . . . . . . . . . . .   4
   5.  Editable state  . . . . . . . . . . . . . . . . . . . . . . .   5
   6.  Persistence . . . . . . . . . . . . . . . . . . . . . . . . .   6
   7.  Stability . . . . . . . . . . . . . . . . . . . . . . . . . .   8
   8.  Security Considerations . . . . . . . . . . . . . . . . . . .   8
   9.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .   8
   10. References  . . . . . . . . . . . . . . . . . . . . . . . . .   8
     10.1.  Normative References . . . . . . . . . . . . . . . . . .   8
     10.2.  Informative References . . . . . . . . . . . . . . . . .   9
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   9

1.  Introduction

   This memo looks at some possible interactions between the
   requirements of I2RS and the current capabilities (and data models)
   of YANG [RFC6020] and NETCONF [RFC6241].

2.  Operational State

   YANG and NETCONF characterise data as being one of two types, config
   and state.  State may then be further subdivided into operational
   state and read-only statistics.  This terminology has been around
   since at least RFC3535 (2002) when the operators told the IAB of some
   limitations of SNMP.  The sort of feature that was missing was the
   ability to pull the config from a box, replace the box, push the
   config back to a replacement box which would then resume operation,
   as if nothing had changed (give or take a few flaps and Graceless
   Restarts of the routing protocols).  Crucially, config, in this
   context, is the changes made from the default state by CLI (or some
   such) to enable the box to operate.  The rest of the data in a box is
   state, which is then divided into read-only statistics (the only kind
   thereof) and - Operational State, which is everything else that the
   box has acquired, be it from BGP or OSPF, from DHCP or NTP or ND, or
   parameters set up by the box itself, for example in response to
   detecting the insertion of a new blade in a card slot.  (Such data is
   sometimes referred to as System Controlled).

   Thus entries in a routing table learnt from BGP are Operational
   State; a static entry put in by CLI (or some such) is config.  The
   parameters for a hot-plugged interface card are Operational State;
   turning on passive ospf on that interface is config.





Petch                   Expires November 9, 2014                [Page 2]

Internet-Draft Interactions of I2RS with NETCONF and YANG       May 2014


   YANG (along with NETCONF) is designed for writing configuration, and
   reading everything else.  Configuration means, in the YANG context,
   what you might put in through the CLI and it excludes everything
   else, such as data learnt via a protocol or created by the system.

   YANG defines data nodes with the container, leaf, leaf-list, list and
   anyxml statements, each of which can take the YANG substatement
   'config', which can take the values true or false.  'config false' is
   then state, is read only and is read with a NETCONF get RPC.  'config
   true' is config, can be written and can be read with a NETCONF get-
   config RPC.

   NETCONF contains powerful filtering capabilities and these filters
   could have been used to extract 'config true' data from a box but the
   resulting RPC would be complex and error-prone; the NETCONF get-
   config RPC allows simple retrieval of the data of greatest interest
   to the users of NETCONF, i.e. configuration data.  Thus 'config true'
   does not just make it possible to edit the data node - it also
   defines a subset of the data model that can be retrieved with a
   single, get-config, RPC.  The set of data that is editable and the
   set that should be retrieved as the configuration is one and the
   same; this coincidence of the two sets, happily, appears not to have
   generated any issues.

   The value of the config substatement cascades down to subordinate
   nodes - YANG models are currently a tree structure - so that in
   practice, the statement need only be specified in a few places at the
   highest level of a tree.

3.  Instantiation

   One restriction is that while 'config false' nodes may appear in the
   subtree of 'config true' nodes, 'config true' nodes may not appear in
   the subtree of 'config false' nodes.  One quirk arising from this,
   that may not be immediately apparent, is that 'config false' nodes in
   the subtree of a 'config true' node do not get instantiated in the
   data model unless and until the 'config true' node is configured.
   Thus operational state data may be inaccessible unless and until some
   configuration is performed.  This would apply to tables, such as the
   interface table, the routing table or a prefix list for an interface.
   The treatment of this issue has evolved and is still evolving.

   It led, initially, to a twin trees approach in defining data models,
   as can be seen in the current system, interfaces-cfg and routing-cfg
   YANG data models, with one read-write tree of configured information
   and a separate read-only tree of state information.  (draft-ietf-
   netmod-interfaces-cfg-10 is an example of the earlier approach).  In
   the case of a routing table, the configured table may be more or less



Petch                   Expires November 9, 2014                [Page 3]

Internet-Draft Interactions of I2RS with NETCONF and YANG       May 2014


   empty with all the information coming via routing protocols, and so
   being (operational) state.  In the case of interfaces, then there
   could be more or less complete duplication, with every interface
   appearing in both lists.  If a user of NETCONF wished to obtain all
   the relevant data, it would then have been necessary to obtain data
   from both trees.

   YANG provides no way to correlate entries in such a pair of lists,
   such as of routes or interfaces.  Rather, the description of the data
   model must specify how entries should be matched between one list and
   another.  Thus the routing model, in www.ietf.org/id/draft-ietf-
   netmod-routing-cfg-13.txt specifies that

   "Corresponding entries in both versions of the list (in operational
    state data and configuration) have the same value of the list key."

   An evolution of this position is that entries in a configuration list
   are automatically copied into the operational state list so that now,
   only the operational state list need to read in order to obtain a
   comprehensive picture.  Again, this is something that must be
   specified in the description of the data model; YANG provides no
   assistance in this regard.  Again, quoting from the routing model,

   "If the server accepts a configured user-controlled entry,
    then this entry also appears in the operational state version of the
    list.
   "

   where user-controlled refers to data input as config via NETCONF.

   As data models evolve, it seems possible, if not even likely, that
   the paralleling of data between (operational) state and config will
   be the norm and not just restricted to a few lists - there seems
   little that can only ever appear as config, perhaps such statements
   as 'ospf passive' or 'bgp 192.168.1.1 as 65533' (important as such
   statements are).

4.  Defaults

   While the split between config and state, the latter being any
   'config false' node, has been well-defined since the early days of
   NETCONF, the question of whether or not this two-way split is
   sufficient has led to much discussion, with a proposal for up to
   three boolean substatements for YANG data nodes, leading to eight
   possible combinations with much discussion as to which might be valid
   or useful.





Petch                   Expires November 9, 2014                [Page 4]

Internet-Draft Interactions of I2RS with NETCONF and YANG       May 2014


   One feature to emerge from this is the handling of defaults.  Much of
   what might be configured can be left to take a default value as
   specified in the data model, so that the task of configuring a box
   can be simplified if default values may be omitted.  On the other
   hand, there are times when the existence of a default may be the key
   to understanding why a system is performing as it is and so it should
   also be possible to read default values that the system is using.
   Then there are times when a data node is configured with the value
   that is the default value and this may, or may not, be regarded as
   being in the same condition as if the value were not configured at
   all.

   Three possible treatments of default values were identified, all
   regarded as valid, and all are specified in [RFC6243].  Note that
   while YANG can specify the existence of a default value, the
   treatment of it, as described above, is part of NETCONF - YANG did
   not acquire any additional substatements to defined the treatment of
   defaults.

5.  Editable state

   By contrast, the issue of whether or not it is possible (or
   desirable) to be able to edit operational state has continued to
   generate discussion and here YANG has a part to play.  Clearly such
   editing is a requirement for I2RS.  YANG is an extensible language so
   an additional substatement can be added to data nodes, such as

   i2rs:edit-data

   where edit-data might be a boolean taking the values true or false.
   (The i2rs: is a prefix that is linked to the namespace in which the
   substatement, or indeed any element of YANG that is not in the
   original definition thereof, resides).  This substatement then
   overrides one of 'config false' in that it makes the node editable.

   This substatement could be modelled on the config substatement, in
   that it applies to all nodes in the subtree unless overridden.  The
   substatement would, presumably, only be valid on 'config false'
   nodes.

   Earlier, it was pointed out that 'config true' served a dual purpose;
   it defines the set of nodes that can be edited and it defines the set
   that it is useful to retrieve, with a NETCONF get-config RPC.

   It seems likely, to the author, that this logic does not apply to
   I2RS operations on operational state, that is the set of data that
   I2RS may want to edit will be a subset of the data that is of
   interest to I2RS; read-only statistics, for example, will not be in



Petch                   Expires November 9, 2014                [Page 5]

Internet-Draft Interactions of I2RS with NETCONF and YANG       May 2014


   the former but will be in the latter.  From this it follows that
   while a single, boolean substatement may be sufficient, and that
   anything else can be achieved with filters, it would much simpler and
   less error-prone for I2RS to have a further substatement that defines
   the set of data that is of interest to I2RS so that such data can be
   readily retrieved by an additional NETCONF RPC, get-i2rs perhaps
   (NETCONF, like YANG, is extensible).

   Such substatements would, like config, apply to all nodes in the
   subtree unless overridden.  By analogy with the config substatement,
   it would seem likely that an 'edit-data true' node should not appear
   under an 'edit-data false' node (although quite why is not clear to
   the author).

6.  Persistence

   YANG has no concept of persistence and only a limited one of a
   datastore.  YANG defines a schema tree; whether there is one or more
   than one instantiation thereof and where they are is outside the
   scope of YANG, but is very much a part of NETCONF.

   NETCONF defines a configuration datastore as the data that is
   required to get a device from its initial default state into a
   desired operational state (presuming that protocols such as BGP and
   DHCP will then do the rest of the work that is needed).  By default,
   NETCONF defines a single, running configuration datastore to which
   NETCONF operations are applied.  Curiously, the persistence thereof
   appears not to be specified, the assumption appearing to be that
   changes made thereto are persistent and will be present after a
   reboot of a box.

   Optionally, there can be other datastores, such as a startup
   configuration datastore.  Now changes made to the running datastore
   are not persistent unless and until a NETCONF copy-config RPC is
   performed, from running to startup.

   NETCONF defines a candidate configuration datastore while users can
   define any number of additional datastores.

   A datastore is not just a coherent collection of configuration data.
   YANG contains powerful logical capabilities that allow the validity
   checking of a configuration, with statements such as

      when "../type = 'read' or ../type = 'write'";

   or





Petch                   Expires November 9, 2014                [Page 6]

Internet-Draft Interactions of I2RS with NETCONF and YANG       May 2014


    augment "/rt:routing-state/rt:ribs/rt:rib/rt:routes/rt:route" {
      when "../../rt:address-family = 'v6ur:ipv6-unicast'" { } ... }

   The question for I2RS is whether or not the concept of a datastore is
   applicable, for either of the reasons given above.

   Will I2RS, having made changes to the operational state of a box,
   want to copy those changes to somewhere else, perhaps so that they
   can be re-applied at a later time, such as after a reboot, or is the
   underlying assumption of I2RS that such changes should be lost at a
   reboot?  Will such a copy be required as an audit trail, a check on
   what actually happened, given that the changes that I2RS make are
   likely to be of higher risk to the integrity of the routing system
   than those made via configuration and NETCONF?

   If copying is required, where will the copies be to? on the box or,
   as seems more likely, back to the rest of the I2RS infrastructure,
   the I2RS clients?  Will I2RS also want to create a set of changes on
   the box, like a candidate configuration datastore, so that they can
   be reviewed, validity checked by YANG logical statements, before they
   are applied?

   If such copy operations are required, then how will the data that is
   to be copied be identified?  NETCONF deals with a relatively simple
   set of data, the configuration data that is needed to take a box to
   its operational state.  (Even then, the picture is complicated by
   issues such as defaults).  With I2RS, the amount of data involved is,
   potentially much greater - e.g. the full BGP table - if not so
   diverse - NETCONF must deal with any aspect of configuration whereas
   I2RS, at least initially, is focussed on routing.  Will I2RS need an
   additional YANG substatement to specify which nodes should form part
   of an I2RS datastore?  Will there need to be different types of
   datastore for different types of data within I2RS?  As before, the
   current concept of configuration makes these issues relatively simple
   for NETCONF, more complex where I2RS is concerned.

   Equally it seems unclear whether or not the other property of
   datastores, that of being able to specify validity checks to be
   performed on the data, is applicable to I2RS or not, both in the
   sense of whether or not it makes sense for I2RS to have that
   functionality and whether or not the YANG statements make sense when
   applied to I2RS state data.  Currently such checks are defined as
   valid for any configuration datastore, or for all state data on the
   device along with the running datastore, the latter being applicable
   to the results of a NETCONF get RPC.  The introduction of editable
   operational state complicates this picture further.





Petch                   Expires November 9, 2014                [Page 7]

Internet-Draft Interactions of I2RS with NETCONF and YANG       May 2014


   The answers to these questions may lie with the uses to which I2RS is
   put; tightly scoped use cases would be a help here.

7.  Stability

   Finally, one unanswered question (where use cases would again be of
   help) is what data it is that I2RS is likely to want to change,
   within, say, the routing system.  A routing system is stable in some
   sense of that word (arguably, there will always be some change in the
   global Internet that has yet to propagate all the way to all routers
   but within a limited radius of the box in question, the routing
   system may be considered stable).

   A stable system in engineering is one that, when perturbed, returns
   to its original state.  So make a change in one router and the rest
   of the routing system may seek to update that router and reinstate
   the status quo.  For example, at least conceptually, a change to
   BGP's Adj-RIB-Out will be refreshed from Adj-RIB-In and so lost,
   while a change to Adj-RIB-In will be lost when the router that
   provided the data repeats its advertisement of the route.

   Thinking of the changes I2RS might want to make, it seems likely that
   many, or most, will be changes to what NETCONF/YANG refer to as
   config and not to the operational state.  Whether such changes are
   ephemeral or persistent, in the long term, is then a question of
   which NETCONF configuration datastore the changes are made to,
   running or startup or both.

   Again, use cases might clarify this.

8.  Security Considerations

   This informational memo introduces no security considerations.

9.  Acknowledgements

10.  References

10.1.  Normative References

   [RFC6020]  Bjorklund, M., "YANG - A Data Modeling Language for the
              Network Configuration Protocol (NETCONF)", RFC 6020,
              October 2010.

   [RFC6241]  Enns, R., Bjorklund, M., Schoenwaelder, J., and A.
              Bierman, "Network Configuration Protocol (NETCONF)", RFC
              6241, June 2011.




Petch                   Expires November 9, 2014                [Page 8]

Internet-Draft Interactions of I2RS with NETCONF and YANG       May 2014


10.2.  Informative References

   [RFC6243]  Bierman, A. and B. Lengyel, "With-defaults Capability for
              NETCONF", RFC 6243, June 2011.

Author's Address

   Tom Petch
   Engineering Networks Ltd
   18 Parkwood Close
   Lymm, Cheshire  WA13 0NQ
   UK

   Email: tomSecurity@network-engineer.co.uk





































Petch                   Expires November 9, 2014                [Page 9]