Internet DRAFT - draft-yan-rtgwg-routing-policy-yang

draft-yan-rtgwg-routing-policy-yang







Network Working Group                                             G. Yan
Internet-Draft                                                 S. Zhuang
Intended status: Informational                       Huawei Technologies
Expires: June 30, 2015                                 December 27, 2014


                   Yang Data Model for Routing Policy
                 draft-yan-rtgwg-routing-policy-yang-00

Abstract

   This document defines a YANG data model that can be used to configure
   and manage routing policies.

Requirements Language

   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 RFC 2119 [RFC2119].

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 June 30, 2015.

Copyright Notice

   Copyright (c) 2014 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



Yan & Zhuang              Expires June 30, 2015                 [Page 1]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


   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  . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Definitions and Acronyms  . . . . . . . . . . . . . . . . . .   2
   3.  Introduction to Routing Policies  . . . . . . . . . . . . . .   3
   4.  Design of Data Model  . . . . . . . . . . . . . . . . . . . .   4
     4.1.  Overview  . . . . . . . . . . . . . . . . . . . . . . . .   4
     4.2.  AS_Path Filter Configuration  . . . . . . . . . . . . . .   5
     4.3.  Community Filter Configuration  . . . . . . . . . . . . .   6
     4.4.  Extend Community Filter Configuration . . . . . . . . . .   6
     4.5.  Extend Community SoO Lists Configuration  . . . . . . . .   7
     4.6.  RD Filters Configuration  . . . . . . . . . . . . . . . .   7
     4.7.  IPv4 Prefix Filters Configuration . . . . . . . . . . . .   8
     4.8.  IPv6 Prefix Filters Configuration . . . . . . . . . . . .   8
     4.9.  Route-Policy Configuration  . . . . . . . . . . . . . . .   9
   5.  Route Policy Yang Module  . . . . . . . . . . . . . . . . . .  11
   6.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  50
   7.  Security Considerations . . . . . . . . . . . . . . . . . . .  50
   8.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .  50
   9.  References  . . . . . . . . . . . . . . . . . . . . . . . . .  50
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  50

1.  Introduction

   YANG [RFC6020] is a data definition language that was introduced to
   define the contents of a conceptual data store that allows networked
   devices to be managed using NETCONF[RFC6241].  YANG is proving
   relevant beyond its intial confines, as bindings to other
   interfaces(e.g.  ReST) and encoding other than XML (e.g.  JSON) are
   being defined.  Furthermore, YANG data models can be used as the
   basis of implementation for other interface, such as CLI and
   programatic APIs.

   This document defines a YANG data model that can be used to configure
   and manage routing policies.

2.  Definitions and Acronyms

   ACL:Access Control List

   AS: Autonomous System

   BGP: Border Gateway Protocol




Yan & Zhuang              Expires June 30, 2015                 [Page 2]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


   JSON: JavaScript Object Notation

   NETCONF: Network Configuration Protocol

   PBR:Policy-Based Routing

   RD:Route Distinguisher

   RPKI: Resource Public Key Infrastructure

   VPN: Virtual Private Network

   YANG: A data definition language for NETCONF

3.  Introduction to Routing Policies

   Routing policies are used to filter routes and set attributes for
   routes.  Changing route attributes (including reachability) changes
   the path that network traffic passes through.

   The difference between a routing policy and policy-based routing
   (PBR) is as follows:

   o Routing policies apply to routes.  Based on routing protocols, the
   result of route generation, advertisement, and selection is changed
   by following rules, changing parameters, or using control modes.
   That is, the contents in the routing table are changed.

   o PBR applies to data packets.  PBR provides a means to route or
   forward data packets flexibly based on predefined policies instead of
   following the routes in the existing routing table.

   When advertising, receiving, and importing routes, the router
   implements certain policies based on actual networking requirements
   to filter routes and change the attributes of the routes.  Routing
   policies serve the following purposes:

   o Control route advertising: Only routes that match the rules
   specified in a policy are advertised.

   o Control route receiving: Only the required and valid routes are
   received.  This reduces the size of the routing table and improves
   network security.

   o Filter and control imported routes: A routing protocol may import
   routes discovered by other routing protocols.  Only routes that
   satisfy certain conditions are imported to meet the requirements of
   the protocol.



Yan & Zhuang              Expires June 30, 2015                 [Page 3]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


   o Modify attributes of specified routes Attributes of the routes:
   that are filtered by a routing policy are modified to meet the
   requirements of the local device.

   o Configure fast reroute (FRR): If a backup next hop and a backup
   outbound interface are configured for the routes that match a routing
   policy, IP FRR, VPN FRR, and IP+VPN FRR can be implemented.

   Routing policies are implemented using the following procedures:

   1) Define rules: Define features of routes to which routing policies
   are applied.  Users define a set of matching rules based on different
   attributes of routes, such as the destination address and the address
   of the router that advertises the routes.

   2) Implement the rules: Apply the matching rules to routing policies
   for advertising, receiving, and importing routes.

4.  Design of Data Model

4.1.  Overview

   The routing policy Yang module is divided in following containers :

   o asPathFilters : An AS_Path filter is used to filter BGP routes
   based on AS_Path attributes contained in the BGP routes..

   o communityFilters : A community filter is used to filter BGP routes
   based on the community attributes contained in the BGP routes.

   o extendCommunityFilters : An extcommunity filter is used to filter
   BGP routes based on extended community attributes.

   o extendCommunitySooLists : A SoO extended community filter is used
   to filter BGP routes based on SoO extended community attributes.

   o rdFilters : An RD filter is used to filter BGP routes based on RDs
   in VPN routes.

   o prefixFilters : An IP prefix list contains a group of route
   filtering rules.

   o ipv6PrefixFilters : An IPv6 prefix list contains a group of route
   filtering rules.

   o routePolicys : A Route-Policy is a complex filter.  It is used to
   match attributes of specified routes and change route attributes when




Yan & Zhuang              Expires June 30, 2015                 [Page 4]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


   specific conditions are met.  A Route-Policy can use the preceding
   filters to define its matching rules.

   The figure below describe the overall structure of the routing policy
   Yang module :

   module: routing-policy
      +--rw routing-policy
         +--rw asPathFilters
         ...
         +--rw communityFilters
         ...
         +--rw extendCommunityFilters
         ...
         +--rw extendCommunitySooLists
         ...
         +--rw rdFilters
         ...
         +--rw prefixFilters
         ...
         +--rw ipv6PrefixFilters
         ...
         +--rw routePolicys
            +--rw routePolicy* [name]
               +--rw name                string
               +--rw routePolicyNodes
                  +--rw routePolicyNode* [nodeSequence]
                     +--rw nodeSequence      uint32
                     +--rw matchMode?        enumeration
                     +--rw description?      string
                     +--ro matchCount?       uint32
                     +--rw matchCondition
                     |  +--rw matchCostValue                 uint32
                     ...
                     |  +--rw matchExtCmntySooList?          string
                     +--rw applyAction
                        +--rw applyAsPaths
                        ...
                        +--rw applyPriorityValue            uint16

4.2.  AS_Path Filter Configuration

   An AS_Path filter uses the regular expression to define matching
   rules.







Yan & Zhuang              Expires June 30, 2015                 [Page 5]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


   +--rw asPathFilters
   |  +--rw asPathFilterKeyedByIndex* [index]
   |  |  +--rw index                uint32
   |  |  +--rw asPathFilterNodes
   |  |     +--rw asPathFilterNode* [nodeSequence]
   |  |        +--rw nodeSequence    uint32
   |  |        +--rw matchMode?      enumeration
   |  |        +--rw regular         string
   |  +--rw asPathFilterKeyedByName* [name]
   |     +--rw name                 string
   |     +--rw asPathFilterNodes
   |        +--rw asPathFilterNode* [nodeSequence]
   |           +--rw nodeSequence    uint32
   |           +--rw matchMode?      enumeration
   |           +--rw regular         string

4.3.  Community Filter Configuration

   A community filter is used to filter BGP routes based on the
   community attributes contained in the BGP routes.  The community
   attribute is a set of destination addresses with the same
   characteristics.  Therefore, filtering rules defined based on
   community attributes can be used to filter BGP routes..

   +--rw communityFilters
   |  +--rw basicCommunityFilterKeyedByIndex* [index]
   |  |  +--rw index                  uint32
   |  |  +--rw basicCommunityNodes
   |  |     +--rw basicCommunityNode* [nodeSequence]
   ...
   |  +--rw basicCommunityFilterKeyedByName* [name]
   |  |  +--rw name                   string
   |  |  +--rw basicCommunityNodes
   |  |     +--rw basicCommunityNode* [nodeSequence]
   ...
   |  +--rw advancedCommunityFilterKeyedByIndex* [index]
   ...
   |  +--rw advancedCommunityFilterKeyedByName* [name]
   ...

4.4.  Extend Community Filter Configuration

   An extendCommunity filter is used to filter BGP routes based on
   extended community attributes.  An extcommunity filter is used to
   filter only BGP routes because the extended community attribute is a
   private attribute of BGP.





Yan & Zhuang              Expires June 30, 2015                 [Page 6]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


   +--rw extendCommunityFilters
   |  +--rw basicExtendCommunityFilterKeyedByIndex* [index]
   ..
   |  +--rw basicExtendCommunityFilterKeyedByName* [name]
   ...
   |  +--rw advancedExtendCommunityFilterKeyedByIndex* [index]
   ...
   |  +--rw advancedExtendCommunityFilterKeyedByName* [name]
   ...

4.5.  Extend Community SoO Lists Configuration

   An SoO extended community filter is used to filter BGP routes based
   on SoO extended community attributes.

   +--rw extendCommunitySooLists
   |  +--rw extendCommunitySooList* [name]
   |     +--rw filterType                            enumeration
   |     +--rw name                                  string
   |     +--rw basicExtendCommunitySooListNodes
   ...
   |     +--rw advanceExtendEommunitySooListNodes
   |        +--rw advanceExtendEommunitySooListNode* [nodeSequence matchMode]
   |           +--rw nodeSequence    uint32
   |           +--rw matchMode       enumeration
   |           +--rw regular         string
   ...

4.6.  RD Filters Configuration

   An RD filter is used to filter BGP routes based on RDs in VPN routes.
   RDs are used to distinguish IPv4 and IPv6 prefixes in the same
   address segment in VPN instances.  RD filters specify matching rules
   regarding RD attributes.

   +--rw rdFilters
   |  +--rw rdFilter* [index]
   |     +--rw index            uint32
   |     +--rw rdFilterNodes
   |        +--rw rdFilterNode* [nodeSequence]
   |           +--rw nodeSequence    uint32
   |           +--rw matchMode?      enumeration
   |           +--rw rdStrings
   |              +--rw rdString* [rdStringValue]
   |                 +--rw rdStringValue    string






Yan & Zhuang              Expires June 30, 2015                 [Page 7]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


4.7.  IPv4 Prefix Filters Configuration

   An IP prefix list contains a group of route filtering rules.  Users
   can specify the prefix and mask length range to match the destination
   network segment address or the next hop address of a route.  An IP
   prefix list is used to filter routes that are advertised and received
   by various dynamic routing protocols..

   +--rw prefixFilters
   |  +--rw prefixFilter* [name]
   |     +--rw name                 string
   |     +--ro permitCnt?           uint32
   |     +--ro denyCnt?             uint32
   |     +--rw prefixFilterNodes
   |        +--rw prefixFilterNode* [nodeSequence]
   |           +--rw nodeSequence    uint32
   |           +--rw matchMode?      enumeration
   |           +--rw address         inet:ipv4-address
   |           +--rw maskLength      uint8
   |           +--rw matchNetwork?   boolean
   |           +--rw greaterEqual?   uint8
   |           +--rw lessEqual?      uint8


4.8.  IPv6 Prefix Filters Configuration

   An IPv6 prefix list contains a group of route filtering rules.  Users
   can specify the prefix and mask length range to match the destination
   network segment address or the next hop address of a route.  An IPv6
   prefix list is used to filter routes that are advertised and received
   by various dynamic routing protocols..

   +--rw ipv6PrefixFilters
   |  +--rw ipv6PrefixFilter* [name]
   |     +--rw name                     string
   |     +--ro permitCnt?               uint32
   |     +--ro denyCnt?                 uint32
   |     +--rw ipv6PrefixFilterNodes
   |        +--rw ipv6PrefixFilterNode* [nodeSequence]
   |           +--rw nodeSequence    uint32
   |           +--rw matchMode?      enumeration
   |           +--rw address         inet:ipv6-address
   |           +--rw maskLength      uint8
   |           +--rw matchNetwork?   boolean
   |           +--rw greaterEqual?   uint8
   |           +--rw lessEqual?      uint8





Yan & Zhuang              Expires June 30, 2015                 [Page 8]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


4.9.  Route-Policy Configuration

   As shown in following figure, a Route-Policy consists of node IDs,
   matching mode, if-match clauses, and apply clauses.

                             |-------------|
                             | Route entry |
                             | 10.1.1.0/25 |
                             |-------------|
                                    |
                                    V
             |----------------------------------------------|
             |                  -------------------- mode   |
             |                  |                           |
             |                  V                           |
             | route-policy A permit node 10  <----- node   |
             |  if-match xxx  <--------------------- rule   |
             |  apply xxx     <--------------------- action |
             |                                    ----------|
             |                    |               | node 10 |
             |--------------------|-------------------------|
             |                    V                         |
             | route-policy A deny node 20                  |
             |  if-match xxx                      ----------|
             |                                    | node 20 |
             |----------------------------------------------|
                     Composition of a Route-Policy

   o Node ID

   A Route-Policy consists of one or more nodes.  Node IDs are specified
   as indexes in the IP prefix list.  In a Route-Policy, routes are
   filtered based on the following rules:

   1) Sequential matching: The system checks entries based on node IDs
   in ascending order.  Therefore, specifying the node IDs in the
   required sequence is recommended.

   2) One-time matching: The relationship between the nodes of a Route-
   Policy is "OR".  If a route matches one node, the route matches the
   Route-Policy and will not be matched against the next node.

   o Matching mode

   Either of the following matching modes can be used:

   1) permit: specifies the permit mode of a node.  If a route matches
   the if-match clauses of a node, all the actions defined by apply



Yan & Zhuang              Expires June 30, 2015                 [Page 9]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


   clauses are performed, and the matching is complete.  If a route does
   not match the if-match clauses of the node, the route continues to
   match the next node.

   2) deny: specifies the deny mode of a node.  In the deny mode, the
   apply clauses are not used.  If a route matches all the if-match
   clauses of the node, the route is denied by the node and the next
   node is not matched.  If the entry does not match all the if-match
   clauses, the next node is matched.

   o if-match clause

   The if-match clause defines the matching rules.  Each node of a
   Route-Policy can comprise multiple if-match clauses or no if-match
   clause at all.  If no if-match clause is configured for a node in the
   permit mode, all routes match the node.

   o apply clause

   The apply clauses specify actions.  When a route matches a Route-
   Policy, the system sets some attributes for the route based on the
   apply clause.  Each node of a Route-Policy can comprise multiple
   apply clauses or no apply clause at all.  The apply clause is not
   used when routes need to be filtered but attributes of the routes do
   not need to be set.

   Matching results of a Route-Policy

   The matching results of a Route-Policy are obtained based on the
   following aspects:

   1) Matching mode of the node, either permit or deny

   2) Matching rules (either permit or deny) contained in the if-match
   clause (such as ACLs or IP prefix lists)

   A Route-Policy is a complex filter.  It is used to match attributes
   of specified routes and change route attributes when specific
   conditions are met.  A Route-Policy can use the preceding filters to
   define its matching rules.











Yan & Zhuang              Expires June 30, 2015                [Page 10]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


   +--rw routePolicys
      +--rw routePolicy* [name]
         +--rw name                string
         +--rw routePolicyNodes
            +--rw routePolicyNode* [nodeSequence]
               +--rw nodeSequence      uint32
               +--rw matchMode?        enumeration
               +--rw description?      string
               +--ro matchCount?       uint32
               +--rw matchCondition
               |  +--rw matchCostValue                 uint32
               ...
               |  +--rw matchExtCmntySooList?          string
               +--rw applyAction
                  +--rw applyAsPaths
                  ...
                  +--rw applyPriorityValue            uint16


5.  Route Policy Yang Module

ROUTING POLICY YANG MODEL
<CODE BEGINS> file "routing-policy@2014-12-12.yang"
module routing-policy {
  namespace "urn:huawei:params:xml:ns:yang:routing-policy";
  // replace with IANA namespace when assigned
  prefix "routing-policy";

  import ietf-interfaces {
    prefix if;
    //rfc7223-YANG Interface Management
  }

  import ietf-inet-types {
    prefix inet;
    //rfc6991-Common YANG Data Types
  }

  description
    "This YANG module defines the RTP configuration data for
     routing policy service.

     Terms and Acronyms

     RTP: Routing-Policy
     Routing policies are used to filter routes and set attributes
     for routes. Changing route attributes (including reachability)
     changes the path that network traffic passes through.



Yan & Zhuang              Expires June 30, 2015                [Page 11]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


    ";

  revision 2014-12-12 {
    description
      "Initial revision.";
  }

  grouping matchMode {
    leaf matchMode {
      config "true";
      type enumeration {
        enum "permit" {
          value "0";
          description "permit:
            Specifies the matching mode of the route-policy as permit.
            In permit mode, a route matches all the if-match clauses,
            the route matches the route-policy and the actions defined
            by the apply clause are performed on the route. Otherwise,
            the route continues to match the next entry.";
        }
        enum "deny" {
          value "1";
          description "deny:
            Specifies the matching mode of the route-policy as deny. In
            deny mode, if a route matches all the if-match clauses, the
            route fails to match the route-policy and cannot match the
            next node.";
        }
      }
    }
  }//End of grouping matchMode

  grouping asPathFilterNodes {
    container asPathFilterNodes {
      list asPathFilterNode {
        key "nodeSequence";
        min-elements "0";
        max-elements "unbounded";

        leaf nodeSequence {
          config "true";
          type uint32 {
            range "1..4294967295";
          }
        }
        uses matchMode;

        leaf regular {



Yan & Zhuang              Expires June 30, 2015                [Page 12]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


          config "true";
          mandatory "true";
          type "string";
        }
      }
    }
  }//End of grouping asPathFilterNodes

  grouping basicCommunityNodes {
    container basicCommunityNodes {
      list basicCommunityNode {
        key "nodeSequence";
        min-elements "0";
        max-elements "unbounded";

        leaf nodeSequence {
          config "true";
          type uint32 {
            range "1..4294967295";
          }
        }
        uses matchMode;

        container communityNumbers {
          description
            "The ip community-filter basic comm-filter-name command or
             the ip community-filter basic-comm-filter-num command can
             be used to configure a basic community filter. basic
             comm-filter-name specifies the name of a basic community
             filter, and the name cannot be all digits. A maximum of 20
             community numbers can be configured using one command.
             basic-comm-filter-num specifies only the basic community
             filter with the number ranging from 1 to 99. A maximum of
             20 community numbers can be configured using one command.";
          list communityNumber {
            key "communityNumberValue";
            min-elements "0";
            max-elements "20";

            leaf communityNumberValue {
              config "true";
              type string;
            }
          }
        }

      }
    }



Yan & Zhuang              Expires June 30, 2015                [Page 13]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


  }//End of grouping basicCommunityNodes

  grouping advancedCommunityNodes {
    container advancedCommunityNodes {

      list advancedCommunityNode {
        key "nodeSequence matchMode";
        min-elements "0";
        max-elements "unbounded";

        leaf nodeSequence {
          config "true";
          type uint32 {
            range "1..4294967295";
          }
        }
        uses matchMode;

        leaf regular {
          description
            "The ip community-filter advanced comm-filter-name command
             or the ip community-filter adv-comm-filter-num command can
             be used to configure an advanced community filter. advanced
             comm-filter-name specifies the name of an advanced
             community filter, and the name cannot be all digits.
             adv-comm-filter-num specifies only the advanced community
             filter with the number ranging from 100 to 199.";

          config "true";
          mandatory "true";
          type "string";
        }
      }

    }
  }//End of grouping advancedCommunityNodes

  grouping basicExtendCommunityFilterNodes {
    container extendCommunityFilterNodes {

      list extendCommunityFilterNode {
        key "nodeSequence";
        min-elements "0";
        max-elements "unbounded";

        leaf nodeSequence {
          config "true";
          type uint32 {



Yan & Zhuang              Expires June 30, 2015                [Page 14]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


            range "1..4294967295";
          }
        }
        uses matchMode;
        container extendEommunityNumbers {
          list extendCommunityNumber {
            key "extendCommunityNumberValue";
            min-elements "0";
            max-elements "16";

            leaf extendCommunityNumberValue {
              config "true";
              type string;
            }
          }
        }
      }
    }
  }//End of grouping basicExtendCommunityFilterNodes

  grouping advancedExtendCommunityNodes {
    container advancedExtendCommunityNodes {

      list advancedExtendCommunityNode {

        key "nodeSequence matchMode";
        min-elements "0";
        max-elements "unbounded";

        leaf nodeSequence {
          config "true";
          type uint32 {
            range "1..4294967295";
          }
        }
        uses matchMode;

        leaf regular {
          config "true";
          mandatory "true";
          type "string";
        }
      }

    }
  }//End of grouping advancedExtendCommunityNodes

  container routing-policy {



Yan & Zhuang              Expires June 30, 2015                [Page 15]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


    /*
      IP Routing Policy Configuration Commands.

      Routing policies are implemented using the following procedures:
      1)Define rules:
      Define features of routes to which routing policies are applied.
      Users define a set of matching rules based on different
      attributes of routes, such as the destination address and the
      address of the router that advertises the routes.
      2)Implement the rules:
      Apply the matching rules to routing policies for advertising,
      receiving, and importing routes.
      3)Filter
      A filter is the core of a routing policy and is defined using a
      set of matching rules.
     */
    container asPathFilters {
      description
        "An AS_Path filter uses the regular expression to define
         matching rules.";

      list asPathFilterKeyedByIndex {
        key "index";
        min-elements "0";
        max-elements "unbounded";

        leaf index {
          config "true";
          type uint32 {
            range "1..256";
          }
        }
        uses asPathFilterNodes;
      }

      list asPathFilterKeyedByName {
        key "name";
        min-elements "0";
        max-elements "unbounded";

        leaf name {
          config "true";
          type "string";
        }
        uses asPathFilterNodes;
      }
    } //End of container asPathFilters




Yan & Zhuang              Expires June 30, 2015                [Page 16]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


    container communityFilters {
      description
        "The ip community-filter command configures a community filter
         or one entry in the community filter.

         The community attribute is a private attribute of BGP, and can
         be used only to filter BGP routes. The community attribute can
         be used together with the if-match community-filter command as
         a matching condition of a route-policy.";

      list basicCommunityFilterKeyedByIndex {
        key "index";
        min-elements "0";
        max-elements "unbounded";

        leaf index {
          config "true";
          type uint32 {
            range "1..99";
          }
        }
        uses basicCommunityNodes;
      }

      list basicCommunityFilterKeyedByName {
        key "name";
        min-elements "0";
        max-elements "unbounded";

        leaf name {
          config "true";
          type "string";
        }
        uses basicCommunityNodes;
      }

      list advancedCommunityFilterKeyedByIndex {
        key "index";
        min-elements "0";
        max-elements "unbounded";

        leaf index {
          config "true";
          type uint32 {
            range "100..199";
          }
        }
        uses advancedCommunityNodes;



Yan & Zhuang              Expires June 30, 2015                [Page 17]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


      }

      list advancedCommunityFilterKeyedByName {
        key "name";
        min-elements "0";
        max-elements "unbounded";

        leaf name {
          config "true";
          type "string";
        }
        uses advancedCommunityNodes;
      }
    }//End of container communityFilters


    container extendCommunityFilters {
      description
        "The ip extcommunity-filter command adds an extended community
         filter.

         An extended community filter can be used as a matching
         condition of a route-policy by using a command such as
         if-match extcommunity-filter zz.";

      list basicExtendCommunityFilterKeyedByIndex {
        key "index";
        min-elements "0";
        max-elements "unbounded";

        leaf index {
          config "true";
          type uint32 {
            range "1..199";
          }
        }
        uses basicExtendCommunityFilterNodes;
      }
      list basicExtendCommunityFilterKeyedByName {
        key "name";
        min-elements "0";
        max-elements "unbounded";

        leaf name {
          config "true";
          type "string";
        }
        uses basicExtendCommunityFilterNodes;



Yan & Zhuang              Expires June 30, 2015                [Page 18]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


      }
      list advancedExtendCommunityFilterKeyedByIndex {
        key "index";
        min-elements "0";
        max-elements "unbounded";

        leaf index {
          config "true";
          type uint32 {
            range "200..399";
          }
        }
        uses advancedExtendCommunityNodes;

      }
      list advancedExtendCommunityFilterKeyedByName {
        key "name";
        min-elements "0";
        max-elements "unbounded";

        leaf name {
          config "true";
          type "string";
        }
        uses advancedExtendCommunityNodes;
      }

    }//End of container extendCommunityFilters


    container extendCommunitySooLists {
      description
        "The ip extcommunity-list soo command configures a Source of
         Origin (SoO) extended community filter.

         SoO records the BGP route originator. To configure an SoO
         extended community filter so that BGP routes carrying SoO
         can be filtered, run the ip extcommunity-list soo command.";

      list extendCommunitySooList {
        key "name";
        min-elements "0";
        max-elements "unbounded";

        leaf filterType {
          config "true";
          mandatory "true";
          type enumeration {



Yan & Zhuang              Expires June 30, 2015                [Page 19]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


            enum "basic" {
              value "0";
              description "basic:";
            }
            enum "advanced" {
              value "1";
              description "advanced:";
            }
          }
        }
        leaf name {
          config "true";
          type "string";
        }

        container basicExtendCommunitySooListNodes {
          list basicExtendCommunitySooListNode {
            key "nodeSequence";
            min-elements "0";
            max-elements "unbounded";

            leaf nodeSequence {
              config "true";
              type uint32 {
                range "1..4294967295";
              }
            }
            uses matchMode;

            container extendEommunityNumbers {
              list extendCommunityNumber {
                key "extendCommunityNumberValue";
                min-elements "1";
                max-elements "16";

                leaf extendCommunityNumberValue {
                  config "true";
                  type string;
                }
              }
            }
          }
        }

        container advanceExtendEommunitySooListNodes {
          list advanceExtendEommunitySooListNode {
            key "nodeSequence matchMode";
            min-elements "0";



Yan & Zhuang              Expires June 30, 2015                [Page 20]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


            max-elements "unbounded";

            leaf nodeSequence {
              config "true";
              type uint32 {
                range "1..4294967295";
              }
            }

            uses matchMode;

            leaf regular {
              config "true";
              mandatory "true";
              type "string";
            }
          }

        }

      }
    }// End of container extendCommunitySooLists


    container rdFilters {
      description
        "The ip rd-filter command configures a route distinguisher (RD)
         filter.

         The RD attribute is carried in VPN routes. RDs are used to
         distinguish address spaces with the same IPv4 address prefix.
         An RD filter is used to filter VPN routes. The VPN target
         attribute of the VPN route controls the route exchange between
         VPN instances. The RD filter can filter a VPN route or multiple
         VPN routes from VPN instances.";

      list rdFilter {
        key "index";
        min-elements "0";
        max-elements "unbounded";

        leaf index {
          config "true";
          type uint32 {
            range "1..199";
          }
        }




Yan & Zhuang              Expires June 30, 2015                [Page 21]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


        container rdFilterNodes {
          list rdFilterNode {
            key "nodeSequence";
            min-elements "0";
            max-elements "unbounded";

            leaf nodeSequence {
              config "true";
              type uint32 {
                range "1..4294967295";
              }
            }

            uses matchMode;

            container rdStrings {
              list rdString {
                key "rdStringValue";
                min-elements "0";
                max-elements "unbounded";

                leaf rdStringValue {
                  config "true";
                  type "string";
                }
              }

            }
          }
        }
      }
    }//End of container rdFilters


    container prefixFilters {
      description
        "The ip ip-prefix command configures an new IP prefix list or
         one entry in an existing IP prefix list.

         An IP prefix list can be used as a filter or as matching
         conditions of a routing policy when it is used together with
         the if-match command.";

      list prefixFilter {
        key "name";
        min-elements "0";
        max-elements "unbounded";




Yan & Zhuang              Expires June 30, 2015                [Page 22]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


        leaf name {
          config "true";
          type "string";
        }

        leaf permitCnt {
          config "false";
          default "0";
          type uint32 {
            range "0..65535";
          }
        }
        leaf denyCnt {
          config "false";
          default "0";
          type uint32 {
            range "0..65535";
          }
        }
        container prefixFilterNodes {
          list prefixFilterNode {
            key "nodeSequence";
            min-elements "0";
            max-elements "unbounded";

            leaf nodeSequence {
              config "true";
              type uint32 {
                range "1..4294967295";
              }
            }

            uses matchMode;

            leaf address {
              config "true";
              mandatory "true";
              type inet:ipv4-address;
            }
            leaf maskLength {
              config "true";
              mandatory "true";
              type uint8 {
                range "0..32";
              }
            }
            leaf matchNetwork {
              config "true";



Yan & Zhuang              Expires June 30, 2015                [Page 23]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


              default "false";
              type "boolean";
            }
            leaf greaterEqual {
              config "true";
              type uint8 {
                range "0..32";
              }
            }
            leaf lessEqual {
              config "true";
              type uint8 {
                range "0..32";
              }
            }
          }
        }
      }
    }//End of container prefixFilters


    container ipv6PrefixFilters {
      description
        "The ip ipv6-prefix command configures an new IPv6 prefix list
         or one entry in an existing IPv6 prefix list.

         The IPv6 prefix list can be used by the protocols as a prefix
         filter, or used with the if-match ipv6 command as a matching
         condition of routing policies.";

      list ipv6PrefixFilter {

        key "name";
        min-elements "0";
        max-elements "unbounded";

        leaf name {
          config "true";
          type "string";
        }

        leaf permitCnt {
          config "false";
          default "0";
          type uint32 {
            range "0..65535";
          }
        }



Yan & Zhuang              Expires June 30, 2015                [Page 24]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


        leaf denyCnt {
          config "false";
          default "0";
          type uint32 {
            range "0..65535";
          }
        }
        container ipv6PrefixFilterNodes {
          list ipv6PrefixFilterNode {
            key "nodeSequence";
            min-elements "0";
            max-elements "unbounded";

            leaf nodeSequence {
              config "true";
              type uint32 {
                range "1..4294967295";
              }
            }

            uses matchMode;

            leaf address {
              config "true";
              mandatory "true";
              type inet:ipv6-address;
            }
            leaf maskLength {
              config "true";
              mandatory "true";
              type uint8 {
                range "0..128";
              }
            }
            leaf matchNetwork {
              config "true";
              default "false";
              type "boolean";
            }
            leaf greaterEqual {
              config "true";
              type uint8 {
                range "0..128";
              }
            }
            leaf lessEqual {
              config "true";
              type uint8 {



Yan & Zhuang              Expires June 30, 2015                [Page 25]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                range "0..128";
              }
            }
          }

        }

      }
    }//End of container ipv6PrefixFilters

    /*
    Routing policies are used to filter routes and set attributes for
    routes. Changing route attributes (including reachability) changes
    the path that network traffic passes through.
    */
    container routePolicys {
      list routePolicy {
        key "name";
        min-elements "0";
        max-elements "unbounded";

        leaf name {
          config "true";
          type "string";
        }

        /*
        A route-policy is used to filter routes and set route attributes
        for the routes that match the route-policy. A route-policy
        consists of multiple nodes. One node can be configured with
        multiple if-match and apply clauses.
        */
        container routePolicyNodes {
          list routePolicyNode {
            key "nodeSequence";
            min-elements "0";
            max-elements "unbounded";

            leaf nodeSequence {
              config "true";
              type uint32 {
                range "0..65535";
              }
            }

            uses matchMode;

            leaf description {



Yan & Zhuang              Expires June 30, 2015                [Page 26]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


              description
                "The description command configures the description of
                 a route-policy.";
              config "true";
              mandatory "false";
              type "string";
            }

            leaf matchCount {
              config "false";
              mandatory "false";
              type "uint32";
            }

            /*if-match clauses*/
            container matchCondition {
              description
                "Define a set of matching rules and setting rules.
                 The policy is applied to the routing information to
                 meet the requirements of the matching rules.";

              leaf matchCostValue {
                description
                  "The if-match cost command sets a matching rule that
                   is based on the route cost.

                   You can use the if-match cost command to configure
                   a node to filter routes based on the route costs.
                   After such a matching rule is configured, you can
                   apply the apply clauses to change the attributes of
                   the routes that match the matching rule.";

                config "true";
                mandatory "true";
                type uint32 {
                  range "0..4294967295";
                }
              }//End of leaf matchCostValue

              container matchInterfaces {
                description
                  "The if-match interface command sets a matching rule
                   that is based on the outbound interface.

                   The if-match interface command is used to filter
                   routes based on the outbound interfaces.
                   A maximum of 16 outbound interfaces can be
                   configured in this command. ";



Yan & Zhuang              Expires June 30, 2015                [Page 27]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                list matchInterface {
                  key "ifName";
                  min-elements "0";
                  max-elements "unbounded";

                  leaf ifName {
                    config "true";
                    type leafref {
                      path "/if:interfaces/if:interface/if:name";
                    }
                  }
                }
              }//End of container matchInterfaces

              container matchRouteTypes {
                description
                  "The if-match route-type command sets a filtering
                   rule that is based on the route type.

                   To filter OSPF or IS-IS routes based on the route
                   type, run the if-match route-type command.";

                list matchRouteType {
                  key "routeType";
                  min-elements "0";
                  max-elements "unbounded";

                  leaf routeType {
                    config "true";
                    type enumeration {
                      enum "external1" {
                        value "0";
                        description "external1:";
                      }
                      enum "external2" {
                        value "1";
                        description "external2:";
                      }
                      enum "internal" {
                        value "2";
                        description "internal:";
                      }
                      enum "isisLevel1" {
                        value "3";
                        description "isisLevel1:";
                      }
                      enum "isisLevel2" {
                        value "4";



Yan & Zhuang              Expires June 30, 2015                [Page 28]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                        description "isisLevel2:";
                      }
                      enum "nssaExternal1" {
                        value "5";
                        description "nssaExternal1:";
                      }
                      enum "nssaExternal2" {
                        value "6";
                        description "nssaExternal2:";
                      }
                    }
                  }
                }
              }//End of container matchRouteTypes

              leaf matchTagValue {
                description
                  "The if-match tag command sets a matching rule
                   that is based on the route tag.

                   You can run the if-match tag command to filter
                   OSPF or IS-IS routes based on the tags.";

                config "true";
                mandatory "true";
                type uint32 {
                  range "0..4294967295";
                }
              }//End of leaf matchTagValue

              leaf matchMplsLabel {
                description
                  "The if-match mpls-label command sets a matching
                   rule that is based on MPLS labels. That is, a
                   rule is set to match the routes with MPLS labels.

                   In the scenario where inter-AS VPN Option C or
                   CSC is deployed, you can use the if-match
                   mpls-label command to match routes with MPLS
                   labels.";

                config "true";
                mandatory "true";
                type "boolean";
              }

              leaf matchDestAcl {
                description



Yan & Zhuang              Expires June 30, 2015                [Page 29]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                  "The if-match acl command sets a matching rule
                   that is based on the Access Control List (ACL).";

                config "true";
                mandatory "true";
                type "string";
              }

              leaf matchDestPrefixFilter {
                description
                  "The if-match ip-prefix command sets a matching
                   rule that is based on the IP prefix list.";

                config "true";
                mandatory "true";
                type "string";
              }

              leaf matchDestPrefix6Filter {
                description
                  "Specify the ipv6-prefix name to be matched";

                config "true";
                mandatory "true";
                type "string";
              }

              leaf matchDestAcl6 {
                description
                  "Specify the ipv6 acl name or num.";

                config "true";
                mandatory "true";
                type "string";
              }

              container matchIPv4NextHop {
                description
                  ".";

                choice matchIPv4NextHopMode {
                  case matchNextHopPrefixFilter {
                    leaf prefixName {
                      config "true";
                      mandatory "true";
                      type "string";
                    }
                  }



Yan & Zhuang              Expires June 30, 2015                [Page 30]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                  case matchNexthopAcl {
                    leaf aclNameOrNum {
                      config "true";
                      mandatory "true";
                      type "string";
                    }
                  }
                }
              }

              container matchIPv6NextHop {
                choice matchIPv6NextHopMode {
                  case matchNextHopPrefix6Filter {
                    leaf ipv6PrefixName {
                      config "true";
                      mandatory "true";
                      type "string";
                    }
                  }
                  case matchNextHopAcl6 {
                    leaf aclNameOrNum {
                      config "true";
                      mandatory "true";
                      type "string";
                    }
                  }
                }
              }

              container matchIPv4RouteSource {
                choice matchIPv4RouteSourceMode {
                  case matchRtSrcPrefixFilter {
                    leaf prefixName {
                      config "true";
                      mandatory "true";
                      type "string";
                    }
                  }
                  case matchRouteSourceAcl {
                    leaf aclNameOrNum {
                      config "true";
                      mandatory "true";
                      type "string";
                    }
                  }
                }
              }




Yan & Zhuang              Expires June 30, 2015                [Page 31]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


              container matchIPv6RouteSource {
                choice matchIPv6RouteSourceMode {
                  case matchRtSrcPrefix6Filter {
                    leaf ipv6PrefixName {
                      config "true";
                      mandatory "true";
                      type "string";
                    }
                  }
                  case matchRtSrcAcl6 {
                    leaf aclNameOrNum {
                      config "true";
                      mandatory "true";
                      type "string";
                    }
                  }
                }
              }

              container matchCommunityFilters {
                description
                  "The if-match community-filter command sets a
                   matching rule that is based on the community
                   filter.";

                list matchCommunityFilter {

                  key "cmntyNameOrNum";
                  min-elements "0";
                  max-elements "unbounded";

                  leaf wholeMatch {
                    config "true";
                    default "false";
                    type "boolean";
                  }
                  leaf cmntyNameOrNum {
                    config "true";
                    type "string";
                  }
                }
              }

              container matchExtcommunityFilters {
                description
                  "The if-match extcommunity-filter command sets a
                   matching rule that is based on the extended
                   community filter.";



Yan & Zhuang              Expires June 30, 2015                [Page 32]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                list matchExtcommunityFilterIndex {
                  key "extCmntyIndex";
                  min-elements "0";
                  max-elements "unbounded";

                  leaf extCmntyIndex {
                    config "true";
                    type uint32 {
                      range "1..399";
                    }
                  }
                }
                list matchExtcommunityFilterName {

                  key "extCmntyName";
                  min-elements "0";
                  max-elements "unbounded";

                  leaf extCmntyName {
                    config "true";
                    type "string";
                  }
                }
              }

              leaf matchRdFilter {
                description
                  "The if-match rd-filter command sets a matching rule
                   that is based on the Route Distinguisher (RD)
                   filter.";

                config "true";
                mandatory "true";
                type uint32 {
                  range "1..199";
                }
              }

              container matchAsPathFilters {
                description
                  "The if-match as-path-filter command sets a matching
                   rule that is based on the AS_Path filter.";

                list matchAsPathFilterIndex {
                  key "asPathIndex";
                  min-elements "0";
                  max-elements "unbounded";




Yan & Zhuang              Expires June 30, 2015                [Page 33]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                  leaf asPathIndex {
                    config "true";
                    type uint32 {
                      range "1..256";
                    }
                  }
                }
                list matchAsPathFilterName {
                  key "asPathFilterName";
                  min-elements "0";
                  max-elements "unbounded";

                  leaf asPathFilterName {
                    config "true";
                    type "string";
                  }
                }
              }

              leaf matchOriginAsValidateResult {
                description
                  "The if-match rpki origin-as-validation command
                   configures a filtering rule based on the BGP
                   origin AS validation result.

                   Attackers can steal user data by advertising routes
                   that are more specific than those advertised by
                   carriers. RPKI can address this issue by validating
                   the origin ASs of BGP routes and apply the BGP
                   origin AS validation result to route selection. The
                   validation result can be Valid, Not Found, or
                   Invalid.

                   To configure a filtering rule based on the BGP
                   origin AS validation result, you can run the
                   if-match rpki origin-as-validation command. After
                   the filtering rule is configured, attribute of
                   the routes that match the filtering rule can be
                   modified based on the apply clause.";

                config "true";
                mandatory "true";
                type enumeration {
                  enum "valid" {
                    value "0";
                    description "valid:";
                  }
                  enum "invalid" {



Yan & Zhuang              Expires June 30, 2015                [Page 34]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                    value "1";
                    description "invalid:";
                  }
                  enum "notFound" {
                    value "2";
                    description "notFound:";
                  }
                }
              }//End of leaf matchOriginAsValidateResult

              leaf matchExtCmntySooList {
                description
                  "The if-match extcommunity-list soo command sets a
                   filtering rule that is based on the Source of
                   Origin (SoO) extended community filter.

                   The extended community attributes help flexibly
                   control the route-policy. You can use the if-match
                   extcommunity-list soo command to configure a node
                   to filter routes based on the SoO extended
                   community filter.";

                config "true";
                type "string";
              }

            }//End of container matchCondition


            /*apply clauses*/
            container applyAction {
              description
                "Apply the matching rules to the routing policies for
                 route advertisement, reception, and import.";

              container applyAsPaths {
                description
                  "The apply as-path command replaces the original
                   AS_Path list or add the specified AS number to
                   the original AS_Path list when BGP route selection
                   is adjusted.";
                container asPathStrings {
                  list asPathString {
                    key "sequenceNumber";
                    min-elements "0";
                    max-elements "unbounded";

                    leaf sequenceNumber {



Yan & Zhuang              Expires June 30, 2015                [Page 35]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                      config "true";
                      type uint32 {
                        range "1..10";
                      }
                    }
                    leaf stringValue {
                      config "true";
                      mandatory "true";
                      type "string";
                    }
                  }
                }
                leaf operationType {
                    config "true";
                    type enumeration {
                      enum "delete" {
                        value "0";
                        description "delete:";
                      }
                      enum "replace" {
                        value "1";
                        description "replace:";
                      }
                      enum "additive" {
                        value "2";
                        description "additive:";
                      }
                      enum "delSpecial" {
                        value "3";
                        description "delSpecial:";
                      }
                    }
                    default "replace";
                }
              }//End of container applyAsPaths

              container applyNextHops {
                description
                  "The apply ip-address next-hop command sets the
                   next hop address of a route.
                   In BGP, the next hop address of a route can be
                   set through the route-policy in the following
                   situations:
                   1) IBGP: For an IBGP peer, the configured import
                      and export policies can take effect. If the
                      next hop address configured in the policy is
                      unreachable, the IBGP peer still adds the route
                      to the BGP routing table, but the route is not



Yan & Zhuang              Expires June 30, 2015                [Page 36]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                      valid.
                   2) EBGP: For an EBGP peer, when the policy is used
                      to modify the next hop address of a route, the
                      import policy is configured. If the export policy
                      is configured, the route is discarded because its
                      next hop is unreachable. When the EBGP peer
                      relationship is established through a physical
                      connection, the policy cannot take effect. That
                      is, the next hop address of the route cannot be
                      modified.";

                leaf nextHop {
                  config "true";
                  mandatory "true";
                    type inet:ipv4-address;
                }
                leaf isPeerAddress {
                  config "true";
                  type "boolean";
                  default "false";
                }
              }//End of container applyNextHops

              leaf applyLocalPreference {
                description
                  "The apply local-preference command sets the local
                   preference (Local-Pref) for BGP routes.

                   The Local-Pref attribute is the proprietary
                   attribute of BGP. Therefore, the apply
                   local-preference command sets only the Local-Pref
                   for BGP routes. The Local_Pref attribute is used
                   to determine the optimal route when traffic leaves
                   an AS. When a BGP router obtains multiple routes to
                   the same destination address but with different
                   next hops through IBGP peers, the route with the
                   largest Local_Pref value is selected.";

                config "true";
                mandatory "true";
                type uint32 {
                  range "0..4294967295";
                }
              }

              container applyCosts {
                description
                  "The apply cost command sets the MED value for BGP



Yan & Zhuang              Expires June 30, 2015                [Page 37]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                   routes or cost value for routes of other protocols.
                   When the filtering conditions specified by if-match
                   clauses are met, you can run the apply cost command
                   to change the route MED or cost to control route
                   selection. After setting the MED or cost, the MED
                   or cost of the routes that are imported using the
                   route-policy is changed accordingly.";

                leaf applyChoice {
                  config "true";
                  mandatory "true";
                  type enumeration {
                    enum "Add" {
                      value "0";
                      description "Add:";
                    }
                    enum "Sub" {
                      value "1";
                      description "Sub:";
                    }
                    enum "Replace" {
                      value "2";
                      description "Replace:";
                    }
                    enum "Inherit" {
                      value "3";
                      description "Inherit:";
                    }
                  }
                }
                leaf costValue {
                  config "true";
                  mandatory "true";
                  type uint32 {
                    range "0..4294967295";
                  }
                }
              }//End of container applyCosts

              container applyIpv6NextHops {
                description
                  "The apply ipv6 next-hop command configures an IPv6
                   next hop address for a BGP route through a
                   route-policy.
                   In BGP, the next hop address of a route can be set
                   through the route-policy in the following
                   situations:
                   1) IBGP: For an IBGP peer, the configured inbound



Yan & Zhuang              Expires June 30, 2015                [Page 38]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                      and outbound policies can take effect. If the
                      next hop address configured in the policy is
                      unreachable, the IBGP peer still adds the route
                      to the BGP routing table, but the route is not
                      valid.
                   2) EBGP: For an EBGP peer, when the policy is used
                      to modify the next hop address of a route, the
                      inbound policy is configured. If the outbound
                      policy is configured, the route is discarded
                      because its next hop is unreachable. When the
                      EBGP peer relationship is established through
                      a physical connection, the policy cannot take
                      effect. That is, the next hop address of the
                      route cannot be modified.";

                leaf ipv6NextHop {
                  config "true";
                  mandatory "true";
                  type inet:ipv6-address;
                }
                leaf isPeerAddress {
                  config "true";
                  type "boolean";
                  default "false";
                }
              }//End of container applyIpv6NextHops

              leaf applyCostType {
                description
                  "The apply cost-type command sets the cost type of
                   the route.
                   1) The apply cost-type { external | internal }
                   command sets the cost type of IS-IS routes. The
                   cost of an internal route imported to IS-IS remains
                   unchanged and the cost of an external route imported
                   to IS-IS is increased by 64.
                   2) The apply cost-type { type-1 | type-2 }
                   command modifies the type of OSPF routes. During
                   route import, OSPF modifies the type but not the
                   cost value of the original route. When OSPF
                   advertises the imported route with the cost and
                   type information to a peer, the peer device will
                   recalculate the cost value of the imported
                   route based on the received information.";

                config "true";
                mandatory "true";
                type enumeration {



Yan & Zhuang              Expires June 30, 2015                [Page 39]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                  enum "external" {
                    value "0";
                    description "external:";
                  }
                  enum "internal" {
                    value "1";
                    description "internal:";
                  }
                  enum "type_1" {
                    value "2";
                    description "type_1:";
                  }
                  enum "type_2" {
                    value "3";
                    description "type_2:";
                  }
                }
              }//End of leaf applyCostType

              container applyOrigin {
                description
                  "The apply origin command sets the Origin attribute
                   of BGP routes. The Origin attribute, as a
                   proprietary attribute of BGP, defines the origin of
                   a route. It identifies how a BGP route is generated.
                   You can use the apply origin command to set the
                   Origin attribute of BGP routes.";

                leaf originType {
                  config "true";
                  mandatory "true";
                  type enumeration {
                    enum "egp" {
                      value "0";
                      description "egp:";
                    }
                    enum "igp" {
                      value "1";
                      description "igp:";
                    }
                    enum "incomplete" {
                      value "2";
                      description "incomplete:";
                    }
                  }
                }
                leaf asStrOrNum {
                  config "true";



Yan & Zhuang              Expires June 30, 2015                [Page 40]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                  mandatory "true";
                  type "string";
                }
              }//End of container applyOrigin

              container applyCommunitys {
                description
                  "The apply community command configures BGP
                   community attributes. The community attribute,
                   which is the private attribute of BGP, simplifies
                   the application of routing policies and facilitates
                   route maintenance and management. A community is a
                   set of destination addresses with the same
                   characteristics. These addresses have no physical
                   boundary and are independent of their ASs. They
                   share one or multiple community attributes,
                   which can be changed or set through the apply
                   community command.";

                leaf operationType {
                  config "true";
                  default "replace";
                  type enumeration {
                    enum "delete" {
                      value "0";
                      description "delete:";
                    }
                    enum "replace" {
                      value "1";
                      description "replace:";
                    }
                    enum "additive" {
                      value "2";
                      description "additive:";
                    }
                    enum "delSpecial" {
                      value "3";
                      description "delSpecial:";
                    }
                  }

                }

                container applyCmntyStrings {
                  list applyCmntyString {
                    key "stringValue";
                    min-elements "0";
                    max-elements "unbounded";



Yan & Zhuang              Expires June 30, 2015                [Page 41]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                    leaf stringValue {
                      config "true";
                      type "string";
                    }
                  }
                }
              }//End of container applyCommunitys

              leaf applyTagValue {
                description
                  "The apply tag command sets the tag for routes.
                   If routes satisfy the filter condition specified
                   by the if-match clause, you can run the apply tag
                   command to set the same tag for the routes that
                   satisfy the same filter condition to classify the
                   routes.";

                config "true";
                mandatory "true";
                type uint32 {
                  range "0..4294967295";
                }
              }

              leaf applyMplsLabel {
                description
                  "The apply mpls-label command assigns MPLS labels to
                   routes. In the scenario where inter-AS VPN Option C
                   or carrier's carrier (CSC) is deployed, you can use
                   the apply mpls-label command to allocate labels to
                   public routes.";

                config "true";
                mandatory "true";
                type "boolean";
              }

              leaf applyPreference {
                description
                  "The apply preference command sets the preference
                   for routes. If a route satisfies the filter
                   condition specified by the if-match clause, you
                   can run the apply preference command to change
                   the preference of the route to participate in
                   route selection. Then, when different protocols
                   discover multiple routes to the same destination,
                   the route discovered by the protocol with a higher
                   preference is selected as a valid route to forward



Yan & Zhuang              Expires June 30, 2015                [Page 42]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                   packets.";

                config "true";
                mandatory "true";
                type uint32 {
                  range "1..255";
                }
              }

              container applyExtendCommunitys {
                description
                  "The apply extcommunity command configures extended
                   community attributes for BGP routes.
                   The apply extcommunity command is applicable to
                   BGP/MPLS IP VPNs. At present, there are two types
                   of BGP extended community attributes.
                     1) VPN route-target (RT) extended community
                     2) Source of Origin (SoO) extended community
                   At present, RT extended community attributes can be
                   set only through the route-policy. This command
                   cannot specify an extended community attribute for
                   public routes.";

                container applyExtCmntyStrings {
                  list applyExtCmntyString {
                    key "stringValue";
                    min-elements "0";
                    max-elements "unbounded";

                    leaf stringValue {
                      config "true";
                      type "string";
                    }
                  }
                }

                leaf additiveFlag {
                  config "true";
                  default "false";
                  type "boolean";
                }
              }//End of container applyExtendCommunitys

              container applyCommunityFilterDelete {
                description
                  "The apply comm-filter delete command deletes a BGP
                   route community according to the specified value in
                   the community filter. The community filter can be



Yan & Zhuang              Expires June 30, 2015                [Page 43]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                   either a basic or advanced community filter.

                   When the apply comm-filter delete command is run in
                   the Route-Policy view to delete the values in the
                   community filter, only one community attribute can
                   be specified in an ip community-filter command. If
                   multiple community attributes are configured in the
                   same community filter, running the apply comm-filter
                   delete command cannot delete these community
                   attributes. To delete the community attributes, you
                   need to run the ip community-filter command several
                   times to configure community attributes one by one,
                   and then run the apply comm-filter delete command to
                   delete these community attributes.";

                leaf communityNum {
                  config "true";
                  type "string";
                }
                leaf communityName {
                  config "true";
                  type "string";
                }
              }//End of container applyCommunityFilterDelete

              container applyDampening {
                description
                  "The apply dampening command sets dampening
                   parameters for EBGP routes. The apply dampening
                   command, which is mostly used in BGP, is used
                   to prevent frequent route dampening from
                   affecting routers on the network.
                   You can configure different route dampening
                   parameters for different nodes in the same
                   route-policy. When route flapping occurs, BGP
                   can use different route dampening parameters
                   to suppress the routes that match the
                   route-policy.";

                leaf halfLifeValue {
                  config "true";
                  mandatory "true";
                  type uint32 {
                    range "1..45";
                  }
                }
                leaf reuseValue {
                  config "true";



Yan & Zhuang              Expires June 30, 2015                [Page 44]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                  mandatory "true";
                  type uint32 {
                    range "1..20000";
                  }
                }
                leaf suppressValue {
                  config "true";
                  mandatory "true";
                  type uint32 {
                    range "1..20000";
                  }
                }
                leaf ceilingValue {
                  config "true";
                  mandatory "true";
                  type uint32 {
                    range "1001..20000";
                  }
                }
              }//End of container applyDampening

              leaf applyRouteType {
                description
                  "
                  1) After a route matches a route-policy, you can
                     set the level of the route imported to IS-IS.
                  2) Routes matching the if-match clauses defined
                     in the routing policy will be imported into
                     the OSPF area specified in the command.";

                config "true";
                mandatory "true";
                type enumeration {
                  enum "OspfStubArea" {
                    value "0";
                    description "OspfStubArea:";
                  }
                  enum "OspfBackbone" {
                    value "1";
                    description "OspfBackbone:";
                  }
                  enum "IsisLevel1" {
                    value "2";
                    description "IsisLevel1:";
                  }
                  enum "IsisLevel2" {
                    value "3";
                    description "IsisLevel2:";



Yan & Zhuang              Expires June 30, 2015                [Page 45]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                  }
                  enum "IsisLevel12" {
                    value "4";
                    description "IsisLevel12:";
                  }
                }
              }//End of leaf applyRouteType

              leaf applyPreferredValue {
                description
                  "The apply preferred-value command sets the preferred
                   value for BGP routes.
                   The preferred value is a proprietary attribute of
                   BGP.
                   You can use the apply preferred-value command to set
                   the preferred value for a BGP route in the import
                   policy.";

                config "true";
                mandatory "true";
                type uint32 {
                  range "0..65535";
                }
              }//End of leaf applyPreferredValue

              container applyQosParas {
                leaf QosType {
                  config "true";
                  mandatory "true";
                  type enumeration {
                    enum "QosID" {
                      value "0";
                      description "qosLocalID:";
                    }
                    enum "Behavior" {
                      value "1";
                      description "behavior:";
                    }
                    enum "IpPrecedence" {
                      value "2";
                      description "ipPrecedence:";
                    }
                  }
                }
                leaf qosLocalID {
                  description
                    "The apply qos-local-id command sets the QoS local
                     ID.



Yan & Zhuang              Expires June 30, 2015                [Page 46]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                     The QoS local ID is a local identifier of QoS. In
                     actual applications, you can set the QoS local ID
                     in the route-policy, and add the command that
                     matches the QoS local ID in the QoS policy. The QoS
                     local ID set in the route-policy is delivered to
                     the FIB table. During packet forwarding, the system
                     obtains the QoS local ID from the FIB table and
                     applies the related QoS policy according to the QoS
                     local ID.";

                  config "true";
                  mandatory "true";
                  type uint32 {
                    range "1..4095";
                  }
                }

                leaf ipPrecedence {
                  description
                    "The apply ip precedence command sets the QoS
                     parameter ip-precedence for routes.

                     The apply ip precedence command is generally
                     applicable to QPPB, in which the IP precedence
                     is a QoS parameter that can be set. After
                     receiving routes, a BGP route receiver matches
                     the attributes of the BGP routes based on the
                     import route-policy, sets the IP precedence,
                     delivers the BGP routes together with the
                     associated QoS parameters, and applies QoS
                     traffic policies to the classified data. In
                     this case, the BGP route receiver can apply
                     QoS policies to the data sent to the destination
                     network segment based on the IP precedence. This
                     applies QoS policies in BGP.";

                  config "true";
                  mandatory "true";
                  type uint32 {
                    range "0..7";
                  }
                }

                leaf behaviorName {
                  description
                    "The apply behavior command configures a QoS
                     traffic behavior for routes.";




Yan & Zhuang              Expires June 30, 2015                [Page 47]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                  config "true";
                  mandatory "true";
                  type "string";
                }
              }//End of container applyQosParas

              leaf applyTrafficIndex {
                description
                  "The apply traffic-index command sets the BGP
                   traffic index. BGP accounting uses different
                   BGP traffic indexes in BGP community
                   attributes to identify routes and charge the
                   traffic accordingly.";

                config "true";
                mandatory "true";
                type uint32 {
                  range "1..64";
                }
              }//End of leaf applyTrafficIndex

              container applyExtCmntySoos {
                description
                  "The apply extcommunity soo command configures Source
                   of Origin (SoO) extended community attributes for
                   BGP routes.";

                leaf operationType {
                  config "true";
                  type enumeration {
                    enum "delete" {
                      value "0";
                      description "delete:";
                    }
                    enum "replace" {
                      value "1";
                      description "replace:";
                    }
                    enum "additive" {
                      value "2";
                      description "additive:";
                    }
                    enum "delSpecial" {
                      value "3";
                      description "delSpecial:";
                    }
                  }
                  default "replace";



Yan & Zhuang              Expires June 30, 2015                [Page 48]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


                }
                container applyExtCmntySooStrings {
                  list applyExtCmntySooString {
                    key "stringValue";
                    min-elements "0";
                    max-elements "unbounded";

                    leaf stringValue {
                      config "true";
                      type "string";
                    }
                  }
                }
              }//End of container applyExtCmntySoos

              leaf applyPriorityValue {
                description
                  "The apply preference command sets the preference
                   for routes.

                   If a route satisfies the filter condition specified
                   by the if-match clause, you can run the apply
                   preference command to change the preference of the
                   route to participate in route selection. Then, when
                   different protocols discover multiple routes to the
                   same destination, the route discovered by the
                   protocol with a higher preference is selected as a
                   valid route to forward packets.";

                config "true";
                mandatory "true";
                type uint16 {
                  range "1..255";
                }
              }//End of leaf applyPriorityValue

            }
          }
        }//End of container routePolicyNodes

      }
    }//End of container routePolicys

  }//End of container routing-policy

}
<CODE ENDS>




Yan & Zhuang              Expires June 30, 2015                [Page 49]

Internet-Draft    Yang Data Model for Routing Policies     December 2014


6.  IANA Considerations

   This document makes no request of IANA.

7.  Security Considerations

   This document does not introduce any new security risk.

8.  Acknowledgements

   The authors would like to thank Xianping Zhang, Nan Meng, Linghai
   Kong for their contributions to this work.

9.  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.

Authors' Addresses

   Gang Yan
   Huawei Technologies
   Huawei Bld., No.156 Beiqing Rd.
   Beijing  100095
   China

   Email: yangang@huawei.com


   Shunwan Zhuang
   Huawei Technologies
   Huawei Bld., No.156 Beiqing Rd.
   Beijing  100095
   China

   Email: zhuangshunwan@huawei.com







Yan & Zhuang              Expires June 30, 2015                [Page 50]