Changed vpnmanager directory structure
[vpnservice.git] / vpnmanager / vpnmanager-api / src / main / yang / l3vpn.yang
diff --git a/vpnmanager/vpnmanager-api/src/main/yang/l3vpn.yang b/vpnmanager/vpnmanager-api/src/main/yang/l3vpn.yang
new file mode 100644 (file)
index 0000000..534b774
--- /dev/null
@@ -0,0 +1,887 @@
+module l3vpn {
+  namespace "urn:huawei:params:xml:ns:yang:l3vpn";
+// replace with IANA namespace when assigned
+  prefix "l3vpn";
+
+  import bgp {
+    prefix bgp;
+    //draft-zhdankin-netmod-bgp-cfg
+  }
+  import ietf-interfaces {
+    prefix if;
+    //rfc7223-YANG Interface Management
+  }
+
+  import ietf-inet-types {
+    prefix inet;
+    //RFC6991
+  }
+
+  import ietf-yang-types {
+    prefix yang;
+    //RFC6991
+  }
+
+  description
+    "This YANG module defines the generic configuration data for L3VPN service.
+
+     Terms and Acronyms
+
+     BGP (bgp): Border Gateway Protocol
+     IPv4 (ipv4):Internet Protocol Version 4
+     IPv6 (ipv6): Internet Protocol Version 6
+
+    ";
+
+  revision 2014-08-15 {
+    description
+      "Initial revision.";
+      reference "RFC4271, RFC4364, RFC4760";
+  }
+
+  grouping augment-bgp-af-vpn-config {
+    description
+      "A set of configuration parameters that is applicable to both BGP-VPNv4
+      and BGP-VPNv6 address family.";
+
+    leaf apply-label-per-nexthop {
+      description
+        "The apply-label per-nexthop command enables the ASBR to allocate
+         labels for IPv4 VPN routes or IPv6 VPN routes based on the next hop.";
+
+
+
+      config "true";
+      type boolean;
+      default "false";
+    }
+
+    leaf upeEnable {
+      description
+        "Specify peer as UPE.";
+
+      config "true";
+      type boolean;
+      default "false";
+    }
+
+  }
+
+
+  grouping bgp-af-vpn-instance-config {
+
+    container router-id {
+      description
+        "The router-id command configures router ID for BGP VPN instance IPv4
+        or IPv6 address family.
+        By default, no router ID is configured for BGP VPN instance IPv4 or
+        IPv6 address family, and the BGP router ID is used as the router ID.";
+
+      leaf enable {
+        type boolean;
+      }
+
+      choice config-type {
+        case static {
+          leaf ip-address {
+            description
+              "Specifies the router ID of a BGP VPN instance IPv4 address
+               family. The router ID is expressed in the IPv4 address format.
+               ";
+
+            config "true";
+            type inet:ip-address;
+          }
+        }
+        case auto-select {
+          leaf enable-auto-select {
+            description
+              "Configures automatic route ID selection for the current BGP VPN
+               instance address family.";
+
+
+            config "true";
+            type boolean;
+          }
+        }
+      }
+    }
+
+    leaf auto-frr {
+      description
+        "The auto-frr command enables BGP Auto FRR.";
+
+      config "true";
+      type boolean;
+      default "false";
+    }
+
+    container bgpPeers {
+      list bgpPeer {
+      key "peerAddr";
+      max-elements "unbounded";
+      min-elements "0";
+        description
+          "BGP Peer configure class";
+
+        leaf peerAddr {
+          description
+            "The nerighbor address";
+            config "true";
+            type inet:ip-address;
+            mandatory true;
+        }
+
+          leaf groupName {
+            description "peerGroupName";
+            config "true";
+            type string {
+              length "1..47";
+            }
+          }
+          leaf remoteAs {
+            description "Specifies the AS number of the peer.";
+            config "true";
+            type string {
+              length "1..11";
+            }
+          }
+
+          leaf description {
+
+            description
+              "specifies the description. The description is a string of letters
+               or figures. The value ranges from 1 to 80 characters without
+               spaces.";
+          config "true";
+            type string {
+              length "1..80";
+              pattern "([^?]*)";
+            }
+          }
+
+          leaf soo {
+            description
+              "The peer soo command configures the Site of Origin (SoO)
+               attribute for an EBGP peer in a BGP VPN instance. Format is ASN:nn
+               or IP-address:nn.";
+
+          config "true";
+          type string {
+            length "3..21";
+          }
+        }
+
+        leaf substituteAsEnable {
+          description
+            "Using the peer substitute-as command, you can substitute the AS
+             number of the specified peer in the as-path with the local AS
+             number.";
+
+          config "true";
+          type boolean;
+            default "false";
+        }
+
+      }
+    }
+
+  }
+
+  grouping vpn-af-config {
+    description
+      "A set of configuration parameters that is applicable to both IPv4 and
+       IPv6 address family for a VPN instance .";
+
+    leaf route-distinguisher {
+      description
+        "The route-distinguisher command configures a route distinguisher (RD)
+         for the IPv4 or IPv6 address family of a VPN instance.
+
+         Format is ASN:nn or IP-address:nn.";
+
+      config "true";
+      type string {
+        length "3..21";
+      }
+    }
+
+    container vpnTargets {
+      description
+        "The vpn-target command configures the export or import VPN target
+         extended community attribute for the VPN instance IPv4/IPv6 address
+         family.
+         Format is ASN:nn or IP-address:nn.";
+
+      list vpnTarget {
+        key "vrfRTValue";
+        max-elements "unbounded";
+        min-elements "0";
+        description
+          "L3vpn vpntarget configure class";
+
+        leaf vrfRTValue {
+
+          description
+            "Vpn-target: adds VPN target extended community attribute to the
+             export or import VPN target extended community list. The
+             vpn-target can be expressed in either of the following formats:
+             (1)16-bit AS number:32-bit user-defined number
+                 For example, 1:3. The AS number ranges from 0 to 65535. The
+                 user-defined number ranges from 0 to 4294967295. The AS number
+                 and the user-defined number cannot be 0s at the same time.
+                 That is, a VPN target cannot be 0:0.
+             (2)32-bit IP address:16-bit user-defined number
+                For example, 192.168.122.15:1. The IP address ranges from
+                0.0.0.0 to 255.255.255.255. The user-defined number ranges from
+                0 to 65535.
+             (3)32-bit IP address:16-bit user-defined number
+                For example, 192.168.122.15:1. An IP address ranges from
+                0.0.0.0 to 255.255.255.255. A user-defined number ranges from 0
+                to 65535.";
+
+          config "true";
+          mandatory "true";
+          type string {
+            length "3..21";
+          }
+        }
+
+        leaf vrfRTType {
+          description
+            "Specifies the vpn target type, export-extcommunity:
+             specifies the extended community attributes carried in routing
+             information to be sent. import-extcommunity: receives routing
+             information carrying specified extended community attributes.";
+
+            mandatory "true";
+            type enumeration {
+            enum export_extcommunity {
+              value "0";
+              description "export-extcommunity:";
+            }
+            enum import_extcommunity {
+              value "1";
+              description "import-extcommunity:";
+            }
+            enum both {
+              value "2";
+              description "export-extcommunity & import-extcommunity:";
+            }
+          }
+        }
+      }
+    }
+
+    container apply-label {
+      description
+        "Apply one label mode for the VPN instance route.";
+
+      choice apply-label-mode {
+        case per-route {
+          description
+            "The apply-label per-route command enables the one-label-per-route
+             mode. The VPN instance IPv4/IPv6 address family assigns a unique
+             label to each route to be sent to the peer PE.";
+
+          leaf apply-label-per-route {
+            type boolean;
+            default "true";
+          }
+        }
+        case per-instance {
+          description
+            "The apply-label per-instance command applies one label to all VPN
+             instance IPv4 address family or IPv6 address family routes to a
+             peer PE.";
+
+        leaf apply-label-per-instance {
+            type boolean;
+            default "false";
+          }
+        }
+      }
+    }//End of "container apply-label"
+
+    leaf import-route-policy {
+      description
+        "The import route-policy command associates a VPN instance enabled
+         with the IPv4 or IPv6 address family with an import routing policy.
+         Only one import routing policy can be associated with a VPN instance
+         enabled with the IPv4 or IPv6 address family. If the import
+         route-policy command is run more than once, the latest configuration
+         overrides the previous ones.";
+
+        config "true";
+        type string {
+          length "1..40";
+        }
+    }
+
+    leaf export-route-policy {
+      description
+        "The export route-policy command associates a VPN instance enabled
+         with the IPv4 or IPv6 address family with an export routing policy.
+         Only one export routing policy can be associated with a VPN instance
+         enabled with the IPv4 or IPv6 address family. If the export
+         route-policy command is run more than once, the latest configuration
+         overrides the previous ones.";
+
+      config "true";
+      type string {
+        length "1..40";
+      }
+    }
+
+
+    container prefix-limit {
+      description
+        "The prefix limit command sets a limit on the maximum number of
+         prefixes supported in the existing VPN instance, preventing the
+         PE from importing excessive VPN route prefixes.";
+
+      leaf prefix-limit-number {
+        description
+          "Specifies the maximum number of prefixes supported in the VPN
+
+
+           instance IPv4 or IPv6 address family.";
+
+        type uint32 {
+          range "1..4294967295";
+        }
+      }
+
+      choice prefix-limit-action {
+        case enable-alert-percent {
+          leaf alert-percent-value {
+            description
+              "Specifies the proportion of the alarm threshold to the maximum
+               number of prefixes.";
+            type uint8 {
+              range "1..100";
+            }
+          }
+          leaf route-unchanged {
+            description
+              "Indicates that the routing table remains unchanged. By default,
+               route-unchanged is not configured. When the number of prefixes
+               in the routing table is greater than the value of the parameter
+               number, routes are processed as follows:
+               (1)If route-unchanged is configured, routes in the routing table
+                  remain unchanged.
+               (2)If route-unchanged is not configured, all routes in the
+                  routing table are deleted and then re-added.";
+
+            config "true";
+            type boolean;
+            default "false";
+          }
+        }
+        case enable-simple-alert {
+          leaf simple-alert {
+            description
+              "Indicates that when the number of VPN route prefixes exceeds
+               number, prefixes can still join the VPN routing table and
+               alarms are displayed.";
+
+            config "true";
+            type boolean;
+            default "false";
+          }
+        }
+      }
+    }
+
+
+
+   container routing-table-limit {
+      description
+        "The routing-table limit command sets a limit on the maximum number of
+        routes that the IPv4 or IPv6 address family of a VPN instance can
+        support.
+        By default, there is no limit on the maximum number of routes that the
+        IPv4 or IPv6 address family of a VPN instance can support, but the
+        total number of private network and public network routes on a device
+        cannot exceed the allowed maximum number of unicast routes.";
+
+      leaf routing-table-limit-number {
+        description
+          "Specifies the maximum number of routes supported by a VPN instance.
+          ";
+
+        config "true";
+        type uint32 {
+          range "1..4294967295";
+        }
+      }
+      choice routing-table-limit-action {
+        case enable-alert-percent {
+          leaf alert-percent-value {
+            description
+              "Specifies the percentage of the maximum number of routes. When
+               the maximum number of routes that join the VPN instance is up
+               to the value (number*alert-percent)/100, the system prompts
+               alarms. The VPN routes can be still added to the routing table,
+               but after the number of routes reaches number, the subsequent
+               routes are dropped.";
+
+            config "true";
+            type uint8 {
+              range "1..100";
+            }
+          }
+        }
+        case enable-simple-alert {
+          leaf simple-alert {
+            description
+              "Indicates that when VPN routes exceed number, routes can still
+               be added into the routing table, but the system prompts alarms.
+               However, after the total number of VPN routes and network public
+               routes reaches the unicast route limit specified in the License,
+               the subsequent VPN routes are dropped.";
+
+            config "true";
+            type boolean;
+           
+          }
+        }
+      }
+    }
+
+    leaf vpn-frr {
+      description
+        "Enable VPN FRR in the VPN instance address family view.
+         If a PE is connected to two other PEs, running the vpn frr command in
+         the VPN instance address family view of the PE enables VPN FRR and
+         improves network reliability. After VPN FRR is configured, traffic can
+         switch to the secondary LSP immediately after the primary LSP becomes
+         faulty.";
+
+      type boolean;
+      default "false";
+    }
+
+
+   /*
+    * VPN QoS.
+    */
+    container l3vpnVrfPipe {
+      description
+        "The diffserv-mode command configures the mode of the MPLS
+        differentiated service (Diff-Serv) for ensuring end-to-end QoS.";
+
+      leaf pipeMode {
+        description
+          "Pipe mode";
+
+    type enumeration {
+      enum pipe {
+        value "0";
+        description
+          "pipe: Indicates that the Pipe MPLS Diff-Serv mode is adopted.";
+      }
+      enum shortPipe {
+        value "1";
+        description
+          "shortPipe: Indicates that the Short-pipe MPLS Diff-Serv mode
+          is adopted.";
+      }
+      enum uniform {
+        value "2";
+        description
+          "uniform: Indicates that the Uniform MPLS Diff-Serv mode is
+          adopted.";
+   }
+    }
+    default "uniform";
+
+      }
+
+      leaf serviceClass {
+        description
+          "Service Class, Specifies the service type when the packet enters the
+          public network from the private network. The values are cs7, cs6, ef,
+          af4, af3, af2, af1, be.";
+
+          type enumeration {
+            enum be {
+              value "0";
+              description "be:";
+            }
+            enum af1 {
+              value "1";
+              description "af1:";
+            }
+            enum af2 {
+              value "2";
+              description "af2:";
+            }
+            enum af3 {
+              value "3";
+              description "af3:";
+            }
+            enum af4 {
+              value "4";
+              description "af4:";
+            }
+            enum ef {
+              value "5";
+              description "ef:";
+            }
+            enum cs6 {
+              value "6";
+              description "cs6:";
+            }
+            enum cs7 {
+              value "7";
+              description "cs7:";
+            }
+          }
+          default "be";
+      }
+
+
+      leaf color {
+        description
+          "Specifies a color for marking the discard priority of a packet
+          transferred from a private network to a public network. The values
+          are green, yellow, and red.";
+
+        type enumeration {
+          enum green {
+            value "0";
+            description "green:";
+          }
+          enum yellow {
+            value "1";
+            description "yellow:";
+          }
+          enum red {
+            value "2";
+            description "red:";
+          }
+        }
+        default "green";
+      }
+
+      leaf dsName {
+        description
+          "Specifies the DS domain name of the specified Per-Hop Behavior (PHB)
+          applied to the egress in Short pipe mode. It is a string of 1 to 31
+          characters.";
+
+        type string;
+        default "default";
+      }
+    }
+
+    container l3vpnTtlMode {
+      description
+        "The ttl-mode command enables MPLS to process the TTL in a specified
+        mode. By default, MPLS processes the TTL in pipe mode.";
+
+      leaf ttlMode {
+        description "TTL mode";
+        default "pipe";
+        type enumeration {
+          enum pipe {
+            value "0";
+            description
+              "pipe: Enables MPLS to process the TTL in pipe mode.";
+          }
+
+
+          enum uniform {
+            value "1";
+            description
+              "uniform: Enables MPLS to process the TTL in uniform mode.";
+          }
+        }
+      }
+    }
+
+    leaf tunnel-policy {
+      description
+        "The tnl-policy command associates the IPv4 or IPv6 address family of
+         a VPN instance with a tunnel policy.";
+
+      type string {
+        length "1..39";
+      }
+    }
+
+    container importRibs {
+      description
+        "Import route class";
+
+      leaf protocol {
+        description
+          "Specifies the protocol from which routes are imported.
+          At present, In the IPv4 unicast address family view, the protocol
+          can be IS-IS,static, direct and BGP.";
+
+        type enumeration {
+          enum ALL {
+            value "0";
+            description "ALL:";
+          }
+          enum Direct {
+            value "1";
+            description "Direct:";
+          }
+          enum OSPF {
+            value "2";
+            description "OSPF:";
+          }
+          enum ISIS {
+            value "3";
+            description "ISIS:";
+          }
+          enum Static {
+            value "4";
+
+
+            description "Static:";
+          }
+          enum RIP {
+            value "5";
+            description "RIP:";
+          }
+          enum BGP {
+            value "6";
+            description "BGP:";
+          }
+          enum OSPFV3 {
+            value "7";
+            description "OSPFV3:";
+          }
+          enum RIPNG {
+            value "8";
+            description "RIPNG:";
+          }
+          enum INVALID {
+            value "9";
+            description "INVALID:";
+          }
+        }
+      }
+
+      leaf processId {
+        description
+          "Specifies the process ID if the protocol from routes are imported is
+           IS-IS.";
+
+        default "0";
+        type uint32 {
+          range "0..4294967295";
+        }
+      }
+
+      leaf bgp-valid-route {
+        type boolean;
+      }
+
+      leaf policyName {
+        description
+          "Policy Id for import routes";
+        type string {
+        }
+      }
+
+    }
+
+
+    leaf traffic-statistics {
+      description
+        "The traffic-statistics enable command enables traffic statistics
+         for a VPN instance.";
+
+      type boolean;
+      default "false";
+    }
+
+  }
+
+
+  /*
+   * VPN instance view.
+   */
+  container vpn-instances {
+    description
+      "VPN instances configuration parameters.
+       VPN instances support both the IPv4 and IPv6 address families.";
+
+    list vpn-instance {
+      max-elements "unbounded";
+      min-elements "0";
+      key "vpn-instance-name";
+      description
+        "Specifies the name of the VPN instance. It is a string of 1 to 31
+         case-sensitive characters.";
+
+      leaf vpn-instance-name {
+        mandatory "true";
+        type string {
+          length "1..31";
+        }
+        description
+          "The name of the vpn-instance.";
+      }
+
+      leaf description {
+        description
+          "A textual description of VPN instance, the VPN instance description
+          helps users memorize the VPN instance.";
+
+        type string {
+          length "1..242";
+          pattern "([^?]*)";
+        }
+      }
+
+
+
+
+      container ipv4-family {
+        description
+          "The IPv4 address family is enabled for the VPN instance.";
+
+        uses vpn-af-config;
+      }
+
+      container ipv6-family {
+        description
+          "The IPv6 address family is enabled for the VPN instance.";
+
+        uses vpn-af-config;
+      }
+
+
+    }
+  }
+
+
+
+  /*
+   * Binding Interfaces to a VPN Instance.
+   */
+
+  container vpn-interfaces {
+    description
+      "VPN is enabled on interfaces.";
+
+    list vpn-interface  {
+      key "name";
+      max-elements "unbounded";
+      min-elements "0";
+      leaf name {
+        type leafref {
+          path "/if:interfaces/if:interface/if:name";
+        }
+      }
+      leaf vpn-instance-name {
+        type string {
+          length "1..40";
+        }
+      }
+    }
+  }
+
+  container vrfInfo {
+    description
+      "Display the information of the vrf.
+
+
+      It is intended that this container may be augmented by vendors to
+      reflect the vendor-specific operational state parameters.";
+
+    leaf vrfCreateTime {
+      description
+        "CreateTime of the vrf.";
+      config "false";
+      type yang:timestamp;
+    }
+
+    leaf vrfUpTime {
+      description
+        "UpTime period of the vrf.";
+      config "false";
+      type yang:timeticks;
+    }
+
+    leaf label {
+      description
+        "Label of the vrf.";
+      config "false";
+      type uint32 {
+        range "16..1048574";
+      }
+    }
+
+    leaf vrfStatus {
+      description
+        "vrf status.";
+      config "false";
+      type enumeration {
+        enum up {
+          value "0";
+          description "vrf up.";
+        }
+        enum down {
+          value "1";
+          description "vrf down.";
+        }
+      }
+    }
+  }
+
+
+  /*
+   * augment some bgp vpn functions in bgp module.
+   */
+  augment "/bgp:bgp-router/bgp:vpnv4/bgp:unicast" {
+
+    uses augment-bgp-af-vpn-config;
+
+  }
+
+  augment "/bgp:bgp-router/bgp:vpnv6/bgp:unicast" {
+    uses augment-bgp-af-vpn-config;
+
+  }
+
+  augment "/bgp:bgp-router" {
+
+    container bgp-af-ipv4-vpn-instances {
+      description
+        "vpn-instances ipv4 address family.";
+      list bgp-af-ipv4-vpn-instance {
+        key "vpn-instance-name";
+        max-elements "unbounded";
+        min-elements "0";
+        leaf vpn-instance-name {
+          type string;
+        }
+        uses bgp-af-vpn-instance-config;
+      }
+    }
+
+    container bgp-af-ipv6-vpn-instances {
+      description
+        "vpn-instances ipv6 address family.";
+      list bgp-af-ipv6-vpn-instance {
+        key "vpn-instance-name";
+        max-elements "unbounded";
+        min-elements "0";
+        leaf vpn-instance-name {
+          type string;
+        }
+        uses bgp-af-vpn-instance-config;
+      }
+    }
+
+  }
+
+
+}