[ONOS-5990] L3VPN device model YANG files
Change-Id: Ia1640c7745eb1f977e0fddc85c7b85704fc46a13
diff --git a/apps/l3vpn/yangmodel/src/main/yang/ietf-bgp-l3vpn@2016-09-09.yang b/apps/l3vpn/yangmodel/src/main/yang/ietf-bgp-l3vpn@2016-09-09.yang
new file mode 100644
index 0000000..276a59f
--- /dev/null
+++ b/apps/l3vpn/yangmodel/src/main/yang/ietf-bgp-l3vpn@2016-09-09.yang
@@ -0,0 +1,723 @@
+module ietf-bgp-l3vpn {
+ namespace "urn:ietf:params:xml:ns:yang:ietf-bgp-l3vpn";
+ // replace with IANA namespace when assigned
+ prefix l3vpn ;
+
+ import ietf-network-instance {
+ prefix ni;
+ revision-date 2016-06-23;
+ }
+
+ import ietf-interfaces {
+ prefix if;
+ }
+
+// TODO: TBD for bgp-info
+// import ietf-bgp {
+// prefix bgp;
+// revision-date 2016-06-21;
+// }
+
+ organization
+ "IETF BGP Enabled Services WG";
+
+ contact
+ "BESS working group - bess@ietf.org";
+ description
+ "This YANG module defines a YANG data model to configure and
+ manage BGP Layer3 VPNs. It augments the IETF bgp yang model
+ and IETF network instance model to add L3VPN specific
+ configuration and operational knobs.
+
+
+ Terms and Acronyms
+
+ AF : Address Family
+
+ AS : Autonomous System
+
+ ASBR : Autonomous Systems Border Router
+
+ BGP (bgp) : Border Gateway Protocol
+
+ CE : Customer Edge
+
+ IP (ip) : Internet Protocol
+
+ IPv4 (ipv4):Internet Protocol Version 4
+
+ IPv6 (ipv6): Internet Protocol Version 6
+
+ L3VPN: Layer 3 VPN
+
+ PE : Provider Edge
+
+ RT : Route Target
+
+ RD : Route Distinguisher
+
+ VPN : Virtual Private Network
+
+ VRF : Virtual Routing and Forwarding
+
+ ";
+
+ revision 2016-09-09 {
+ description
+ "Initial revision.";
+ reference
+ "RFC XXXX: A YANG Data Model for BGP L3VPN config management";
+ }
+
+ //RD
+ grouping route-distinguisher-params {
+ description "BGP route distinguisher";
+ container route-distinguisher {
+ description "Route distinguisher value as per RFC4364";
+ container config {
+ description
+ "Configuration parameters for route distinguisher";
+ leaf rd {
+ type string;
+ description "Route distinguisher value as per RFC4364";
+ }
+ }
+ container state {
+ config "false" ;
+ description
+ "State information for route distinguisher";
+ leaf rd {
+ type string;
+ description "Route distinguisher value";
+ }
+ }
+ }
+ }
+
+ //Label mode
+ typedef bgp-label-mode {
+ type enumeration {
+ enum per-ce {
+ description "Allocate labels per CE";
+ }
+ enum per-route {
+ description "Allocate labels per prefix";
+ }
+ enum per-vpn {
+ description "Allocate labels per VRF";
+ }
+ }
+ description "BGP label allocation mode";
+ }
+
+ //Fwding mode
+ typedef fwd-mode-type {
+ type enumeration {
+ enum mpls {
+ description "Forwarding mode mpls";
+ }
+ }
+ description
+ "Enable forwarding mode under ASBR facing interface";
+ }
+
+ grouping forwarding-mode {
+ description "Forwarding mode of interface for ASBR scenario";
+ container forwarding-mode {
+ description "Forwarding mode of interface for ASBR scenario";
+ container config {
+ description "Configuration of Forwarding mode";
+ leaf forwarding-mode {
+ type fwd-mode-type;
+ description "Forwarding mode for this interface";
+ }
+ }
+ container state {
+ config "false";
+ description "State information of Forwarding mode";
+ leaf forwarding-mode {
+ type fwd-mode-type;
+ description "Forwarding mode for this interface";
+ }
+ }
+ }
+ }
+
+ grouping label-security {
+ description "Mpls label security for ASBR option B scenario";
+ container mpls-label-security {
+ description "MPLS label secruity";
+ container config {
+ description "Configuration parameters";
+ leaf rpf {
+ type boolean;
+ description "Enable MPLS label security rpf on interface";
+ }
+ }
+ container state {
+ config "false";
+ description "State information";
+ leaf rpf {
+ type boolean;
+ description "MPLS label security rpf on interface";
+ }
+ }
+ }
+ }
+
+
+ //per VPN instance table limit under BGP
+ grouping 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 {
+ type uint32 {
+ range "1..4294967295";
+ }
+ description
+ "Specifies the maximum number of prefixes supported in the
+ VPN instance IPv4 or IPv6 address family.";
+ }
+
+ choice prefix-limit-action {
+ description ".";
+ case enable-alert-percent {
+ leaf alert-percent-value {
+ type uint8 {
+ range "1..100";
+ }
+ description
+ "Specifies the proportion of the alarm threshold to the
+ maximum number of prefixes.";
+ }
+ leaf route-unchanged {
+ type boolean;
+ default "false";
+ 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.";
+ }
+ }
+ case enable-simple-alert {
+ leaf simple-alert {
+ type boolean;
+ default "false";
+ description
+ "Indicates that when the number of VPN route prefixes
+ exceeds number, prefixes can still join the VPN
+ routing table and alarms are displayed.";
+ }
+ }
+ }
+ }
+
+ grouping vpn-pfx-limit {
+ description "Per VPN instance table limit under BGP";
+ container vpn-prefix-limit {
+ description "Prefix limit for this table";
+ container config {
+ description "Config parameters";
+ uses prefix-limit;
+ }
+ container state {
+ config "false";
+ description "State parameters";
+ uses prefix-limit;
+ }
+ }
+ }
+
+ grouping route-target-set {
+ description
+ "Extended community route-target set ";
+ list rts {
+ key "rt" ;
+ description
+ "List of route-targets" ;
+ leaf rt {
+ type string {
+ pattern '([0-9]+:[0-9]+)';
+ }
+ description "Route target extended community as per RFC4360";
+ }
+ leaf rt-type {
+ type enumeration {
+ enum import {
+ description "Route target is for import routes";
+ }
+ enum export {
+ description "Route target is for export routes";
+ }
+ enum both {
+ description
+ "Route target is for both import and export routes";
+ }
+ }
+ description "Route target type";
+ }
+ }
+ leaf route-policy {
+ type string;
+ description
+ "Reference to the policy containing set of routes.
+ TBD: leafref to policy entry in IETF policy model";
+ }
+ }
+
+ grouping import-from-gbl {
+ description "Import from global routing table";
+ leaf enable {
+ type boolean;
+ description "Enable";
+ }
+ leaf advertise-as-vpn {
+ type boolean;
+ description
+ "Advertise routes imported from global table as VPN routes";
+ }
+ leaf route-policy {
+ type string;
+ description "Route policy as filter for importing routes";
+ }
+
+ leaf bgp-valid-route {
+ type boolean;
+ description
+ "Enable all valid routes (including non-best paths) to be
+ candidate for import";
+ }
+
+ leaf protocol {
+ 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:";
+ }
+ }
+ 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.";
+ }
+
+ leaf instance {
+ type string;
+ description
+ "Specifies the instance id of the protocol";
+ }
+ }
+ grouping global-imports {
+ description "Grouping for imports from global routing table";
+ container import-from-global {
+ description "Import from global routing table";
+ container config {
+ description "Configuration";
+ uses import-from-gbl;
+ }
+ container state {
+ config "false";
+ description "State";
+ uses import-from-gbl;
+ }
+ }
+ }
+
+
+ grouping export-to-gbl {
+ description "Export routes to default VRF";
+ leaf enable {
+ type boolean;
+ description "Enable";
+ }
+ }
+
+ grouping global-exports {
+ description "Grouping for exports routes to global table";
+ container export-to-global {
+ description "Export to global routing table";
+ container config {
+ description "Configuration";
+ uses export-to-gbl;
+ }
+ container state {
+ config "false";
+ description "State";
+ uses export-to-gbl;
+ }
+ }
+ }
+
+ grouping route-target-params {
+ description "Grouping to specify rules for route import and export";
+ container route-targets {
+ description
+ "Set of route-targets to match for import and export routes
+ to/from VRF";
+ container config {
+ description
+ "Configuration of route targets";
+ uses route-target-set ;
+ }
+ container state {
+ config "false" ;
+ description
+ "State information for route targets";
+ uses route-target-set ;
+ }
+ }
+ }
+
+ grouping route-tbl-limit-params {
+ description "Grouping for VPN table prefix limit config";
+ leaf routing-table-limit-number {
+ type uint32 {
+ range "1..4294967295";
+ }
+ description
+ "Specifies the maximum number of routes supported by a
+ VPN instance. ";
+ }
+
+ choice routing-table-limit-action {
+ description ".";
+ case enable-alert-percent {
+ leaf alert-percent-value {
+ type uint8 {
+ range "1..100";
+ }
+ 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.";
+ }
+ }
+ case enable-simple-alert {
+ leaf simple-alert {
+ type boolean;
+ 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.";
+ }
+ }
+ }
+ }
+
+ grouping routing-tbl-limit {
+ description ".";
+ 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.";
+ container config {
+ description "Config parameters";
+ uses route-tbl-limit-params;
+ }
+ container state {
+ config "false";
+ description "State parameters";
+ uses route-tbl-limit-params;
+ }
+ }
+ }
+
+ // Tunnel policy parameters
+ grouping tunnel-params {
+ description "Tunnel parameters";
+ container tunnel-params {
+ description "Tunnel config parameters";
+ container config {
+ description "configuration parameters";
+ leaf tunnel-policy {
+ type string;
+ description
+ "Tunnel policy name.";
+ }
+ }
+ container state {
+ config "false";
+ description "state parameters";
+ leaf tunnel-policy {
+ type string;
+ description
+ "Tunnel policy name.";
+ }
+ }
+ }
+ }
+
+ // Grouping for the L3vpn specific parameters under VRF
+ // (network-instance)
+ grouping l3vpn-vrf-params {
+ description "Specify route filtering rules for import/export";
+ container ipv4 {
+ description
+ "Specify route filtering rules for import/export";
+ container unicast {
+ description
+ "Specify route filtering rules for import/export";
+ uses route-target-params;
+ uses global-imports;
+ uses global-exports;
+ uses routing-tbl-limit;
+ uses tunnel-params;
+ }
+ }
+ container ipv6 {
+ description
+ "Ipv6 address family specific rules for import/export";
+ container unicast {
+ description "Ipv6 unicast address family";
+ uses route-target-params;
+ uses global-imports;
+ uses global-exports;
+ uses routing-tbl-limit;
+ uses tunnel-params;
+ }
+ }
+ }
+
+ grouping bgp-label-mode {
+ description "MPLS/VPN label allocation mode";
+ container config {
+ description
+ "Configuration parameters for label allocation mode";
+ leaf label-mode {
+ type bgp-label-mode;
+ description "Label allocation mode";
+ }
+ }
+ container state {
+ config "false" ;
+ description "State information for label allocation mode";
+ leaf label-mode {
+ type bgp-label-mode;
+ description "Label allocation mode";
+ }
+ }
+ }
+
+ grouping retain-route-targets {
+ description "Grouping for route target accept";
+ container retain-route-targets {
+ description "Control route target acceptance behavior for ASBRs";
+ container config {
+ description
+ "Configuration parameters for retaining route targets";
+ leaf all {
+ type empty;
+ description "Disable filtering of all route-targets";
+ }
+ leaf route-policy {
+ type string;
+ description "Filter routes as per filter policy name
+ TBD: leafref to IETF routing policy model";
+ }
+ }
+ container state {
+ config "false" ;
+ description "State information for retaining route targets";
+ leaf all {
+ type empty;
+ description "Disable filtering of all route-targets";
+ }
+ leaf route-policy {
+ type string;
+ description "Filter routes as per filter policy name";
+ }
+ }
+ }
+ }
+
+ grouping nexthop-opts {
+ description "Next hop control options for inter-as route exchange";
+ leaf next-hop-self {
+ type boolean;
+ description
+ "Set nexthop of the route to self when advertising routes";
+ }
+ leaf next-hop-unchanged {
+ type boolean;
+ description "Enforce no nexthop change when advertising routes";
+ }
+ }
+
+ grouping asbr-nexthop-options {
+ description "Nexthop parameters for inter-as VPN options ";
+ container nexthop-options {
+ description "Nexthop related options for inter-as options";
+ container config {
+ description "Configuration parameters for nexthop options";
+ uses nexthop-opts;
+ }
+ container state {
+ config "false";
+ description "State information for nexthop options" ;
+ uses nexthop-opts;
+ }
+ }
+ }
+
+ //
+ // VRF specific parameters.
+ // RD and RTs and route import-export rules are added under
+ // network instance container in network instance model, hence
+ // per VRF scoped
+ augment "/ni:devices/ni:device/ni:network-instances/ni:network-instance" {
+ description
+ "Augment network instance for per VRF L3vpn parameters";
+ container l3vpn {
+ //Enable this check once network instance model has
+ //identify defined for VRF type
+ //when "../type='rt:vrf-network-instance'" {
+ // description
+ // "This container is only valid for vrf routing instance.";
+ //}
+ description "Configuration of L3VPN specific parameters";
+
+ uses route-distinguisher-params;
+ uses l3vpn-vrf-params ;
+ }
+ }
+
+ // bgp mpls forwarding enable required for inter-as option AB.
+ augment "/if:devices/if:device/if:interfaces/if:interface" {
+ description
+ "BGP mpls forwarding mode configuration on interface for
+ ASBR scenario";
+ uses forwarding-mode ;
+ uses label-security;
+ }
+
+ //
+ // BGP Specific Paramters
+ //
+
+ //
+ // Retain route-target for inter-as option ASBR knob.
+ // vpn prefix limits
+ // vpnv4/vpnv6 address-family only.
+ //augment "/bgp:bgp/bgp:global/bgp:afi-safis/" +
+ // "bgp:afi-safi/bgp:l3vpn-ipv4-unicast" {
+ // description "Retain route targets for ASBR scenario";
+ // uses retain-route-targets;
+ // uses vpn-pfx-limit;
+ // }
+
+ // augment "/bgp:bgp/bgp:global/bgp:afi-safis/" +
+ // "bgp:afi-safi/bgp:l3vpn-ipv6-unicast" {
+ // description "Retain route targets for ASBR scenario";
+ // uses retain-route-targets;
+ // uses vpn-pfx-limit;
+ // }
+
+ // Label allocation mode configuration. Certain AFs only.
+ // augment "/bgp:bgp/bgp:global/bgp:afi-safis/" +
+ // "bgp:afi-safi/bgp:ipv4-unicast" {
+ // description
+ // "Augment BGP global AF mode for label allocation mode
+ // configuration";
+ // uses bgp-label-mode ;
+ // uses routing-tbl-limit;
+ // }
+
+ // augment "/bgp:bgp/bgp:global/bgp:afi-safis/" +
+ // "bgp:afi-safi/bgp:ipv6-unicast" {
+ // description
+ // "Augment BGP global AF mode for label allocation mode
+ // configuration";
+ // uses bgp-label-mode ;
+ // uses routing-tbl-limit;
+ // }
+
+
+ // Nexthop options for the inter-as ASBR peering.
+ // augment "/bgp:bgp/bgp:neighbors/bgp:neighbor" {
+ // description
+ // "Augment BGP NBR mode with nexthop options for inter-as ASBRs";
+ // uses asbr-nexthop-options;
+ // }
+
+ // augment "/bgp:bgp/bgp:peer-groups/bgp:peer-group" {
+ // description
+ // "Augment BGP peer-group mode with nexthop options for inter-as
+ // ASBRs";
+ // uses asbr-nexthop-options;
+ // }
+
+ // augment "/bgp:bgp/bgp:neighbors/bgp:neighbor/" +
+ // "bgp:afi-safis/bgp:afi-safi" {
+ // description
+ // "Augment BGP NBR AF mode with nexthop options for inter-as
+ // ASBRs";
+ // uses asbr-nexthop-options;
+ // }
+
+ // augment "/bgp:bgp/bgp:peer-groups/bgp:peer-group/" +
+ // "bgp:afi-safis/bgp:afi-safi" {
+ // description
+ // "Augment BGP peer-group AF mode with nexthop options for inter-as
+ // ASBRs";
+ // uses asbr-nexthop-options;
+ // }
+}