Internet DRAFT - draft-bierman-ncx-smi
draft-bierman-ncx-smi
Internet Engineering Task Force A. Bierman
Internet-Draft netconfcentral.org
Intended status: Standards Track August 2007
Expires: February 2, 2008
Network Configuration Extensions : Structure of Management Information
draft-bierman-ncx-smi-00
Status of this Memo
By submitting this Internet-Draft, each author represents that any
applicable patent or other IPR claims of which he or she is aware
have been or will be disclosed, and any of which he or she becomes
aware will be disclosed, in accordance with Section 6 of BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
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."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
This Internet-Draft will expire on February 2, 2008.
Copyright Notice
Copyright (C) The IETF Trust (2007).
Bierman Expires February 2, 2008 [Page 1]
Internet-Draft NCX-SMI August 2007
Abstract
The standardization of network configuration interfaces for use with
the NETCONF protocol requires a structured data modeling environment
which promotes human usability, multi-vendor interoperability, and
reuse of existing IETF data models written in SMIv2. The Network
Configuration Extensions (NCX) are a set of specifications intended
to address NETCONF data modeling issues. This document defines a
Structure of Management Information (SMI) suitable for use with the
NETCONF protocol, intended to promote a more consistent, manageable,
and interoperable infra-structure for ongoing development of NETCONF-
based management interfaces.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.1. Requirements Notation . . . . . . . . . . . . . . . . 4
1.1.2. NETCONF Terms . . . . . . . . . . . . . . . . . . . . 4
1.1.3. Terms . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2. Problem Statement . . . . . . . . . . . . . . . . . . . . 6
1.3. Solution Requirements . . . . . . . . . . . . . . . . . . 9
2. NCX Framework . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1. Framework Overview . . . . . . . . . . . . . . . . . . . . 11
2.2. Owners . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3. Namespaces . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.1. Reserved Namespaces . . . . . . . . . . . . . . . . . 15
2.3.2. User-Defined Namespaces . . . . . . . . . . . . . . . 16
2.4. Capabilities . . . . . . . . . . . . . . . . . . . . . . . 16
2.5. Data Types . . . . . . . . . . . . . . . . . . . . . . . . 17
2.6. Applications . . . . . . . . . . . . . . . . . . . . . . . 17
2.6.1. Application Header Nodes . . . . . . . . . . . . . . . 18
2.6.2. Application Independent Definitions . . . . . . . . . 20
2.6.3. Application Specific Definitions . . . . . . . . . . . 20
2.7. Configuration Databases . . . . . . . . . . . . . . . . . 21
2.7.1. Configuration Root . . . . . . . . . . . . . . . . . . 21
2.7.2. Configuration Data Classification . . . . . . . . . . 22
2.7.3. Configuration Locking . . . . . . . . . . . . . . . . 22
2.8. RPC Methods . . . . . . . . . . . . . . . . . . . . . . . 23
2.8.1. RPC Classification . . . . . . . . . . . . . . . . . . 23
2.8.2. Reserved RPC Methods . . . . . . . . . . . . . . . . . 24
2.8.3. User-Defined RPC Methods . . . . . . . . . . . . . . . 25
2.9. Objects . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.10. Notifications . . . . . . . . . . . . . . . . . . . . . . 26
2.10.1. Notification Event Classes . . . . . . . . . . . . . . 27
2.11. Non-Volatile Configuration Storage . . . . . . . . . . . . 27
Bierman Expires February 2, 2008 [Page 2]
Internet-Draft NCX-SMI August 2007
3. NCX Naming Conventions . . . . . . . . . . . . . . . . . . . . 30
3.1. Names . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2. Identifiers . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.1. Definition Identifiers . . . . . . . . . . . . . . . . 31
3.2.2. Object Identifiers . . . . . . . . . . . . . . . . . . 31
3.2.3. Instance Identifiers . . . . . . . . . . . . . . . . . 33
4. NCX Agent Security Requirements . . . . . . . . . . . . . . . 37
4.1. Configuration Database Security . . . . . . . . . . . . . 37
4.2. NETCONF Session Security . . . . . . . . . . . . . . . . . 37
4.3. RPC Security . . . . . . . . . . . . . . . . . . . . . . . 38
4.4. Data Model Access Control . . . . . . . . . . . . . . . . 38
5. NETCONF Interoperability Guidelines . . . . . . . . . . . . . 40
5.1. NETCONF Protocol Operation Usage Guidelines . . . . . . . 40
5.2. Agent Conformance Requirements . . . . . . . . . . . . . . 42
5.3. Definition Change Control Guidelines . . . . . . . . . . . 42
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 45
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46
7.1. Owner Registry . . . . . . . . . . . . . . . . . . . . . . 46
7.2. Application Header Node Registry . . . . . . . . . . . . . 47
7.3. Data Model Schema Location Registry . . . . . . . . . . . 47
8. Security Considerations . . . . . . . . . . . . . . . . . . . 48
9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 49
9.1. Normative References . . . . . . . . . . . . . . . . . . . 49
9.2. Informative References . . . . . . . . . . . . . . . . . . 49
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 50
Intellectual Property and Copyright Statements . . . . . . . . . . 51
Bierman Expires February 2, 2008 [Page 3]
Internet-Draft NCX-SMI August 2007
1. Introduction
The standardization of network configuration interfaces for use with
the NETCONF [RFC4741] protocol requires a structured data modeling
environment which promotes human usability, multi-vendor
interoperability, and reuse of existing IETF data models written in
SMIv2 [RFC2578]. This document defines a Structure of Management
Information suitable for use with the NETCONF protocol, in order to
help promote a more consistent, manageable, and interoperable infra-
structure for ongoing development of NETCONF-based management
interfaces.
The Network Configuration Protocol defines an XML-based protocol for
managing network device configuration databases. However, there is
no specifications for the inter-operable organization of a conceptual
NETCONF configuration database, and precisely how the standard
NETCONF protocol operations behave on the configuration database.
This document discusses the following concepts:
o NCX Framework
o NCX Naming Conventions
o NCX Agent Security Requirements
o NETCONF Interoperability Guidelines
1.1. Terminology
1.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.1.2. NETCONF Terms
The following terms are defined in RFC 4741 and are not redefined
here:
o agent
o client
o manager
Bierman Expires February 2, 2008 [Page 4]
Internet-Draft NCX-SMI August 2007
o operation
o RPC
o RPC method
o server
o session
o user
1.1.3. Terms
The following terms are used throughout this documentation:
application: A set of functionally-related, owner-specific,
conceptual data modeling interfaces.
data model: Formal representation of the application and protocol
specific components of a conceptual network management
programmatic interface.
data model module: Container of definitions pertaining to some
portion of one or more data models.
object: A definition within a data model module that represents
conceptual management data, which can be accessed by a manager via
a network management protocol. The data contained within an
object should be functionally related in some manner.
notification: A definition within a data model module that
represents a conceptual notification message construct.
method: A definition within a data model module that represents a
conceptual remote procedure call (RPC) construct.
owner: The naming authority for a data model definition. All owner
names must be globally unique, maintained in a registry by IANA.
All data model definition names within the scope of a single owner
must be unique.
NETCONF base: This term usually refers to the namespace URI value
assigned to the NETCONF base schema in RFC 4741. It has also been
used to refer to the core set of operations mandated by the
advertisement of the capability URI for the NETCONF 'base', or the
capability itself.
Bierman Expires February 2, 2008 [Page 5]
Internet-Draft NCX-SMI August 2007
NETCONF data model: The high-level organization and framework which
encompasses all protocol operations, conceptual data definitions,
and instances of those definitions.
object identifier: A string which identifies a particular object.
instance identifier: A string which identifies a particular instance
of an object.
1.2. Problem Statement
Network operators and network equipment (NE) software developers need
a lot of expertise, and spend a lot of time, to configure, control,
and monitor network devices.
Network configuration has traditionally been very proprietary in
nature, and based on screen-scraping Command Line Interface (CLI)
commands that can be stored in a textual file. Configuration
management is usually done manually, and is prone to human-introduced
error. Often, scripts or applications which use the CLI as a
programmatic interface are developed ad-hoc to automate and simplify
some repetitive management tasks.
Programmatic interfaces built on top of the CLI are insufficient for
the following reasons:
o CLI is proprietary, requiring extra effort by operators to learn
and manage different CLIs for different equipment.
o CLI lacks a formal description language to completely define all
properties of the programmatic interface
o CLI lacks any structured error responses, and very little
information about specific errors is available to applications
o CLI lacks any sort of formalized transaction mechanism, to safely
lock, alter, and unlock configuration databases in a multi-
application environment.
NETCONF (by design) separates the application-specific content within
a network management operation from the operation itself. There is
currently no standard data model content defined for NETCONF. Since
it uses XML encoding, any data modeling language that describe XML
instance documents can be used to define management definitions for
use with the NETCONF protocol.
Typically, XML Schema Definition (XSD) is used to describe valid XML
instance documents for a particular XML application. However, XSD is
Bierman Expires February 2, 2008 [Page 6]
Internet-Draft NCX-SMI August 2007
rather difficult for humans to work with efficiently. It is verbose
and complex, difficult to read and write, but is still an excellent
formal description mechanism for applications to use.
Because XSD is so difficult for humans to understand and define
without errors, moving from CLI to XML based configuration management
is not that easy. An application cannot really use an XSD schema to
manage a network device until the data model definitions accurately
reflect the native programmatic interface available from the NETCONF
agent.
This 'human usability' problem is especially important in the area of
network management because increased complexity increases the risk
that something will break in an unexpected way. Network operators
and protocol developers need to fully understand that the XML data
model correctly reflects the normative specification found in text.
This has proved difficult when using XSD to define the XML syntax.
Just as important as the human usability problems is the fact that
XSD is designed and intended for use as a generalized formal
definition of the content of XML instance documents.
XSD does not address network management problems that have long been
recognized and partially solved:
o extensible modularity
o definition and module lifecycle
o change control guidelines
o user documentation
o implementation conformance
o maximum protocol access
o integration with existing SNMP-based data structures
o agent implementation conformance
o conditional presence tests based on referential integrity or
protocol functionality
o user-defined RPC methods
o user-defined notifications
Bierman Expires February 2, 2008 [Page 7]
Internet-Draft NCX-SMI August 2007
o protocol operation dependent schema
o conditional definitions based on platform capabilities
o data model conformance requirements
Although it is possible to arbitrarily extend the <appinfo> element,
this XSD mechanism is by definition non-standard, and 'off-the-shelf'
XSD-based applications will not be able to do anything useful with
information encoded in this manner.
In addition to the many aspects of standards-based data model
definition and maintenance that are not directly addressed by XSD.
The NETCONF protocol uses data model schema differently, depending on
the protocol operation mode.
There are four different usage-based representations, which would
each require its own XSD schema, that are conceptually and
simultaneously supported by a NETCONF Data Model:
full: Conceptualization of all objects and all possible instances.
This is the canonical representation that is defined as the
combined contents of all data model modules used within all
managed systems. The data properties represent the syntax,
semantics, and requirements of a data model, independent of all
protocol operations.
concise: Conceptualization of all object instances within a managed
system. Only the writable object values which have actually been
configured to non-default values by a management application are
within this representation. This is also called the no-defaults
representation.
filter Conceptualization of all permutations of all valid subtree
filter expressions which are possible for a particular object. An
XSD would need to treat every element and every attribute as
optional in order to support this representation. In addition,
unknown namespaces, elements and attributes are not errors, but
rather valid filter components which simply produce no matching
output from the underlying data model instances within the agent.
This is also called the subtree filter representation.
edit-config Conceptualization of all permutations of all valid data
model instances which are possible for a particular object, which
permit the NETCONF edit-mode 'operation' attribute (for the edit-
config protocol operation) to be present. An XSD would need to
include this XML attribute in every XML element within the
conceptual configuration data model to represent this mode.
Bierman Expires February 2, 2008 [Page 8]
Internet-Draft NCX-SMI August 2007
1.3. Solution Requirements
There is a need for a comprehensive management framework for the
NETCONF protocol which provides the following features:
o An extensible and interoperable conceptual model of the correct
behavior of a NETCONF agent must be defined.
o A framework completely compatible with the multiple configuration
database architecture defined in the NETCONF protocol.
o A mechanism to classify objects wrt/ the NETCONF protocol
operations (e.g., 'config' vs. 'state') must be supported.
o A mechanism to identify session-specific and/or transient (i.e.,
not NV-stored) configuration data is needed.
o Multiple owners must be able to define and maintain data model
interfaces within a single management framework.
o Support for user-defined RPC methods and notifications must be
supported.
o Data model lifecycle mechanisms to evolve management interfaces
over time must be supported.
o One set of data model naming conventions must be defined.
o Mechanisms for modular data definitions (such as found in SMIv2)
must be supported.
o Mechanisms for arbitrarily complex indexed, tabular data, must be
supported.
o All data types found in XSD must be supported.
o All data types found in SMIv2 must be supported.
o The data naming scheme must be compatible with NETCONF Xpath
filter 'select' and 'error-path' strings.
o A conceptual framework for standardized, interoperable application
of the NETCONF 'edit-config' protocol operation on arbitrary data
models must be specified.
o A conceptual framework for standardized, interoperable enforcement
of user-configured access control mechanisms on arbitrary data
models must be defined.
Bierman Expires February 2, 2008 [Page 9]
Internet-Draft NCX-SMI August 2007
o A conceptual framework for standardized, interoperable
identification of NETCONF notification message content must be
defined.
o Mechanisms to reuse SMIv2-defined network management data and
agent instrumentation must be defined.
o Mechanisms to translate SMIv2 MIB object definitions into
conceptual NETCONF MIB objects must be defined.
o Mechanisms for augmentation of conceptual data structures must be
provided, such that any owner can extend any object definition in
a easy-to-use and interoperable manner.
Bierman Expires February 2, 2008 [Page 10]
Internet-Draft NCX-SMI August 2007
2. NCX Framework
This section discusses the following concepts related to the NCX
framework:
o Owners
o Namespaces
o Capabilities
o Data Types
o Applications
o Configuration Databases
o RPC Methods
o Objects
o Notifications
o Non-Volatile Configuration Storage
o Agent Conformance Requirements
o Definition Change Control Guidelines
2.1. Framework Overview
The NCX framework imposes some clarifying language restrictions upon
the XML usage within the contents of a configuration database. This
is done to help promote a more consistent, manageable, and
interoperable infra-structure for ongoing development of NETCONF-
based management interfaces.
Not every possible construct available in XML is utilized in the
framework. Instead, a user-friendly, yet comprehensive subset of all
well-formed XML is defined, providing data modeling constructs
compatible with SMIv2, XSD, and XPath.
The NCX framework is designed to be independent of the particular
data modeling language one might use to describe schema for valid
instances of the data model conceptual data structures. The XML
structure itself is discussed instead.
The basic data organization of the conceptual NETCONF MIB (as
Bierman Expires February 2, 2008 [Page 11]
Internet-Draft NCX-SMI August 2007
utilized within an NCX agent) is shown in the diagram below:
NCX agent
+------------+
| conceptual |
| root |
| <config> |
+- - - - - --+
|
+------------------------+--------------------+
V V V
+-------------+ +-----------+ +-----------+
| <candidate> | | <running> | | <startup> |
| config | ------> | config | ------> | config |
+-------------+ +-----------+ +-----------+
|
+-----------------------+----------------------+
V V V
+-------------+ +-----------+ +---------------+
| 'acme' | | 'ietf' | | 'enterpriseN' |
| owner | | owner | > | owner |
+-------------+ +-----------+ +---------------+
| | |
| | |
V V V
+-----------+ +-----------+ +---------+
| <foo> | | <netconf> | | <bar> |
| app hdr | | app hdr | | app hdr |
| node | | node | | node |
+-----------+ +-----------+ +---------+
|
+--------------------+---+
V V
+----------------+ +-----------+
| <eventStreams> | | <monitor> |
| data model | | data |
| object | | model obj |
+----------------+ +-----------+
|
+------------------------+----------------------+
V V V
{Additional layers, e.g., child nodes and nested objects)
Figure 1
Bierman Expires February 2, 2008 [Page 12]
Internet-Draft NCX-SMI August 2007
An NCX agent is a NETCONF agent that has the following properties:
o An agent consists of one or more configuration databases, which
can be accessed with the NETCONF protocol, and likely other
protocols.
o A configuration database is a conceptual construct. It must be
administered as if there is only one of them. The contents of a
configuration database be remain conceptually identical,
regardless of the particular configuration database being used for
any protocol operation.
o The <running> configuration is a special (mandatory) conceptual
database containing all the current configuration and state
parameters in affect at the moment.
o An NCX agent must support the <running> configuration, even if it
is only used to support the <get> operation. The responses for
NETCONF retrieval operations must return data from this
configuration database in XML encoding.
o An NCX agent may optionally support the global <candidate>
configuration, but it must be implemented exactly as defined in
RFC 4741. A separate capability and different configuration
database must be defined if a different model is needed instead
(e.g., multiple per-session candidate configurations). This
configuration database must be encoded in XML.
o An NCX agent may optionally support the global <startup>
configuration, but it must be implemented exactly as defined in
RFC 4741. The standard <copy-config> operation must be supported
to update the contents of non-volatile storage, even if other
mechanisms are made available as well. The '#distinct-startup'
capability must be advertised in the capability list.
o The actual output format of the <startup> configuration is not
required to be XML, like the other configuration databases. An
agent is not required to support any protocol operations for this
database at all, except as the target of a <copy-config>
operation.
o The <candidate> configuration is a special (optional) conceptual
database containing all the pending modifications to the <running>
configuration database. It is part of the standard ':candidate'
capability, which allows configuration changes to be gathered in
multiple steps, and applied to the device all at once, using the
<commit> operation.
Bierman Expires February 2, 2008 [Page 13]
Internet-Draft NCX-SMI August 2007
o The <startup> configuration is a special (optional) conceptual
database containing all the configuration parameters which should
be used upon the next reboot of the device.
o If this configuration database is present, then an explicit <copy-
config> operation by the manager is required to store the contents
of the <running> configuration database to non-volatile storage.
o If this configuration database is not present, then the agent is
responsible for keeping the contents of the <running>
configuration database in synch with non-volatile storage.
o Each application header node contains zero or more data objects,
which can use the syntax of any valid XML data type, and contain
simple or complex content.
The following diagram shows the basic conceptual system components
and how they relate to each other within the context of the NETCONF
protocol messages, or PDUs. The framework does not consider any
additional management infra-structures which are not supported by the
NETCONF protocol. For example, proxy, tiered, multi-manager-to-
agent, and manager-to-multi-agent network management architectures
are outside the scope of this document.
+-----------+ +-----------+
| | | |
| NETCONF | <rpc> request | NETCONF |
| Manager | ----------------------> | Agent |
| | | |
| schema | <rpc-reply> response | <running> |
| apps | <--------------------- | configs |
| databases | | apps |
| | <notification> message | objects |
| | <--------------------- | methods |
| | | events |
+-----------+ +-----------+
Figure 2
Bierman Expires February 2, 2008 [Page 14]
Internet-Draft NCX-SMI August 2007
2.2. Owners
All NCX definitions are specified within the scope of one owner,
indicated by a globally unique owner name string. It is expected
that the IANA registration service will be used to maintain the
registry owner name strings.
Ownership of a data model definition implies publication and change
control responsibility for the entire data model. It does not imply
any restrictions on use or interoperability of XML instance documents
utilizing those data model definitions, within a NETCONF session.
There are two reserved owner string names at this time:
ietf Owner of all standards-track, NETCONF-related protocol
definitions, SMI definitions, and IETF defined textual conventions
and data models.
ncx Owner of the data definitions associated with NCX itself.
There are also reserved owner name strings that correspond to
Enterprise Identifiers in IANA, which are used in SMIv2 to provide a
subtree within the entire MIB for vendor-specific definitions.
The following URL identifies the Enterprise numbers already in use:
http://www.iana.org/assignments/enterprise-numbers
The special string 'enterprise' concatenated with the Enterprise
Identifier value (with no leading zeros) is the default owner string
for the organization that owns the specific Id assignment in IANA.
For example, the owner string value 'enterprise9' would indicate
Enterprise number nine, which is registered to 'ciscoSystems'.
The owner name 'enterprise0' is reserved, and identifies the owner
named 'ietf'.
2.3. Namespaces
All definitions are specified within a particular XML Namespace.
This is a globally unique URI string value. It is expected that a
registration process such as IANA will be used to register namespace
URI values and their meaning.
2.3.1. Reserved Namespaces
There are three reserved namespace URI string values at this time.
Bierman Expires February 2, 2008 [Page 15]
Internet-Draft NCX-SMI August 2007
1. urn:ietf:params:xml:ns:netconf:base:1.0
2. http://www.w3.org/2000/xmlns
3. http://netconfcentral.org/ncx/1.0
2.3.2. User-Defined Namespaces
It is expected that many additional namespaces will be defined as
more data models are created. Some conventions to manage these
namespace assignments are needed to encourage robust interoperable
implementations.
It is strongly suggested that namespace URIs do not contain module
version information, which is likely to change several times over the
lifetime of the module containing definitions within that namespace.
Instead, the schema document file names, and or meta-data within the
file itself should be used to identify the various versions (of the
module) over time.
If XSD is used to specify the schema, then the 'version' attribute
within the <schema> element should be updated appropriately each time
the published version of the document is changed.
2.4. Capabilities
NETCONF capabilities are an important part of the NETCONF protocol.
However, agent vendors should use this tool carefully. Capabilities
should be used only as a last resort, or if the capability represents
some physical aspect of the managed device (e.g., card type 'foo' is
present).
There are no restrictions on what can be advertised in a <capability>
element within a NETCONF <hello> message.
An agent must advertise a 'NETCONF base' capability for every version
of the protocol it supports. An agent must support version 1.0, as
specified in RFC 4741.
An agent may choose to advertise the modules or namespaces or schema
it supports in the <hello> message, but this must be done in a non-
standard way at this time.
By convention, a capability contains version information, since it is
just a string, and cannot contain meta-data, such as a 'version'
attribute.
Bierman Expires February 2, 2008 [Page 16]
Internet-Draft NCX-SMI August 2007
Capabilities cannot be changed once they are published. The
'contract' established by the defined agent behavior associated with
the capability must never change. I different capability string must
be used for each variant of the capability.
Capability definitions must not contradict or negate any specified
behavior in any other concurrently advertised capability definition.
A capability may extend the behavior of another capability in some
fashion, such as the '#confirmed-commit' capability which extends the
behavior of the <commit> operation, which is defined by the
'#candidate' capability.
2.5. Data Types
Data type definitions are considered to be abstract constructs that
cannot be accessed by any protocol mechanism. They are purely
conceptual, like a TEXTUAL-CONVENTION macro in SMIv2.
High level conceptual data types should be defined in a reusable
manner whenever possible.
All the conceptual base data types defines in XSD and SMIv2 should be
supported by an agent, but the actual data models present will
determine which data types are actually supported.
2.6. Applications
All definitions are specified within the context of a particular NCX
Application. This is owner-unique string value, which follows the
NCX Name syntax and semantics.
An application has significance within XML. Each application has its
own namespace, and all accessible objects for the application are
defined in this namespace. [A future version of NCX may allow unique
namespace assignments for application-independent objects.]
Protocol-accessible constructs (e.g., RPC methods, objects, and
notifications) must be associated with a single application.
Conceptually, NCX data type definitions do not need a namespace
assignment, since only objects are accessible via protocol
operations, but they are assigned one anyway for XSD translation
purposes.
The special application name types is used (by convention) in modules
which contain only reusable data types and no accessible objects.
Bierman Expires February 2, 2008 [Page 17]
Internet-Draft NCX-SMI August 2007
Application names should be unique within the scope of a single
owner, and must be unique within the scope of a single XML namespace.
2.6.1. Application Header Nodes
An application header node is the top-level container for object
instances, for a specific application. All application header nodes
are child nodes of the conceptual configuration root.
An application header node is a top-level element within the NETCONF
MIB. It must be defined within a globally unique namespace. The
name of the application must match the name of the element. There is
a 1:1 static relationship between the namespace URI for an
application header node and the element name.
This node serves as the one and only 'root' for all data model
objects defined within the application. This restriction makes it
easier for humans to remember the MIB structure and make filtering
simpler, especially subtree filtering, which cannot be used to
discover the elements present in a single namespace.
There are no restrictions on the namespaces used for objects (which
are child nodes of the application header node). It is suggested
that the application namespace be used if possible, to simplify
namespace usage, but the selection of target namespace for a
particular object is up to the data model publisher.
Application header nodes should be defined with an XSD, in a manner
that allows substitution group replacement and extensible addition of
objects to the application over time.
An application header node should be defined as an extension to the
'configInlineType', found in the XSD in RFC 4741.
The following XSD fragment example shows how an application header
node and an object within it could be defined using XSD:
<!--
Type for 'foo' element, child of 'config' element
-->
<xs:complexType name="fooAppType">
<xs:complexContent>
<xs:extension base="nc:configInlineType">
<xs:sequence>
<xs:element ref="fooObject" minOccurs="0"
maxOccurs="unbounded"/>
Bierman Expires February 2, 2008 [Page 18]
Internet-Draft NCX-SMI August 2007
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--
Type for abstract child of 'foo' element
-->
<xs:complexType name="fooObjectType">
<xs:complexContent>
<xs:extension base="fooAppType"/>
</xs:complexContent>
</xs:complexType>
<!--
Element for the 'foo' application header node element
-->
<xs:element name="foo" type="fooAppType" />
<!--
Element for abstract child of 'foo' element
-->
<xs:element name="fooObject" type="fooObjectType" abstract="true"/>
<!--
Type for a concrete object 'contact' for the 'foo' application
-->
<xs:complexType name="Contact">
<xs:complexContent>
<xs:extension base="fooObjectType">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element address"address" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--
Element for a concrete object 'contact' for the 'foo' application
-->
<xs:element name="contact" type="Contact" />
Figure 3
The following XML fragment example shows an instance document for the
Bierman Expires February 2, 2008 [Page 19]
Internet-Draft NCX-SMI August 2007
object and application from the previous example.
<config xmlns="NEXCONF-base">
<foo xmlns="foo-app-NS">
<contact>
<name>Fred Flintstone</name>
<address>17 Pebble Lane, Bedrock</address>
</contact>
</foo>
</config>
Figure 4
2.6.2. Application Independent Definitions
All conceptual data types are application-independent. They are
considered to be abstractions, similar to a TEXTUAL-CONVENTION in
SMIv2.
Other definitions, such as owner names and namespace URIs, are also
used independent of any particular application.
2.6.3. Application Specific Definitions
XSD schema or NCX data model modules are used to specify management
definitions for use with the NETCONF protocol. Mechanisms to specify
the following constructs should be provided:
o Configuration Database Data Objects
o Event Notification Messages
o RPC Method Definitions
Every NCX module must represent definitions for exactly one owner.
Any number of modules can be used to contain the definitions for an
application, which all share the same owner-specific naming scope and
application-specific XML namespace.
Data type definitions are owner-specific, and can be used by any
owner or any application.
Bierman Expires February 2, 2008 [Page 20]
Internet-Draft NCX-SMI August 2007
2.7. Configuration Databases
A NETCONF configuration database is a conceptual collection of
network management information, which can be manipulated and
retrieved with standard protocol operations and user-defined
operations.
The <running> configuration database is the central component of a
NETCONF-managed agent. It is a mandatory database, which represents
the current configuration and state of the entire managed device.
All NCX configuration databases contain only applications and their
associated objects, except the special <running> configuration, which
can contain configuration and other state-related data, such as
statistics.
Configuration databases are defined in detail in RFC 4741, and are
used in NCX exactly as defined in that RFC, except that the
conceptual database is considered to contain a collection of
application header nodes, as supported by a particular agent. Each
application node in turn will contain the modeling data associated
with that application.
An XML instance documentation or XML PDU representation of a
configuration database must use a top-node element to contain all of
the application header nodes. For example, the <filter> element
within the <get> or <get-config> operations.
When generating <copy-config> output, the <config> element from the
NETCONF base namespace should be used to contain all the application
header nodes.
2.7.1. Configuration Root
One of the basic components of the NCX Data Model is the concept of
the configuration root. This is a conceptual container, which
represents the root of all contents of a NETCONF configuration
database.
A configuration root is not bound to a specific configuration
database. The contents (i.e., child nodes) can conceptually be
copied or moved between configuration databases (e.g., copy <running>
to <startup>).
All configuration databases have a configuration root, represented in
Xpath with the instance identifier value '/';
Bierman Expires February 2, 2008 [Page 21]
Internet-Draft NCX-SMI August 2007
2.7.2. Configuration Data Classification
All NCX data model content accessible via a protocol operation must
specify a configuration data classification value, and conform to its
particular semantics.
There are three classifications defined at this time:
config: All objects using the data type are considered to be
configuration data, and will be affected by protocol operations
which alter non-volatile configuration storage. Objects with this
classification will be saved in non-volatile configuration
storage, and also be returned when retrieved with the <get-config>
protocol operation.
tconfig: All objects using the data type are considered to be
transient configuration data, and will not be affected by protocol
operations which alter non-volatile configuration storage.
Objects with this classification will not be saved in non-volatile
configuration storage, but will be returned when retrieved with
the <get-config> protocol operation.
state: All objects using the data type are considered to be state
data, and will not be affected by protocol operations which alter
non-volatile configuration storage. Objects with this
classification will not be saved in non-volatile configuration
storage, and will not be returned (i.e., filtered-out) when
retrieved with the <get-config> protocol operation.
2.7.3. Configuration Locking
NETCONF locking mechanisms provide a way to restrict write access to
the specified configuration database to the NETCONF session that
requested the lock. This lock will be in affect until the <unlock>
operation is invoked by the manager (on that session).
A lock must be dropped if the session that hold the session is
terminated,
If an agent discovers an session in a non-recoverable error
condition, it should immediately terminate that session and release
any configuration locks it holds.
All NCX agent implementations must support the global configuration
database locking mechanism defined in the NETCONF protocol.
An agent may optionally support a partial database locking
capability, in which only a static subset of the entire database is
Bierman Expires February 2, 2008 [Page 22]
Internet-Draft NCX-SMI August 2007
locked.
A global configuration lock must apply to all access to the database,
nut just by the NETCONF protocol. The agent must use locking
mechanisms outside the scope of this document to ensure this
requirement is met.
If a NETCONF-specific partial lock is held by a session, and external
access mechanisms (e.g., SNMP protocol) cannot correctly lock the
exact subset of data, then the agent must ensure that the database is
globally locked wrt/ these external access mechanisms.
A manager should lock the configuration databases within a session as
short a time period as possible.
An agent should support some form of configuration change event
notification, if NETCONF Notifications are supported, and generate a
configuration change event in a timely manner, when changes to the
<running> configuration are detected. The agent may choose not to
generate more than one such event within a given time interval (e.g.,
1 minute) in order to save system resources.
2.8. RPC Methods
The top-level interface in NCX (and NETCONF) is the remote procedure
call. All management requests are made using an <rpc> element, and
all corresponding management responses are made using an <rpc-reply>
element, as defined in the NETCONF standard.
2.8.1. RPC Classification
All RPC methods must be classified by the data model writer according
to the main purpose of the RPC method. This is a general
classification and is not intended to be used as a robust filtering
mechanism. Instead, it is intended to provide a simple mandatory
classification mechanism to help enforce access control rules during
RPC method invocation.
The following classifications are defined:
other The RPC method is some unknown type, defined outside the scope
of the NCX data model framework.
config The RPC method is related to configuration management, and
may modify and/or retrieve configuration database content in some
manner.
Bierman Expires February 2, 2008 [Page 23]
Internet-Draft NCX-SMI August 2007
exec The RPC method is related to some sort of executable procedure,
such as a ping operation. The operation should not modify any
configuration databases.
monitor The RPC method is related to some sort of monitoring
procedure, such as statistics retrieval, or retrieval of
configuration data. The operation must not modify any
configuration databases.
debug The RPC method is related to some sort of debugging procedure,
and may enable, modify, or disable some sort of debugging or
logging service on the agent. The operation must not modify any
configuration databases.
Combinations of these classification values are discouraged within a
single RPC method. They are not supported within the NCX data model
framework at this time. Data model designers should avoid changing
the RPC method classification based on different values of RPC
parameters, determined at RPC invocation time.
2.8.2. Reserved RPC Methods
There are several standard RPC methods, owned by 'ietf', that are
defined within the NETCONF protocol, The RPC classification for each
operation is also shown:
o get-config (monitor)
o edit-config (config)
o copy-config (config)
o delete-config (config)
o get (monitor)
o lock (config)
o unlock (config)
o validate (monitor)
o commit (config)
o discard-changes (config)
o close-session (exec)
Bierman Expires February 2, 2008 [Page 24]
Internet-Draft NCX-SMI August 2007
o kill-session (exec)
o create-subscription (config)
It is strongly suggested that these RPC method names never be used in
user-defined data models, regardless of the namespace specified.
2.8.3. User-Defined RPC Methods
User-defined RPC methods are associated with a specific namespace and
application. Any number of input and output parameters can be
specified, as long as the <rpc> and <rpc-reply> elements conform to
the definition in RFC 4741.
All user-defined RPC methods must be appropriately classified
somehow, such that the agent and manager can identify potential
security risks resulting from side effects of an RPC method
invocation.
2.9. Objects
Objects are application-specific conceptual data structures located
within a configuration database. They are similar to MIB objects in
SNMP, and can be directly accessed or manipulated with standard or
user-defined RPC methods.
Every object has the following basic properties:
namespace: An globally unique namespace assignment. This should not
change over the lifetime of the object.
identifier A globally unique identifier string associated with the
object. It must be complete and unambiguous.
semantics Each object has specific semantics associated with it,
defined with some sort of data modeling language, such as XSD.
syntax Each object has a specific syntax, which must be well-formed
XML, must not contain any DTDs, and should not include any mixed-
mode XML. The syntax is defined with a data modeling language
such as XSD.
An NCX agent must follow a more restrictive set of naming guidelines
than XML permits.
o Every object must be defined within a namespace.
Bierman Expires February 2, 2008 [Page 25]
Internet-Draft NCX-SMI August 2007
o Every object name within the same namespace must be unique, (as
specified in XML).
o Every object name for sibling child nodes of same application
header node must be unique, regardless of the namespace used.
o Every application header node name defined by the same owner must
be unique, regardless of namespace used.
Objects can be nested within other objects. There are some
guidelines, but no strict rules, for placement of an object within
the subtree of its application header node. A simple scalar object
or complex, nested tabular object can be defined to be located as a
direct child of the application header node.
NETCONF protocol error processing is affected by the conceptual
containment boundary implied by an object's contents. The object
boundary represents the fate-sharing boundary for a single invocation
of any configuration database edit operation.
If the 'continue-on-error' option in the <edit-config> operation is
used, then errors detected within the a particular conceptual object
will not impact execution of the edit operation on other objects (if
any).
2.10. Notifications
The <notification> element is generated by a NETCONF agent if
notification delivery is configured for a particular session. A
notification message can contain an arbitrary amount of data from the
<running> (or other) configuration. There are no restrictions on the
data placed within notification messages, however, care should be
taken to secure the transfer of sensitive data.
Every NCX notification has shares the same basic structure, and
should support these basic properties:
event type: The event type is a owner-unique name string (QName)
used to identify a particular event notification message type.
This string value is used to define the name of the child element
of the <notification> element. The namespace for this element is
specified by the data model writer,
event class: Each event notification should be associated with one
event classification type, defined in the next section. this
functional classification can be used for filtering and access
control purposes.
Bierman Expires February 2, 2008 [Page 26]
Internet-Draft NCX-SMI August 2007
event data: Each event notification may optionally include an
arbitrary amount of XML-encoded data, within the XML element
associated with the event type. Only complex data (i.e., no mixed
mode data) should be included in this part of a notification
message. Care must be taken to ensure that a notification which
contains restricted data (for a particular session) not be
delivered to that unauthorized session.
2.10.1. Notification Event Classes
The event classification mechanism uses a set of generalized
enumeration value to assist a manager configure filtering or access
control mechanisms, to control the delivery of notifications to a
NETCONF session.
It is expected that the IETF will standardize specific values and
semantics for this generalized classification string. At this time,
the format of this string is limited to any valid UTF-8 string
between 1 and 1024 characters in length.
It is expected that vendors will develop additional, more complex,
event classification mechanisms which could be used in addition to
this mandatory but generalized event classification mechanism.
2.11. Non-Volatile Configuration Storage
The data representation capabilities of every configuration database
may not be the same within an agent. For example, it is not required
in the NETCONF protocol to allow edit operations on the <startup>
configuration. Some implementations store configurations in non-
volatile memory in a different format than XML. This is a common
practice an routers and switches.
Although the NETCONF protocol does not prohibit alternate formats for
configuration storage, it does not support it either. Therefore, the
'with-defaults' extension has been added to suppress the output of
configuration data instances which contain the default value for that
parameter.
By default, an NCX configuration database is saved in XML format,
using a top-level (root) element named <config>, in the NETCONF base
namespace.
The 'with-defaults='false' option produces the smallest possible
output for NV-storage (or <get-config> retrieval), but assumes the
default value will never change. Care must be taken by an agent,
such that a newer software release does not change the default value
defined for a particular configuration parameter.
Bierman Expires February 2, 2008 [Page 27]
Internet-Draft NCX-SMI August 2007
By default, configurations are saved as XML instance documents, in
which the top-level element is called <config>. The following
example shows an XML configuration file. The XML directive on the
first line should be present to identify the content and its
encoding.
The following example shows a top-level 'config' container with
application header nodes for the 'nc-agent' and 'security',
containing some data object values. The 'nc-agent' application shows
an 'nc-transport' object configured, and the 'security' application
contains an 'ncx-access'
<?xml version="1.0" encoding="UTF-8"?>
<config>
<nc-agent xmlns="http://example.com/xsd/nc-agent">
<nc-transport>
<bindings>
<binding>
<id>1</id>
<protocol>ssh</protocol>
<port>830</port>
</binding>
<binding>
<id>2</id>
<protocol>ssh</protocol>
<port>22</port>
</binding>
</bindings>
</nc-transport>
</nc-agent>
<security xmlns="http://example.com/xsd/security">
<ncx-access>
<mode>strict</mode>
<groups>
<group>
<name>control-staff</name>
<users>
<user>andy</user>
<user>fred</user>
</users>
</group>
<group>
<name>monitor-staff</name>
<users>
<user>wilma</user>
<user>barney</user>
Bierman Expires February 2, 2008 [Page 28]
Internet-Draft NCX-SMI August 2007
</users>
</group>
</groups>
<rpc-type-acls>
<rpc-type-acl>
<group>control-staff</group>
<rpc-types>config monitor debug exec other</rpc-types>
</rpc-type-acl>
<rpc-type-acl>
<group>monitor-staff</group>
<rpc-types>monitor debug</rpc-types>
</rpc-type-acl>
</rpc-type-acls>
</ncx-access>
</security>
</config>
Figure 5
Bierman Expires February 2, 2008 [Page 29]
Internet-Draft NCX-SMI August 2007
3. NCX Naming Conventions
This section discusses the following concepts related to the NCX
naming conventions:
o Definition Identifiers
o Object Identifiers
o Instance Identifiers
In NCX, a name is just a language token. There is no concept of
uniqueness for a name.
An Identifier is used to attach a name to a conceptual entity, and is
required to be unique within the scope of the entire NETCONF MIB.
3.1. Names
An NCX name has the following properties:
o NCX name strings are fields used within identifiers in some
fashion.
o An NCX name string can be 1 to 1023 characters in length, but must
not exceed 64 characters in length if SMIv2 compatibility is
required.
o All names are case-sensitive.
o The first character must be a letter ('a'..'z' or 'A'..'Z')
o The rest of the characters in an NCX name can be any of:
* letter ('a'..'z' or 'A'..'Z')
* number ('0'..'9')
* underscore ('_')
* dash ('-')
3.2. Identifiers
There are three types of identifiers:
Bierman Expires February 2, 2008 [Page 30]
Internet-Draft NCX-SMI August 2007
Definition Identifier>: Used to identify an object definition within
a schema module.
Object Identifier: Used to identify conceptual object definitions.
Instance Identifier Used to identify conceptual instances of an
object.
3.2.1. Definition Identifiers
A definition identifier is used within an data model module to reuse
a pre-defined user type within other constructs, and to specify index
clause components. Other uses are also possible as well.
3.2.2. Object Identifiers
If an NCX object identifier is used within an XML instance document
(e.g., NETCONF PDU), it is represented as an XPath Absolute Path
Expression, which is used to specify a particular conceptual node
within the NETCONF MIB. It is similar to an OBJECT IDENTIFIER in
SMIv2.
An object identifier (within a PDU) begins with a forward slash, and
is followed by zero or more node identifiers. A node identifier
consists of a node-name (Name or QName) followed by a forward-slash,
except the last identifier, which contains just a node-name.
Although the syntax for XPath allows any element name (Name) or
qualified element name (QName), in practice, the element names are
constrained by the NCX 'name' syntax. Whitespace is not allowed
within an object identifier.
The following ABNF defines the object identifier syntax, as it used
within an XML instance document:
ncx-obj-id = "/" [ncx-obj-id-nodes]
ncx-obj-id-nodes = 0*(ncx-obj-id-namepair) name
ncx-obj-id-namepair = name "/"
name = Name / QName
Figure 6
Bierman Expires February 2, 2008 [Page 31]
Internet-Draft NCX-SMI August 2007
The following examples show some object identifiers that might appear
in <error-path:gt; elements or other data model content.
ncx-obj-id = "/" [ncx-obj-id-nodes]
ncx-obj-id-nodes = 0*(ncx-obj-id-namepair) name
ncx-obj-id-namepair = name "/"
name = Name / QName
# Always use fixed root form for <error-path> content
# The default namespace is set to NETCONF Base
# The NCX module named 'ifexamples.ncx' contains the
# data model definition used in these examples
http://www.netconfcentral.org/ncx/ncx-modules/ifexamples.ncx
# The XSD corresponding to the NCX module is named 'ifexamples.xsd'.
http://www.netconfcentral.org/ncx/xsd/ncx/ifexamples.xsd
# 'itf' is the prefix for the 'ifdata' application namespace ID
# an error-option is invalid or not supported
/rpc/edit-config/error-option
# a non-specific error occurred with the <config> element
/rpc/edit-config/config
# reset-interface RPC operation
/rpc/itf:reset-interface
# name parameter for the reset-interface RPC operation
/rpc/itf:reset-interface/name
# reset-mode parameter for the reset-interface RPC operation
/rpc/itf:reset-interface/reset-mode
Figure 7
Bierman Expires February 2, 2008 [Page 32]
Internet-Draft NCX-SMI August 2007
3.2.3. Instance Identifiers
Instance identifiers are used to uniquely identify conceptual object
instances. For <error-path> purposes, it might also identify a
particular node within the input parameter set for a specific RPC
operation.
An NCX instance identifier is represented with an Absolute Xpath
Expression. The Xpath Specification defines the allowable syntax for
a valid XPath expression. The NCX language imposes the following
constraints and procedures for an NCX instance identifier:
o An instance identifier must represent a single conceptual instance
of a object.
o An instance identifier (like an object identifier) can be
namespace qualified by using a namespace prefix, previously
defined within the XML instance document.
o If no namespace prefix is encountered, starting after the first
forward slash ('/'), then the current namespace in effect is used.
If none, then the instance identifier is invalid.
o If the namespace for the first node is valid, then that namespace
remains in affect until explicitly changed. A subsequent node
without a prefix is not assumed to be in the default namespace.
o Instance identifiers have a common fixed root, i.e., starting with
the <rpc> element for NETCONF methods and data. This fixed root
form is used when a instance identifier is included in the <error-
path> element within an RPC error response.
o Instance identifiers for conceptual data within a configuration
database can also be used, using a conceptual relative root for
database. This is represented by the special Xpath expression
'/'. Within an actual PDU, this relative root will actually be an
RPC parameter node, such as <config> or <data> or <filter>.
o There is no default namespace associated with the root, so it must
be specified within the PDU with appropriate 'xmlns' directives,
so the prefixes used within the Xpath expression can be resolved.
o RPC methods are identified by their path from the absolute root.
Instance identifiers used within <error-path> elements must
identify the entire path, starting with the <rpc> element.
Simple Instance Identifier Examples:
Bierman Expires February 2, 2008 [Page 33]
Internet-Draft NCX-SMI August 2007
# the entire set of interface entries
/itf:ifdata/interfaces
# interface for 'eth0', fixed root version
/rpc/edit-config/config/itf:ifdata/interfaces/interface[name='eth0']
# interface for 'eth0', relative root version
# relative root applies only to data object
/itf:ifdata/interfaces/interface[name='eth0']
# ifMtu node for the 'eth0' interface, relative root version
/itf:ifdata/interfaces/interface[name='eth0']/ifMtu
Figure 8
The following assumptions are made regarding the NCX instance
identifiers in the following examples:
o An absolute Xpath expression containing sub-clauses for all
relevant conceptual index (key) components represents an instance
of conceptual data.
o Index component expressions are simple equality expressions,
concatenated to form a logical 'AND' expression, in which all the
terms must be true for the expression to be true.
o The order of components within a conceptual index is not
significant within Xpath.
o By convention, the leftmost index component is called the 'major'
index.
o By convention, Each 'minor' index in succession (if any) is listed
left to right, after the major index, in the order the index is
defined within the conceptual data model.
Bierman Expires February 2, 2008 [Page 34]
Internet-Draft NCX-SMI August 2007
# In this example, the data models for 'Parmset1' and 'Parmset2'
# from the module 'test.ncx' are used.
http://www.netconfcentral.org/ncx/ncx-modules/test.ncx
# The XSD corresponding to the NCX module is named 'test.ncx'.
http://www.netconfcentral.org/ncx/ncx-modules/test.ncx
# The XSD corresponding to the NCX module is named 'test.xsd'.
http://www.netconfcentral.org/xsd/ncx/test.xsd
# The 'ts' prefix represents the namespace for the
# 'test' application namespace.
# All examples are shown in relative root form
# row 'foo' of table in parm 'p1', defined in 'Container1'
/ts:test/Parmset1/p1/testrow[str1='foo']
# 'name' field for row 'bar' in parm 'p5', defined in 'Table1'
/ts:test/Parmset1/p5[str1='bar']/name
# field 'y' of row '3' of 'childtable', within row 'bar'
# in parm 'p5', defined in 'Table1'
/ts:test/Parmset1/p5[str1='bar']/childtable[x=3]/y
# entire row ('testing one two',-42) for parm 'p6'
# defined in 'Table1a'
/ts:test/Parmset2/p6[name='testing one two'][num=-42]
# 'str1' field within row ('testing 3 4',27) of parm 'p2'
# defined in 'Table1a'
/ts:test/Parmset2/p6[name='testing 3 4'][num=27]/str1
# entire row ('fred', 'baz') for 'testrow',
# within the 'testrows' container,
# which is part of row (17) for parm 'p8'
# defined in 'Table2'
/ts:test/Parmset2/p8[x=17]/testrows/testrow[name='fred'][str1='baz']
# field 'bytes' within the row described above
/ts:test/Parmset2/p8[x=2]/testrows/testrow[name='jo'][str1='baz']/bytes
Figure 9
Instances of unnamed data (e.g. maxOccurs="unbounded" and no 'key'
defined) are identified by their position, relative to other
Bierman Expires February 2, 2008 [Page 35]
Internet-Draft NCX-SMI August 2007
instances of the same element.
The short form of the 'position()' function in Xpath (e.g., foo[3]
for the third instance of the 'foo' element) is used to identify
unnamed data instances in this case.
The first occurrence of an unnamed instance is identified with the
position value '1'.
Unnamed instances are only identified by their integer position, and
can only be accessed by this position within a configuration
database.
Named instances are only identified by their associated 'index'
clause (i.e. key), and should not be accessed by their position
instead of the defined key for the data structure.
Instance identifiers are used as <error-path> element values within
the <rpc-error> field in NETCONF RPC replies. They (of course) can
also used as the value of the 'select' attribute in the <filter>
parameter for the NETCONF <get> operation.
Bierman Expires February 2, 2008 [Page 36]
Internet-Draft NCX-SMI August 2007
4. NCX Agent Security Requirements
The security requirements for NCX pertain mostly to the content layer
within the protocol stack. These are in addition to the security
requirements for NETCONF agents defined in RFC 4741.
There is a hard-wired set of resources that can be secured within a
NETCONF agent. The lack of flexibility allows a very simple data
model to be used to configure access control mechanisms on a device.
4.1. Configuration Database Security
Operators and agent developers must take precautions to ensure that
the contents of the configuration databases within an agent are not
exposed inadvertently, or insecurely, via some protocol other than
NETCONF.
An agent must provide some distinction between a super-user account
(e.g., 'root'), an administrator account (e.g., 'admin'), and
optionally other types of login accounts.
An agent should provide access control for every database that can be
accessed with the <edit-config>, <get-config>, or <get> operations.
4.2. NETCONF Session Security
The following requirements are defined for NCX agent session
behavior:
o An agent must allow NETCONF session establishment service for the
mandatory transport, which is NETCONF over SSH, on port 830.
o An agent must not allow session establishment if the 'netconf'
subsystem is not used during SSH session establishment.
o An agent may provide additional transport mappings as configured
by the manager or hard-wired into the agent.
o Once a session has been properly established, and the NETCONF
<hello> exchange successfully completed, the agent may assume that
the manager identity has been authenticated and access to the
agent is authorized. The agent is in its idle mode, waiting for
<rpc> requests from the manager.
o The NETCONF protocol does not provide for any distinction between
sessions wrt/ use of the <kill-session> operation. An agent may
choose not to allow a session associated with 'super-user'
privileges not to be terminated by an 'administrator' or other
Bierman Expires February 2, 2008 [Page 37]
Internet-Draft NCX-SMI August 2007
type of login account.
o Agent access rights are granted to a particular session,
associated (during session establishment) with a 'group',
identified by a name string. Membership to a group is outside the
scope of this document, but user name strings should be supported,
and address strings may be supported as well. A special group
called 'root' is reserved and an agent should not redefine the
default access rights associated with this group.
4.3. RPC Security
The following requirements are defined for NCX RPC processing
behavior:
o When an <rpc> request is received, and it has been validated as a
well-formed message, the agent must determine if the associated
group has permission to invoke the specified RPC method.
o If the group has permission to invoke the RPC method, then the
general protocol operation is checked further, if it accesses any
part of a configuration database. Otherwise, the security check
is complete for the RPC request, and it is processed by the agent.
o If the RPC method accesses any configuration database, then the
agent must verify that the group has the appropriate access rights
to perform the requested operation.
4.4. Data Model Access Control
Access rights are determined by the NETCONF protocol:
o merge
o replace
o create
o delete
o read
Data access is granted to a group within a particular session based
on the maximum allowed access configured for the objects (and perhaps
object instances). If the general operation type is permitted for
the group, then the RPC method is processed by the agent. Otherwise
an 'access-denied' <rpc-error> is returned to the manager instead of
processing the RPC request further.
Bierman Expires February 2, 2008 [Page 38]
Internet-Draft NCX-SMI August 2007
After the RPC method processing is complete, and an <rpc-reply>
message is generated to be sent to the manager, the response should
be checked for any unauthorized data within it. If the response
contains any unauthorized data, then the agent must remove all of it
before sending the reply.
Agent security procedures for generating the <notification> message
for a particular session is essentially the same as for the <data>
element within an <rpc-reply>, with one exception. Instead of
pruning data from the reply, as done for <get-config> or <get>
operation responses, the entire notification is dropped for that
session.
If an agent supports NETCONF notifications, it should generate some
sort of a 'agent-shutdown' event all all active sessions, whenever it
is resetting or shutting down in an anticipated fashion.
If an agent supports NETCONF notifications, it may wish to generate
some sort of a 'session-started' event whenever a new NETCONF session
is activated.
If an agent supports NETCONF notifications, it should generate some
sort of a 'session-terminated' event whenever a session is terminated
unexpectedly.
If an agent supports NETCONF notifications, it may choose to generate
some sort of a 'session-terminated' event whenever a session is
terminated in normal protocol fashion.
Bierman Expires February 2, 2008 [Page 39]
Internet-Draft NCX-SMI August 2007
5. NETCONF Interoperability Guidelines
This section addresses data modeling practices which are deemed to
impact multi-vendor or even simple manager/agent interoperability.
The following recommendations deal with NETCONF protocol usage and
XML design considerations.
5.1. NETCONF Protocol Operation Usage Guidelines
This section contains guidelines for defining data models for use
with the NETCONF protocol, within the NCX framework:
o All configuration data must be defined within the appropriate
namespace, and all NETCONF protocol operations should use the
correct namespace for each element in an <rpc> request.
o An agent may determine the correct namespace for a given element
if none is provided, in a manner outside the scope of this
document. However, this is not strictly correct XML usage.
o A manager and agent should only send the <hello> message once
during session establishment.
o The 'operation' attribute within the <config> element for the
<edit-config> operation should only be used once within a given
XML sub-tree.
o A 'key' construct (e.g., INDEX clause in SMIv2) should be used for
all data contained within a configuration. Unnamed data should
not be used within the definition of objects.
o XML attributes should only be used for meta-data. The 'operation'
attribute (as defined in NETCONF) can only be applied to an XML
subtree, not an individual XML attribute.
o XML elements should be used for configuration data values. The
'operation' attribute can only be applied to an XML element or
subtree. Agent-supplied XML attributes representing meta-data
such as a 'last-changed' timestamp, cannot be defined other XML
attributes.
o Indexed data should be located within a container, especially if
access is likely to be relevant for that data. Typically, a
container only contains zero or more instances of the same child
data object node.
o This container convention allows for easier support for SMIv2 type
of tabular data within a NETCONF configuration database.
Bierman Expires February 2, 2008 [Page 40]
Internet-Draft NCX-SMI August 2007
o The following example shows a container naming example:
<config xmlns="NETCONF-base">
<fooApp xmlns="fooAppNS">
<widgets>
<widget>
...
</widget>
<widget>
...
</widget>
<widget>
...
</widget>
</widgets>
</fooApp>
</config>
Figure 10
o The 'anyType' XSD data type should not be used within a NETCONF
configuration database. If it is, then the edit-config sub-
operations (e.g., create, merge) are not interoperable across
agent implementations, if they appear within any of the child
nodes of the node content.
o If the agent supports the '#notification' capability, then it
should generate some sort of 'configuration change' event
notification when the <running> and/or <startup> configuration is
modified by any mechanism, even if it is external to the NETCONF
protocol.
o When generating <copy-config> operation output, the same access
control procedures are applied as for the <edit-config>, as if the
manager was 'replacing' the entire contents of the <config>
element.
o The agent may provide a list of supported data models during the
<hello> exchange. However, an operator should be aware that
sensitive information may be revealed by including the list of
supported data models within this message. There is no mandatory
access control in effect until the session is ready to process
<rpc> requests.
Bierman Expires February 2, 2008 [Page 41]
Internet-Draft NCX-SMI August 2007
o The agent should provide a data model which can be retrieved with
the <get> operation, which indicates the data models and their
versions, to a manager.
o When closing a NETCONF session, a manager should always use the
<close-session> operation, if the agent should be accepting <rpc>
requests at the time.
o When closing a NETCONF session, and the agent is currently sending
notifications, a manager should always use the <kill-session>
operation (from a different session).
o A manager should avoid terminating a NETCONF session by simply
closing the transport connection.
o Exception might occur if the agent is not responding, or the agent
is not sending well-formed XML, or if the manager receives a
<hello> message from the agent that it does not understand or
support.
5.2. Agent Conformance Requirements
The following requirements apply to NETCONF capabilities:
o An agent must implement all of the required functionality
associated with a capability in order to advertise it in a <hello>
message.
o Capabilities must represent behavior which applies to the entire
agent, not to some sub-agent or subset of the configuration
database.
o Capabilities values should not change dynamically during normal
operation of the agent.
o The capabilities returned by the agent in a <hello> message,
should remain in effect for the lifetime of the session. If this
is not possible, the agent should terminate the session instead of
processing new <rpc> requests for the session.
[More requirements TBD.]
5.3. Definition Change Control Guidelines
There are some guidelines for ensuring that different versions of the
same object are backward-compatible across different versions of an
agent implementation.
Bierman Expires February 2, 2008 [Page 42]
Internet-Draft NCX-SMI August 2007
The following types of definitions must never be changed, once they
are published and implemented by the agent:
o owner names
o application header node names
o XML element names
o XML attribute names
o object names
o RPC method names
o RPC method parameter names
o notification event type names
o Basic XML syntax of an object
o Basic conceptual semantics of an object, RPC method or its
existing parameters, or a notification.
The following types of definitions should not be changed, once they
are published and implemented by the agent:
o data object default values
o RPC method classification values
o configuration object classification values
o notification event classification values
A data model (module) version identifier should be updated to a
previously unused value whenever any part of it is modified by the
data model publisher.
Several type of data model extensions are permitted, except that the
version identifier should be updated appropriately when the modified
schema definition is published.
o Add any new objects, RPC methods, and/or notifications.
o Add new parameters to an RPC method.
Bierman Expires February 2, 2008 [Page 43]
Internet-Draft NCX-SMI August 2007
o Add new child nodes to objects.
o Change, add, or remove a range definition.
o Change, add, or remove a range definition, or other such data type
restrictions.
o Change, add, or remove the access control semantics for an object.
o Change, add, or remove any data object content within an event
notification message.
Bierman Expires February 2, 2008 [Page 44]
Internet-Draft NCX-SMI August 2007
6. Acknowledgements
The author wishes to thank Keith McCloghrie for review comments and
Martin Bjorklund for help on the Instance Identifier details.
Bierman Expires February 2, 2008 [Page 45]
Internet-Draft NCX-SMI August 2007
7. IANA Considerations
There are three registries that need to be maintained by IANA to
simplify XML usage within the NETCONF protocol.
1. owner strings
2. application header nodes
3. data model schema locations
7.1. Owner Registry
A registry is needed for short name strings that uniquely identify an
NCX owner name.
Each owner string should be associated with the organization name and
some contact information, similar to the Enterprise numbers registry.
Each registry entry will include:
o the owner name string
o organization name
o contact info
o enterpriseN owner name (if any)
The initial registry will contain an entry for the 'ietf' owner:
Owner name: ietf
Organization name: Internet Engineering Task Force
Contact Info: (TBD) netconf@ops.ietf.org
Enterprise ID: enterprise0
Figure 11
In addition to 'ietf', reserved entries for each Enterprise number
are also implicitly defined. Therefore, no assignments of the form
'enterpriseN' are allowed, where N is any non-negative integer.
[open issue: owner string format: US-ASCII or UTF-8?]
Bierman Expires February 2, 2008 [Page 46]
Internet-Draft NCX-SMI August 2007
[open issue: owner string length restrictions?]
7.2. Application Header Node Registry
A registry is needed for the QName assignments (namespace URI and
element name) for each application header node in the standard
NETCONF MIB. It is also desirable for vendors to register their own
application header nodes as needed.
Each registry entry will include:
o the owner name associated with the application
o the application element name
o the application element namespace URI
o the URL for the schema containing the application element
definition
o A short description of the application purpose.
The initial registry will be empty.
7.3. Data Model Schema Location Registry
A registry is needed for information related to the various (standard
or proprietary) data models potentially available for use with the
NETCONF protocol.
Each registry entry will include:
o the owner name associated with the data model
o the application name (if any) associated with the data model
o the data model version string
o the data model target namespace URI
o the data model schema location URL
o the data model top-level object element name(s)
o A short description of the data model's purpose.
The initial registry will be empty.
Bierman Expires February 2, 2008 [Page 47]
Internet-Draft NCX-SMI August 2007
8. Security Considerations
This entire document discusses guidelines for organizing NETCONF
configuration data, and improving NETCONF protocol operational
security. Some NETCONF agent security and deployment guidelines are
discussed as well.
However, this document does not define any new protocol mechanisms or
extensions. It does not contradict or alter any of the security
requirements defined for NETCONF in RFC 4741. This document does not
define any data models as well.
[Real security considerations section TBD.]
Bierman Expires February 2, 2008 [Page 48]
Internet-Draft NCX-SMI August 2007
9. References
9.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC4741] Enns, R., "NETCONF Configuration Protocol", RFC 4741,
December 2006.
9.2. Informative References
[RFC2578] McCloghrie, K., Ed., Perkins, D., Ed., and J.
Schoenwaelder, Ed., "Structure of Management Information
Version 2 (SMIv2)", STD 58, RFC 2578, April 1999.
Bierman Expires February 2, 2008 [Page 49]
Internet-Draft NCX-SMI August 2007
Author's Address
Andy Bierman
netconfcentral.org
Simi Valley, CA
USA
Email: ietf@andybierman.com
Bierman Expires February 2, 2008 [Page 50]
Internet-Draft NCX-SMI August 2007
Full Copyright Statement
Copyright (C) The IETF Trust (2007).
This document is subject to the rights, licenses and restrictions
contained in BCP 78, and except as set forth therein, the authors
retain all their rights.
This document and the information contained herein are provided on an
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND
THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF
THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Intellectual Property
The IETF takes no position regarding the validity or scope of any
Intellectual Property Rights or other rights that might be claimed to
pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights
might or might not be available; nor does it represent that it has
made any independent effort to identify any such rights. Information
on the procedures with respect to rights in RFC documents can be
found in BCP 78 and BCP 79.
Copies of IPR disclosures made to the IETF Secretariat and any
assurances of licenses to be made available, or the result of an
attempt made to obtain a general license or permission for the use of
such proprietary rights by implementers or users of this
specification can be obtained from the IETF on-line IPR repository at
http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights that may cover technology that may be required to implement
this standard. Please address the information to the IETF at
ietf-ipr@ietf.org.
Acknowledgment
Funding for the RFC Editor function is provided by the IETF
Administrative Support Activity (IASA).
Bierman Expires February 2, 2008 [Page 51]