< draft-bryskin-netconf-automation-yang-00.txt   draft-bryskin-netconf-automation-yang-01.txt >
Network Working Group I. Bryskin Network Working Group I. Bryskin
Internet-Draft Huawei Technologies Internet-Draft Huawei Technologies
Intended status: Informational X. Liu Intended status: Informational X. Liu
Expires: August 25, 2018 Jabil Expires: September 1, 2018 Jabil
A. Clemm A. Clemm
Huawei Huawei
H. Birkholz H. Birkholz
Fraunhofer SIT Fraunhofer SIT
T. Zhou T. Zhou
Huawei Huawei
February 21, 2018 February 28, 2018
Generalized Network Control Automation YANG Model Generalized Network Control Automation YANG Model
draft-bryskin-netconf-automation-yang-00 draft-bryskin-netconf-automation-yang-01
Abstract Abstract
This document describes a YANG data model for the Generalized Network This document describes a YANG data model for the Generalized Network
Control Automation (GNCA), aimed to define an abstract and uniform Control Automation (GNCA), aimed to define an abstract and uniform
semantics for NETCONF/YANG scripts in the form of Event-Condition- semantics for NETCONF/YANG scripts in the form of Event-Condition-
Action (ECA) containers. Action (ECA) containers.
Status of This Memo Status of This Memo
skipping to change at page 1, line 40 skipping to change at page 1, line 40
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on August 25, 2018. This Internet-Draft will expire on September 1, 2018.
Copyright Notice Copyright Notice
Copyright (c) 2018 IETF Trust and the persons identified as the Copyright (c) 2018 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 19 skipping to change at page 2, line 19
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Purpose . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. GNCA concepts and constructs . . . . . . . . . . . . . . . . 4 3. GNCA concepts and constructs . . . . . . . . . . . . . . . . 4
3.1. Policy Variable (PV) . . . . . . . . . . . . . . . . . . 4 3.1. Policy Variable (PV) . . . . . . . . . . . . . . . . . . 4
3.2. ECA Event . . . . . . . . . . . . . . . . . . . . . . . . 6 3.2. ECA Event . . . . . . . . . . . . . . . . . . . . . . . . 6
3.3. ECA Condition . . . . . . . . . . . . . . . . . . . . . . 7 3.3. ECA Condition . . . . . . . . . . . . . . . . . . . . . . 7
3.4. ECA Action . . . . . . . . . . . . . . . . . . . . . . . 8 3.4. ECA Action . . . . . . . . . . . . . . . . . . . . . . . 9
3.5. ECA . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.5. ECA . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4. Where ECA scripts are executed? . . . . . . . . . . . . . . . 11 4. Where ECA scripts are executed? . . . . . . . . . . . . . . . 12
5. ECA script example . . . . . . . . . . . . . . . . . . . . . 12 5. ECA script example . . . . . . . . . . . . . . . . . . . . . 13
6. Complete Model Tree Structure . . . . . . . . . . . . . . . . 14 6. Complete Model Tree Structure . . . . . . . . . . . . . . . . 15
7. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 19 7. YANG Module . . . . . . . . . . . . . . . . . . . . . . . . . 21
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 35 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 36
9. Security Considerations . . . . . . . . . . . . . . . . . . . 35 9. Security Considerations . . . . . . . . . . . . . . . . . . . 36
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 35 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 36
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 35 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 36
11.1. Normative References . . . . . . . . . . . . . . . . . . 35 11.1. Normative References . . . . . . . . . . . . . . . . . . 36
11.2. Informative References . . . . . . . . . . . . . . . . . 35 11.2. Informative References . . . . . . . . . . . . . . . . . 37
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 36 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 37
1. Introduction 1. Introduction
NETCONF/YANG has proved to be very successful in facilitating NETCONF/YANG has proved to be very successful in facilitating
interactive network control paradigm, in which a network control interactive network control paradigm, in which a network control
application (controller) requests the network server to perform application (controller) requests the network server to perform
certain (re-)configurations, then, retrieves network states of certain (re-)configurations, then, retrieves network states of
interest, then asks for more (re-)configurations and so forth. This interest, then asks for more (re-)configurations and so forth. This
said, there are multiple use cases that require stringing network said, there are multiple use cases that require stringing network
configuration requests together with conditioning their order of configuration requests together with conditioning their order of
skipping to change at page 7, line 7 skipping to change at page 7, line 7
that the whole purpose of ECA scripts is to reduce as much as that the whole purpose of ECA scripts is to reduce as much as
possible the client-server communication. possible the client-server communication.
All events (specified in at least one ECA pushed to the server) are All events (specified in at least one ECA pushed to the server) are
required to be constantly monitored by the server. One way to think required to be constantly monitored by the server. One way to think
of this is that the server subscribes to its own publications with of this is that the server subscribes to its own publications with
respect to all events that are associated with at least one ECA. respect to all events that are associated with at least one ECA.
3.3. ECA Condition 3.3. ECA Condition
ECA Condition is evaluated to TRUE or FALSE logical expression ECA Condition is evaluated to TRUE or FALSE logical expression.
specified in a form of: There are two ways how an ECA Condition could be specified:
o in a form of XPath expression;
o as a hierarchy of comparisons and logical combinations of thereof.
The former option allows for specifying a condition of arbitrary
complexity as a single string with an XPath expression, in which
pertinent PVs and data store states are referred to by their
respective positions in the YANG tree.
The latter option allows for configuring logical hierarchies. The
bottom of said hierarchies are primitive comparisons (micro-
conditions) specified in a form of:
<arg1><relation><arg2> <arg1><relation><arg2>
where arg1 and arg2 represent either constant/enum/identity, PV or where arg1 and arg2 represent either constant/enum/identity, PV or
pointed by XPath data store node or sub-tree, pointed by XPath data store node or sub-tree,
relation is one of the comparison operations from the set: ==, !=, relation is one of the comparison operations from the set: ==, !=,
>, <, >=, <= >, <, >=, <=
Primitive conditions could be combined hierarchically into macro- Primitive comparisons could be combined hierarchically into macro-
conditions via && and || logical operations. conditions via && and || logical operations.
(Macro-)conditions are associated with events and evaluated only Regardless of the choice of their specification, ECA Conditions are
within event threads triggered by the event detection. associated with ECA Events and evaluated only within event threads
triggered by the event detection.
When a (macro-)condition is evaluated to TRUE, the associated with it When an ECA Condition is evaluated to TRUE, the associated with it
action is executed. ECA Action is executed.
The model structure for the ECA Condition is shown below: The model structure for the ECA Condition is shown below:
+--rw conditions +--rw conditions
| +--rw condition* [name] | +--rw condition* [name]
| +--rw name string | +--rw name string
| +--rw logical-operation-type? identityref | +--rw (expression-choice)?
| +--rw comparison-operation* [name] | +--:(logical-operation)
| | +--rw name string | | +--rw logical-operation-type? identityref
| | +--rw comparision-type? identityref | | +--rw comparison-operation* [name]
| | +--rw arg1 | | | +--rw name string
| | | +--rw policy-argument | | | +--rw comparision-type? identityref
| | +--rw arg2 | | | +--rw arg1
| | +--rw policy-argument | | | | +--rw policy-argument
| +--rw sub-condition* [name] | | | | +--rw type? identityref
| +--rw name -> /gnca/conditions/condition/name | | | | +--rw (argument-choice)?
| | | | +--:(policy-constant)
| | | | | +--rw constant? string
| | | | +--:(policy-variable)
| | | | | +--rw policy-variable? leafref
| | | | +--:(local-policy-variable)
| | | | | +--rw local-policy-variable? leafref
| | | | +--:(xpath)
| | | | +--rw xpath? string
| | | +--rw arg2
| | | +--rw policy-argument
| | | +--rw type? identityref
| | | +--rw (argument-choice)?
| | | +--:(policy-constant)
| | | | +--rw constant? string
| | | +--:(policy-variable)
| | | | +--rw policy-variable? leafref
| | | +--:(local-policy-variable)
| | | | +--rw local-policy-variable? leafref
| | | +--:(xpath)
| | | +--rw xpath? string
| | +--rw sub-condition* [name]
| | +--rw name -> /gnca/conditions/condition/name
| +--:(xpath)
| +--rw condition-xpath? string
The policy arguments arg1 and arg2 have the following structure: The policy arguments arg1 and arg2 have the following structure:
+--rw policy-argument +--rw policy-argument
+--rw type? identityref +--rw type? identityref
+--rw (argument-choice)? +--rw (argument-choice)?
+--:(policy-constant) +--:(policy-constant)
| +--rw constant? string | +--rw constant? string
+--:(policy-variable) +--:(policy-variable)
| +--rw policy-variable? leafref | +--rw policy-variable? leafref
skipping to change at page 9, line 26 skipping to change at page 10, line 26
smart filter notifications do), but also the contents of global smart filter notifications do), but also the contents of global
and local PVs, which store results of arbitrary operations and local PVs, which store results of arbitrary operations
performed on the data store contents (possibly over arbitrary performed on the data store contents (possibly over arbitrary
period of time) to determine, for example, history/evolution of period of time) to determine, for example, history/evolution of
data store changes, median values, ranges and rates of the data store changes, median values, ranges and rates of the
changes, results of configured function calls and expressions, changes, results of configured function calls and expressions,
etc. - in short, any data the client may find interesting about etc. - in short, any data the client may find interesting about
the associated event with all the logic to compute said data the associated event with all the logic to compute said data
delegated to the server. delegated to the server.
Multiple (macro-)condition/action pairs could be combined into a Multiple ECA Condition/Action pairs could be combined into a macro-
macro-action (transaction). action.
Multiple (trans)actions could be triggered by a single event. Multiple ECA (macro-)Actions could be triggered by a single ECA
event.
A (macro-)condition or a (trans)action could be defined once, Any given ECA Condition or Action may appear in more than one ECAs.
assigned with a name and specified in multiple ECAs.
The model structure for the ECA Action is shown below: The model structure for the ECA Action is shown below:
+--rw actions +--rw actions
| +--rw action* [name] | +--rw action* [name]
| +--rw name string | +--rw name string
| +--rw action-element* [name] | +--rw action-element* [name]
| | +--rw name string | | +--rw name string
| | +--rw action-type? identityref | | +--rw action-type? identityref
| | +--rw (action-operation)? | | +--rw (action-operation)?
skipping to change at page 15, line 19 skipping to change at page 16, line 19
| +--rw name string | +--rw name string
| +--rw (type-choice)? | +--rw (type-choice)?
| | +--:(common) | | +--:(common)
| | | +--rw type? identityref | | | +--rw type? identityref
| | +--:(xpath) | | +--:(xpath)
| | +--rw xpath? string | | +--rw xpath? string
| +--rw value? <anydata> | +--rw value? <anydata>
+--rw conditions +--rw conditions
| +--rw condition* [name] | +--rw condition* [name]
| +--rw name string | +--rw name string
| +--rw logical-operation-type? identityref | +--rw (expression-choice)?
| +--rw comparison-operation* [name] | +--:(logical-operation)
| | +--rw name string | | +--rw logical-operation-type? identityref
| | +--rw comparision-type? identityref | | +--rw comparison-operation* [name]
| | +--rw arg1 | | | +--rw name string
| | | +--rw policy-argument | | | +--rw comparision-type? identityref
| | | +--rw type? identityref | | | +--rw arg1
| | | +--rw (argument-choice)? | | | | +--rw policy-argument
| | | +--:(policy-constant) | | | | +--rw type?
| | | | +--rw constant? string identityref
| | | +--:(policy-variable) | | | | +--rw (argument-choice)?
| | | | +--rw policy-variable? leafref | | | | +--:(policy-constant)
| | | +--:(local-policy-variable) | | | | | +--rw constant?
| | | | +--rw local-policy-variable? leafref string
| | | +--:(xpath) | | | | +--:(policy-variable)
| | | +--rw xpath? string | | | | | +--rw policy-variable?
| | +--rw arg2 leafref
| | +--rw policy-argument | | | | +--:(local-policy-variable)
| | +--rw type? identityref | | | | | +--rw local-policy-variable?
| | +--rw (argument-choice)? leafref
| | +--:(policy-constant) | | | | +--:(xpath)
| | | +--rw constant? string | | | | +--rw xpath?
| | +--:(policy-variable) string
| | | +--rw policy-variable? leafref | | | +--rw arg2
| | +--:(local-policy-variable) | | | +--rw policy-argument
| | | +--rw local-policy-variable? leafref | | | +--rw type?
| | +--:(xpath) identityref
| | +--rw xpath? string | | | +--rw (argument-choice)?
| +--rw sub-condition* [name] | | | +--:(policy-constant)
| +--rw name -> /gnca/conditions/condition/name | | | | +--rw constant?
string
| | | +--:(policy-variable)
| | | | +--rw policy-variable?
leafref
| | | +--:(local-policy-variable)
| | | | +--rw local-policy-variable?
leafref
| | | +--:(xpath)
| | | +--rw xpath?
string
| | +--rw sub-condition* [name]
| | +--rw name -> /gnca/conditions/condition
/name
| +--:(xpath)
| +--rw condition-xpath? string
+--rw actions +--rw actions
| +--rw action* [name] | +--rw action* [name]
| +--rw name string | +--rw name string
| +--rw action-element* [name] | +--rw action-element* [name]
| | +--rw name string | | +--rw name string
| | +--rw action-type? identityref | | +--rw action-type? identityref
| | +--rw (action-operation)? | | +--rw (action-operation)?
| | +--:(action) | | +--:(action)
| | | +--rw action-name? | | | +--rw action-name?
| | | -> /gnca/actions/action/name | | | -> /gnca/actions/action/name
skipping to change at page 19, line 39 skipping to change at page 21, line 7
+--rw eca-scripts +--rw eca-scripts
| +--rw eca-script* [script-name] | +--rw eca-script* [script-name]
| +--rw script-name string | +--rw script-name string
| +--rw eca* [eca-name] | +--rw eca* [eca-name]
| +--rw eca-name -> /gnca/ecas/eca/name | +--rw eca-name -> /gnca/ecas/eca/name
+--rw running-script? +--rw running-script?
-> /gnca/eca-scripts/eca-script/script-name -> /gnca/eca-scripts/eca-script/script-name
7. YANG Module 7. YANG Module
<CODE BEGINS> file "ietf-gnca@2018-02-20.yang" <CODE BEGINS> file "ietf-gnca@2018-02-28.yang"
module ietf-gnca { module ietf-gnca {
yang-version 1.1; yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-gnca"; namespace "urn:ietf:params:xml:ns:yang:ietf-gnca";
prefix "gnca"; prefix "gnca";
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix "yang";
} }
organization organization
"IETF Network Configuration (NETCONF) Working Group"; "IETF Network Configuration (NETCONF) Working Group";
contact contact
"WG Web: <http://tools.ietf.org/wg/netconf/> "WG Web: <http://tools.ietf.org/wg/netconf/>
WG List: <mailto:netconf@ietf.org> WG List: <mailto:netconf@ietf.org>
Editor: Igor Bryskin Editor: Igor Bryskin
<mailto:Igor.Bryskin@huawei.com> <mailto:Igor.Bryskin@huawei.com>
Editor: Xufeng Liu Editor: Xufeng Liu
<mailto:Xufeng_Liu@jabil.com> <mailto:Xufeng_Liu@jabil.com>
Editor: Alexander Clemm Editor: Alexander Clemm
<mailto:ludwig@clemm.org>"; <mailto:ludwig@clemm.org>";
description description
"Event Condition Action (ECA) model."; "Event Condition Action (ECA) model.";
revision 2018-02-20 { revision 2018-02-28 {
description "Initial revision"; description "Initial revision";
reference "RFC XXXX"; reference "RFC XXXX";
} }
/* /*
* Typedefs * Typedefs
*/ */
identity argument-type { identity argument-type {
description description
"Possible values are: "Possible values are:
skipping to change at page 22, line 12 skipping to change at page 23, line 26
description description
"A common policy variable type, defined as an "A common policy variable type, defined as an
identity."; identity.";
} }
} }
case xpath { case xpath {
leaf xpath { leaf xpath {
type string; type string;
description description
"A XPath string, referencing a schema node, whose "A XPath string, referencing a schema node, whose
type is used as the type of the policy variable"; type is used as the type of the policy variable.";
} }
} }
} }
anydata value { anydata value {
description description
"The value of the policy variable, in a format that is "The value of the policy variable, in a format that is
determined by the policy type."; determined by the policy type.";
} }
} // policy-variable-attributes } // policy-variable-attributes
skipping to change at page 27, line 4 skipping to change at page 28, line 18
} }
} // policy-variables } // policy-variables
container conditions { container conditions {
description description
"Container of ECA Conditions."; "Container of ECA Conditions.";
list condition { list condition {
key name; key name;
description description
"A list of ECA Conditions."; "A list of ECA Conditions.";
leaf name { leaf name {
type string; type string;
description description
"A string name to uniquely identify an ECA Condition "A string name to uniquely identify an ECA Condition
globally."; globally.";
} }
leaf logical-operation-type { choice expression-choice {
type identityref {
base logical-operation-type;
}
description
"The logical operation type used to combine the results
from the list comparison-operation and the list
sub-condition, defined below.";
}
list comparison-operation {
key name;
description description
"A list of comparison oprations, each of them defines a "The choices of expression format to specify a condition,
comparison in the form of <arg1><relation><arg2>, which can be either a XPath string or a YANG logical
where <arg1> and <arg2> are policy arguments, while operation structure.";
<relation> is the comparison-type, which can be case logical-operation {
==, !=, >, <, >=, <="; leaf logical-operation-type {
leaf name { type identityref {
type string; base logical-operation-type;
description }
"A string name to uniquely identify a comparison description
operation."; "The logical operation type used to combine the
} results from the list comparison-operation and the
leaf comparision-type { list sub-condition, defined below.";
type identityref {
base comparison-type;
} }
description list comparison-operation {
"The comparison operation applied to the two arguments key name;
arg1 and arg2 defined blow."; description
} "A list of comparison oprations, each of them defines
container arg1 { a comparison in the form of <arg1><relation><arg2>,
description where <arg1> and <arg2> are policy arguments, while
"The policy argument used as the first parameter of <relation> is the comparison-type, which can be
the comparison opration. ==, !=, >, <, >=, <=";
A policy argument represents either a constant, PV or leaf name {
data store value pointed by XPath."; type string;
uses policy-argument; description
} "A string name to uniquely identify a comparison
container arg2 { operation.";
description
"The policy argument used as the secone parameter of }
the comparison opration. leaf comparision-type {
A policy argument represents either a constant, PV or type identityref {
data store value pointed by XPath."; base comparison-type;
uses policy-argument; }
} description
} "The comparison operation applied to the two
list sub-condition { arguments arg1 and arg2 defined blow.";
key name; }
description container arg1 {
"A list of sub conditions applied by the description
logical-operation-type. This list of sub conditions "The policy argument used as the first parameter of
provides the capability of hierarchically combining the comparison opration.
conditions."; A policy argument represents either a constant, PV
leaf name { or data store value pointed by XPath.";
type leafref { uses policy-argument;
path "/gnca/conditions/condition/name"; }
container arg2 {
description
"The policy argument used as the secone parameter
of the comparison opration.
A policy argument represents either a constant, PV
or data store value pointed by XPath.";
uses policy-argument;
}
} }
description list sub-condition {
"A reference to a defined condition, which is used key name;
as a sub-condition for the logical operation at this description
hierarchy level."; "A list of sub conditions applied by the
} logical-operation-type. This list of sub conditions
} // sub-condition provides the capability of hierarchically combining
conditions.";
leaf name {
type leafref {
path "/gnca/conditions/condition/name";
}
description
"A reference to a defined condition, which is used
as a sub-condition for the logical operation at
this hierarchy level.";
}
} // sub-condition
} // logical-operation
case xpath {
leaf condition-xpath {
type string;
description
"A XPath string, representing a logical expression,
which can contain comparisons of datastore values
and logical operations in the XPath format.";
}
} // xpath
} // expression-choice
} // condition } // condition
} // conditions } // conditions
container actions { container actions {
description description
"Container of ECA Actions."; "Container of ECA Actions.";
list action { list action {
key name; key name;
description description
"A list of ECA Actions."; "A list of ECA Actions.";
 End of changes. 23 change blocks. 
135 lines changed or deleted 206 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/