X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=vpnmanager%2Fvpnmanager-api%2Fsrc%2Fmain%2Fyang%2Fl3vpn.yang;fp=vpnmanager%2Fvpnmanager-api%2Fsrc%2Fmain%2Fyang%2Fl3vpn.yang;h=534b77421b514859a77fa4925eacd5e7ea5e5de8;hb=d26469882fcbee50d42d4281e18eac0cc2ffb45f;hp=0000000000000000000000000000000000000000;hpb=2a26c5eac1c4fd2fc2ff98903b65503c62b64324;p=vpnservice.git diff --git a/vpnmanager/vpnmanager-api/src/main/yang/l3vpn.yang b/vpnmanager/vpnmanager-api/src/main/yang/l3vpn.yang new file mode 100644 index 00000000..534b7742 --- /dev/null +++ b/vpnmanager/vpnmanager-api/src/main/yang/l3vpn.yang @@ -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; + } + } + + } + + +}