< draft-xia-sdnrg-nemo-language-01.txt   draft-xia-sdnrg-nemo-language-02.txt >
SDNRG Y. Xia, Ed. SDNRG Y. Xia, Ed.
Internet-Draft S. Jiang, Ed. Internet-Draft S. Jiang, Ed.
Intended status: Standards Track T. Zhou, Ed. Intended status: Standards Track T. Zhou, Ed.
Expires: April 30, 2015 S. Hares Expires: November 5, 2015 S. Hares
Huawei Technologies Co., Ltd Huawei Technologies Co., Ltd
October 27, 2014 May 4, 2015
NEMO (NEtwork MOdeling) Language NEMO (NEtwork MOdeling) Language
draft-xia-sdnrg-nemo-language-01 draft-xia-sdnrg-nemo-language-02
Abstract Abstract
The North-Bound Interface (NBI), located between the control plane The North-Bound Interface (NBI), located between the control plane
and the applications, is essential to enable the application and the applications, is essential to enable the application
innovations and nourish the eco-system of SDN. innovations and nourish the eco-system of SDN.
While most of the NBIs are provided in the form of API, this document While most of the NBIs are provided in the form of API, this document
proposes the NEtwork MOdeling (NEMO) language which is intent based proposes the NEtwork MOdeling (NEMO) language which is intent based
interface with novel language fashion. Concept, model and syntax are interface with novel language fashion. Concept, model and syntax are
skipping to change at page 1, line 39 skipping to change at page 1, line 39
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 April 30, 2015. This Internet-Draft will expire on November 5, 2015.
Copyright Notice Copyright Notice
Copyright (c) 2014 IETF Trust and the persons identified as the Copyright (c) 2015 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
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
skipping to change at page 2, line 25 skipping to change at page 2, line 25
4. Related work . . . . . . . . . . . . . . . . . . . . . . . . 5 4. Related work . . . . . . . . . . . . . . . . . . . . . . . . 5
5. The NEMO Language Specifications . . . . . . . . . . . . . . 6 5. The NEMO Language Specifications . . . . . . . . . . . . . . 6
5.1. Network Model of the NEMO Language . . . . . . . . . . . 6 5.1. Network Model of the NEMO Language . . . . . . . . . . . 6
5.2. Notation . . . . . . . . . . . . . . . . . . . . . . . . 7 5.2. Notation . . . . . . . . . . . . . . . . . . . . . . . . 7
5.3. NEMO Language Overview . . . . . . . . . . . . . . . . . 8 5.3. NEMO Language Overview . . . . . . . . . . . . . . . . . 8
5.4. Model Definition . . . . . . . . . . . . . . . . . . . . 9 5.4. Model Definition . . . . . . . . . . . . . . . . . . . . 9
5.4.1. Data Types . . . . . . . . . . . . . . . . . . . . . 9 5.4.1. Data Types . . . . . . . . . . . . . . . . . . . . . 9
5.4.2. Model Definition and Description Statement . . . . . 10 5.4.2. Model Definition and Description Statement . . . . . 10
5.5. Resource Access Statements . . . . . . . . . . . . . . . 11 5.5. Resource Access Statements . . . . . . . . . . . . . . . 11
5.5.1. Node Operations . . . . . . . . . . . . . . . . . . . 12 5.5.1. Node Operations . . . . . . . . . . . . . . . . . . . 12
5.5.2. Link Operations . . . . . . . . . . . . . . . . . . . 12 5.5.2. Connection Operations . . . . . . . . . . . . . . . . 12
5.5.3. Flow Operations . . . . . . . . . . . . . . . . . . . 13 5.5.3. Flow Operations . . . . . . . . . . . . . . . . . . . 13
5.6. Behavior Statements . . . . . . . . . . . . . . . . . . . 14 5.6. Behavior Statements . . . . . . . . . . . . . . . . . . . 14
5.6.1. Query Behavior . . . . . . . . . . . . . . . . . . . 14 5.6.1. Query Behavior . . . . . . . . . . . . . . . . . . . 14
5.6.2. Policy Behavior . . . . . . . . . . . . . . . . . . . 14 5.6.2. Policy Behavior . . . . . . . . . . . . . . . . . . . 14
5.6.3. Notification Behavior . . . . . . . . . . . . . . . . 17 5.6.3. Notification Behavior . . . . . . . . . . . . . . . . 17
5.7. Connection Management Statements . . . . . . . . . . . . 17 5.7. Connection Management Statements . . . . . . . . . . . . 17
5.8. Transaction Statements . . . . . . . . . . . . . . . . . 18 5.8. Transaction Statements . . . . . . . . . . . . . . . . . 18
6. The NEMO Language Examples . . . . . . . . . . . . . . . . . 18 6. The NEMO Language Examples . . . . . . . . . . . . . . . . . 18
7. Security Considerations . . . . . . . . . . . . . . . . . . . 20 7. Security Considerations . . . . . . . . . . . . . . . . . . . 20
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20
skipping to change at page 3, line 29 skipping to change at page 3, line 29
express user intent and abstract the network from the top down. express user intent and abstract the network from the top down.
To implement such an NBI design, we can learn from the successful To implement such an NBI design, we can learn from the successful
case of SQL (Structured Query Language), which simplified the case of SQL (Structured Query Language), which simplified the
complicated data operation to a unified and intuitive way in the form complicated data operation to a unified and intuitive way in the form
of language. Applications do not care about the way of data storage of language. Applications do not care about the way of data storage
and data operation, but to describe the demand for the data storage and data operation, but to describe the demand for the data storage
and operation and then get the result. As a data domain DSL, SQL is and operation and then get the result. As a data domain DSL, SQL is
simple and intuitive, and can be embedded in applications. So what simple and intuitive, and can be embedded in applications. So what
we need for the network NBI is a set of "network domain SQL". we need for the network NBI is a set of "network domain SQL".
[I-D.sdnrg-service-description-language] describe the requirements [I-D.xia-sdnrg-service-description-language] describe the
for a service description language and the design considerations. requirements for a service description language and the design
considerations.
This document will introduce an intent based NBI with novel language This document will introduce an intent based NBI with novel language
fashion. fashion.
2. Terminology 2. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in "OPTIONAL" in this document are to be interpreted as described in
[RFC2119] when they appear in ALL CAPS. When these words are not in [RFC2119] when they appear in ALL CAPS. When these words are not in
skipping to change at page 4, line 11 skipping to change at page 4, line 14
Network user also "user" for short, is the network administrator or Network user also "user" for short, is the network administrator or
operator. operator.
3. Requirements for the Intent Based NBI Language 3. Requirements for the Intent Based NBI Language
An intent based NBI language design contains following features: An intent based NBI language design contains following features:
o Express user intent o Express user intent
To simply the operation, applications or users can use the NBI To simplify the operation, applications or users can use the NBI
directly to describe their requirements for the network without directly to describe their requirements for the network without
taking care of the implementation. All the parameters without taking care of the implementation. All the parameters without
user concern will be concealed by the NBI. user concern will be concealed by the NBI.
o Platform independent o Platform independent
With the NBI, the application or user can description of network With the NBI, the application or user can description of network
demand in a generic way, so that any platform or system can get demand in a generic way, so that any platform or system can get
the identical knowledge and consequently execute to the same the identical knowledge and consequently execute to the same
result. Any low-level and device/vendor specific configurations result. Any low-level and device/vendor specific configurations
skipping to change at page 5, line 10 skipping to change at page 5, line 10
service requirement to network, detailed configurations and service requirement to network, detailed configurations and
instructions performed by network devices are opaque to network instructions performed by network devices are opaque to network
operators. So the NBI language should be declarative rather than operators. So the NBI language should be declarative rather than
imperative. imperative.
4. Related work 4. Related work
YANG [RFC6020] is a data modeling language used to model YANG [RFC6020] is a data modeling language used to model
configuration and state data manipulated by the Network Configuration configuration and state data manipulated by the Network Configuration
Protocol (NETCONF) [RFC6241], NETCONF remote procedure calls, and Protocol (NETCONF) [RFC6241], NETCONF remote procedure calls, and
NETCONF notifications. Although it is extensible for more data NETCONF notifications.
modeling in addition to NETCONF, YANG is not capable of describing
high level network requirements, such as SLA (Service Level
Agreement). YANG is designed for north-bound interfaces of the
device, which is also the south-bound of the controller. It is not
proper to model the north-bound interface of the controller, aka the
NBI. Moreover, the YANG is not capable of describing the service
processing logic, which typically includes transition of conditions
and states.
UML (Unified Modeling Language) is a powerful modeling language, UML (Unified Modeling Language) is a powerful modeling language,
which is domain agnostic. It is hard to describe the network demand, which is domain agnostic. YANG and UML all focus on syntax
and cannot be embedded in network applications. UML is appropriate specification which formulate grammatical structure of NBI language,
to describe the model behind the NBI language not the NBI itself. however, they do not have the ability to express users' real
semantics. NBI language should facilitate users to express their own
intent explicitly, instead of general complying with grammar syntax.
So YANG and UML is appropriate to describe the model behind the NBI
language not the NBI itself.
With the emergence of the SDN concept, it is a consensus to simplify With the emergence of the SDN concept, it is a consensus to simplify
the network operation, which leads to many cutting-edge explorations the network operation, which leads to many cutting-edge explorations
in the academic area. in the academic area.
Nick McKeown from Stanford University proposed the SFNet [TSFNet], Nick McKeown from Stanford University proposed the SFNet [TSFNet],
which translated the high level network demand to the underlying which translated the high level network demand to the underlying
controller interfaces. By concealing the low level network details, controller interfaces. By concealing the low level network details,
the controller simplified the operation of resource, flow, and the controller simplified the operation of resource, flow, and
information for applications. The SFNet is used for the SDN information for applications. The SFNet is used for the SDN
skipping to change at page 6, line 25 skipping to change at page 6, line 25
5.1. Network Model of the NEMO Language 5.1. Network Model of the NEMO Language
Behind the NEMO language, there is a set of basic network models Behind the NEMO language, there is a set of basic network models
abstracting the network demands from the top down according to the abstracting the network demands from the top down according to the
service requirement. Those demands can be divided into two types: service requirement. Those demands can be divided into two types:
the demand for network resources and the demands for network the demand for network resources and the demands for network
behaviors. behaviors.
The network resource is composed of three kinds of entities: node, The network resource is composed of three kinds of entities: node,
link and flow. Each entity contains property and statistic connection and flow. Each entity contains property and statistic
information. With a globally unique identifier, the network entity information. With a globally unique identifier, the network entity
is the basic object for operation. is the basic object for operation. Users can construct their own
topology or network traffic arbitrarily with these basic objects
without considering about real physical topology. In addition, NEMO
Engine also has the ability of obtaining available resources
automatically as operation objects when users don't define them.
o Node model: describes the entity with the capability of packet o Node model: describes the entity with the capability of packet
processing. According to the functionality, there are three types processing. According to the functionality, there are two types
of node of node
* The forwarding node (FN) only deals with L2/3 forwarding. It * The function node (FN) provides network services or forwarding
forwards packets according to the forwarding table and modifies with user concern, such as, firewall, load balance, vrouter,
packet heads. etc.
* The processing node (PN) provides L4-7 network services, and
will modify the body of packets.
* The logical node (LN) describes a set of network elements and * The business node (BN) describes a set of network elements and
their links, such as subnet, autonomous system, and internet. their connections, such as subnet, autonomous system, and
It conceals the internal topology and exposes properties as one internet. It conceals the internal topology and exposes
entity. It also enables iteration, i.e., a network entity may properties as one entity. It also enables iteration, i.e., a
include other network entities. network entity may include other network entities.
o Link model: describes the connectivity between node entities. o Connection model: describes the connectivity between node
entities. This connection is not limited at the connectivity
between single entity and single entity, but it also can express
the connectivity between single entity and multiply entities, or
multiply entities and multiply entities.
o Flow model: describes a sequence of packets with certain common o Flow model: describes a sequence of packets with certain common
characters, such as source/destination IP address, port, and characters, such as source/destination IP address, port, and
protocol. From the northbound perspective, flow is the special protocol. From the northbound perspective, flow is the special
traffic with user concern, which may be per device or across many traffic with user concern, which may be per device or across many
devices. So the flow characters also include ingress/egress node, devices. So the flow characters also include ingress/egress node,
and so on. and so on.
Network behavior includes the information and control operations. Network behavior includes the information and control operations.
skipping to change at page 7, line 23 skipping to change at page 7, line 28
get the response when a request is sent out. get the response when a request is sent out.
o Notification: an asynchronous mode to get the information, i.e., o Notification: an asynchronous mode to get the information, i.e.,
with one request, one or multiple responses will be sent to the with one request, one or multiple responses will be sent to the
subscriber automatically whenever trigger conditions meet. subscriber automatically whenever trigger conditions meet.
The NEMO language uses policy to describe the control operation. The NEMO language uses policy to describe the control operation.
o Policy: control the behavior of specific entities by APP, such as o Policy: control the behavior of specific entities by APP, such as
flow policy, node policy. All the policies follow the same flow policy, node policy. All the policies follow the same
pattern "with <condition>, to execute <action>", and can be pattern "when <condition>, to execute <action>, with
applied to any entity. <constraint>", and can be applied to any entity. But some of
policy elements can be omitted according to users' requirement.
5.2. Notation 5.2. Notation
The syntactic notation used in this specification is an extended The syntactic notation used in this specification is an extended
version of BNF ("Backus Naur Form" or "Backus Normal Form"). In BNF, version of BNF ("Backus Naur Form" or "Backus Normal Form"). In BNF,
each syntactic element of the language is defined by means of a each syntactic element of the language is defined by means of a
production rule. This defines the element in terms of a formula production rule. This defines the element in terms of a formula
consisting of the characters, character strings, and syntactic consisting of the characters, character strings, and syntactic
elements that can be used to form an instance of it. The version of elements that can be used to form an instance of it. The version of
BNF used in this specification makes use of the following symbols: BNF used in this specification makes use of the following symbols:
skipping to change at page 8, line 36 skipping to change at page 8, line 38
Introduces ordinary English text. This is used when the definition Introduces ordinary English text. This is used when the definition
of a syntactic element is not expressed in BNF. of a syntactic element is not expressed in BNF.
5.3. NEMO Language Overview 5.3. NEMO Language Overview
NEMO language provides 5 classes of commands: model definition, NEMO language provides 5 classes of commands: model definition,
resource access, behavior, connection management, transaction to resource access, behavior, connection management, transaction to
facilitate the user intent description. facilitate the user intent description.
<NEMO_cmd> := <model_definition_cmd> | <resource_access_cmd> | <NEMO_cmd> := <model_definition_cmd> | <resource_access_cmd> |
<behavior_cmd> <behavior_cmd>
<model_definition_cmd> := <node_definition> | <link_difinition> | <model_definition_cmd> := <node_definition> | <connection_difinition> |
<action_deifinition> | <model_description> <action_deifinition> | <model_description>
<resource_access_cmd> := <node_cu> | <node_del> | <link_cu> | <resource_access_cmd> := <node_cu> | <node_del> | <connection_cu> |
<link_del> | <flow_cu> | <flow_del> <connection_del> | <flow_cu> | <flow_del>
<behavior_cmd> := <query_cmd> | <policy_cu> | <policy_del> | <behavior_cmd> := <query_cmd> | <policy_cu> | <policy_del> |
<notification_cu> | <notification_del> <notification_cu> | <notification_del>
<connection_mgt_cmd> := <connect_cmd> | <disconnect_cmd> <connection_mgt_cmd> := <connect_cmd> | <disconnect_cmd>
<transaction_cmd> := <transaction_begin> | <transaction _end> <transaction_cmd> := <transaction_begin> | <transaction _end>
NEMO language provides limited number of key words to enables network NEMO language provides limited number of key words to enables network
users/applications to describe their intent. The key words supported users/applications to describe their intent. The key words supported
by the language are as follows: by the language are as follows:
<key_word> := Boolean | Integer | String | Date | UUID | EthAddr | <key_word> := Boolean | Integer | String | Date | UUID | EthAddr |
IPPrefix | NodeModel | LinkModel | FlowModel | IPPrefix | NodeModel | ConnectionModel | FlowModel |
ActionModel | Description | Porperty | Node | Link| ActionModel | Description | Porperty | Node | Connection|
Flow | No | EndNodes | Type | NW | Match | List | Flow | No | EndNodes | Type | NW | Match | List |
Range| Query | From | Notification | Listener | Range| Query | From | Notification | Listener |
Policy | ApplyTo | Priority | Condition | Action | Policy | ApplyTo | Priority | Condition | Action |
Connect | Disconnect | Address | Port | Transaction | Connect | Disconnect | Address | Port | Transaction |
Commit Commit
5.4. Model Definition 5.4. Model Definition
5.4.1. Data Types 5.4.1. Data Types
NEMO language provides several build-in data types: NEMO language provides several build-in data types:
Boolean This data type is used for simple flags that track true/ Boolean This data type is used for simple flags that track true/
false conditions. There are only two possible values: true and false conditions. There are only two possible values: true and
false. The Boolean literal is represented by the token <boolean>. false. The Boolean literal is represented by the token <boolean>.
skipping to change at page 9, line 45 skipping to change at page 9, line 45
UUID A string in the form of Universally Unique IDentifier UUID A string in the form of Universally Unique IDentifier
[RFC4122], e.g. "6ba7b814-9dad-11d1-80b4-00c04fd430c8". A [RFC4122], e.g. "6ba7b814-9dad-11d1-80b4-00c04fd430c8". A
typical usage of the UUID is to identify network entities, typical usage of the UUID is to identify network entities,
policies, actions and so on. The UUID literal is represented by policies, actions and so on. The UUID literal is represented by
the token <UUID>. the token <UUID>.
EthAddr A string in the form of MAC address, e.g. EthAddr A string in the form of MAC address, e.g.
"00:00:00:00:00:01". The EthAddr literal is represented by the "00:00:00:00:00:01". The EthAddr literal is represented by the
token <eth_addr>. token <eth_addr>.
IPPrefix A string in the form of IP address, e.g. "10.0.1.1". The IPPrefix A string in the form of IP address, e.g. "192.0.2.1". The
mask can be used in the IP address description, e.g. mask can be used in the IP address description, e.g.
"10.0.1.0/24". The IPPrefix literal is represented by the token "192.0.2.0/24". The IPPrefix literal is represented by the token
<ip_prefix>. <ip_prefix>.
The token <data_type> can be defined as follows: The token <data_type> can be defined as follows:
<data_type> := Boolean | Integer | String | Date | UUID | <data_type> := Boolean | Integer | String | Date | UUID |
EthAddr | IPPrefix EthAddr | IPPrefix
And a generic <data_type> literal is represented by the token <value> And a generic <data_type> literal is represented by the token <value>
<value> := <boolean> | <integer> | <string> | <date> | <UUID> | <value> := <boolean> | <integer> | <string> | <date> | <UUID> |
<eth_addr> | <ip_ prefix> <eth_addr> | <ip_ prefix>
5.4.2. Model Definition and Description Statement 5.4.2. Model Definition and Description Statement
In addition to default build-in network models, NEMO language In addition to default build-in network models, NEMO language
facilitates users to define new model types. facilitates users to define new model types.
The token <naming> is a string that must start with a letter and The token <naming> is a string that MUST start with a letter and
followed by any number of letters and digits. More specific naming followed by any number of letters and digits. More specific naming
can be defined as follows: can be defined as follows:
<node_type> := <naming> !!type name of the node model <node_type> := <naming> !!type name of the node model
<link_type> := <naming> !!type name of the link model <connection_type> := <naming> !!type name of the connection model
<flow_type> := <naming> !!type name of the flow model <flow_type> := <naming> !!type name of the flow model
<entity_type> := <node_type> | <link_type> | <flow_type> <entity_type> := <node_type> | <connection_type> | <flow_type>
<action_type> := <naming> !!type name of the action model <action_type> := <naming> !!type name of the action model
<model_type> := <entity_type> | <action_type> <model_type> := <entity_type> | <action_type>
<property_name> := <naming> !!name of the property in a model <property_name> := <naming> !!name of the property in a model
The <node_definition> statement is used to create a node model: The <node_definition> statement is used to create a node model:
<node_definition> := NodeModel <node_type> <node_definition> := NodeModel <node_type>
Property { <data_type> : <property_name> }; Property { <data_type> : <property_name> };
The NodeModel specifies a new node type. The NodeModel specifies a new node type.
skipping to change at page 10, line 48 skipping to change at page 10, line 48
pairs to specify properties for the new node type. Since belonging pairs to specify properties for the new node type. Since belonging
network is the intrinsic property for a node model, there is no need network is the intrinsic property for a node model, there is no need
to redefine the belonging network in the property list. to redefine the belonging network in the property list.
Example: Example:
NodeModel "DPI" Property String : "name", Boolean : "is_enable"; The NodeModel "DPI" Property String : "name", Boolean : "is_enable"; The
statement generates a new node model named DPI with two properties, statement generates a new node model named DPI with two properties,
"name" and "is_enable". "name" and "is_enable".
The <link_definition> statement is used to create a link model: The <connection_definition> statement is used to create a connection
model:
<link_definition> := LinkModel <link_type> <connection_definition> := ConnectionModel <connection_type>
Property { <data_type> : <property_name> }; Property { <data_type> : <property_name> };
The LinkModel specifies a new link type. The ConnectionModel specifies a new connection type.
The Property is followed by a list of "<data_type> : <property_name>" The Property is followed by a list of "<data_type> : <property_name>"
pairs to specify properties for the new link type. Since end nodes pairs to specify properties for the new connection type. Since end
are intrinsic properties for a link model, there is no need to nodes are intrinsic properties for a connection model, there is no
redefine the end nodes in the property list. need to redefine the end nodes in the property list.
The <flow_definition> statement is used to create a flow model: The <flow_definition> statement is used to create a flow model:
<flow_definition> := FlowModel <flow_type> <flow_definition> := FlowModel <flow_type>
Property { <data_type> : <property_name> }; Property { <data_type> : <property_name> };
The FlowModel specifies a new flow type. The FlowModel specifies a new flow type.
The Property is followed by a list of "<data_type> : <property_name>" The Property is followed by a list of "<data_type> : <property_name>"
pairs to specify fields for the new flow type. The pairs to specify fields for the new flow type. The
skipping to change at page 11, line 46 skipping to change at page 11, line 46
The keyword Description is follow by a model type name. The The keyword Description is follow by a model type name. The
description of the queried model will return from the language description of the queried model will return from the language
engine. engine.
5.5. Resource Access Statements 5.5. Resource Access Statements
In NEMO language, each resource entity instance is identified by a In NEMO language, each resource entity instance is identified by a
<UUID>. We use the following token to indicate the identifier given <UUID>. We use the following token to indicate the identifier given
to the resource entity instance. to the resource entity instance.
<node_id> := <naming> !! name to identify the node instance <node_id> := <naming> !! name to identify the node instance
<link_id> := <naming> !! name to identify the link instance <connection_id> := <naming> !! name to identify the connection instance
<flow_id> := <naming> !! name to identify the flow instance <flow_id> := <naming> !! name to identify the flow instance
<entity_id> := <node_id>|<link_id>|<flow_id> <entity_id> := <node_id>|<connection_id>|<flow_id>
5.5.1. Node Operations 5.5.1. Node Operations
The <node_cu> statement is used to create or update a node instance: The <node_cu> statement is used to create or update a node instance:
<node_cu> := Node <node_id> Type <node_type> <node_cu> := Node <node_id> Type <node_type>
NW <node_id> NW <node_id>
[Property {<property_name>: <value>}]; [Property {<property_name>: <value>}];
The Node is followed by a user specified <node_id>. If the <node_id> The Node is followed by a user specified <node_id>. If the <node_id>
is new in the system, a new node will be created automatically. is new in the system, a new node will be created automatically.
Otherwise, the corresponding node identified by <node_id> will be Otherwise, the corresponding node identified by <node_id> will be
updated with the following information. updated with the following information.
The Type specifies the type of the node to operate. The Type specifies the type of the node to operate.
The NW specifies the dependence where the node is located. The NW specifies the dependence where the node is located.
The Property is an optional keyword followed by a list of The Property is an optional keyword followed by a list of
"<property_name>: <value>" pairs. Multiple "<property_name>: "<property_name>: <value>" pairs. Multiple "<property_name>:
<value>" pairs are separated by commas. The <property_name> must be <value>" pairs are separated by commas. The <property_name> MUST be
selected from the property definition of the corresponding node selected from the property definition of the corresponding node
definition. definition.
Node "switch-1" Node "Headquater"
Type "switch" Type "logicnw"
NW "LN-1" NW "LN-1"
Property "ip_version" : 4; Property "location" : "Beijing";
The statement creates a switch type node that is located in the The statement creates a switch type node that is located in the
logical network "LN-1". logical network "LN-1".
The <node_del> statement is used to delete a node instance: The <node_del> statement is used to delete a node instance:
<node_del> := No Node <node_id>; <node_del> := No Node <node_id>;
The No Node is to delete a node in user's network. The No Node is to delete a node in user's network.
5.5.2. Link Operations 5.5.2. Connection Operations
The <link_cu> statement is used to create or update a link: The <connection_cu> statement is used to create or update a
connection:
<link_cu> := Link <link_id> <connection_cu> := Connection <connection_id>
EndNodes <node_id>, <node_id> EndNodes <node_id>, <node_id>
[Property {<property_name>: <value>}]; [Property {<property_name>: <value>}];
The Link is followed by a user specified <link_id>. If the <link_id> The Connection is followed by a user specified <connection_id>. If
is new in the system, a new link will be created automatically. the <connection_id> is new in the system, a new connection will be
created automatically. Otherwise, the corresponding connection
Otherwise, the corresponding link identified by the <link_id> will be identified by the <connection_id> will be updated with the following
updated with the following information. information.
The EndNodes specifies the two end nodes, identified by "<node_type> The EndNodes specifies the two end nodes, identified by "<node_type>
: <node_id>", of a link. The Property is an optional keyword : <node_id>", of a connection. The Property is an optional keyword
followed by a list of "<property_name>: <value>" pairs. Multiple followed by a list of "<property_name>: <value>" pairs. Multiple
"<property_name>: <value>" pairs are separated by commas. The "<property_name>: <value>" pairs are separated by commas. The
<property_name> must be selected from the property definition of the <property_name> MUST be selected from the property definition of the
corresponding link definition. corresponding connection definition.
Example: Example:
Link "link-1" Connection "connection-1"
EndNodes "S1", "S2" EndNodes "S1", "S2"
Property "bandwidth" : 1000, "delay" : 40; Property "bandwidth" : 1000, "delay" : 40;
The statement creates a link between two nodes, and sets the link The statement creates a connection between two nodes, and sets the
property. connection property.
The <link_del> statement is used to delete a node instance: The <connection_del> statement is used to delete a node instance:
<link_del> := No Link <link_id>; <connection_del> := No Connection <connection_id>;
The No Link is to delete a link in user's network. The No Connection is to delete a connection in user's network.
5.5.3. Flow Operations 5.5.3. Flow Operations
The <flow_cu> statement is used to create or update a flow: The <flow_cu> statement is used to create or update a flow:
<flow_cu> := Flow <flow_id> Match {<property_name>: <value> <flow_cu> := Flow <flow_id> Match {<property_name>: <value>
| Range (<value>, <value>) | Range (<value>, <value>)
| List({<value>})} | List({<value>})}
The Flow is followed by a user defined <flow_id>. If the <flow_id> The Flow is followed by a user defined <flow_id>. If the <flow_id>
skipping to change at page 14, line 6 skipping to change at page 14, line 6
also provides two keywords to assist the expression of values: also provides two keywords to assist the expression of values:
o The List is used to store a collection of data with the same data o The List is used to store a collection of data with the same data
type. type.
o The Range is used to express a range of values. o The Range is used to express a range of values.
Example: Example:
Flow "flow-1" Flow "flow-1"
Match "src_ip" : Range ("192.168.1.1", "192.168.1.243"); Match "src_ip" : Range ("192.0.2.1", "192.0.2.243");
The statement describes a flow with the source IP address ranging The statement describes a flow with the source IP address ranging
from 192.168.1.1 to 192.168.1.243. from 192.0.2.1 to 192.0.2.243.
The <link_del> statement is used to delete a flow instance: The <flow_del> statement is used to delete a flow instance:
<flow_del> := No Flow <flow_id>; <flow_del> := No Flow <flow_id>;
The No Flow is to delete a flow in user's network. The No Flow is to delete a flow in user's network.
5.6. Behavior Statements 5.6. Behavior Statements
5.6.1. Query Behavior 5.6.1. Query Behavior
The query statement is to retrieve selected data from specified model The query statement is to retrieve selected data from specified model
skipping to change at page 14, line 46 skipping to change at page 14, line 46
In NEMO language, each policy instance is identified by a <naming> In NEMO language, each policy instance is identified by a <naming>
<policy_id> := <naming> !! name to identify the policy instance <policy_id> := <naming> !! name to identify the policy instance
Create and update a policy Create and update a policy
<policy_cu> := Policy <policy_id> ApplyTo <entity_id> <policy_cu> := Policy <policy_id> ApplyTo <entity_id>
Priority <integer> Priority <integer>
[Condition {<expression>}] [Condition {<expression>}]
Action {<action_type> : {<value>}}; Action {<action_type> : {<value>}}
[Constraint {<expression>}];
The Policy is followed by a user defined <policy_id>. If the The Policy is followed by a user defined <policy_id>. If the
<policy_id> is new in the system, a new policy will be created <policy_id> is new in the system, a new policy will be created
automatically. Otherwise, the corresponding notification identified automatically. Otherwise, the corresponding notification identified
by the <policy_id> will be updated with the following information. by the <policy_id> will be updated with the following information.
The ApplyTo specifies the entity to which the policy will apply. The ApplyTo specifies the entity to which the policy will apply.
The Priority specifies the globe priority of the policy in the tenant The Priority specifies the globe priority of the policy in the tenant
name space. The <value> with lower number has a higher priority, name space. The <value> with lower number has a higher priority,
i.e. priority 0 holds the highest priority. i.e. priority 0 holds the highest priority.
The Condition is an optional keyword follow by an expression. It The Condition is an optional keyword follow by an expression. It
tells your program to execute the following actions only if a tells your program to execute the following actions only if a
particular test described by the expression evaluates to true. A particular test described by the expression evaluates to true. And
NEMO language expression is a construct made up of variables, users also can define which objects won't need to execute these
actions with Constraint.
A NEMO language expression is a construct made up of variables,
operators, and method invocations, which are constructed according to operators, and method invocations, which are constructed according to
the syntax of the language and evaluates to a single value. NEMO the syntax of the language and evaluates to a single value. NEMO
language supports many operators to facilitate the construction of language supports many operators to facilitate the construction of
expressions. Assume variable A holds 10 and variable B holds 0, expressions. Assume variable A holds 10 and variable B holds 0,
then: then:
+----------+----------------------------------------------+---------+ +----------+----------------------------------------------+---------+
| Operator | Description | Example | | Operator | Description | Example |
+----------+----------------------------------------------+---------+ +----------+----------------------------------------------+---------+
| && | Called Logical AND operator. If both the | (A && | | && | Called Logical AND operator. If both the | (A && |
skipping to change at page 16, line 48 skipping to change at page 16, line 48
+----------+----------------------------------------------+---------+ +----------+----------------------------------------------+---------+
The Action specifies the execution when conditions meet. The Action specifies the execution when conditions meet.
Example: Example:
Policy "policy-1" Policy "policy-1"
ApplyTo "flow-1" ApplyTo "flow-1"
Priority 100 Priority 100
Condition ("time">"18:00") || ("time"<"21:00") Condition ("time">"18:00") || ("time"<"21:00")
Action "gothrough" : List( "switch-1" , "switch-2"); Action "gothrough" : "backup_connection";
The statement creates a policy which indicates the flow to go through The statement creates a policy which indicates the flow to go through
two specified switches from 18:00 to 21:00. backup connection from 18:00 to 21:00.
Delete a policy: Delete a policy:
<policy_del> := No Policy <policy_id>; <policy_del> := No Policy <policy_id>;
The No Policy is to delete a policy in user's network. The No Policy is to delete a policy in user's network.
5.6.3. Notification Behavior 5.6.3. Notification Behavior
In NEMO language, each notification instance is identified by a In NEMO language, each notification instance is identified by a
skipping to change at page 18, line 42 skipping to change at page 18, line 42
a transaction. The code between the two key words will be a transaction. The code between the two key words will be
interpreted as a transaction and executed by the NEMO language interpreted as a transaction and executed by the NEMO language
engine. engine.
6. The NEMO Language Examples 6. The NEMO Language Examples
An enterprise with geographically distributed headquarter and branch An enterprise with geographically distributed headquarter and branch
sites has the requirement to dynamically balance the backup traffic. sites has the requirement to dynamically balance the backup traffic.
In order to implement this scenario, the virtual WAN tenant creates In order to implement this scenario, the virtual WAN tenant creates
two routers, and generates two links with different SLA to carry two logicnw, and generates two connections with different SLA to
diverse service flows. One link has 100M bandwidth with less than carry diverse service flows. One connection has 100M bandwidth with
50ms delay, which is used for normal traffic. And the other link has less than 50ms delay, which is used for normal traffic. And the
40G bandwidth with less than 400ms delay, which is used for backup other connection has 40G bandwidth with less than 400ms delay, which
traffic after work (from 19:00 to 23:00). With self defined flow is used for backup traffic after work (from 19:00 to 23:00). With
policy, the tenant can manage the link load balancing conveniently. self defined flow policy, the tenant can manage the connection load
balancing conveniently.
Real-time Link Real-time Connection
+-------------+ +--------------------+
10.0.1.0/24 | | 20.0.1.0/24 192.0.2.0/24 198.51.100.0/24
+---------+ +----+ +----+ +-------------+ +---------+ +-------------+
| Branch |------| R1 | | R2 |------| Headquarter | | Branch |------------------| Headquarter |
+---------+ +----+ +----+ +-------------+ +---------+ +-------------+
| | | |
+-------------+ +--------------------+
Broadband Link Broadband Connection
The detailed operation and code are shown as follows. The detailed operation and code are shown as follows.
o Step1: Create two virtual switch nodes in the WAN o Step1: Create two virtual logicnw nodes in the WAN
Node "R1" Node "Branch"
Type "router" Type "logicnw"
NW "LN-1" NW "LN-1"
Property "ip_version" : 4; Property "ipv4Prefix" : 192.0.2.0/24;
Node "R2" Node "Headquarter"
Type "router" Type "logicnw"
NW "LN-1" NW "LN-1"
Property "ip_version" : 4; Property "ipv4Prefix" : 198.51.100.0/24;
o Step2: Connect the two virtual nodes with two virtual links with o Step2: Connect the two virtual nodes with two virtual connections
different SLA. with different SLA.
Link "broadband_link" Connection "broadband_connection"
EndNodes "R1", "R2" EndNodes "Branch", "Headquater"
Property "bandwidth" : 40000, "delay" : 400; Property "bandwidth" : 40000, "delay" : 400;
Link "realtime_link" Connection "realtime_connection"
EndNodes "R1", "R2" EndNodes "Branch", "Headquater"
Property "bandwidth" : 100, "delay" : 50; Property "bandwidth" : 100, "delay" : 50;
o Step3: Indicate the flow to be operated. o Step3: Indicate the flow to be operated.
Flow "flow_all" Flow "flow_all"
Match "src_ip" : "10.0.1.0/24", "dst_ip": "10.0.1.0/24"; Match "src_ip" : "192.0.2.0/24", "dst_ip": "198.51.100.0/24";
Flow "flow_backup" Flow "flow_backup"
Match "src_ip" : "10.0.1.0/24", "dst_ip": "20.0.1.0/24", Match "src_ip" : "192.0.2.0/24", "dst_ip": "198.51.100.0/24",
"port": 55555; "port": 55555;
o Step4: Apply policies to corresponding flows. o Step4: Apply policies to corresponding flows.
P1: P1:
Policy "policy4all" Policy "policy4all"
ApplyTo "flow_all" ApplyTo "flow_all"
Priority 200 Priority 200
Action "forward_to": "realtime_link"; Action "forward_to": "realtime_connection";
P2: P2:
Policy "policy4backup" Policy "policy4backup"
ApplyTo "flow_backup" ApplyTo "flow_backup"
Priority 100 Priority 100
Condition ("time">"19:00:00") || ("time"<"23:00:00") Condition ("time">"19:00:00") || ("time"<"23:00:00")
Action "forward_to": "broadband_link"; Action "forward_to": "broadband_connection";
7. Security Considerations 7. Security Considerations
Because the network customers are allowed to customize their own Because the network customers are allowed to customize their own
services, they may bring potentially big impacts to a running IP services, they may bring potentially big impacts to a running IP
network. A strong user authentication mechanism is needed for the network. A strong user authentication mechanism is needed for the
northbound interface of the SDN controller. User authorization northbound interface of the SDN controller. User authorization
should be carefully managed by the network administrator to avoid any should be carefully managed by the network administrator to avoid any
dangerous operations and prevent any abuse of network resources. dangerous operations and prevent any abuse of network resources.
8. IANA Considerations 8. IANA Considerations
This memo includes no request to IANA. This memo includes no request to IANA.
9. Acknowledgements 9. Acknowledgements
The authors would like to thanks the valuable comments made by Wei The authors would like to thanks the valuable comments made by Wei
Cao, Xiaofei Xu, Fuyou Miao and Wenyang Lei. Cao, Xiaofei Xu, Fuyou Miao, Yali Zhang and Wenyang Lei.
This document was produced using the xml2rfc tool [RFC2629]. This document was produced using the xml2rfc tool [RFC2629].
10. Informative References 10. Informative References
[Frenetic] [Frenetic]
Foster, N., Harrison, R., Freedman, M., Monsanto, C., Foster, N., Harrison, R., Freedman, M., Monsanto, C.,
Rexford, J., Story, A., and D. Walker, "Frenetic: A Rexford, J., Story, A., and D. Walker, "Frenetic: A
Network Programming Languages, ICFP' 11", . Network Programming Languages, ICFP' 11".
[I-D.sdnrg-service-description-language] [I-D.xia-sdnrg-service-description-language]
Xia, Y., Jiang, S., and S. Hares, "Requirements for a Xia, Y., Jiang, S., and S. Hares, "Requirements for a
Service Description Language and Design Considerations, Service Description Language and Design Considerations",
draft-xia-sdnrg-service-description-language-00, Work in draft-xia-sdnrg-service-description-language-02 (work in
progress", July 2014. progress), May 2015.
[PBNM] Strassner, J., "Policy-Based Network Management: Solutions [PBNM] Strassner, J., "Policy-Based Network Management: Solutions
for the Next Generation, Morgan Kaufmann Publishers Inc. for the Next Generation, Morgan Kaufmann Publishers Inc.
San Francisco, CA, USA.", 2003. San Francisco, CA, USA.", 2003.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2629] Rose, M., "Writing I-Ds and RFCs using XML", RFC 2629, [RFC2629] Rose, M., "Writing I-Ds and RFCs using XML", RFC 2629,
June 1999. June 1999.
skipping to change at page 21, line 25 skipping to change at page 21, line 25
[RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the [RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the
Network Configuration Protocol (NETCONF)", RFC 6020, Network Configuration Protocol (NETCONF)", RFC 6020,
October 2010. October 2010.
[RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A.
Bierman, "Network Configuration Protocol (NETCONF)", RFC Bierman, "Network Configuration Protocol (NETCONF)", RFC
6241, June 2011. 6241, June 2011.
[TSFNet] Yap, K., Huang, T., Dodson, B., Lam, M., and N. McKeown, [TSFNet] Yap, K., Huang, T., Dodson, B., Lam, M., and N. McKeown,
"Towards Software-Friendly Networks, APSys 2010, pp:49-54, "Towards Software-Friendly Networks, APSys 2010, pp:49-54,
2010, New Delhi, India.", . 2010, New Delhi, India.".
Authors' Addresses Authors' Addresses
Yinben Xia (editor) Yinben Xia (editor)
Huawei Technologies Co., Ltd Huawei Technologies Co., Ltd
Q14, Huawei Campus, No.156 Beiqing Road Q14, Huawei Campus, No.156 Beiqing Road
Hai-Dian District, Beijing, 100095 Hai-Dian District, Beijing, 100095
P.R. China P.R. China
Email: xiayinben@huawei.com Email: xiayinben@huawei.com
 End of changes. 70 change blocks. 
140 lines changed or deleted 150 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/