+++ /dev/null
-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;
- }
- }
-
- }
-
-
-}