| < draft-xia-sdnrg-nemo-language-00.txt | draft-xia-sdnrg-nemo-language-01.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: January 5, 2015 S. Hares | Expires: April 30, 2015 S. Hares | |||
| Huawei Technologies Co., Ltd | Huawei Technologies Co., Ltd | |||
| July 4, 2014 | October 27, 2014 | |||
| NEMO (NEtwork MOdeling) Language | NEMO (NEtwork MOdeling) Language | |||
| draft-xia-sdnrg-nemo-language-00 | draft-xia-sdnrg-nemo-language-01 | |||
| Abstract | Abstract | |||
| The North-Bound Interface (NBI), located between the network control | The North-Bound Interface (NBI), located between the control plane | |||
| 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 anther NBI | proposes the NEtwork MOdeling (NEMO) language which is intent based | |||
| fashion. Concept, model and syntax are introduced in the document. | interface with novel language fashion. Concept, model and syntax are | |||
| introduced in the document. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| 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 January 5, 2015. | This Internet-Draft will expire on April 30, 2015. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2014 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 | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Related work . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Requirements for the Intent Based NBI Language . . . . . . . 4 | |||
| 4. The NEMO Language overview . . . . . . . . . . . . . . . . . 5 | 4. Related work . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 4.1. Network Model of the NEMO Language . . . . . . . . . . . 5 | 5. The NEMO Language Specifications . . . . . . . . . . . . . . 6 | |||
| 4.2. Primitives . . . . . . . . . . . . . . . . . . . . . . . 7 | 5.1. Network Model of the NEMO Language . . . . . . . . . . . 6 | |||
| 5. The NEMO Language Examples . . . . . . . . . . . . . . . . . 9 | 5.2. Notation . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | 5.3. NEMO Language Overview . . . . . . . . . . . . . . . . . 8 | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 5.4. Model Definition . . . . . . . . . . . . . . . . . . . . 9 | |||
| 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 10 | 5.4.1. Data Types . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 9. Informative References . . . . . . . . . . . . . . . . . . . 10 | 5.4.2. Model Definition and Description Statement . . . . . 10 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 11 | 5.5. Resource Access Statements . . . . . . . . . . . . . . . 11 | |||
| 5.5.1. Node Operations . . . . . . . . . . . . . . . . . . . 12 | ||||
| 5.5.2. Link Operations . . . . . . . . . . . . . . . . . . . 12 | ||||
| 5.5.3. Flow Operations . . . . . . . . . . . . . . . . . . . 13 | ||||
| 5.6. Behavior Statements . . . . . . . . . . . . . . . . . . . 14 | ||||
| 5.6.1. Query Behavior . . . . . . . . . . . . . . . . . . . 14 | ||||
| 5.6.2. Policy Behavior . . . . . . . . . . . . . . . . . . . 14 | ||||
| 5.6.3. Notification Behavior . . . . . . . . . . . . . . . . 17 | ||||
| 5.7. Connection Management Statements . . . . . . . . . . . . 17 | ||||
| 5.8. Transaction Statements . . . . . . . . . . . . . . . . . 18 | ||||
| 6. The NEMO Language Examples . . . . . . . . . . . . . . . . . 18 | ||||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 20 | ||||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 | ||||
| 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 20 | ||||
| 10. Informative References . . . . . . . . . . . . . . . . . . . 20 | ||||
| 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 | |||
| applications. | applications. | |||
| The NBI is usually provided in the form of API (Application | The NBI is usually provided in the form of API (Application | |||
| Programming Interface). Different vendors provide self-defined API | Programming Interface). Different vendors provide self-defined API | |||
| sets. Each API set, such as OnePK from Cisco and OPS from Huawei, | sets. Each API set, such as OnePK from Cisco and OPS from Huawei, | |||
| often contains hundreds of specific APIs. Diverse APIs without | often contains hundreds of specific APIs. Diverse APIs without | |||
| consistent style are hard to remember and use, and nearly impossible | consistent style are hard to remember and use, and nearly impossible | |||
| to be standardized. | to be standardized. | |||
| Most of those APIs are designed by network domain experts, who are | In addition, most of those APIs are designed by network domain | |||
| used to thinking from the network system perspective. The interface | experts, who are used to thinking from the network system | |||
| designer does not know how the users will use the device and exposes | perspective. The interface designer does not know how the users will | |||
| information details as much as possible. It enables better control | use the device and exposes information details as much as possible. | |||
| of devices, but leaves huge burden of selecting useful information to | It enables better control of devices, but leaves huge burden of | |||
| users without well training. Since the NBI is used by network users, | selecting useful information to users without well training. Since | |||
| a more appropriate design is to think from the user perspective and | the NBI is used by network users, a more appropriate design is to | |||
| 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 | ||||
| case of SQL (Structured Query Language), which simplified the | ||||
| complicated data operation to a unified and intuitive way in the form | ||||
| 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 operation and then get the result. As a data domain DSL, SQL is | ||||
| simple and intuitive, and can be embedded in applications. So what | ||||
| we need for the network NBI is a set of "network domain SQL". | ||||
| [I-D.sdnrg-service-description-language] describe the requirements | [I-D.sdnrg-service-description-language] describe the requirements | |||
| for a service description language and the design considerations. | for a service description language and the design considerations. | |||
| A top-down NBI design contains following features: | This document will introduce an intent based NBI with novel language | |||
| fashion. | ||||
| 2. Terminology | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
| "OPTIONAL" in this document are to be interpreted as described in | ||||
| [RFC2119] when they appear in ALL CAPS. When these words are not in | ||||
| ALL CAPS (such as "should" or "Should"), they have their usual | ||||
| English meanings, and are not to be interpreted as [RFC2119] key | ||||
| words. | ||||
| Network service also "service" for short, is the service logic that | ||||
| contains network operation requirements; | ||||
| Network APP also "APP" for short, is the application to implement | ||||
| the network service; | ||||
| Network user also "user" for short, is the network administrator or | ||||
| operator. | ||||
| 3. Requirements for the Intent Based NBI Language | ||||
| An intent based NBI language design contains following features: | ||||
| o Express user intent | o Express user intent | |||
| To simplify the operation, applications or users can use the NBI | To simply 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 describe network demand | With the NBI, the application or user can description of network | |||
| in a generic way, so that any platform or system can get the | demand in a generic way, so that any platform or system can get | |||
| identical knowledge and consequently execute to the same result. | the identical knowledge and consequently execute to the same | |||
| Any low-level and device/vendor specific configurations and | result. Any low-level and device/vendor specific configurations | |||
| dependencies should be avoided. | and dependencies should be avoided. | |||
| o Intuitive domain specific language (DSL) for network | o Intuitive Domain Specific Language (DSL) for network | |||
| The expression of the DSL should be human-friendly and be easily | The expression of the DSL should be human-friendly and be easily | |||
| understood by network operators. DSL should be directly used by | understood by network operators. DSL should be directly used by | |||
| the system. | the system. | |||
| o Privilege control | o Privilege control | |||
| Every application or user is authorized within a specific network | Every application or user is authorized within a specific network | |||
| domain, which can be physical or virtual. While different network | domain, which can be physical or virtual. While different network | |||
| domains are isolated without impact, the application or user may | domains are isolated without impact, the application or user may | |||
| have access to all the resource and capabilities within its | have access to all the resource and capabilities within its | |||
| domain. The user perception of the network does not have to be | domain. The user perception of the network does not have to be | |||
| the same as the network operators. The proposed NEtwork MOdeling | the same as the network operators. The NBI language works on the | |||
| (NEMO) language works on the user's view so the users can create | user's view so the users can create topologies based on the | |||
| topologies based on the resources the network-operators allow them | resources the network-operators allow them to have. | |||
| to have. | ||||
| o Declarative style | o Declarative style | |||
| As described above, NEMO language is designed to help defining | As described above, the NBI language is designed to help defining | |||
| 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 NEMO language should be declarative rather than | operators. So the NBI language should be declarative rather than | |||
| imperative. | imperative. | |||
| To implement such an NBI design, we can learn from the successful | 4. Related work | |||
| case of SQL (Structured Query Language), which simplified the | ||||
| complicated data operation to a unified and intuitive way in the form | ||||
| 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 operation and then get the result. As a data domain DSL, SQL is | ||||
| simple and intuitive, and can be embedded in applications. So what | ||||
| we need for the network NBI is a set of "network domain SQL". | ||||
| 2. Terminology | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | ||||
| "OPTIONAL" in this document are to be interpreted as described in | ||||
| [RFC2119] when they appear in ALL CAPS. When these words are not in | ||||
| ALL CAPS (such as "should" or "Should"), they have their usual | ||||
| English meanings, and are not to be interpreted as [RFC2119] key | ||||
| words. | ||||
| Network service also "service" for short, is the service logic that | ||||
| contains network operation requirements; | ||||
| Network APP also "APP" for short, is the application to implement | ||||
| the network service; | ||||
| Network user also "user" for short, is the network administrator or | ||||
| operator. | ||||
| 3. Related work | ||||
| YANG is a data modeling language used to model configuration and | YANG [RFC6020] is a data modeling language used to model | |||
| state data manipulated by the Network Configuration Protocol | configuration and state data manipulated by the Network Configuration | |||
| (NETCONF), NETCONF remote procedure calls, and NETCONF notifications | Protocol (NETCONF) [RFC6241], NETCONF remote procedure calls, and | |||
| [RFC6020]. Although it is extensible for more data modeling in | NETCONF notifications. Although it is extensible for more data | |||
| addition to NETCONF, YANG is not capable of describing high level | modeling in addition to NETCONF, YANG is not capable of describing | |||
| network requirements, such as SLA (Service Level Agreement). YANG is | high level network requirements, such as SLA (Service Level | |||
| designed for north-bound interfaces of the device, which is also the | Agreement). YANG is designed for north-bound interfaces of the | |||
| south-bound of the controller. It is not proper to model the north- | device, which is also the south-bound of the controller. It is not | |||
| bound interface of the controller, aka the NBI. Moreover, the YANG | proper to model the north-bound interface of the controller, aka the | |||
| is not capable of describing the service processing logic, which | NBI. Moreover, the YANG is not capable of describing the service | |||
| typically includes transition of conditions and states. | 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. It is hard to describe the network demand, | |||
| and cannot be embedded in network applications. UML is appropriate | and cannot be embedded in network applications. UML is appropriate | |||
| to describe the model behind the NBI language not the NBI itself. | 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. | |||
| skipping to change at page 5, line 26 ¶ | skipping to change at page 6, line 5 ¶ | |||
| 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. | |||
| 4. The NEMO Language overview | 5. The NEMO Language Specifications | |||
| NEMO language is a domain specific language (DSL) based on | NEMO language is a domain specific language (DSL) based on | |||
| abstraction of network models and conclusion of operation patterns. | abstraction of network models and conclusion of operation patterns. | |||
| It provides NBI fashion in the form of language. With limited number | It provides NBI fashion in the form of language. Instead of tons of | |||
| of key words and expressions, NEMO language defines the entity and | abstruse APIs, with limited number of key words and expressions, NEMO | |||
| capability models for users with different view of network | language enables network users/applications to describe their demands | |||
| abstraction, and enables network users/applications to describe their | for network resources, services and logical operations in an | |||
| demands for network resources, services and logical operations in an | intuitive way. And finally the NEMO language description can be | |||
| intuitive expression. And finally the NEMO language description can | explained and executed by a language engine. | |||
| be explained and executed by a language engine. | ||||
| 4.1. Network Model of the NEMO Language | 5.1. Network Model of the NEMO Language | |||
| Behind the NEMO language, there is a set of meta-models abstracting | Behind the NEMO language, there is a set of basic network models | |||
| the network demands from the top down according to the service | abstracting the network demands from the top down according to the | |||
| requirement. Those demands can be divided into two types: the demand | service requirement. Those demands can be divided into two types: | |||
| for network resources and the demands for network behaviors. | the demand for network resources and the demands for network | |||
| 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 | link 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. | |||
| 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 three types | |||
| of node | of node | |||
| skipping to change at page 6, line 23 ¶ | skipping to change at page 6, line 47 ¶ | |||
| * The processing node (PN) provides L4-7 network services, and | * The processing node (PN) provides L4-7 network services, and | |||
| will modify the body of packets. | will modify the body of packets. | |||
| * The logical node (LN) describes a set of network elements and | * The logical node (LN) describes a set of network elements and | |||
| their links, such as subnet, autonomous system, and internet. | their links, such as subnet, autonomous system, and internet. | |||
| It conceals the internal topology and exposes properties as one | It conceals the internal topology and exposes properties as one | |||
| entity. It also enables iteration, i.e., a network entity may | entity. It also enables iteration, i.e., a network entity may | |||
| include other network entities. | include other network entities. | |||
| o Link model: describes the connectivity between node entities. | o Link model: describes the connectivity between node entities. | |||
| According to the forwarding capability, links are usually divided | ||||
| into layer 2 and layer 3 types | ||||
| 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 6, line 50 ¶ | skipping to change at page 7, line 24 ¶ | |||
| 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 "with <condition>, to execute <action>", and can be | |||
| applied to any entity | applied to any entity. | |||
| 4.2. Primitives | 5.2. Notation | |||
| The primitives of NEMO language are derived from the network model, | The syntactic notation used in this specification is an extended | |||
| and fall into four categories. | version of BNF ("Backus Naur Form" or "Backus Normal Form"). In BNF, | |||
| each syntactic element of the language is defined by means of a | ||||
| production rule. This defines the element in terms of a formula | ||||
| consisting of the characters, character strings, and syntactic | ||||
| 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: | ||||
| a. Resource access primitives | < > | |||
| Node/UnNode entity_id Type {FN|PN|LN} | Angle brackets delimit character strings that are the names of | |||
| Owner node_id | syntactic elements. | |||
| Properties key1 ,value1 | ||||
| Node/UnNode: create/delete a node | ::= | |||
| Entity id: system allocated URI for the node entity | ||||
| Type: Node type of FN (forwarding node), PN (processing node) | ||||
| or LN (logical node) | ||||
| Owner: since the node can be nested, this primitive figures | ||||
| out which node the new one belongs to | ||||
| Properties: other properties to describe the node in the form of | ||||
| (key, value). | ||||
| Link/UnLink entity_id Endnodes (node1_id,node2_id) | The definition operator. This is used in a production rule to | |||
| SLA key,value | separate the element defined by the rule from its definition. The | |||
| Properties key1 ,value1 | element being defined appears to the left of the operator and the | |||
| formula that defines the element appears to the right. | ||||
| Link/UnLink: create/delete a link. | [ ] | |||
| Entity id: system allocated URI for the link entity | ||||
| Endnodes: two end-node IDs of the link | ||||
| SLA: SLA description for the link | ||||
| Properties: other properties to describe the link in the form of | ||||
| (key, value). | ||||
| Flow/UnFlow entity_id Match/UnMatch key1, value1| | Square brackets indicate optional elements in a formula. The portion | |||
| Range(value, value) | | of the formula within the brackets may be explicitly specified or may | |||
| Mask(value, value) | be omitted. | |||
| Properties key1 ,value1 | ||||
| Flow/UnFlow: create/delete a flow. | { } | |||
| Match/UnMatch: create/delete match items for the flow | ||||
| Range: describe the range of the value | ||||
| Mask: use mask to describe a range of the value | ||||
| Properties: other properties to describe the flow in the form of | ||||
| (key, value). | ||||
| b. Behavior primitives | Braces group elements in a formula. The portion of the formula | |||
| Query key Value {value} | within the braces shall be explicitly specified. | |||
| From entity_id | ||||
| Query: generate a synchronously query | | | |||
| key: the parameter name to be queried | ||||
| Value: the return value for the query | ||||
| From: the entity to be queried (define entity_id). | ||||
| Policy/UnPolicy policy_id Appliesto entity_id | The alternative operator. The vertical bar indicates that the | |||
| Condition {expression} | portion of the formula following the bar is an alternative to the | |||
| Action {"forwardto"|"drop"|"gothrough"| | portion preceding the bar. If the vertical bar appears at a position | |||
| "bypass"|"guaranteeSLA"|"Set"| | where it is not enclosed in braces or square brackets, it specifies a | |||
| "Packetout"|Node|UnNode|Link|Unlink} | complete alternative for the element defined by the production rule. | |||
| If the vertical bar appears in a portion of a formula enclosed in | ||||
| braces or square brackets, it specifies alternatives for the contents | ||||
| of the innermost pair of such braces or brackets. | ||||
| Policy/UnPolicy: create/delete a policy | !! | |||
| Appliesto: apply the policy to an entity | ||||
| Condition: condition to execute the policy | ||||
| Action: actions to be executed when conditions are met | ||||
| Notification/UnNotification entity_id On key | Introduces ordinary English text. This is used when the definition | |||
| Every period | of a syntactic element is not expressed in BNF. | |||
| RegisterListener | ||||
| callbackfunc | ||||
| Notification/UnNotification: create/delete a notification for an | 5.3. NEMO Language Overview | |||
| entity | ||||
| On: the notification will monitor the state change of a | ||||
| parameter identified by the "key" | ||||
| Every: time period at which to report the state | ||||
| RegisterListener: the callback function that is used to process the | ||||
| notification. | ||||
| c. Connection management primitives | NEMO language provides 5 classes of commands: model definition, | |||
| resource access, behavior, connection management, transaction to | ||||
| facilitate the user intent description. | ||||
| Connect conn_id Address ip_address | <NEMO_cmd> := <model_definition_cmd> | <resource_access_cmd> | | |||
| Port port_num | <behavior_cmd> | |||
| Disconnect conn_id | <model_definition_cmd> := <node_definition> | <link_difinition> | | |||
| <action_deifinition> | <model_description> | ||||
| <resource_access_cmd> := <node_cu> | <node_del> | <link_cu> | | ||||
| <link_del> | <flow_cu> | <flow_del> | ||||
| <behavior_cmd> := <query_cmd> | <policy_cu> | <policy_del> | | ||||
| <notification_cu> | <notification_del> | ||||
| <connection_mgt_cmd> := <connect_cmd> | <disconnect_cmd> | ||||
| <transaction_cmd> := <transaction_begin> | <transaction _end> | ||||
| Connect: set up a connection to the controller | NEMO language provides limited number of key words to enables network | |||
| Address: IP address of the controller to connect to | users/applications to describe their intent. The key words supported | |||
| Port: port of the controller to connect to | by the language are as follows: | |||
| Disconnect: disconnect to the controller. | ||||
| d. Transaction primitives | <key_word> := Boolean | Integer | String | Date | UUID | EthAddr | | |||
| Transaction | IPPrefix | NodeModel | LinkModel | FlowModel | | |||
| Commit | ActionModel | Description | Porperty | Node | Link| | |||
| Flow | No | EndNodes | Type | NW | Match | List | | ||||
| Range| Query | From | Notification | Listener | | ||||
| Policy | ApplyTo | Priority | Condition | Action | | ||||
| Connect | Disconnect | Address | Port | Transaction | | ||||
| Commit | ||||
| Transaction: indicate the beginning of a transaction | 5.4. Model Definition | |||
| Commit: commit to execute the transaction | ||||
| 5. The NEMO Language Examples | 5.4.1. Data Types | |||
| A tenant needs two connections to carry different service flows | NEMO language provides several build-in data types: | |||
| between two datacenters. | ||||
| one connection of the tenant is 40G bandwidth with less than 400ms | Boolean This data type is used for simple flags that track true/ | |||
| delay, another connection is 100M bandwidth with less than 50ms | false conditions. There are only two possible values: true and | |||
| delay. | false. The Boolean literal is represented by the token <boolean>. | |||
| { | Integer A number with an integer value, within the range from | |||
| Link Link1_id | -(2^63) to +(2^63)-1. The Integer literal is represented by the | |||
| Endnodes (DC1_node_id, DC2_node_id) | token <integer>. | |||
| Property "NAME","DC1_DC2_link_one","Bandwith",40G,"Delay",400ms | ||||
| Link Link2_id | ||||
| Endnodes (DC1_node_id, DC2_node_id) | ||||
| Property "NAME","DC1_DC2_link_two","Bandwith",100M,"Delay",50ms | ||||
| } | ||||
| The tenant has two types of traffic, CDN sync traffic uses high | String A sequence of characters. The string is always in the | |||
| bandwidth connection and online game traffic uses low latency | quotation marks. The String literal is represented by the token | |||
| connection. | <string>. | |||
| { | Date A string in the format yyyy-mm-dd hh:mm:ss, or yyyy-mm-dd, or | |||
| Flow flow1_id | hh:mm:ss. The Date literal is represented by the token <date>. | |||
| Match "srcip","10.0.1.1/24","dstip","20.0.1.1/24","Port","55555" | ||||
| Property "NAME","CDN sync flow","Bidirection","true" | ||||
| Flow flow2_id | ||||
| Match "srcip","10.0.1.1/24","dstip","20.0.1.1/24","Port","56663" | ||||
| Property "NAME","online Game","Bidirection","true" | ||||
| Policy policy1_id | ||||
| Appliesto flow1_id | ||||
| Action "forwardto",link1_id | ||||
| Policy policy2_id | ||||
| Appliesto flow2_id | ||||
| Action "gothrough",link2_id | ||||
| } | ||||
| The tenant wants the online game traffic to go through WOC in | UUID A string in the form of Universally Unique IDentifier | |||
| nighttime before it is carried by low latency connection. | [RFC4122], e.g. "6ba7b814-9dad-11d1-80b4-00c04fd430c8". A | |||
| typical usage of the UUID is to identify network entities, | ||||
| policies, actions and so on. The UUID literal is represented by | ||||
| the token <UUID>. | ||||
| { | EthAddr A string in the form of MAC address, e.g. | |||
| Policy policy3_id | "00:00:00:00:00:01". The EthAddr literal is represented by the | |||
| Appliesto flow2_id | token <eth_addr>. | |||
| Condition {Time>18:00 or Time< 2:00} | ||||
| Action "gothrough",{woc_node_id ,link2_id} | ||||
| } | ||||
| 6. Security Considerations | IPPrefix A string in the form of IP address, e.g. "10.0.1.1". The | |||
| mask can be used in the IP address description, e.g. | ||||
| "10.0.1.0/24". The IPPrefix literal is represented by the token | ||||
| <ip_prefix>. | ||||
| The token <data_type> can be defined as follows: | ||||
| <data_type> := Boolean | Integer | String | Date | UUID | | ||||
| EthAddr | IPPrefix | ||||
| And a generic <data_type> literal is represented by the token <value> | ||||
| <value> := <boolean> | <integer> | <string> | <date> | <UUID> | | ||||
| <eth_addr> | <ip_ prefix> | ||||
| 5.4.2. Model Definition and Description Statement | ||||
| In addition to default build-in network models, NEMO language | ||||
| facilitates users to define new model types. | ||||
| The token <naming> is a string that must start with a letter and | ||||
| followed by any number of letters and digits. More specific naming | ||||
| can be defined as follows: | ||||
| <node_type> := <naming> !!type name of the node model | ||||
| <link_type> := <naming> !!type name of the link model | ||||
| <flow_type> := <naming> !!type name of the flow model | ||||
| <entity_type> := <node_type> | <link_type> | <flow_type> | ||||
| <action_type> := <naming> !!type name of the action model | ||||
| <model_type> := <entity_type> | <action_type> | ||||
| <property_name> := <naming> !!name of the property in a model | ||||
| The <node_definition> statement is used to create a node model: | ||||
| <node_definition> := NodeModel <node_type> | ||||
| Property { <data_type> : <property_name> }; | ||||
| The NodeModel specifies a new node type. | ||||
| The Property is followed by a list of "<data_type> : <property_name>" | ||||
| pairs to specify properties for the new node type. Since belonging | ||||
| network is the intrinsic property for a node model, there is no need | ||||
| to redefine the belonging network in the property list. | ||||
| Example: | ||||
| NodeModel "DPI" Property String : "name", Boolean : "is_enable"; The | ||||
| statement generates a new node model named DPI with two properties, | ||||
| "name" and "is_enable". | ||||
| The <link_definition> statement is used to create a link model: | ||||
| <link_definition> := LinkModel <link_type> | ||||
| Property { <data_type> : <property_name> }; | ||||
| The LinkModel specifies a new link type. | ||||
| The Property is followed by a list of "<data_type> : <property_name>" | ||||
| pairs to specify properties for the new link type. Since end nodes | ||||
| are intrinsic properties for a link model, there is no need to | ||||
| redefine the end nodes in the property list. | ||||
| The <flow_definition> statement is used to create a flow model: | ||||
| <flow_definition> := FlowModel <flow_type> | ||||
| Property { <data_type> : <property_name> }; | ||||
| The FlowModel specifies a new flow type. | ||||
| The Property is followed by a list of "<data_type> : <property_name>" | ||||
| pairs to specify fields for the new flow type. The | ||||
| <action_definition> statement is used to create an action model: | ||||
| <action_definition> := ActionModel <action_type> | ||||
| Property { <data_type> : <property_name> }; | ||||
| The ActionModel specifies a new action type. | ||||
| The Property is followed by a list of "<data_type> : <property_name>" | ||||
| pairs to specify properties for the new action. | ||||
| NEMO language also supports querying the description of a defined | ||||
| model by using the <model_description> statement: | ||||
| <model_description> := Description <model_type>; | ||||
| The keyword Description is follow by a model type name. The | ||||
| description of the queried model will return from the language | ||||
| engine. | ||||
| 5.5. Resource Access Statements | ||||
| In NEMO language, each resource entity instance is identified by a | ||||
| <UUID>. We use the following token to indicate the identifier given | ||||
| to the resource entity instance. | ||||
| <node_id> := <naming> !! name to identify the node instance | ||||
| <link_id> := <naming> !! name to identify the link instance | ||||
| <flow_id> := <naming> !! name to identify the flow instance | ||||
| <entity_id> := <node_id>|<link_id>|<flow_id> | ||||
| 5.5.1. Node Operations | ||||
| The <node_cu> statement is used to create or update a node instance: | ||||
| <node_cu> := Node <node_id> Type <node_type> | ||||
| NW <node_id> | ||||
| [Property {<property_name>: <value>}]; | ||||
| 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. | ||||
| Otherwise, 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 NW specifies the dependence where the node is located. | ||||
| The Property is an optional keyword followed by a list of | ||||
| "<property_name>: <value>" pairs. Multiple "<property_name>: | ||||
| <value>" pairs are separated by commas. The <property_name> must be | ||||
| selected from the property definition of the corresponding node | ||||
| definition. | ||||
| Node "switch-1" | ||||
| Type "switch" | ||||
| NW "LN-1" | ||||
| Property "ip_version" : 4; | ||||
| The statement creates a switch type node that is located in the | ||||
| logical network "LN-1". | ||||
| The <node_del> statement is used to delete a node instance: | ||||
| <node_del> := No Node <node_id>; | ||||
| The No Node is to delete a node in user's network. | ||||
| 5.5.2. Link Operations | ||||
| The <link_cu> statement is used to create or update a link: | ||||
| <link_cu> := Link <link_id> | ||||
| EndNodes <node_id>, <node_id> | ||||
| [Property {<property_name>: <value>}]; | ||||
| The Link is followed by a user specified <link_id>. If the <link_id> | ||||
| is new in the system, a new link will be created automatically. | ||||
| Otherwise, the corresponding link identified by the <link_id> will be | ||||
| updated with the following information. | ||||
| The EndNodes specifies the two end nodes, identified by "<node_type> | ||||
| : <node_id>", of a link. The Property is an optional keyword | ||||
| followed by a list of "<property_name>: <value>" pairs. Multiple | ||||
| "<property_name>: <value>" pairs are separated by commas. The | ||||
| <property_name> must be selected from the property definition of the | ||||
| corresponding link definition. | ||||
| Example: | ||||
| Link "link-1" | ||||
| EndNodes "S1", "S2" | ||||
| Property "bandwidth" : 1000, "delay" : 40; | ||||
| The statement creates a link between two nodes, and sets the link | ||||
| property. | ||||
| The <link_del> statement is used to delete a node instance: | ||||
| <link_del> := No Link <link_id>; | ||||
| The No Link is to delete a link in user's network. | ||||
| 5.5.3. Flow Operations | ||||
| The <flow_cu> statement is used to create or update a flow: | ||||
| <flow_cu> := Flow <flow_id> Match {<property_name>: <value> | ||||
| | Range (<value>, <value>) | ||||
| | List({<value>})} | ||||
| The Flow is followed by a user defined <flow_id>. If the <flow_id> | ||||
| is new in the system, a new flow will be created automatically. | ||||
| Otherwise, 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 | ||||
| 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 | ||||
| type. | ||||
| o The Range is used to express a range of values. | ||||
| Example: | ||||
| Flow "flow-1" | ||||
| Match "src_ip" : Range ("192.168.1.1", "192.168.1.243"); | ||||
| The statement describes a flow with the source IP address ranging | ||||
| from 192.168.1.1 to 192.168.1.243. | ||||
| The <link_del> statement is used to delete a flow instance: | ||||
| <flow_del> := No Flow <flow_id>; | ||||
| The No Flow is to delete a flow in user's network. | ||||
| 5.6. Behavior Statements | ||||
| 5.6.1. Query Behavior | ||||
| The query statement is to retrieve selected data from specified model | ||||
| object. | ||||
| The <query_statement> generate a query: | ||||
| <query_cmd> := Query {<property_name>} | ||||
| From {<entity_id>|<policy_id>} | ||||
| The Query is followed by one or more <property_name>s which are | ||||
| defined properties of the object to be queried. | ||||
| The From is followed by the one or more queried objects. NENO | ||||
| language support query operation to network entities and the policy. | ||||
| 5.6.2. Policy Behavior | ||||
| In NEMO language, each policy instance is identified by a <naming> | ||||
| <policy_id> := <naming> !! name to identify the policy instance | ||||
| Create and update a policy | ||||
| <policy_cu> := Policy <policy_id> ApplyTo <entity_id> | ||||
| Priority <integer> | ||||
| [Condition {<expression>}] | ||||
| Action {<action_type> : {<value>}}; | ||||
| 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 | ||||
| automatically. Otherwise, the corresponding notification identified | ||||
| by the <policy_id> will be updated with the following information. | ||||
| The ApplyTo specifies the entity to which the policy will apply. | ||||
| The Priority specifies the globe priority of the policy 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 | ||||
| tells your program to execute the following actions only if a | ||||
| particular test described by the expression evaluates to true. A | ||||
| NEMO language expression is a construct made up of variables, | ||||
| operators, and method invocations, which are constructed according to | ||||
| the syntax of the language and evaluates to a single value. NEMO | ||||
| language supports many operators to facilitate the construction of | ||||
| expressions. Assume variable A holds 10 and variable B holds 0, | ||||
| then: | ||||
| +----------+----------------------------------------------+---------+ | ||||
| | Operator | Description | Example | | ||||
| +----------+----------------------------------------------+---------+ | ||||
| | && | Called Logical AND operator. If both the | (A && | | ||||
| | | operands are non-zero, then the condition | B) is | | ||||
| | | becomes true. | false. | | ||||
| | || | Called Logical OR Operator. If any of the | (A || | | ||||
| | | two operands are non-zero, then the | B) is | | ||||
| | | condition becomes true. | true. | | ||||
| | ! | Called Logical NOT Operator. Use to reverses | !(A && | | ||||
| | | the logical state of its operand. If a | B) is | | ||||
| | | condition is true then Logical NOT operator | true. | | ||||
| | | will make false. | | | ||||
| | == | Checks if the values of two operands are | (A == | | ||||
| | | equal or not, if yes then condition becomes | B) is | | ||||
| | | true. | not | | ||||
| | | | true. | | ||||
| | != | Checks if the values of two operands are | (A != | | ||||
| | | equal or not, if values are not equal then | B) is | | ||||
| | | condition becomes true. | true. | | ||||
| | > | Checks if the value of left operand is | (A > B) | | ||||
| | | greater than the value of right operand, if | is not | | ||||
| | | yes then condition becomes true. | true. | | ||||
| | >= | Checks if the value of left operand is | (A >= | | ||||
| | | greater than or equal to the value of right | B) is | | ||||
| | | operand, if yes then condition becomes true. | not | | ||||
| | | | true. | | ||||
| | < | Checks if the value of left operand is less | (A < B) | | ||||
| | | than the value of right operand, if yes then | is | | ||||
| | | condition becomes true. | true. | | ||||
| | <= | Checks if the value of left operand is less | (A <= | | ||||
| | | than or equal to the value of right operand, | B) is | | ||||
| | | if yes then condition becomes true. | true. | | ||||
| +----------+----------------------------------------------+---------+ | ||||
| The Action specifies the execution when conditions meet. | ||||
| Example: | ||||
| Policy "policy-1" | ||||
| ApplyTo "flow-1" | ||||
| Priority 100 | ||||
| Condition ("time">"18:00") || ("time"<"21:00") | ||||
| Action "gothrough" : List( "switch-1" , "switch-2"); | ||||
| The statement creates a policy which indicates the flow to go through | ||||
| two specified switches from 18:00 to 21:00. | ||||
| Delete a policy: | ||||
| <policy_del> := No Policy <policy_id>; | ||||
| The No Policy is to delete a policy in user's network. | ||||
| 5.6.3. Notification Behavior | ||||
| In NEMO language, each notification instance is identified by a | ||||
| <naming> | ||||
| <notification_id> := <naming> !! name to identify the notification | ||||
| instance | ||||
| Create and update a notification | ||||
| <notification_cu> := 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_id> is new in the system, a new notificaiton will | ||||
| be created automatically. Otherwise, the 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 information acquisition. | ||||
| The Condition clause is the same as in policy statement, which | ||||
| triggers the notification. | ||||
| The Listener specifies the callback function that is used to process | ||||
| the notification. | ||||
| Delete a notification: | ||||
| <notification_del> := No Notification <notification_id>; | ||||
| The No Notification is to delete a notification in user's 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 | ||||
| <transaction_begin> := Transaction | ||||
| <transaction_end> := Commit | ||||
| The keywords Transaction and Commit are used to tag begin and end of | ||||
| a transaction. The code between the two key words will be | ||||
| interpreted as a transaction and executed by the NEMO language | ||||
| engine. | ||||
| 6. The NEMO Language Examples | ||||
| An enterprise with geographically distributed headquarter and branch | ||||
| sites has the requirement to dynamically balance the backup traffic. | ||||
| In order to implement this scenario, the virtual WAN tenant creates | ||||
| two routers, and generates two links with different SLA to carry | ||||
| diverse service flows. One link has 100M bandwidth with less than | ||||
| 50ms delay, which is used for normal traffic. And the other link has | ||||
| 40G bandwidth with less than 400ms delay, which is used for backup | ||||
| traffic after work (from 19:00 to 23:00). With self defined flow | ||||
| policy, the tenant can manage the link load balancing conveniently. | ||||
| Real-time Link | ||||
| +-------------+ | ||||
| 10.0.1.0/24 | | 20.0.1.0/24 | ||||
| +---------+ +----+ +----+ +-------------+ | ||||
| | Branch |------| R1 | | R2 |------| Headquarter | | ||||
| +---------+ +----+ +----+ +-------------+ | ||||
| | | | ||||
| +-------------+ | ||||
| Broadband Link | ||||
| The detailed operation and code are shown as follows. | ||||
| o Step1: Create two virtual switch nodes in the WAN | ||||
| Node "R1" | ||||
| Type "router" | ||||
| NW "LN-1" | ||||
| Property "ip_version" : 4; | ||||
| Node "R2" | ||||
| Type "router" | ||||
| NW "LN-1" | ||||
| Property "ip_version" : 4; | ||||
| o Step2: Connect the two virtual nodes with two virtual links with | ||||
| different SLA. | ||||
| Link "broadband_link" | ||||
| EndNodes "R1", "R2" | ||||
| Property "bandwidth" : 40000, "delay" : 400; | ||||
| Link "realtime_link" | ||||
| EndNodes "R1", "R2" | ||||
| Property "bandwidth" : 100, "delay" : 50; | ||||
| o Step3: Indicate the flow to be operated. | ||||
| Flow "flow_all" | ||||
| Match "src_ip" : "10.0.1.0/24", "dst_ip": "10.0.1.0/24"; | ||||
| Flow "flow_backup" | ||||
| Match "src_ip" : "10.0.1.0/24", "dst_ip": "20.0.1.0/24", | ||||
| "port": 55555; | ||||
| o Step4: Apply policies to corresponding flows. | ||||
| P1: | ||||
| Policy "policy4all" | ||||
| ApplyTo "flow_all" | ||||
| Priority 200 | ||||
| Action "forward_to": "realtime_link"; | ||||
| P2: | ||||
| Policy "policy4backup" | ||||
| ApplyTo "flow_backup" | ||||
| Priority 100 | ||||
| Condition ("time">"19:00:00") || ("time"<"23:00:00") | ||||
| Action "forward_to": "broadband_link"; | ||||
| 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. | |||
| 7. IANA Considerations | 8. IANA Considerations | |||
| This memo includes no request to IANA. | This memo includes no request to IANA. | |||
| 8. 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 and Wenyang Lei. | |||
| This document was produced using the xml2rfc tool [RFC2629]. | This document was produced using the xml2rfc tool [RFC2629]. | |||
| 9. 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.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-00, Work in | |||
| skipping to change at page 11, line 8 ¶ | skipping to change at page 21, line 11 ¶ | |||
| [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. | |||
| [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | ||||
| Unique IDentifier (UUID) URN Namespace", RFC 4122, July | ||||
| 2005. | ||||
| [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. | ||||
| Bierman, "Network Configuration Protocol (NETCONF)", RFC | ||||
| 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 | |||
| End of changes. 57 change blocks. | ||||
| 214 lines changed or deleted | 669 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/ | ||||