I2RS Z. Wang
Internet-Draft Q. Wu
Intended status: Standards Track S. Hares
Expires: July 26, 2015 Huawei
January 22, 2015

A YANG Data Model for Service Topology
draft-wang-i2rs-yang-service-topo-dm-00

Abstract

This document defines a YANG data model for the service topology.

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at http://datatracker.ietf.org/drafts/current/.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on July 26, 2015.

Copyright Notice

Copyright (c) 2015 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.


Table of Contents

1. Introduction

An overlay network is a virtual network of nodes and logical links that is built on top of an existing network with the purpose to implement a network service that is not available in the existing network.

The service topology is used to represent how overlay network elements(e.g., abstract node) are interconnected to each other. The typical example of the service topology is SFC based service topology which is built from an ordered set of service functions and the service function paths between the service function nodes [draft-ietf-sfc-architecture].

The service topology is built on top of one or several underlying networks. In case multi-tenancy is needed, Multiple service topologies can be built on top of the same underlying network. Each tenant can only see its own service topology.But all the tenant’s service topology can be mapped into the same network topology.

Unlike the network topology, the service topology is abstraction of network topology or aggregation of the network topology. It may be not possible to collect service topology information from the same routing protocol as network topology since there is no another control plane protocol running on top of the underlying networks.

This document defines a YANG data model for the service topology

2. Definitions and Acronyms

Datastore: A conceptual store of instantiated management information, with individual data items represented by data nodes which are arranged in hierarchical manner.

Data subtree: An instantiated data node and the data nodes that are hierarchically contained within it.

NETCONF: Network Configuration Protocol.

URI: Uniform Resource Identifier.

YANG: A data definition language for NETCONF.

Classification: Locally instantiated policy and customer/network/ service profile matching of traffic flows for identification of appropriate outbound forwarding actions.

Classifier: An element that performs Classification.

Service Function Chain (SFC): A service function chain defines a set of abstract service functions and ordering constraints that must be applied to packets and/or frames selected as a result of classification.

Service Function (SF): A function that is responsible for specific treatment of received packets.

Service Function Forwarder (SFF): A service function forwarder is responsible for delivering traffic received from the network to one or more connected service functions according to information carried in the SFC encapsulation, as well as handling traffic coming back from the SF.

Metadata: provides the ability to exchange context information between classifiers and SFs and among SFs.

Service Function Path (SFP): The SFP provides a level of indirection between the fully abstract notion of service chain as a sequence of abstract service functions to be delivered, and the fully specified notion of exactly which SFF/SFs the packet will visit when it actually traverses the network.

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].

3. Service Topology data Model

This section describe the architecture and the tree diagram of the service topology yang data model.

3.1. Model Overview

The abstract Topology yang Model contain a set of abstract nodes and a list of abstract links. Service Function Chain Topo yang model and other service topo model can be augumented from the abstract topology model with SFC base topology specifics.

The following Figure depicts the relationship of service topology yang model to the abstract topology yang model.

                +-----------------+
                |    Abstract     |
                | Topology Model  |
                |                 |
                +--------|--------+
                         |
             +------------------------+
             |       |                |
             |       |                |
    +--------V--------+      +--------V--------+
    |Service Function |      |                 |
    |     Chain       |      |  Other Service  |
    | Topology Model  |      | Topology Model  |
    +-----------------+      +-----------------+

The relationship of service topology yang model to the abstract topology yang model

3.2. Service Topology Yang

The following figure provide the structure of service topology yang model. Each node is printed as:

<status> <flags> <name> <opts> <type>

     <status> is one of:
       +  for current
       x  for deprecated
       o  for obsolete

     <flags> is one of:
       rw  for configuration data
       ro  for non-configuration data
       -x  for rpcs
       -n  for notification

     <name> is the name of the node
      If the node is augmented into the tree from another module, its
   name is printed as <prefix>:<name>.

   <opts> is one of:
       ?  for an optional leaf or choice
       !  for a presence container
       *  for a leaf-list or list
       [<keys>] for a list's keys

   <type> is the name of the type for leafs and leaf-lists
module: service topo 
   +--rw service-topologise!     
      +--rw service-topology* [service-topo-id]
         +--rw service-topo-id       network-id
         +--rw node-count          uint32
         +--rw topology-type!       
         +--rw topology-extension!
         +--rw underlay-topologies*[topology-id]
         |  +--rw topology-id    network-id
         +--rw node* [node-id]
         |  +--rw node-id            node-id
         …
         +--rw segment*[segment-id]
            +--rw segment-id         link-id
         …

The service topo yang model contains a service-topology list. And each service-topology list contains service-topo-id leaf, node-count leaf, topology-type container, topology-extension container, underlay-topologies list, service node list and segment list.

o Different service-topology list is distinguished via the leaf service-topo-id.

o The node-count leaf can be used to indicate the number of nodes which contained in the service-topology list.

o The topology-type specify the topology type, such as NETCONF or I2RS. A service topology can even have multiple types simultaneously. So in this document a topology-type container is defined.

o The topology-extension container can be used to augment the service topology model by topology specifics.

o Service Nodes/Segments can map onto and be supported by other network elements/links in the underlying network, and the Service Topologies can map onto other underlay topologies.

3.3. Node list

The following figure provide the node list of the service topo yang model:

module: service topo 
   +--rw service-topologise!     
      +--rw service-topology* [service-topo-id]
         +--rw service-topo-id       network-id
         ……
         +--rw node* [node-id]
         |  +--rw node-id            node-id
         |  +--rw termination-point*[termination-point-id]
         |  |  +--rw termination-point-id  node-id
         |  |  +--rw support-termination-points*[support-point-id]
         |  |  |  +--rw support-point-id   node-id
         |  |  +--rw termination-point-extension!
         |  +--rw node-type!
         |  |  +--rw classifier-node?  string
         |  |  +--rw sf-node?        string
         |  |  +--rw sff-node?       string
         |  +--rw next-hop*[hop-id]
         |  |  +--hop-id           node-id 
         |  +--rw node-extension!
         |  |  +--rw classifier-extension!
         |  |  +--rw sf-node-extension!
         |  |  +--rw sff-node-extension!

Each service segment list contains a node-id leaf, a termination-point list, a next-hop list, a node-type container and a node-extension container.

o The node-id leaf can be used to distinguish the different service node.

o The termination list can be used to terminate segment. An examples of a termination point might be a physical or logical port or, more generally, an interface.

o The node-type container can used to indicate the type node, such classifier, a sf or a sff.

o The node-extension container can be used to augment the node list by node specifics, for example: classifier extension, sf extension, sff extension.

3.4. Segment list

The following figure provide the Segment list of the service topo yang model:

module: service topo 
   +--rw service-topologise!     
      +--rw service-topology* [service-topo-id]
         +--rw service-topo-id       network-id
         ……
         +--rw segment* [segment-id]
         |  +--rw segment-id            link-id
         |  +--rw source
         |  |  +--rw source-id    node-id
         |  |  +--rw termination-point-reference*[source-support-id]
         |  |  |  +--rw source-support-id  node-id
         |  +--rw destination
         |  |  +--rw destination-id    node-id
         |  |  +--rw termination-point-reference*[destination-support-id]
         |  |  |  +--rw destination-support-id  node-id
         |  +--ro direction!
         |  |  +--ro unidirection?  boolean
         |  |  +--ro bidirection?  boolean
         |  +--rw segment-extension!
         |  |  +--rw netconf-segment-extension!
         |  |  +--rw i2rs-segment-extension!     

Each service node list contains a segment-id leaf, a source container, a destination container, a direction container and a segment-extension container.

o The segment-id leaf can be used to distinguish the different service segment.

o The source/destination container include a node-id and a termination-point-reference list. Both source and destination reference a corresponding node, as well as a termination point on that node.

o The segment-extension container can be used to augment the segment list by segment specifics. Such as netconf segment extension, i2rs segment extension.

3.5. Extension of the model: Service Function Chain Topology

3.5.1. classifier-extension

In SFC, the classifier is used to locally instantiated policy and customer/network/service profile matching of traffic flows for identification of approriate outbound forwarding actions.

The following figure provide the classifier-extension of the service topo yang model:

module: service topo 
   +--rw service-topologise!     
      +--rw service-topology* [service-topo-id]
         +--rw service-topo-id       network-id
         ……
         +--rw node* [node-id]
         |  +--rw node-id            node-id
         ……
         |  +--rw node-extension!
         |  |  +--rw classifier-extension!
         |  |  |  +--rw classifier-id  node-id
         |  |  |  +--rw sfc-policy    uint32
         |  |  |  +--rw sfp!
         |  |  |  |  +--rw sfp-id    uint32
         |  |  |  |  +--rw sf-list*[sf-id]
         |  |  |  |  |  +--rw sf-id  node-id
         |  |  |  |  +--rw sff-list*[sff-id]
         |  |  |  |  |  +--rw sff-id  node-id         
         ……. 

3.5.2. sf-node-extension

The sf is a function that is responsible for specific treatment of received packets. As a logical component.

The following figure provide the sf-node-extension of the service topo yang model:

module: service topo 
   +--rw service-topologise!     
      +--rw service-topology* [service-topo-id]
         +--rw service-topo-id       network-id
         ……
         +--rw node* [node-id]
         |  +--rw node-id            node-id
         ……
         |  +--rw node-extension!
         |  |  +--rw classifier-extension!
         …….
         |  |  +--rw sf-node-extension!
         |  |  |  +--rw sf-id  node-id
         |  |  |  +--rw sf-node-locator  uint32
         |  |  |  +--rw sf-type!
         |  |  |  |  +--rw firewall?    uint32
         |  |  |  |  +--rw loadbalancer? uint32
         |  |  |  |  +--rw NAT44?     uint32
         |  |  |  |  +--rw NAT64?     uint32
         |  |  |  |  +--rw DPI?     uint32
         |  |  +--rw sf-inventory-data!
         ……. 

3.5.3. sff-node-extension

The service function forwarder is responsible for delivering traffic received from the network to one or more connected service functions according to information carried in the SFC encapsulation, as well as handling traffic coming back from the SF.

The following figure provide the sff-node-extension of the service topo yang model:

module: service topo 
   +--rw service-topologise!     
      +--rw service-topology* [service-topo-id]
         +--rw service-topo-id       network-id
         ……
         +--rw node* [node-id]
         |  +--rw node-id            node-id
         ……
         |  +--rw node-extension!
         |  |  +--rw classifier-extension!
         |  |  +--rw sf-node-extension!
         ……. 
         |  |  +--rw sff-node-extension!
         |  |  |  +--rw sff-id   node-id
         |  |  |  +--rw (sffn-address)?
         |  |  |  |  +--:(ipv4-address)
         |  |  |  |  |  +--rw ipv4-address?        inet:ipv4-address
         |  |  |  |  +--:(ipv6-address)
         |  |  |       +--rw ipv6-address?     inet:ipv6-address
         |  |  |  +--rw sffn-virtual-context!
         |  |  |  |  +--rw context-id          uint32
         |  |  |  +--rw Attached-service-address!
         |  |  |  |  +--rw service-node*[service-node-id]
         |  |  |  |  |  +--rw service-node-id  node-id
         |  |  |  |  +--rw host-system*[host-system-id]
         |  |  |  |     +--rw host-system-id   uint32
         |  |  |  +--rw customer-support*[customer-id]
         |  |  |  |  +--rw customer-id  uint32
         |  |  |  +--rw customer-service-resource*[customer-resource-id]
         |  |  |  |  +--rw customer-resource-id  node-id
         |  |  |  +--rw sffn-vntopo!
         ……. 

4. Service Topology data hierarchy

The complete data hierarchy related to the service topology YANG model is presented below.

module: service topo 
   +--rw service-topologise!     
      +--rw service-topology* [service-topo-id]
         +--rw service-topo-id       network-id
         +--rw node-count          uint32
         +--rw topology-type!       
         +--rw topology-extension!
         +--rw underlay-topologies*[topology-id]
         |  +--rw topology-id    network-id
         +--rw node* [node-id]
         |  +--rw node-id            node-id
         |  +--rw termination-point*[termination-point-id]
         |  |  +--rw termination-point-id  node-id
         |  |  +--rw support-termination-points*[support-point-id]
         |  |  |  +--rw support-point-id   node-id
         |  |  +--rw termination-point-extension!
         |  +--rw node-type!
         |  |  +--rw classifier-node?  string
         |  |  +--rw sf-node?        string
         |  |  +--rw sff-node?       string
         |  +--rw next-hop*[node-id]
         |  |  +--hop-id           node-id 
         |  +--rw node-extension!
         |  |  +--rw classifier-extension!
         |  |  +--rw sf-node-extension!
         |  |  +--rw sff-node-extension!
         +--rw segment* [segment-id]
         |  +--rw segment-id            link-id
         |  +--rw source
         |  |  +--rw source-id    node-id
         |  |  +--rw termination-point-reference*[source-support-id]
         |  |  |  +--rw source-support-id  node-id
         |  +--rw destination
         |  |  +--rw destination-id    node-id
         |  |  +--rw termination-point-reference*[destination-support-id]
         |  |  |  +--rw destination-support-id  node-id
         |  +--ro direction!
         |  |  +--ro unidirection?  boolean
         |  |  +--ro bidirection?  boolean
         |  +--rw segment-extension!
         |  |  +--rw netconf-segment-extension!
         |  |  +--rw i2rs-segment-extension!

data hierarchy of Service Topology

5. Service Topology YANG Module

<CODE BEGINS> file "service-topo.yang"
module service-topo {
     yang-version 1;
     namespace "urn:TBD:params:xml:ns:yang:service-topo";
     prefix stopo;
     import ietf-inet-types {
       prefix inet;
     }
     organization "IETF I2RS Working Group";
     contact
       "wangzitao@huawei.com";
     description
       "This module defines service topology yang data model";
     typedef node-id {
       type inet:uri;
     }
     typedef network-id {
       type inet:uri;
     }
     typedef link-id {
       type inet:uri;
     }
container service-topologies {
description
"Contains configuration related data. Within the container
is list of service topologies.";
	 
list service-topology{
key "service-topo-id";
description
"Define the list of service-topology within the network";

leaf service-topo-id{
type network-id;
 description
"the identifier for a service topology";} 

leaf node-count{
type uint32;
description
"Number of nodes within a service topology.";} 

container topology-type{
  description
 " This container contains several leaf to specify the topology type, 
   such as NETCONF or I2RS. A service topology can even have 
   multiple types simultaneously. And this container can 
   be used to augment the service topology model by topology specifics.";} 
      
container topology-extension{
description
 " The topology-extension container can be used to augment 
the service topology model by topology specifics.";}

list underlay-topologies {
key "topology-id";
   description
"Define the list of underlay-topologies within the service-topology list";

leaf topology-id {
 type network-id;
   description
 "It is presumed that a datastore will contain many topologies. To
  distinguish between topologies it is vital to have UNIQUE
  topology identifiers.";}
} 

list node {
key "node-id";
description
"Define the list of node within the service-topology list";

leaf node-id {
type node-id;
description
"The identifier of a node in the service topology.";}

list termination-point{
key "termination-point-id";
description
"Define the list of termination-point within the node list";

leaf termination-point-id {
type node-id;
description
"The identifier of the termination point of the node";}

list support-termination-points{
key "support-point-id";
description
"Define the list of support-point-id within the termination-point list";
         
leaf support-point-id {
type node-id;
description
"the identifier of the support node of the termination point";}
}

container termination-point-extension{
description
"The termination-point-extension container can be used to augment 
the service topology model by topology specifics.";}
}

container node-type{
description
"The node-type container can used to indicate the type node, 
such classifier, a sf or a sff. And this container can be used 
to augment the service topology model by topology specifics. "; 

leaf classifier-node {
type string;
description
"To indicate the node is a classifier";} 

leaf sf-node {
type string;
description
"To indicate the node is a service function(sf)";} 
leaf sff-node {
type string;
description
" To indicate the node is a service function forward(sff)";} 
}

list next-hop{
key "hop-id";
description
"Define the list of next-hop within the node list";

leaf hop-id {
type node-id;
description
"The identifier of the next hop of the node";} 
}

container node-extension{
description
" The node-extension container can be used to augment 
the service topology model by topology specific nodes.";  
 
container classifier-extension {
description
"The classifier-extension container contains the extensions
of the classifier";} 

container sf-node-extension {
description
"The sf-extension container contains the extensions of the sf.";}

container sff-node-extension {
description
" The sff-extension container contains the extensions of the sff. ";}
}
} //end the node list

list segment{
key "segment-id";
description
"Define the list of segment within the service-topology list.";

leaf segment-id{
type link-id;
description
" The segment-id leaf can be used to distinguish 
the different service segment.";} 

container source{
description
"The source container contains the source node 
and the termination point reference list.";  

leaf source-id{
type node-id;
description
"The identifier of the source node of the segment.";}     
list termination-point-reference{

key "source-support-id";
leaf source-support-id{
type node-id;
description
"The identifier of the termination point of the source node.";}
}//end the termination-point-reference list
}//end the source container

container destination{
description
"The destination container contains the source node 
and the termination point reference list.";

leaf destination-id{
type node-id;
description
"The identifier of the destination node of the segment.";}
list termination-point-reference{
key "destination-support-id";
leaf destination-support-id{
type node-id;
description
"The identifier of the termination point of the source node.";}
}//end the termination-point-reference list
}//end the destination container

container direction{ 
leaf unidirection{
type boolean;
description
"Indicates whether the segment is unidirection or not.";}
leaf bidirection{
type boolean;
description
"Indicates whether the segment is bidirection or not.";} 
} //end the direction container

container segment-extension{
description
"The segment-extension container can be used to augment 
the segment list by segment specifics. Such as 
netconf segment extension, i2rs segment extension.";

container netconf-segment-extension {
description
"To contain the netconf segment extension.";}
container i2rs-segment-extension {
description
"To contain the i2rs segment extension.";}
} //end the segment-extension container
}//end the segment list
}//end the service-topology list
}
}
<CODE ENDS>

6. SFC Topology YANG Module

<CODE BEGINS>file "sfc-topo@2013-12-23.yang"
module sfc-topo {
    yang-version 1;
    namespace "urn:TBD:params:xml:ns:yang:sfc-topology";
    prefix "sfc-topo";
    import service-topo {
        prefix "stopo";
    }
    import ietf-inet-types {
        prefix "inet";
    }
organization "IETF I2RS Working Group";
     contact
      "wangzitao@huawei.com";
     description
       "This module defines sfc topology yang data model";
     typedef node-id {
       type inet:uri;
     }
augment "/stopo:service-topologies/stopo:service-topology/stopo:node/stopo:node-extension/stopo:classifier-extension"{
 leaf classifier-id{
  type node-id;
  description
  "The identifier of the classifier.";}
 leaf sfc-policy{
  type uint32;
  description
  "Indicate the policy of sfc.";}
 container sfp{
  description
  "contains several sfps.";
  leaf sfp-id{
   type uint32;
   description
   "The identifier of the sfp.";}
  list sf-list{
   key "sf-id";
   leaf sf-id{
    type node-id;
    description 
    "The identifier of the sf which include in the sfp.";}
  } 
  list sff-list{
   key "sff-id";
   leaf sff-id{
    type node-id;
    description 
    "The identifier of the sff which include in the sfp.";}
  } 
 }//end the sfp container 
}//end the classifier-extension 

augment "/stopo:service-topologies/stopo:service-topology/stopo:node/stopo:node-extension/stopo:sf-node-extension"{
 leaf sf-id{
  type node-id;
  description 
  "The identifier of the service function(sf).";}
 leaf sf-node-locator{
  type uint32;
  description 
  "To indicate the service function (sf) locator";}
  container sf-type{
   leaf firewall{
    type uint32;
    description
    "To indicate the service function (sf) is firewall.";}
   leaf loadbalancer{
    type uint32;
    description
    "To indicate the service function (sf) is loadbalancer.";}
   leaf NAT44{
    type uint32;
    description
    "To indicate the service function (sf) is NAT44.";}
   leaf NAT64{
    type uint32;
    description
    "To indicate the service function (sf) is NAT64.";}
   leaf DPI{
    type uint32;
    description
    "To indicate the service function (sf) is DPI.";}
  }//end the sf-type container
  container sf-inventory-data{
   description
   "The container of the inventory data of service function (sf).";
  } 
 }//end the sf-node-extension

augment "/stopo:service-topologies/stopo:service-topology/stopo:node/stopo:node-extension/stopo:sff-node-extension"{
 leaf sff-id{
  type node-id;
  description
  "The identifier of the service function forward (sff).";} 
 choice sffn-address{
  description
  "The address of the service function forward (sff) node";
   case ipv4-address{
    leaf ipv4-address{
     type inet:ipv4-address;}
   }
   case ipv6-address{
    leaf ipv6-address{
     type inet:ipv6-address;}
   }
  }//end the choice sffn-address 
  container sffn-virtual-context{
   leaf context-id{
   type uint32;
   description
   "the identifier of the sffn virtual context.";}
  } 
  container Attached-service-address{
   list service-node{
    key "service-node-id";
    leaf service-node-id{
     type node-id;
     description
     "The identifier of the service node.";}
   }//end the service-node list
   list host-system{
    key "host-system-id";
    leaf host-system-id{
     type uint32;
     description
     "The identifier of the host system.";}
   }//end the service-node list
  } //end the attached-service-address container
  list customer-support{
   key "customer-id";
   leaf customer-id{
    type uint32;
    description
    "The identifier of the customer.";}
  }//end the customer-support list 
  list customer-service-resource{
   key "customer-resource-id";
   leaf customer-resource-id{
    type node-id;
    description
    "The identifier of the customer resource.";}
  }//end the customer-service-resource list 
  container sffn-vntopo{
   description
   "This container can be use to contain the virtual network topology of 
    Sffn. And it can be augment by specific virtual network topology.";
   }//end the sffn-vntopo container 
  }//end the sff-node-extension
 }
<CODE ENDS>

7. Security Considerations

TBD.

8. IANA Considerations

TBD.

9. Normative References

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC6020] Bjorklund, M., "YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)", RFC 6020, October 2010.
[RFC6241] Enns, R., Bjorklund, M., Schoenwaelder, J. and A. Bierman, "Network Configuration Protocol (NETCONF)", RFC 6241', June 2011.
[draft-ietf-sfc-architecture-02] Halpern, J., "Service Function Chaining (SFC) Architecture", ID draft-ietf-sfc-architecture-02, May 2014.

Authors' Addresses

Zitao(Michael) Wang Huawei Technologies,Co.,Ltd 101 Software Avenue, Yuhua District Nanjing, 210012 China EMail: wangzitao@huawei.com
Qin Wu Huawei Technologies,Co.,Ltd 101 Software Avenue, Yuhua District Nanjing, 210012 China Phone: +86 25 56623633 EMail: bill.wu@huawei.com
Susan Hares Huawei Technologies,Co.,Ltd 7453 Hickory Hill Saline, MI 48176 USA EMail: Email: shares@ndzh.com