MVPN Models 52/71252/8
authorClaudio D. Gasparini <claudio.gasparini@pantheon.tech>
Tue, 24 Apr 2018 08:46:23 +0000 (10:46 +0200)
committerClaudio D. Gasparini <claudio.gasparini@pantheon.tech>
Fri, 27 Apr 2018 07:48:54 +0000 (09:48 +0200)
JIRA: BGPCEP-396
Change-Id: Iea02ed31c11ab68e162cb7d83ca56fdae8b9299b
Signed-off-by: Claudio D. Gasparini <claudio.gasparini@pantheon.tech>
bgp/bgp-artifacts/pom.xml
bgp/mvpn/pom.xml [new file with mode: 0644]
bgp/mvpn/src/main/yang/bgp-mvpn-ipv4.yang [new file with mode: 0644]
bgp/mvpn/src/main/yang/bgp-mvpn-ipv6.yang [new file with mode: 0644]
bgp/mvpn/src/main/yang/bgp-mvpn.yang [new file with mode: 0644]
bgp/mvpn/src/main/yang/pmsi-tunnel.yang [new file with mode: 0644]
bgp/openconfig-api/src/main/yang/bgp-openconfig-extensions.yang
bgp/pom.xml
features/bgp/features-bgp/pom.xml
features/bgp/odl-bgpcep-bgp-mvpn/pom.xml [new file with mode: 0644]
features/bgp/pom.xml

index 7af6c97c1e91dd5d59bc7a55f92981517120843d..2b8a011e0a61cb8e9ab6f053c8555c1fcb69abfe 100644 (file)
                 <artifactId>bgp-evpn</artifactId>
                 <version>${project.version}</version>
             </dependency>
+            <dependency>
+                <groupId>${project.groupId}</groupId>
+                <artifactId>bgp-mvpn</artifactId>
+                <version>${project.version}</version>
+            </dependency>
             <dependency>
                 <groupId>${project.groupId}</groupId>
                 <artifactId>bgp-inet</artifactId>
                 <type>xml</type>
                 <version>${project.version}</version>
             </dependency>
+            <dependency>
+                <groupId>${project.groupId}</groupId>
+                <artifactId>odl-bgpcep-bgp-mvpn</artifactId>
+                <classifier>features</classifier>
+                <type>xml</type>
+                <version>${project.version}</version>
+            </dependency>
             <dependency>
                 <groupId>${project.groupId}</groupId>
                 <artifactId>odl-bgpcep-bgp-path-selection-mode</artifactId>
diff --git a/bgp/mvpn/pom.xml b/bgp/mvpn/pom.xml
new file mode 100644 (file)
index 0000000..d90356e
--- /dev/null
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.opendaylight.bgpcep</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>0.10.0-SNAPSHOT</version>
+        <relativePath>../../binding-parent</relativePath>
+    </parent>
+
+    <artifactId>bgp-mvpn</artifactId>
+    <packaging>bundle</packaging>
+    <description>BGP MPVN IPv4/6 Support</description>
+    <name>${project.artifactId}</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>bgp-parser-spi</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>bgp-bmp-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.model</groupId>
+            <artifactId>ietf-inet-types-2013-07-15</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.mdsal</groupId>
+            <artifactId>yang-binding</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>util</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>bgp-concepts</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>bgp-parser-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>bgp-rib-spi</artifactId>
+        </dependency>
+    </dependencies>
+
+    <scm>
+        <connection>scm:git:ssh://git.opendaylight.org:29418/bgpcep.git</connection>
+        <developerConnection>scm:git:ssh://git.opendaylight.org:29418/bgpcep.git</developerConnection>
+        <url>https://wiki.opendaylight.org/view/BGP_LS_PCEP:Main</url>
+        <tag>HEAD</tag>
+    </scm>
+</project>
\ No newline at end of file
diff --git a/bgp/mvpn/src/main/yang/bgp-mvpn-ipv4.yang b/bgp/mvpn/src/main/yang/bgp-mvpn-ipv4.yang
new file mode 100644 (file)
index 0000000..95cd89d
--- /dev/null
@@ -0,0 +1,85 @@
+module bgp-mvpn-ipv4 {
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv4";
+    prefix "bgp-mvpn-ipv4";
+
+    import bgp-mvpn { prefix mvpn; revision-date 2018-04-17; }
+    import bgp-rib { prefix bgp-rib; revision-date 2018-03-29; }
+    import bmp-monitor { prefix bmp-mon; revision-date 2018-03-29; }
+    import ietf-inet-types { prefix inet; revision-date 2013-07-15; }
+    import bgp-message { prefix bgp-msg; revision-date 2018-03-29; }
+
+    revision 2018-04-17 {
+        description "Initial version";
+    }
+
+    grouping mvpn-destination {
+        list mvpn-destination {
+            uses mvpn:mvpn;
+            leaf ipv4-prefix {
+                type inet:ipv4-prefix;
+            }
+            uses bgp-msg:path-id-grouping;
+        }
+    }
+
+    augment "/bgp-msg:update/bgp-msg:attributes/bgp-mp:mp-reach-nlri/bgp-mp:advertized-routes/bgp-mp:destination-type" {
+        case destination-mvpn-ipv4-advertized-case {
+            container destination-advertized-mvpn {
+                when "../../afi = ipv4";
+                uses mvpn-destination;
+            }
+        }
+    }
+
+    augment "/bgp-msg:update/bgp-msg:attributes/bgp-mp:mp-unreach-nlri/bgp-mp:withdrawn-routes/bgp-mp:destination-type" {
+        case destination-mvpn-ipv4-withdrawn-case {
+            container destination-withdrawn-mvpn {
+                 when "../../afi = ipv4";
+                uses mvpn-destination;
+            }
+        }
+    }
+
+    augment "/bgp-rib:application-rib/bgp-rib:tables/bgp-rib:routes" {
+        case mvpn-routes-ipv4-case {
+            uses mvpn:mvpn-routes;
+        }
+    }
+
+    augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:loc-rib/bgp-rib:tables/bgp-rib:routes" {
+        case mvpn-routes-ipv4-case {
+            uses mvpn:mvpn-routes;
+        }
+    }
+
+    augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:adj-rib-in/bgp-rib:tables/bgp-rib:routes" {
+        case mvpn-routes-ipv4-case {
+            uses mvpn:mvpn-routes;
+        }
+    }
+
+    augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:effective-rib-in/bgp-rib:tables/bgp-rib:routes" {
+        case mvpn-routes-ipv4-case {
+            uses mvpn:mvpn-routes;
+        }
+    }
+
+    augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:adj-rib-out/bgp-rib:tables/bgp-rib:routes" {
+        case mvpn-routes-ipv4-case {
+            uses mvpn:mvpn-routes;
+        }
+    }
+
+    augment "/bmp-mon:bmp-monitor/bmp-mon:monitor/bmp-mon:router/bmp-mon:peer/bmp-mon:pre-policy-rib/bmp-mon:tables/bmp-mon:routes" {
+        case mvpn-routes-ipv4-case {
+            uses mvpn:mvpn-routes;
+        }
+    }
+
+    augment "/bmp-mon:bmp-monitor/bmp-mon:monitor/bmp-mon:router/bmp-mon:peer/bmp-mon:post-policy-rib/bmp-mon:tables/bmp-mon:routes" {
+        case mvpn-routes-ipv4-case {
+            uses mvpn:mvpn-routes;
+        }
+    }
+}
\ No newline at end of file
diff --git a/bgp/mvpn/src/main/yang/bgp-mvpn-ipv6.yang b/bgp/mvpn/src/main/yang/bgp-mvpn-ipv6.yang
new file mode 100644 (file)
index 0000000..bba8097
--- /dev/null
@@ -0,0 +1,85 @@
+module bgp-mvpn-ipv6 {
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv6";
+    prefix "bgp-mvpn-ipv6";
+
+    import bgp-mvpn { prefix mvpn; revision-date 2018-04-17; }
+    import bgp-rib { prefix bgp-rib; revision-date 2018-03-29; }
+    import bmp-monitor { prefix bmp-mon; revision-date 2018-03-29; }
+    import ietf-inet-types { prefix inet; revision-date 2013-07-15; }
+    import bgp-message { prefix bgp-msg; revision-date 2018-03-29; }
+
+    revision 2018-04-17 {
+        description "Initial version";
+    }
+
+    grouping mvpn-destination {
+        list mvpn-destination {
+            uses mvpn:mvpn;
+            leaf ipv6-prefix {
+                type inet:ipv6-prefix;
+            }
+            uses bgp-msg:path-id-grouping;
+        }
+    }
+
+    augment "/bgp-msg:update/bgp-msg:attributes/bgp-mp:mp-reach-nlri/bgp-mp:advertized-routes/bgp-mp:destination-type" {
+        case destination-mvpn-ipv6-advertized-case {
+            container destination-advertized-mvpn {
+                when "../../afi = ipv6";
+                uses mvpn-destination;
+            }
+        }
+    }
+
+    augment "/bgp-msg:update/bgp-msg:attributes/bgp-mp:mp-unreach-nlri/bgp-mp:withdrawn-routes/bgp-mp:destination-type" {
+        case destination-mvpn-ipv6-withdrawn-case {
+            container destination-withdrawn-mvpn {
+                 when "../../afi = ipv6";
+                uses mvpn-destination;
+            }
+        }
+    }
+
+    augment "/bgp-rib:application-rib/bgp-rib:tables/bgp-rib:routes" {
+        case mvpn-routes-ipv6-case {
+            uses mvpn:mvpn-routes;
+        }
+    }
+
+    augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:loc-rib/bgp-rib:tables/bgp-rib:routes" {
+        case mvpn-routes-ipv6-case {
+            uses mvpn:mvpn-routes;
+        }
+    }
+
+    augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:adj-rib-in/bgp-rib:tables/bgp-rib:routes" {
+        case mvpn-routes-ipv6-case {
+            uses mvpn:mvpn-routes;
+        }
+    }
+
+    augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:effective-rib-in/bgp-rib:tables/bgp-rib:routes" {
+        case mvpn-routes-ipv6-case {
+            uses mvpn:mvpn-routes;
+        }
+    }
+
+    augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:adj-rib-out/bgp-rib:tables/bgp-rib:routes" {
+        case mvpn-routes-ipv6-case {
+            uses mvpn:mvpn-routes;
+        }
+    }
+
+    augment "/bmp-mon:bmp-monitor/bmp-mon:monitor/bmp-mon:router/bmp-mon:peer/bmp-mon:pre-policy-rib/bmp-mon:tables/bmp-mon:routes" {
+        case mvpn-routes-ipv6-case {
+            uses mvpn:mvpn-routes;
+        }
+    }
+
+    augment "/bmp-mon:bmp-monitor/bmp-mon:monitor/bmp-mon:router/bmp-mon:peer/bmp-mon:post-policy-rib/bmp-mon:tables/bmp-mon:routes" {
+        case mvpn-routes-ipv6-case {
+            uses mvpn:mvpn-routes;
+        }
+    }
+}
\ No newline at end of file
diff --git a/bgp/mvpn/src/main/yang/bgp-mvpn.yang b/bgp/mvpn/src/main/yang/bgp-mvpn.yang
new file mode 100644 (file)
index 0000000..566e6f3
--- /dev/null
@@ -0,0 +1,277 @@
+module bgp-mvpn {
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:bgp:mvpn";
+    prefix "bgp-mvpn";
+
+    import bgp-types { prefix bgp-t; revision-date 2018-03-29; }
+    import ietf-inet-types { prefix inet; revision-date 2013-07-15; }
+    import pmsi-tunnel { prefix pmsi; revision-date 2018-03-29; }
+    import bgp-message { prefix bgp-msg; revision-date 2018-03-29; }
+    import bgp-rib { prefix bgp-rib; revision-date 2018-03-29; }
+    import yang-ext { prefix ext; revision-date "2013-07-09"; }
+    import network-concepts { prefix netc; revision-date 2013-11-25; }
+
+    organization "AT&T Services, Inc.";
+
+    contact "Claudio D. Gasparini <claudio.gasparini@pantheon.tech>";
+
+    description
+        "This module contains the base data model of a BGP message.
+        It rolls up the definitions contained in RFC6513, RFC6514, RFC6515.
+
+        Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+
+        This program and the accompanying materials are made available
+        under the terms of the Eclipse Public License v1.0 which
+        accompanies this distribution, and is available at
+        http://www.eclipse.org/legal/epl-v10.html";
+
+    revision 2018-04-17 {
+        description "Initial version";
+    }
+
+    identity mcast-vpn-subsequent-address-family {
+        reference "https://www.iana.org/assignments/safi-namespace/safi-namespace.xhtml";
+        base bgp-t:subsequent-address-family;
+    }
+
+    typedef nlri-type {
+        reference "https://tools.ietf.org/html/rfc6514#section-4";
+        type enumeration {
+            enum intra-as-i-pmsi-a-d {
+                value 1;
+            }
+            enum inter-as-i-pmsi-a-d {
+                value 2;
+            }
+            enum s-pmsi-a-d {
+                value 3;
+            }
+            enum leaf-a-d {
+                value 4;
+            }
+            enum source-active-a-d {
+                value 5;
+            }
+            enum shared-tree-join {
+                value 6;
+            }
+            enum source-tree-join {
+                value 7;
+            }
+        }
+    }
+
+    grouping source-as-grouping {
+        leaf source-as {
+            type inet:as-number;
+            mandatory true;
+        }
+    }
+
+    grouping multicast-source-rd-grouping {
+        uses bgp-t:route-distinguisher-grouping;
+
+        leaf multicast-source {
+            type inet:ip-address;
+        }
+    }
+
+    grouping multicast-group-opaque-grouping {
+        choice multicast-group {
+            case c-g-address-case {
+                container c-g-address {
+                    leaf c-g-address {
+                        type inet:ip-address;
+                    }
+                }
+            }
+
+            case ldp-mp-opaque-value-case {
+                container ldp-mp-opaque-value {
+                    uses pmsi:opaque;
+                }
+            }
+        }
+    }
+
+    grouping intra-as-i-pmsi-a-d-grouping {
+        container intra-as-i-pmsi-a-d {
+
+            description "https://tools.ietf.org/html/rfc6514#section-4.1";
+
+            uses bgp-t:route-distinguisher-grouping;
+            uses bgp-t:orig-route-ip-grouping;
+        }
+    }
+
+    grouping inter-as-i-pmsi-a-d-grouping {
+        container inter-as-i-pmsi-a-d {
+            description "https://tools.ietf.org/html/rfc6514#section-4.2";
+
+            uses bgp-t:route-distinguisher-grouping;
+            uses source-as-grouping;
+        }
+    }
+
+    grouping s-pmsi-a-d-grouping {
+        container s-pmsi-a-d {
+            description "https://tools.ietf.org/html/rfc6514#section-4.3";
+
+            uses multicast-source-rd-grouping;
+            uses multicast-group-opaque-grouping;
+            uses bgp-t:orig-route-ip-grouping;
+        }
+    }
+
+    grouping leaf-a-d-grouping {
+        container leaf-a-d {
+            description "https://tools.ietf.org/html/rfc6514#section-4.4";
+
+            choice leaf-a-d-route-key {
+                case inter-as-i-pmsi-a-d-case {
+                    uses inter-as-i-pmsi-a-d-grouping;
+                }
+                case s-pmsi-a-d-case {
+                    uses s-pmsi-a-d-grouping;
+                }
+                mandatory true;
+            }
+            uses bgp-t:orig-route-ip-grouping;
+        }
+    }
+
+    grouping source-active-a-d-grouping {
+        container source-active-a-d {
+            description "https://tools.ietf.org/html/rfc6514#section-4.5";
+
+            uses multicast-source-rd-grouping;
+            uses source-as-grouping;
+
+            leaf multicast-group {
+                type inet:ip-address;
+            }
+        }
+    }
+
+    grouping c-multicast-grouping {
+        container c-multicast {
+            description "https://tools.ietf.org/html/rfc6514#section-4.6";
+
+            uses multicast-source-rd-grouping;
+            uses source-as-grouping;
+            uses multicast-group-opaque-grouping;
+        }
+    }
+
+    grouping mvpn {
+        reference "https://tools.ietf.org/html/rfc6514#section-4";
+        description "The MCAST-VPN NLRI is carried in BGP [RFC4271] using BGP
+            Multiprotocol Extensions [RFC4760] with an Address Family Identifier
+            (AFI) of 1 or 2 and a Subsequent AFI (SAFI) of MCAST-VPN.";
+
+        choice mvpn-choice {
+            case intra-as-i-pmsi-a-d-case {
+                uses intra-as-i-pmsi-a-d-grouping;
+            }
+            case inter-as-i-pmsi-a-d-case {
+                uses inter-as-i-pmsi-a-d-grouping;
+            }
+            case s-pmsi-a-d-case {
+                uses s-pmsi-a-d-grouping;
+            }
+            case leaf-a-d-case {
+                uses leaf-a-d-grouping;
+            }
+            case source-active-a-d-case {
+                uses source-active-a-d-grouping;
+            }
+            case shared-tree-join-case {
+                uses c-multicast-grouping;
+            }
+            case source-tree-join-case {
+                uses c-multicast-grouping;
+            }
+            mandatory true;
+        }
+    }
+
+    grouping pe-distinguisher-labels-attribute {
+        container pe-distinguisher-labels-attribute {
+            list pe-distinguisher-label-attribute {
+                leaf pe-Address  {
+                    type inet:ip-address;
+                }
+                leaf mpls-label {
+                    type netc:mpls-label;
+                    mandatory true;
+                }
+            }
+        }
+    }
+
+    grouping bgp-rib-route {
+        uses pmsi:bgp-rib-route {
+            augment "attributes" {
+                ext:augment-identifier pe-distinguisher-labels-attribute-augmentation;
+                uses pe-distinguisher-labels-attribute;
+            }
+            augment "attributes/extended-communities/extended-community" {
+                ext:augment-identifier vrf-route-import-extended-community-augmentation;
+
+                case vrf-route-import-extended-community-case {
+                    reference "https://tools.ietf.org/html/rfc6514#section-7";
+                    container vrf-route-import-extended-community {
+                        uses bgp-t:inet4-specific-extended-community-common;
+                    }
+                }
+            }
+            augment "attributes/extended-communities/extended-community" {
+                ext:augment-identifier source-as-4-extended-augmentation;
+
+                case source-as-4-extended-community-case {
+                    container source-as-4-extended-community {
+                        reference "https://tools.ietf.org/html/rfc6514#section-6";
+                        leaf as-number {
+                            description "Carries a 4-octet Autonomous System (AS) number";
+                            reference "https://tools.ietf.org/html/rfc5668#section-2";
+
+                            mandatory true;
+                            type inet:as-number;
+                        }
+                    }
+                }
+            }
+            augment "attributes/extended-communities/extended-community" {
+                ext:augment-identifier source-as-extended-augmentation;
+
+                case source-as-extended-community-case {
+                    container source-as-extended-community {
+                        reference "https://tools.ietf.org/html/rfc6514#section-6";
+                        leaf global-administrator {
+                            type bgp-t:short-as-number;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    grouping mvpn-bgp-rib-route {
+        uses mvpn;
+        uses bgp-rib-route;
+    }
+
+    grouping mvpn-routes {
+        container mvpn-routes {
+            list mvpn-route {
+                key "route-key path-id";
+
+                uses mvpn-bgp-rib-route;
+                leaf prefix {
+                    type inet:ip-prefix;
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/bgp/mvpn/src/main/yang/pmsi-tunnel.yang b/bgp/mvpn/src/main/yang/pmsi-tunnel.yang
new file mode 100644 (file)
index 0000000..cc7d69c
--- /dev/null
@@ -0,0 +1,160 @@
+// vi: set smarttab et sw=4 tabstop=4:
+module pmsi-tunnel {
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:pmsi-tunnel";
+    prefix "pmsi-tunnel";
+
+    import bgp-types { prefix bgp-t; revision-date 2018-03-29; }
+    import ietf-inet-types { prefix inet; revision-date 2013-07-15; }
+    import network-concepts { prefix netc; revision-date 2013-11-25; }
+    import ietf-yang-types { prefix yang; }
+    import bgp-rib { prefix bgp-rib; revision-date 2018-03-29; }
+    import yang-ext { prefix ext; revision-date 2013-07-09; }
+
+    organization "AT&T Services, Inc.";
+
+    contact "Bruce Brandon <bb2697@att.com>";
+
+    description
+        "This module contains the data model of a BGP attribute called the
+        P-Multicast Service Interface Tunnel (PMSI Tunnel), defined
+        in RFC6514, Section 5.
+
+        Copyright (c)2016 AT&T Services, Inc. All rights reserved.;
+
+        This program and the accompanying materials are made available
+        under the terms of the Eclipse Public License v1.0 which
+        accompanies this distribution, and is available at
+        http://www.eclipse.org/legal/epl-v10.html";
+
+    revision "2018-03-29" {
+        description "Add RFC6514 Extended communities under bgp type.";
+    }
+
+    revision "2016-08-12" {
+        description "Initial revision";
+        reference "https://tools.ietf.org/html/rfc6514#section-5";
+    }
+
+    grouping opaque {
+        leaf opaque-type {
+            mandatory true;
+            type uint8;
+        }
+        leaf opaque-extended-type {
+            type uint16;
+        }
+        leaf opaque {
+            mandatory true;
+            type yang:hex-string;
+        }
+    }
+
+    grouping p-address-p-multicast-group {
+        leaf p-address {
+            mandatory true;
+            type inet:ip-address;
+        }
+        leaf p-multicast-group {
+            mandatory true;
+            type inet:ip-address;
+        }
+    }
+
+    grouping pmsi-tunnel {
+        container pmsi-tunnel {
+            presence "PMSI Attribute";
+            description "P-Multicast Service Interface Tunnel (PMSI Tunnel) attribute";
+            reference "https://tools.ietf.org/html/rfc6514#section-5";
+
+            leaf leaf-information-required {
+                type boolean;
+                mandatory true;
+            }
+            leaf mpls-label {
+                type netc:mpls-label;
+            }
+            choice tunnel-identifier {
+                case rsvp-te-p2mp-lsp {
+                    container rsvp-te-p2mp-lps {
+                        reference "https://tools.ietf.org/html/rfc4875#section-19.1.1";
+                        leaf p2mp-id {
+                            mandatory true;
+                            type uint32;
+                        }
+                        leaf tunnel-id {
+                            mandatory true;
+                            type uint16;
+                        }
+                        leaf extended-tunnel-id {
+                            mandatory true;
+                            type inet:ip-address;
+                        }
+                    }
+                }
+                case mldp-p2mp-lsp {
+                    container mldp-p2mp-lsp {
+                        reference "https://tools.ietf.org/html/rfc6388#section-2.2";
+                        leaf address-family {
+                            mandatory true;
+                            type identityref {
+                                base bgp-t:address-family;
+                            }
+                        }
+                        leaf root-node-address {
+                            mandatory true;
+                            type inet:ip-address;
+                        }
+                        list opaque-value {
+                            uses opaque;
+                        }
+                    }
+                }
+                case pim-ssm-tree {
+                    container pim-ssm-tree {
+                        reference "https://tools.ietf.org/html/rfc6514#section-5";
+                        uses p-address-p-multicast-group;
+                    }
+                }
+                case pim-sm-tree {
+                    container pim-sm-tree {
+                        reference "https://tools.ietf.org/html/rfc6514#section-5";
+                        uses p-address-p-multicast-group;
+                    }
+                }
+                case bidir-pim-tree {
+                    container bidir-pim-tree {
+                        reference "https://tools.ietf.org/html/rfc6514#section-5";
+                        uses p-address-p-multicast-group;
+                    }
+                }
+                case ingress-replication {
+                    container ingress-replication {
+                        leaf receiving-endpoint-address {
+                            type inet:ip-address;
+                        }
+                    }
+                }
+                case mldp-mp2mp-lsp {
+                    container mldp-mp2mp-lsp {
+                        uses opaque;
+                    }
+                }
+            }
+        }
+    }
+
+    augment "/bgp-msg:update/bgp-msg:attributes" {
+        uses pmsi-tunnel;
+    }
+
+    grouping bgp-rib-route {
+        uses bgp-rib:route {
+            augment "attributes" {
+                ext:augment-identifier pmsi-tunnel-augmentation;
+                uses pmsi-tunnel;
+            }
+        }
+    }
+}
+
index ebc7179e9dba3e075d8de7e974429179067264b2..b78269e5c5e81ee0efb1dd519c85c20da26693b2 100644 (file)
@@ -81,6 +81,20 @@ module bgp-openconfig-extensions {
         reference "https://tools.ietf.org/html/rfc7752";
     }
 
+    identity IPV4-MCAST-VPN {
+        base bgp-types:afi-safi-type;
+        description
+            "Multicast IPv4 VPN (AFI,SAFI = 1,5)";
+        reference "RFC6514";
+    }
+
+    identity IPV6-MCAST-VPN {
+        base bgp-types:afi-safi-type;
+        description
+            "Multicast IPv6 VPN (AFI,SAFI = 2,5)";
+        reference "RFC6514";
+    }
+
     grouping transport-config {
         leaf remote-port {
             type inet:port-number;
index ccd5b666d491a42da3d0a6a6bbb6fe10b3780434..88087076cb26ba4c6dd596b2d4642bdc20ff3bd6 100644 (file)
@@ -64,5 +64,6 @@
         <module>l3vpn</module>
         <module>labeled-unicast</module>
         <module>evpn</module>
+        <module>mvpn</module>
     </modules>
 </project>
index 2880dd59fd17ecf2f107310f7d39d943e4691215..0d2f1241548f56d16c4566e8970c1c204ec8ad78 100644 (file)
             <type>xml</type>
             <classifier>features</classifier>
         </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>odl-bgpcep-bgp-mvpn</artifactId>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>odl-bgpcep-bgp-evpn</artifactId>
diff --git a/features/bgp/odl-bgpcep-bgp-mvpn/pom.xml b/features/bgp/odl-bgpcep-bgp-mvpn/pom.xml
new file mode 100644 (file)
index 0000000..662c547
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.opendaylight.bgpcep</groupId>
+        <artifactId>single-feature-parent</artifactId>
+        <version>0.10.0-SNAPSHOT</version>
+        <relativePath>../../../single-feature-parent</relativePath>
+    </parent>
+
+    <artifactId>odl-bgpcep-bgp-mvpn</artifactId>
+    <packaging>feature</packaging>
+
+    <name>OpenDaylight :: BGP :: Mvpn</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>bgp-mvpn</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>odl-bgpcep-bgp-parser</artifactId>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>odl-bgpcep-bgp-openconfig</artifactId>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>odl-bgpcep-bmp-api</artifactId>
+            <type>xml</type>
+            <classifier>features</classifier>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file
index f30b5ed77462720f88db878e62ca53cb04881294..88b04ef3cb1cb14367bbcab9bbfe4e46378e6fa9 100644 (file)
         <module>odl-bgpcep-bgp-dependencies</module>
         <module>odl-bgpcep-bgp-config-example</module>
         <module>odl-bgpcep-bgp-openconfig</module>
-        <module>odl-bgpcep-bgp-inet</module>
         <module>odl-bgpcep-bgp-parser</module>
         <module>odl-bgpcep-bgp-parser-api</module>
         <module>odl-bgpcep-bgp-rib-api</module>
-        <module>odl-bgpcep-bgp-linkstate</module>
-        <module>odl-bgpcep-bgp-flowspec</module>
-        <module>odl-bgpcep-bgp-labeled-unicast</module>
-        <module>odl-bgpcep-bgp-l3vpn</module>
-        <module>odl-bgpcep-bgp-evpn</module>
         <module>odl-bgpcep-bgp-path-selection-mode</module>
         <module>odl-bgpcep-bgp-rib-impl</module>
         <module>odl-bgpcep-bgp-topology</module>
         <module>odl-bgpcep-bgp-openconfig-rp-spi</module>
         <module>odl-bgpcep-bgp-openconfig-rp-impl</module>
         <module>odl-bgpcep-bgp-openconfig-rp-statement</module>
+        <!-- Family extensions -->
+        <module>odl-bgpcep-bgp-inet</module>
+        <module>odl-bgpcep-bgp-linkstate</module>
+        <module>odl-bgpcep-bgp-flowspec</module>
+        <module>odl-bgpcep-bgp-labeled-unicast</module>
+        <module>odl-bgpcep-bgp-l3vpn</module>
+        <module>odl-bgpcep-bgp-evpn</module>
+        <module>odl-bgpcep-bgp-mvpn</module>
     </modules>
 </project>