| < draft-xia-sdnrg-nemo-language-02.txt | draft-xia-sdnrg-nemo-language-03.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: November 5, 2015 S. Hares | Expires: April 16, 2016 S. Hares | |||
| Huawei Technologies Co., Ltd | Huawei Technologies Co., Ltd | |||
| May 4, 2015 | October 14, 2015 | |||
| NEMO (NEtwork MOdeling) Language | NEMO (NEtwork MOdeling) Language | |||
| draft-xia-sdnrg-nemo-language-02 | draft-xia-sdnrg-nemo-language-03 | |||
| 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 November 5, 2015. | This Internet-Draft will expire on April 16, 2016. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2015 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 | |||
| skipping to change at page 2, line 23 ¶ | skipping to change at page 2, line 23 ¶ | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Requirements for the Intent Based NBI Language . . . . . . . 4 | 3. Requirements for the Intent Based NBI Language . . . . . . . 4 | |||
| 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 . . . . . . . . . . . . . . . 12 | |||
| 5.5.1. Node Operations . . . . . . . . . . . . . . . . . . . 12 | 5.5.1. Node Operations . . . . . . . . . . . . . . . . . . . 12 | |||
| 5.5.2. Connection Operations . . . . . . . . . . . . . . . . 12 | 5.5.2. Connection Operations . . . . . . . . . . . . . . . . 13 | |||
| 5.5.3. Flow Operations . . . . . . . . . . . . . . . . . . . 13 | 5.5.3. Flow Operations . . . . . . . . . . . . . . . . . . . 14 | |||
| 5.6. Behavior Statements . . . . . . . . . . . . . . . . . . . 14 | 5.6. Behavior Statements . . . . . . . . . . . . . . . . . . . 15 | |||
| 5.6.1. Query Behavior . . . . . . . . . . . . . . . . . . . 14 | 5.6.1. Query Behavior . . . . . . . . . . . . . . . . . . . 16 | |||
| 5.6.2. Policy Behavior . . . . . . . . . . . . . . . . . . . 14 | 5.6.2. Operation Behavior . . . . . . . . . . . . . . . . . 16 | |||
| 5.6.3. Notification Behavior . . . . . . . . . . . . . . . . 17 | 5.6.3. Notification Behavior . . . . . . . . . . . . . . . . 19 | |||
| 5.7. Connection Management Statements . . . . . . . . . . . . 17 | 5.7. Transaction Statements . . . . . . . . . . . . . . . . . 20 | |||
| 5.8. Transaction Statements . . . . . . . . . . . . . . . . . 18 | 6. The NEMO Language Examples . . . . . . . . . . . . . . . . . 20 | |||
| 6. The NEMO Language Examples . . . . . . . . . . . . . . . . . 18 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 21 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 20 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 | 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 20 | 10. Informative References . . . . . . . . . . . . . . . . . . . 22 | |||
| 10. Informative References . . . . . . . . . . . . . . . . . . . 20 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 21 | ||||
| 1. Introduction | 1. Introduction | |||
| While SDN (Software Defined Network) is becoming one of the most | While SDN (Software Defined Network) is becoming one of the most | |||
| important directions of network evolution, the essence of SDN is to | important directions of network evolution, the essence of SDN is to | |||
| make the network more flexible and easy to use. The North-Bound | make the network more flexible and easy to use. The North-Bound | |||
| Interface (NBI), located between the control plane and the | Interface (NBI), located between the control plane and the | |||
| applications, is essential to enable the application innovations and | applications, is essential to enable the application innovations and | |||
| nourish the eco-system of SDN by abstracting the network | nourish the eco-system of SDN by abstracting the network | |||
| capabilities/information and opening the abstract/logic network to | capabilities/information and opening the abstract/logic network to | |||
| skipping to change at page 5, line 32 ¶ | skipping to change at page 5, line 32 ¶ | |||
| 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 | |||
| architecture design, and does not go into the NBI design. | architecture design, and does not go into the NBI design. | |||
| Jennifer from Princeton University designed the Frenetic [Frenetic] | Jennifer Rexford from Princeton University designed the Frenetic | |||
| based on the OpenFlow protocol. It is an advanced language for flow | [Frenetic] based on the OpenFlow protocol. It is an advanced | |||
| programming, and systematically defines the operating model and mode | language for flow programming, and systematically defines the | |||
| for the flow. However, the network requirement from the service is | operating model and mode for the flow. However, the network | |||
| not only the flow operations, but also includes operations of | requirement from the service is not only the flow operations, but | |||
| resource, service conditions, and service logic. | also includes operations of resource, service conditions, and service | |||
| logic. | ||||
| In the book [PBNM], John Strassner defined the policy concept and | In the book [PBNM], John Strassner defined the policy concept and | |||
| proposed the formal description for network operations by using the | proposed the formal description for network operations by using the | |||
| policy. The method for querying network information is absent in the | policy. The method for querying network information is absent in the | |||
| book. Virtual tenant network and operations to the tenant network | book. Virtual tenant network and operations to the tenant network | |||
| are not considered. | are not considered. | |||
| All these investigations direct to the future SDN that use simple and | All these investigations direct to the future SDN that use simple and | |||
| intuitive interfaces to describe the network demands without complex | intuitive interfaces to describe the network demands without complex | |||
| programming. | programming. | |||
| skipping to change at page 6, line 47 ¶ | skipping to change at page 6, line 47 ¶ | |||
| * The function node (FN) provides network services or forwarding | * The function node (FN) provides network services or forwarding | |||
| with user concern, such as, firewall, load balance, vrouter, | with user concern, such as, firewall, load balance, vrouter, | |||
| etc. | etc. | |||
| * The business node (BN) describes a set of network elements and | * The business node (BN) describes a set of network elements and | |||
| their connections, such as subnet, autonomous system, and | their connections, such as subnet, autonomous system, and | |||
| internet. It conceals the internal topology and exposes | internet. It conceals the internal topology and exposes | |||
| properties as one entity. It also enables iteration, i.e., a | properties as one entity. It also enables iteration, i.e., a | |||
| network entity may include other network entities. | network entity may include other network entities. | |||
| o Connection model: describes the connectivity between node | o Connection model: describes the connectivity network resource | |||
| entities. This connection is not limited at the connectivity | between node entities. With Connection model, user could apply | |||
| between single entity and single entity, but it also can express | for link resources between nodes and user can assign specific | |||
| the connectivity between single entity and multiply entities, or | bandwidth for them. Connection constructs the foundation of | |||
| multiply entities and multiply entities. | communication, namely, the necessary condition for communications | |||
| between nodes is there are available resources between them. By | ||||
| default, the communication is allowed if there are direct | ||||
| connections between them. The Connection is not limited to the | ||||
| connectivity between single entity and single entity, but it can | ||||
| also 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. The Flow model together with the associated operations | |||
| describe reachability of specific traffic between nodes in the | ||||
| virtual network, which is different from the connection resource | ||||
| between nodes. | ||||
| Network behavior includes the information and control operations. | Network behavior includes the information aquisition and the control | |||
| operations. | ||||
| The information operation provides two methods to get the network | The NEMO language provides two methods to get the network information | |||
| information for users. | for users. | |||
| o Query: a synchronous mode to get the information, i.e., one can | o Query: a synchronous mode to get the information, i.e., one can | |||
| 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 operations to control the network. | |||
| o Policy: control the behavior of specific entities by APP, such as | o Operation: control the behavior of specific entities by APP, such | |||
| flow policy, node policy. All the policies follow the same | as flow operation, node operation. All the operations follow the | |||
| pattern "when <condition>, to execute <action>, with | same pattern "when <condition>, do <action>, with <constraint>", | |||
| <constraint>", and can be applied to any entity. But some of | and can be applied to any entity. But some of operation elements | |||
| policy elements can be omitted according to users' requirement. | can be omitted according to users' requirement. Operation has the | |||
| similar meaning with policy in some sense which also emphasizes | ||||
| the dynamic adjustment of objects. | ||||
| 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 40 ¶ | skipping to change at page 9, line 7 ¶ | |||
| 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> | <connection_difinition> | | <model_definition_cmd> := <node_definition> | <connection_definition> | | |||
| <action_deifinition> | <model_description> | <action_definition> | <model_description> | |||
| <resource_access_cmd> := <node_cu> | <node_del> | <connection_cu> | | <resource_access_cmd> := <node_create> | <node_import> |<node_update> | | |||
| <connection_del> | <flow_cu> | <flow_del> | <node_del> | <connection_create> | | |||
| <behavior_cmd> := <query_cmd> | <policy_cu> | <policy_del> | | <connection_update> | <connection_del> | | |||
| <notification_cu> | <notification_del> | <flow_create> | <flow_update> | <flow_del> | |||
| <connection_mgt_cmd> := <connect_cmd> | <disconnect_cmd> | <behavior_cmd> := <query_cmd> | <operation_create> | <operation_update> | |||
| | <operation_del> | <notification_create> | | ||||
| <notification_update> | <notification_del> | ||||
| <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 | ConnectionModel | FlowModel | | IPPrefix | NodeModel | ConnectionModel | FlowModel | | |||
| ActionModel | Description | Porperty | Node | Connection| | ActionModel | Description | Porperty | Node | Connection| | |||
| Flow | No | EndNodes | Type | NW | Match | List | | Flow | EndNodes | Type | Contain | Match | List | | |||
| Range| Query | From | Notification | Listener | | Range| Query | From | Notification | Listener | | |||
| Policy | ApplyTo | Priority | Condition | Action | | Operation | Target | Priority | Condition | Action | | |||
| Connect | Disconnect | Address | Port | Transaction | | Transaction | Commit | CREATE | IMPORT | UPDATE | DELETE | |||
| 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 10, line 33 ¶ | skipping to change at page 10, line 47 ¶ | |||
| <connection_type> := <naming> !!type name of the connection 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> | <connection_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. | |||
| 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 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 <connection_definition> statement is used to create a connection | The <connection_definition> statement is used to create a connection | |||
| model: | model: | |||
| <connection_definition> := ConnectionModel <connection_type> | <connection_definition> := ConnectionModel <connection_type> | |||
| Property { <data_type> : <property_name> }; | Property { <data_type> : <property_name> }; | |||
| The ConnectionModel specifies a new connection 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 connection type. Since end | pairs to specify properties for the new connection type. Since end | |||
| nodes are intrinsic properties for a connection model, there is no | nodes are intrinsic properties for a connection model, there is no | |||
| need to 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 | |||
| <action_definition> statement is used to create an action model: | <action_definition> statement is used to create an action model: | |||
| <action_definition> := ActionModel <action_type> | <action_definition> := ActionModel <action_type> | |||
| Property { <data_type> : <property_name> }; | Property { <data_type> : <property_name> }; | |||
| The ActionModel specifies a new action type. | The ActionModel specifies a new action 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 action. | pairs to specify properties for the new action. | |||
| NEMO language also supports querying the description of a defined | NEMO language also supports querying the description of a defined | |||
| model by using the <model_description> statement: | model by using the <model_description> statement: | |||
| <model_description> := Description <model_type>; | <model_description> := Description <model_type>; | |||
| The keyword Description is followed 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 | <naming> which MUST be unique. We use the following token to | |||
| to the resource entity instance. | indicate the identifier given to the resource entity instance. | |||
| <node_id> := <naming> !! name to identify the node instance | <node_id> := <naming> !! name to identify the node instance | |||
| <connection_id> := <naming> !! name to identify the connection 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>|<connection_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: | NEMO model defines basic method for the node instances, and uses | |||
| intuitive keyword to indicate the specific method. User could | ||||
| create, import, update and delete a node instance. | ||||
| <node_cu> := Node <node_id> Type <node_type> | The <node_create> statement is used to create or update a node | |||
| NW <node_id> | instance: | |||
| [Property {<property_name>: <value>}]; | ||||
| The Node is followed by a user specified <node_id>. If the <node_id> | <node_create> := CREATE Node <node_id> Type <node_type> | |||
| is new in the system, a new node will be created automatically. | [Contain {<node_id>}] | |||
| Otherwise, the corresponding node identified by <node_id> will be | [Property {<property_name>: <value>}]; | |||
| updated with the following information. | ||||
| The <node_import> statement is used to import an existing external | ||||
| node instance: | ||||
| <node_import> := IMPORT Node <node_id> Type <node_type> | ||||
| [Contain {<node_id>}] | ||||
| [Property {<property_name>: <value>}]; | ||||
| The <node_update> statement is used to update an existing node | ||||
| instance: | ||||
| <node_update> := UPDATE Node <node_id> | ||||
| [Contain {<node_id>}] | ||||
| [Property {<property_name>: <value>}]; | ||||
| In all the above three statements, the Node is followed by a user | ||||
| specified <node_id>. According to the method, system will take | ||||
| corresponding action for the node instance. If the method is CREATE | ||||
| or IMPORT and the <node_id> is new in the system, a new node will be | ||||
| created automatically. If the method is UPDATE and the <node_id> | ||||
| exists in the system, the corresponding node identified by <node_id> | ||||
| will be 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 Contain is an optional keyword specifying the internal nodes | |||
| which are included in this node instance. | ||||
| 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 "Headquater" | An example of creating a node instance is as follows: | |||
| Type "logicnw" | ||||
| NW "LN-1" | ||||
| Property "location" : "Beijing"; | ||||
| The statement creates a switch type node that is located in the | CREATE Node Headquarter | |||
| logical network "LN-1". | Type l3group | |||
| Contain LN-1 | ||||
| Property location : "Beijing"; | ||||
| The statement creates a layer 3 virtual network which contains a | ||||
| predefined node "LN-1". The l3 virtual network is located in | ||||
| Beijing. | ||||
| 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> := DELETE Node <node_id>; | |||
| The No Node is to delete a node in user's network. | The DELETE Node is to delete a node in user's network. | |||
| 5.5.2. Connection Operations | 5.5.2. Connection Operations | |||
| The <connection_cu> statement is used to create or update a | NEMO model defines basic method for the connection instances, and use | |||
| connection: | intuitive keyword to indicate the specific method. User could | |||
| create, update and delete a connection instance. | ||||
| <connection_cu> := Connection <connection_id> | The <connection_create> statement is used to create a connection: | |||
| EndNodes <node_id>, <node_id> | ||||
| [Property {<property_name>: <value>}]; | <connection_create> := CREATE Connection <connection_id> | |||
| Type <connection_type> | ||||
| EndNodes <node_id>, <node_id> | ||||
| [Property {<property_name>: <value>}]; | ||||
| The <connection_update> statement is used to update a connection: | ||||
| <connection_create> := UPDATE Connection <connection_id> | ||||
| [EndNodes {<node_id>}, {<node_id>}] | ||||
| [Property {<property_name>: <value>}]; | ||||
| The Connection is followed by a user specified <connection_id>. If | The Connection is followed by a user specified <connection_id>. If | |||
| the <connection_id> is new in the system, a new connection will be | the method is CREATE and the <connection_id> is new in the system, a | |||
| created automatically. Otherwise, the corresponding connection | new connection will be created automatically. If the method is | |||
| identified by the <connection_id> will be updated with the following | UPDATE and the <connection_id> exists in the system, the | |||
| information. | corresponding connection identified by the <connection_id> will be | |||
| updated with the following information. | ||||
| The EndNodes specifies the two end nodes, identified by "<node_type> | The Type specifies the type of the connection to use. For example | |||
| : <node_id>", of a connection. The Property is an optional keyword | there will be point to point connection, or point to multiple points | |||
| followed by a list of "<property_name>: <value>" pairs. Multiple | connection. | |||
| "<property_name>: <value>" pairs are separated by commas. The | ||||
| <property_name> MUST be selected from the property definition of the | ||||
| corresponding connection definition. | ||||
| Example: | The EndNodes specifies the end nodes of a connection. For each | |||
| connection there will be left nodes and right nodes stand for the two | ||||
| ends. | ||||
| Connection "connection-1" | The Property is an optional keyword followed by a list of | |||
| EndNodes "S1", "S2" | "<property_name>: <value>" pairs. Multiple "<property_name>: | |||
| Property "bandwidth" : 1000, "delay" : 40; | <value>" pairs are separated by commas. The <property_name> MUST be | |||
| selected from the property definition of the corresponding connection | ||||
| definition. | ||||
| An example of creating a connection instance is as follows: | ||||
| CREATE Connection connection-1 | ||||
| Type p2p | ||||
| EndNodes S1, S2 | ||||
| Property bandwidth : 1000, delay : 40; | ||||
| The statement creates a connection between two nodes, and sets the | The statement creates a connection between two nodes, and sets the | |||
| connection property. | connection property. | |||
| The <connection_del> statement is used to delete a node instance: | The <connection_del> statement is used to delete a connection | |||
| instance: | ||||
| <connection_del> := No Connection <connection_id>; | <connection_del> := DELETE Connection <connection_id>; | |||
| The No Connection is to delete a connection in user's network. | The DELETE 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: | NEMO model defines basic method for the flow instances, and use | |||
| intuitive keyword to indicate the specific method. User could | ||||
| create, update and delete a flow instance. | ||||
| <flow_cu> := Flow <flow_id> Match {<property_name>: <value> | The <flow_create> statement is used to create a flow: | |||
| | Range (<value>, <value>) | ||||
| | List({<value>})} | ||||
| The Flow is followed by a user defined <flow_id>. If the <flow_id> | <flow_create> := CREATE Flow <flow_id> | |||
| is new in the system, a new flow will be created automatically. | Match {<property_name>: <value> | |||
| Otherwise, the corresponding flow identified by the <flow_id> will be | | Range (<value>, <value>) | |||
| updated with the following information. | | List({<value>})} | |||
| The <flow_update> statement is used to update a flow: | ||||
| <flow_update> := UPDATE Flow <flow_id> | ||||
| Match {<property_name>: <value> | ||||
| | Range (<value>, <value>) | ||||
| | List({<value>})} | ||||
| The Flow is followed by a user defined <flow_id>. If the method is | ||||
| CREATE and the <flow_id> is new in the system, a new flow identifier | ||||
| will be created automatically. If the method is UPDATE and the | ||||
| <flow_id> exists in the system, the corresponding flow identified by | ||||
| the <flow_id> will be updated with the following information. | ||||
| The Match specifies a flow by indicate match fields. NEMO language | The Match specifies a flow by indicate match fields. NEMO language | |||
| 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: | An example of creating a flow instance is as follows: | |||
| Flow "flow-1" | CREATE Flow flow-1 | |||
| Match "src_ip" : Range ("192.0.2.1", "192.0.2.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.0.2.1 to 192.0.2.243. | from 192.0.2.1 to 192.0.2.243. | |||
| The <flow_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> := DELETE Flow <flow_id>; | |||
| The No Flow is to delete a flow in user's network. | The DELETE 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 | |||
| object. | object. | |||
| The <query_statement> generate a query: | The <query_statement> generate a query: | |||
| <query_cmd> := Query {<property_name>} | <query_cmd> := Query {<property_name>} | |||
| From {<entity_id>|<policy_id>} | From {<entity_id>|<operation_id>} | |||
| The Query is followed by one or more <property_name>s which are | The Query is followed by one or more <property_name>s which are | |||
| defined properties of the object to be queried. | defined properties of the object to be queried. | |||
| The From is followed by the one or more queried objects. NENO | The From is followed by the one or more queried objects. NENO | |||
| language support query operation to network entities and the policy. | language support query operation to network entities and the policy. | |||
| 5.6.2. Policy Behavior | 5.6.2. Operation Behavior | |||
| In NEMO language, each policy instance is identified by a <naming> | NEMO model defines basic method for the operation instances, and use | |||
| intuitive keyword to indicate the specific method. User could | ||||
| create, update and delete a operation instance. | ||||
| <policy_id> := <naming> !! name to identify the policy instance | In NEMO language, each operation instance is identified by a <naming> | |||
| which MUST be unique. | ||||
| <operation_id> := <naming> !! name to identify the operation instance | ||||
| Create and update a policy | Create and update a policy | |||
| <policy_cu> := Policy <policy_id> ApplyTo <entity_id> | <operation_create> := CREATE Operation <operation_id> | |||
| Priority <integer> | Target <entity_id> | |||
| [Condition {<expression>}] | Priority <integer> | |||
| Action {<action_type> : {<value>}} | [Condition <expression>] | |||
| [Constraint {<expression>}]; | Action {<action_type> : {<value>}}; | |||
| The Policy is followed by a user defined <policy_id>. If the | <operation_update> := UPDATE Operation <operation_id> | |||
| <policy_id> is new in the system, a new policy will be created | [Target <entity_id>] | |||
| automatically. Otherwise, the corresponding notification identified | [Priority <integer>] | |||
| by the <policy_id> will be updated with the following information. | [Condition <expression>] | |||
| [Action {<action_type> : {<value>}}]; | ||||
| The ApplyTo specifies the entity to which the policy will apply. | The Operation is followed by a user defined <operation_id>. If the | |||
| method is CREATE and the <operation_id> is new in the system, a new | ||||
| operation will be created automatically. If the method is UPDATE and | ||||
| the <operation_id> exists in the system, the corresponding operation | ||||
| identified by the<operation_id> will be updated with the following | ||||
| information. | ||||
| The Priority specifies the globe priority of the policy in the tenant | The Target specifies the entity to which the operation will apply. | |||
| name space. The <value> with lower number has a higher priority, | ||||
| i.e. priority 0 holds the highest priority. | The Priority specifies the globe priority of the operation in the | |||
| tenant name space. The <value> with lower number has a higher | ||||
| 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. And | particular test described by the expression evaluates to true. And | |||
| users also can define which objects won't need to execute these | users also can define which objects won't need to execute these | |||
| actions with Constraint. | actions with Constraint. | |||
| A NEMO language expression is a construct made up of variables, | 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 | |||
| skipping to change at page 16, line 42 ¶ | skipping to change at page 18, line 42 ¶ | |||
| | < | Checks if the value of left operand is less | (A < B) | | | < | Checks if the value of left operand is less | (A < B) | | |||
| | | than the value of right operand, if yes then | is | | | | than the value of right operand, if yes then | is | | |||
| | | condition becomes true. | true. | | | | condition becomes true. | true. | | |||
| | <= | Checks if the value of left operand is less | (A <= | | | <= | Checks if the value of left operand is less | (A <= | | |||
| | | than or equal to the value of right operand, | B) is | | | | than or equal to the value of right operand, | B) is | | |||
| | | if yes then condition becomes true. | true. | | | | if yes then condition becomes true. | true. | | |||
| +----------+----------------------------------------------+---------+ | +----------+----------------------------------------------+---------+ | |||
| The Action specifies the execution when conditions meet. | The Action specifies the execution when conditions meet. | |||
| Example: | An example of creating anoperation is as follows: | |||
| Policy "policy-1" | CREATE Operation operation-1 | |||
| ApplyTo "flow-1" | Target flow-1 | |||
| Priority 100 | Priority 100 | |||
| Condition ("time">"18:00") || ("time"<"21:00") | Condition (time>"18:00") || (time<"21:00") | |||
| Action "gothrough" : "backup_connection"; | Action redirect : "backup_connection"; | |||
| The statement creates a policy which indicates the flow to go through | The statement creates an operation which indicates the flow to go | |||
| backup connection from 18:00 to 21:00. | through backup connection from 18:00 to 21:00. | |||
| Delete a policy: | Delete an operation: | |||
| <policy_del> := No Policy <policy_id>; | <operation_del> := DELETE Operation <operation_id>; | |||
| The No Policy is to delete a policy in user's network. | The DELETE Operation 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 | |||
| <naming> | <naming> | |||
| <notification_id> := <naming> !! name to identify the notification | <notification_id> := <naming> !! name to identify the notification | |||
| instance | instance | |||
| Create and update a notification | Create and update a notification | |||
| <notification_cu> := Notification <notification_id> | <notification_create> := CREATE Notification <notification_id> | |||
| [(Query {<property_name>} | [(Query {<property_name>} | |||
| From {<entity_id>})] | From {<entity_id>})] | |||
| Condition {<expression>} | Condition {<expression>} | |||
| Listener <callbackfunc>; | Listener <callbackfunc>; | |||
| <notification_update> := UPDATE Notification <notification_id> | ||||
| [(Query {<property_name>} | ||||
| From {<entity_id>})] | ||||
| Condition {<expression>} | ||||
| Listener <callbackfunc>; | ||||
| The Notification is followed by a user defined <notification_id>. If | The Notification is followed by a user defined <notification_id>. If | |||
| the <notification_id> is new in the system, a new notificaiton will | the method is CREATE and the <notification_id> is new in the system, | |||
| be created automatically. Otherwise, the corresponding notification | a new notification will be created automatically. If the method is | |||
| identified by the <notification_id> will be updated with the | UPDATE and the <notification_id> exists in the system, the | |||
| following information. | corresponding notification identified by the<notification_id> will be | |||
| updated with the following information. | ||||
| The Query clause is nested in the notification statement to indicate | The Query clause is nested in the notification statement to indicate | |||
| the information acquisition. | the information acquisition. | |||
| The Condition clause is the same as in policy statement, which | The Condition clause is the same as in operation statement, which | |||
| triggers the notification. | triggers the notification. | |||
| The Listener specifies the callback function that is used to process | The Listener specifies the callback function that is used to process | |||
| the notification. | the notification. | |||
| Delete a notification: | Delete a notification: | |||
| <notification_del> := No Notification <notification_id>; | <notification_del> := DELETE Notification <notification_id>; | |||
| The DELETE Notification is to delete a notification in user's | ||||
| The No Notification is to delete a notification in user's network. | network. | |||
| 5.7. Connection Management Statements | ||||
| In NEMO language, each connection instance is identified by a | ||||
| <naming> | ||||
| <conn_id> := <naming> !! name to identify the connection instance | ||||
| Setup a connection to the NEMO language engine: | ||||
| <connet_cmd> := Connect <conn_id> Address <ip_prefix> | ||||
| Port <integer> | ||||
| The Connect is followed by a user defined <conn_id>. If the | ||||
| <conn_id> is new in the system, a new connection will be created | ||||
| automatically. Otherwise, the corresponding connection identified by | ||||
| <conn_id> will be updated with the following information. | ||||
| The Address and Prot specify the IP address and the port of the NEMO | ||||
| language engine to connect separately. | ||||
| Disconnect the connection to the NEMO language engine: | ||||
| <disconnect_cmd> := Disconnect <conn_id> | ||||
| The Disconnect is to remove the connection with an ID equals to | ||||
| <conn_id> from the NEMO language engine. | ||||
| 5.8. Transaction Statements | 5.7. Transaction Statements | |||
| <transaction_begin> := Transaction | <transaction_begin> := Transaction | |||
| <transaction_end> := Commit | <transaction_end> := Commit | |||
| The keywords Transaction and Commit are used to tag begin and end of | The keywords Transaction and Commit are used to tag begin and end of | |||
| 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 logicnw, and generates two connections with different SLA to | two logicnw, and generates two connections with different SLA to | |||
| carry diverse service flows. One connection has 100M bandwidth with | carry diverse service flows. One connection has 100M bandwidth with | |||
| less than 50ms delay, which is used for normal traffic. And the | less than 50ms delay, which is used for normal traffic. And the | |||
| other connection has 40G bandwidth with less than 400ms delay, which | other connection has 40G bandwidth with less than 400ms delay, which | |||
| is used for backup traffic after work (from 19:00 to 23:00). With | is used for backup traffic after work (from 19:00 to 23:00). With | |||
| self defined flow policy, the tenant can manage the connection load | self defined flow operations, the tenant can manage the connection | |||
| balancing conveniently. | load balancing conveniently. | |||
| Real-time Connection | Real-time Connection | |||
| +--------------------+ | +--------------------+ | |||
| 192.0.2.0/24 198.51.100.0/24 | 192.0.2.0/24 198.51.100.0/24 | |||
| +---------+ +-------------+ | +---------+ +-------------+ | |||
| | Branch |------------------| Headquarter | | | Branch |------------------| Headquarter | | |||
| +---------+ +-------------+ | +---------+ +-------------+ | |||
| | | | | | | |||
| +--------------------+ | +--------------------+ | |||
| Broadband Connection | 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 logicnw nodes in the WAN | o Step1: Create two virtual logicnw nodes in the WAN | |||
| Node "Branch" | CREATE Node Branch | |||
| Type "logicnw" | Type l2group | |||
| NW "LN-1" | Property ipv4Prefix : 192.0.2.0/24; | |||
| Property "ipv4Prefix" : 192.0.2.0/24; | ||||
| Node "Headquarter" | CREATE Node Headquarter | |||
| Type "logicnw" | Type l2group | |||
| NW "LN-1" | Property ipv4Prefix : 198.51.100.0/24; | |||
| Property "ipv4Prefix" : 198.51.100.0/24; | ||||
| o Step2: Connect the two virtual nodes with two virtual connections | o Step2: Connect the two virtual nodes with two virtual connections | |||
| with different SLA. | with different SLA. | |||
| Connection "broadband_connection" | CREATE Connection broadband_connection | |||
| EndNodes "Branch", "Headquater" | EndNodes Branch, Headquater | |||
| Property "bandwidth" : 40000, "delay" : 400; | Property bandwidth : 40000, delay : 400; | |||
| Connection "realtime_connection" | CREATE Connection realtime_connection | |||
| EndNodes "Branch", "Headquater" | 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" | CREATE Flow flow_all | |||
| Match "src_ip" : "192.0.2.0/24", "dst_ip": "198.51.100.0/24"; | Match src_ip : "192.0.2.0/24", dst_ip: "198.51.100.0/24"; | |||
| Flow "flow_backup" | CREATE Flow flow_backup | |||
| Match "src_ip" : "192.0.2.0/24", "dst_ip": "198.51.100.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" | CREATE Operation operation4all | |||
| ApplyTo "flow_all" | Target flow_all | |||
| Priority 200 | Priority 200 | |||
| Action "forward_to": "realtime_connection"; | Action redirect: "realtime_connection"; | |||
| P2: | P2: | |||
| Policy "policy4backup" | CREATE Operation operation4backup | |||
| ApplyTo "flow_backup" | Target 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_connection"; | Action redirect: "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. | |||
| skipping to change at page 21, line 6 ¶ | skipping to change at page 22, line 30 ¶ | |||
| 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-02 (work in | draft-xia-sdnrg-service-description-language-02 (work in | |||
| progress), May 2015. | 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, | |||
| DOI 10.17487/RFC2119, March 1997, | ||||
| <http://www.rfc-editor.org/info/rfc2119>. | ||||
| [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. | DOI 10.17487/RFC2629, June 1999, | |||
| <http://www.rfc-editor.org/info/rfc2629>. | ||||
| [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | |||
| Unique IDentifier (UUID) URN Namespace", RFC 4122, July | Unique IDentifier (UUID) URN Namespace", RFC 4122, | |||
| 2005. | DOI 10.17487/RFC4122, July 2005, | |||
| <http://www.rfc-editor.org/info/rfc4122>. | ||||
| [RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
| Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
| October 2010. | DOI 10.17487/RFC6020, October 2010, | |||
| <http://www.rfc-editor.org/info/rfc6020>. | ||||
| [RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J., and A. | [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | |||
| Bierman, "Network Configuration Protocol (NETCONF)", RFC | and A. Bierman, Ed., "Network Configuration Protocol | |||
| 6241, June 2011. | (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | |||
| <http://www.rfc-editor.org/info/rfc6241>. | ||||
| [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 | |||
| End of changes. 83 change blocks. | ||||
| 218 lines changed or deleted | 286 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/ | ||||