<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC791 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.0791.xml">
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY I-D.ietf-i2rs-yang-network-topo SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-i2rs-yang-network-topo.xml">
<!ENTITY I-D.ietf-i2rs-yang-l3-topology SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-i2rs-yang-l3-topology.xml">
]>

<rfc category="std" docName="draft-hares-i2rs-service-topo-dm-02.txt"
     ipr="trust200902">
  <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
  <?rfc toc="yes" ?>
  <?rfc symrefs="yes" ?>
  <?rfc sortrefs="yes"?>
  <?rfc iprnotified="no" ?>
  <?rfc strict="yes" ?>
  
  <front>
    <title abbrev="I2RS Service Topology">A Yang model for I2RS service topology</title>
 	<author fullname="Susan Hares" initials="S" surname="Hares">
      <organization>Huawei</organization>
	   <address> 
        <postal>
          <street>7453 Hickory Hill</street>
          <city>Saline</city>
          <region>MI</region>
          <code>48176</code>
          <country>USA</country>
        </postal>
        <email>shares@ndzh.com</email>
		</address>
    </author>
    <author fullname="Linda Dunbar" initials="L." surname="Dunbar">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street></street>
          <city> </city>
          <region> </region>
          <code></code>
          <country>USA</country>
        </postal>
        <email>linda.dunbar@huawei.com</email>
      </address>
    </author>
	<date year="2016" />
   <area>Routing Area</area>
   <workgroup>I2RS</workgroup>
    <keyword>RFC</keyword>
     <keyword>Request for Comments</keyword>
     <keyword>Service Topology</keyword>
     <keyword>Internet-Draft</keyword>
     <keyword>I2RS</keyword>
    <abstract>
      <t>This document defines  I2RS protocol-independent service layer
	  virtual topology data model.  This data model utilizes the concepts in 
	  the generic I2RS topology model of virtual networks (node, links, termination points) and cross-layer 
	  topologies. This virtual service topology may be a composite layer created
	  from the combination of protocol-dependent service layers. Protocol-dependent
	  services layers include: L3VPN, L2VPN, EVPN, E-Tree, and others. 
	  </t>
    </abstract>
  </front>
  <middle>
    <section anchor="intro" title="Introduction">
      <t>Service topology in <xref target="I-D.ietf-i2rs-yang-network-topo"></xref> includes the
	  a virtual topology for a service layer above the L1, L2, and L3 layers. This virtual
	  topology has the generic topology elements of node, link, and terminating point. 
	  The virtual service topology is a network-wide topology stored on one routing
	  system which an I2RS agent is connected to. </t>
	  <t> The virtual service topology is a composite of the available services
	  topologies IETF has standard virtual network topologies for L3VPN,
	  L2VPN, and EVPN services, E-TREE services, Seamless MPLS topologies within an As
	  and others. This yang module provides the composite protocol independent 
	  service topology that these protocol dependent topologies plug into</t>

    <section title="Conventions used in this document">
      <t>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 <xref
      target="RFC2119">RFC2119</xref>.</t>
    </section>

      <section title="Base Model: the Service-Topology Component">
        <t>The following diagram contains an informal graphical depiction of
        the main elements of the information model:
        <figure>
          <artwork>
            +----------------+
            |    network     | 
            |    topology    |&lt;...
            +----------------+   :
              *           *  :   :
              |           |  :...:
              |           |
      +--------+        +--------+
  ...&gt;|  node  |&lt;.......|link    |&lt;...
  :   +--------+&lt;.......+--------+   :
  :    :   *             : :  *  :   :
  :.....   |             : :  |  :...:
           |             : :  |
.....&gt;+--------+&lt;........: :  |
:     |   TP   |&lt;..........:  |
: ...&gt;+--------+              |
: :                           |
: : .....................+---------+
.........................|Direction|
                         +---------+
</artwork>
 </figure>
</t>
</section>
</section>
<section title="High level Yang architecture">
<t>This section describes the Yang High level architecture.</t>
<section title="Network level">
<t>
The service topology network level defines 
the following high-level yang architeture: 
</t>
<t>
<figure>
<artwork>
module: i2rs-service-topologies
   augment /nw:network/nw:network-types:
      +--rw service-topologies-types
   augment /nw:network:
     +--rw service-topology-attributes
         +--rw name?   string
		 +--rw flag	   flag_type;
 		 +--rw composite-flag identity-ref 
		 +--rw service-topo-id network-id
		 +--rw node-count  uint32
		 +--rw composite-flag_status identity-ref 
</artwork>
</figure>
</t>
<t>
The service topology attributes for a network include the following
<list>
<t>name - name of the service topology, </t>
<t>flag - generic topology flag, </t>
<t> composite-flags - bit mask with flags of service layer
 topologies network topology node available to create service
topology from. These topologies include: L3VPN, L2VPN, and EVPN services, E-TREE services, 
 Seamless MPLS topologies within an AS and others. 
</t>
<t>service-topo-id - service topology identifier. </t>
<t>node-count - count of nodes in composite service topology,</t>
<t>composite-flag_status - status flag for each of the composite
topologies on whether portions of the topology are included in
the composite.</t>
</list>
</t>
</section>
<section title="Node level">
<t>
<figure>
<artwork>
module: i2rs-service-topologies
.... 
   augment /nw:network/nw:node
      +--rw node-service-attributes
         +--rw name?        inet:domain-name
         +--rw composite_flag*  identityref;
		 +--rw service-node-id  uint32
		 +--rw node-svc_status* identityref;
</artwork>
</figure>
</t>
<t>
The additional fields in the service attributes
are the following:
<list>
<t>name - name of network node, </t>
<t> flag - generic topology node flag,</t>
<t>service-node-id - the id for the service node in the
composite network, </t>
<t>node-svc-type - the type of service node.  The service
node can be a member of one of the existing topology type
(L3VPN, L2VPN, EVPN, E-TREE, Seamless MPLS, MPLS-TE, MPLS 
node, or I2RS created). 
</t>
</list>
</t>
</section>
<section title="Service Link and Termination point">
<t>
<figure>
<artwork>
   augment /nw:network/nt:link:
      +--rw service-link-attributes
         +--rw name?     string
         +--rw svc-link-type identityref 		 
         +--rw metric?   uint32
   augment /nw:network/nw:node/nt:termination-point:
      +--rw service-termination-point-attributes
	     +--rw tp-svc-id 	
         +--rw (supporting-termination-point) ()
            +--:(service)
			|  +--rw service-network-id  leafref
            |  +--rw service-node-id     leafref
			|  +--rw service-tp-id       leafref
			+--:(ip)
			|  +--rw ip-address   inet:ip-address
            +--:(unnumbered)
               +--rw unnumbered-id?   uint32
</artwork>
</figure>
</t>
<t>
The augmentation to the service topology is the service link
attributes which include:
<list>
<t>name - name of the link,</t>
<t>svc-link-type - the service link type used to 
create this composite service link.
</t>
<t>metric - the metric of the service type</t>
</list>
</t>
<t>
The augmentation to the termination point include the following
<list>
<t>tp-svc-id - service id for the termination point, </t>
<t>supporting termination point* - with a)references to the 
service network id, node id and termination point for service id, or
b) an ip address, or c) an unnumbered link address </t>
</list>
</t>
</section>
</section>
<section title="Yang Data Model">
<t>
<figure>
<artwork>
//&lt;CODE BEGINS&gt; file "ietf-i2rs-service-topology@2016-01-03.yang"
    module ietf-i2rs-service-topology{
  namespace "urn:ietf:params:xml:ns:yang:ietf-i2rs-service-topology";
  prefix i2rs-st;
  
    import ietf-inet-types {
    prefix inet;
  }
  
   import ietf-network {
     prefix nw;
   }
   import ietf-network-topology {
     prefix "nt";
   }  
   
    organization "IETF";
	  contact
     "email: shares@ndzh.com;	 
      email: linda.dunbar@huawei.com;	  
	 ";

   description
     "This module defines a model for the service topology.";
 
  revision 2016-01-03{
    description
      "Version 1 - initial version;
	   Version 2 - yang format fixed;
	   version 3 - error in xml file";
	   
     reference "draft-hares-i2rs-service-topo-dm-01.txt";
  }
  
      identity svc-topo-flag-identity {
        description "Base type for svc flags";
        }
      identity l3vpn-svc-topo {
        base svc-topo-flag-identity;
        description "L3VPN service type";
       }
      identity l2vpn-svc-topo {
        base svc-topo-flag-identity;
        description "L2VPN service type";
       }
       identity EVPN-svc-topo {
        base svc-topo-flag-identity;
        description "EVPN service type";
       }
        identity Seamless-MPLS-svc-topo {
        base svc-topo-flag-identity;
        description "Seamless MPLS service type";
       }
        identity Etree-svc-topo {
        base svc-topo-flag-identity;
        description "Seamless MPLS service type";
       }
        identity I2rs-svc-topo {
        base svc-topo-flag-identity;
        description "I2RS create service topo";
       }
	   
      identity svc-tp-type {
        description "Base type for service
          termination-point type flags";
        }
      identity svc-tp-type-service {
        base svc-tp-type;
        description "service type";
       }
      identity svc-tp-type-ip {
        base svc-tp-type;
        description "service IP";
       }
      identity svc-tp-type-unnum {
                base svc-tp-type;
        description "service unnumbered link";
       }
	   
	   identity service-topology-types{
	    description
		"service topology type";
	   }
	   
      grouping service-topology-types {
       leaf service-type {
            type identityref {
            base svc-topo-flag-identity;
           }
           description "list of service
		     topology type supported";
         }
		 description
		 "service topology types";
      }
	  
      grouping service-topology-attributes {
              leaf name {
			    type string;
                description "name of service
                      topology";
			  }
              leaf composite-flag {
                type identityref {
                   base service-topology-types;
				 }
                 description "other topologies
                 this topology is configured to
                 be a composite of
                 (L3VPN, L2VPN, I2RS only)";
              }
              leaf service-topo-id {
                  type nw:network-id;
                   description  "service topology id 
				    to a service 
					topology instance.";
               }
               leaf service-id-number {
                  type uint32;
                  description "ID for topology";
              }
              leaf node-count {
                 type uint32;
                 description "count of service level nodes
                  in the network.";
                }
              leaf composite-flag-status {
                type identityref {
                   base svc-topo-flag-identity;}
                 description "other topologies
                 this topology is currently a
                  composite of
                 (L3VPN, L2VPN, I2RS only)";
              }
		description  "Group of attributes for
              service topology";  
      }
	  
      grouping node-svc-attribute {
        leaf domain-name{
           type inet:domain-name;
           description "Domain name for node";
        }
        leaf composite-flag {
          type identityref {
             base svc-topo-flag-identity;
		  }
          description "virtual network
           node can be composite of the
           topologies list
           (L3VPN, L2VPN, I2RS only)";
           }
        leaf service-node-id {
           type uint32;
           description "ID for node at
             service level";
        }
        leaf node-svc_status {
           type identityref {
             base service-topology-types;
		   }
           description "other topologies
             this topology is currewntly
             be composed of
			 (L3VPN, L2VPN, I2RS only)";
        }
	   description
	   "grouping of composite flag";
      }
	  
	  
	grouping service-link-attributes {
        leaf name {
		  type string;
          description "name of
            service link";
		}
        leaf link-id {
		  type uint32;
		  description "link id";
		}
        leaf svc-link-type {
          type identityref {
             base service-topology-types;
		  }
          description "other topologies
            this link is current a 
			composite of
            (L3VPN, L2VPN, I2RS only)";
        }
        leaf metric {
          type uint32;
          description "link metric
		    which may need to expand or
			 link to TE topologies.";
        }
	    description "grouping of 
		 service link attribute";
      }
	  
  grouping service-termination-point-attributes {
        leaf svc-tp-id {
            type uint32;
            description "termination point id";
         }
        container supporting-termination-point {
          leaf svc-tp-type {
            type identityref {
              base svc-tp-type;
			}
          description "other topologies
            this link termination point is
            part of (L3VPN, L2VPN, 
		    or I2RS only)";
		  }
          choice svc-tp-support-type{
            case svc-tp-type-service {

              leaf service-network-id {
                type uint32;
                description "service network id";
		       }
              leaf service-node-id {
                type uint32;
				description "service node id";
			  }
              leaf service-link-id {
                type uint32;
				description "service link id";
			  }
			  description "network, node,
                 tp that supports this
                 termination point";
			}
            case svc-tp-type-inet {
              leaf ip-address{
			    type inet:ip-address;
			    description "ip address";
			  }
			  description "inet svc tp";
            }
            
			case svc-tp-type-unnum {
              leaf unnumbered-id {
                type uint32;
			    description "unnumbered id";
			  }
			 description "unnumber svc tp";
			}
		   description "service termination
		       point type cases";
          }
        description "container of 
	       supporting termination point";
        }
		description
		"grouping of service-termination-point-attributes";
      }
	  
		   
      /*
       * Data nodes
       */
	    augment "/nw:networks/nw:network/nw:network-types"{
        uses service-topology-types;
		description
		"augment the network-tpyes with
		the service-topology-types grouping";
		}
      augment "/nw:networks/nw:network/nw:node" {
	   leaf name {
	   type inet:domain-name;
	    description "service name.";
	   }
	   list composite_fag {
	     key "service-node-id";
	     leaf service-node-id{
	       type uint32;
	       description "service node id.";
	     }
	     leaf node-svc-type{
	       type string;
	       description "node service type.";
	      }
	   leaf-list next-hop{
	     type uint32;
	     description "next hop id.";
	   }
	   description
	     "the list of composite flag.";
	  }
	  
	 description "augments node list";
	 }
	
			   

  augment "/nw:networks/nw:network"{
       uses service-topology-attributes;
	   description
	   "augment the network with 
	   the servcie-topolgoy-attributes";
	   }
  augment "/nw:networks/nw:network/nw:node"{
      uses node-svc-attribute;
	  description
	  "augment the node with the node-svc-attribute";
	  }
  augment "/nw:networks/nw:network/nt:link" {
    uses service-link-attributes;
	description
	"augment the link with 
	service-link-attributes";
	}
 augment "/nw:networks/nw:network/nw:node/nt:termination-point"{
    uses service-termination-point-attributes;
	description
	"augment the termination-point with
	service-termination-point-attributes";
	}
} // module i2rs-service-topology  
//&lt;CODE ENDS&gt;
</artwork>
</figure>
</t>
</section>
 <section title="IANA Considerations">
   <t>TBD</t>
 </section>
 <section title="Security Considerations">
   <t>TBD</t>
 </section>
</middle>
  <back>
    <references title="Normative References">
	  &RFC2119;
	  &I-D.ietf-i2rs-yang-network-topo;
    </references>
	<references title="Informative References">
        &I-D.ietf-i2rs-yang-l3-topology;
	</references>
 </back>
</rfc>