1 .. _bgp-user-guide-mvpn-family:
5 The BGP Multicast VPN(BGP MCAST-VPN) Multiprotocol extension can be used for MVPN auto-discovery, advertising MVPN to Inclusive P-Multicast Service
6 Interface (I-PMSI) tunnel binding, advertising (C-S,C-G) to Selective PMSI (S-PMSI) tunnel binding, VPN customer multicast routing
7 information exchange among Provider Edge routers (PEs), choosing a single forwarder PE, and for procedures in support of co-locating a
8 Customer Rendezvous Point (C-RP) on a PE.
10 .. contents:: Contents
16 This section shows a way to enable MCAST-VPN family in BGP speaker and peer configuration.
20 To enable MCAST-VPN support in BGP plugin, first configure BGP speaker instance:
22 **URL:** ``/restconf/config/openconfig-network-instance:network-instances/network-instance/global-bgp/openconfig-network-instance:protocols``
24 **RFC8040 URL:** ``/rests/data/openconfig-network-instance:network-instances/network-instance=global-bgp/protocols``
32 **Content-Type:** ``application/xml``
38 <protocol xmlns="http://openconfig.net/yang/network-instance">
39 <name>bgp-example</name>
40 <identifier xmlns:x="http://openconfig.net/yang/policy-types">x:BGP</identifier>
41 <bgp xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions">
44 <router-id>192.0.2.2</router-id>
49 <afi-safi-name>IPV4-MCAST-VPN</afi-safi-name>
52 <afi-safi-name>IPV6-MCAST-VPN</afi-safi-name>
61 **Content-Type:** ``application/json``
70 "identifier": "openconfig-policy-types:BGP",
71 "name": "bgp-example",
72 "bgp-openconfig-extensions:bgp": {
75 "router-id": "192.0.2.2",
81 "afi-safi-name": "IPV4-MCAST-VPN"
84 "afi-safi-name": "IPV6-MCAST-VPN"
96 Here is an example for BGP peer configuration with enabled IPV4 MCAST-VPN family.
98 **URL:** ``/restconf/config/openconfig-network-instance:network-instances/network-instance/global-bgp/openconfig-network-instance:protocols/protocol/openconfig-policy-types:BGP/bgp-example/bgp/neighbors``
106 **Content-Type:** ``application/xml``
112 <neighbor xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions">
113 <neighbor-address>192.0.2.1</neighbor-address>
116 <afi-safi-name>IPV4-MCAST-VPN</afi-safi-name>
123 **Content-Type:** ``application/json``
132 "neighbor-address": "192.0.2.1",
136 "afi-safi-name": "IPV4-MCAST-VPN"
144 Ipv4 MCAST-VPN Route API
145 ^^^^^^^^^^^^^^^^^^^^^^^^
146 Following tree illustrates the BGP MCAST-VPN route structure.
148 .. code-block:: console
150 :(mvpn-routes-ipv4-case)
151 +--ro mvpn-routes-ipv4
152 +--ro mvpn-route* [route-key path-id]
154 +--:(intra-as-i-pmsi-a-d-case)
155 | +--ro intra-as-i-pmsi-a-d
156 +--:(inter-as-i-pmsi-a-d-case)
157 | +--ro inter-as-i-pmsi-a-d
158 | +--ro source-as inet:as-number
159 +--:(s-pmsi-a-d-case)
161 | +--ro multicast-source inet:ip-address
162 | +--ro (multicast-group)?
163 | +--:(c-g-address-case)
164 | | +--ro c-g-address? inet:ip-address
165 | +--:(ldp-mp-opaque-value-case)
166 | +--ro ldp-mp-opaque-value
167 | +--ro opaque-type uint8
168 | +--ro opaque-extended-type? uint16
169 | +--ro opaque yang:hex-string
172 | +--ro (leaf-a-d-route-key)
173 | +--:(inter-as-i-pmsi-a-d-case)
174 | | +--ro inter-as-i-pmsi-a-d
175 | | +--ro source-as inet:as-number
176 | +--:(s-pmsi-a-d-case)
178 | +--ro multicast-source inet:ip-address
179 | +--ro (multicast-group)?
180 | +--:(c-g-address-case)
181 | | +--ro c-g-address? inet:ip-address
182 | +--:(ldp-mp-opaque-value-case)
183 | +--ro ldp-mp-opaque-value
184 | +--ro opaque-type uint8
185 | +--ro opaque-extended-type? uint16
186 | +--ro opaque yang:hex-string
187 +--:(source-active-a-d-case)
188 | +--ro source-active-a-d
189 | +--ro multicast-source inet:ip-address
190 | +--ro multicast-group inet:ip-address
191 +--:(shared-tree-join-case)
192 | +--ro shared-tree-join
194 | +--ro multicast-source inet:ip-address
195 | +--ro source-as inet:as-number
196 | +--ro (multicast-group)?
197 | +--:(c-g-address-case)
198 | | +--ro c-g-address? inet:ip-address
199 | +--:(ldp-mp-opaque-value-case)
200 | +--ro ldp-mp-opaque-value
201 | +--ro opaque-type uint8
202 | +--ro opaque-extended-type? uint16
203 | +--ro opaque yang:hex-string
204 +--:(source-tree-join-case)
205 +--ro source-tree-join
207 +--ro multicast-source inet:ip-address
208 +--ro source-as inet:as-number
209 +--ro (multicast-group)?
210 +--:(c-g-address-case)
211 | +--ro c-g-address? inet:ip-address
212 +--:(ldp-mp-opaque-value-case)
213 +--ro ldp-mp-opaque-value
214 +--ro opaque-type uint8
215 +--ro opaque-extended-type? uint16
216 +--ro opaque yang:hex-string
219 Ipv6 MCAST-VPN Route API
220 ^^^^^^^^^^^^^^^^^^^^^^^^
222 Following tree illustrates the BGP MCAST-VPN route structure.
224 .. code-block:: console
226 :(mvpn-routes-ipv6-case)
227 +--ro mvpn-routes-ipv6
228 +--ro mvpn-route* [route-key path-id]
230 +--:(intra-as-i-pmsi-a-d-case)
231 | +--ro intra-as-i-pmsi-a-d
232 +--:(inter-as-i-pmsi-a-d-case)
233 | +--ro inter-as-i-pmsi-a-d
234 | +--ro source-as inet:as-number
235 +--:(s-pmsi-a-d-case)
237 | +--ro multicast-source inet:ip-address
238 | +--ro (multicast-group)?
239 | +--:(c-g-address-case)
240 | | +--ro c-g-address? inet:ip-address
241 | +--:(ldp-mp-opaque-value-case)
242 | +--ro ldp-mp-opaque-value
243 | +--ro opaque-type uint8
244 | +--ro opaque-extended-type? uint16
245 | +--ro opaque yang:hex-string
248 | +--ro (leaf-a-d-route-key)
249 | +--:(inter-as-i-pmsi-a-d-case)
250 | | +--ro inter-as-i-pmsi-a-d
251 | | +--ro source-as inet:as-number
252 | +--:(s-pmsi-a-d-case)
254 | +--ro multicast-source inet:ip-address
255 | +--ro (multicast-group)?
256 | +--:(c-g-address-case)
257 | | +--ro c-g-address? inet:ip-address
258 | +--:(ldp-mp-opaque-value-case)
259 | +--ro ldp-mp-opaque-value
260 | +--ro opaque-type uint8
261 | +--ro opaque-extended-type? uint16
262 | +--ro opaque yang:hex-string
263 +--:(source-active-a-d-case)
264 | +--ro source-active-a-d
265 | +--ro multicast-source inet:ip-address
266 | +--ro multicast-group inet:ip-address
267 +--:(shared-tree-join-case)
268 | +--ro shared-tree-join
270 | +--ro multicast-source inet:ip-address
271 | +--ro source-as inet:as-number
272 | +--ro (multicast-group)?
273 | +--:(c-g-address-case)
274 | | +--ro c-g-address? inet:ip-address
275 | +--:(ldp-mp-opaque-value-case)
276 | +--ro ldp-mp-opaque-value
277 | +--ro opaque-type uint8
278 | +--ro opaque-extended-type? uint16
279 | +--ro opaque yang:hex-string
280 +--:(source-tree-join-case)
281 +--ro source-tree-join
283 +--ro multicast-source inet:ip-address
284 +--ro source-as inet:as-number
285 +--ro (multicast-group)?
286 +--:(c-g-address-case)
287 | +--ro c-g-address? inet:ip-address
288 +--:(ldp-mp-opaque-value-case)
289 +--ro ldp-mp-opaque-value
290 +--ro opaque-type uint8
291 +--ro opaque-extended-type? uint16
292 +--ro opaque yang:hex-string
297 The Ipv4 Multicast VPN table in an instance of the speaker's Loc-RIB can be verified via REST:
299 **URL:** ``/restconf/operational/bgp-rib:bgp-rib/rib/bgp-example/loc-rib/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes``
311 <mvpn-routes xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv4">
313 <route-key>flow1</route-key>
315 <intra-as-i-pmsi-a-d>
316 <route-distinguisher>172.16.0.44:101</route-distinguisher>
317 <orig-route-ip>192.168.100.1</orig-route-ip>
318 </intra-as-i-pmsi-a-d>
321 <global>199.20.166.41</global>
338 "bgp:mvpn:ipv4:mvpn-routes": {
340 "route-key": "flow1",
342 "intra-as-i-pmsi-a-d": {
343 "route-distinguisher": "172.16.0.44:101",
344 "orig-route-ip": "192.168.100.1"
351 "global": "199.20.166.41"
358 The Ipv6 Multicast VPN table in an instance of the speaker's Loc-RIB can be verified via REST:
360 **URL:** ``/restconf/operational/bgp-rib:bgp-rib/rib/bgp-example/loc-rib/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv6:mvpn-routes``
372 <mvpn-routes xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv6">
374 <route-key>flow1</route-key>
376 <intra-as-i-pmsi-a-d>
377 <route-distinguisher>172.16.0.44:101</route-distinguisher>
378 <orig-route-ip>192.168.100.1</orig-route-ip>
379 </intra-as-i-pmsi-a-d>
382 <global>2001:db8:1::6</global>
399 "bgp:mvpn:ipv6:mvpn-routes": {
401 "route-key": "flow1",
403 "intra-as-i-pmsi-a-d": {
404 "route-distinguisher": "172.16.0.44:101",
405 "orig-route-ip": "192.168.100.1"
412 "global": "2001:db8:1::6"
421 These examples show how to originate and remove MCAST-VPN routes via programmable RIB.
422 There are seven different types of MCAST-VPN routes, and multiples extended communities.
423 Routes can be used for variety of use-cases supported by BGP/MPLS MCAST-VPN.
424 Make sure the *Application Peer* is configured first.
426 **URL:** ``/restconf/config/bgp-rib:application-rib/10.25.1.9/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes``
434 **Content-Type:** ``application/xml``
440 :emphasize-lines: 4,17
442 <mvpn-route xmlns="urn:opendaylight:params:xml:ns:yang:bgp:mvpn:ipv4">
443 <route-key>mvpn</route-key>
445 <intra-as-i-pmsi-a-d>
446 <route-distinguisher>172.16.0.44:101</route-distinguisher>
447 <orig-route-ip>192.168.100.1</orig-route-ip>
448 </intra-as-i-pmsi-a-d>
452 <global>199.20.166.41</global>
458 <extended-communities>
460 </extended-communities>
464 @line 4: One of the MCAST-VPN route must be set here.
466 @line 15: In some cases, specific extended community presence is required.
470 **Content-Type:** ``application/json``
476 :emphasize-lines: 5,16
482 "intra-as-i-pmsi-a-d": {
483 "route-distinguisher": "172.16.0.44:101",
484 "orig-route-ip": "192.168.100.1"
491 "global": "199.20.166.41"
493 "extended-communities": "..."
498 @line 5: One of the MCAST-VPN route must be set here.
500 @line 16: In some cases, specific extended community presence is required.
506 * **Intra-AS I-PMSI A-D**
514 <intra-as-i-pmsi-a-d>
515 <route-distinguisher>0:5:3</route-distinguisher>
516 <orig-route-ip>10.10.10.10</orig-route-ip>
517 </intra-as-i-pmsi-a-d>
524 "intra-as-i-pmsi-a-d" : {
525 "route-distinguisher": "1.2.3.4:258",
526 "orig-route-ip": "10.10.10.10"
530 * **Inter-AS I-PMSI A-D**
538 <inter-as-i-pmsi-a-d>
539 <route-distinguisher>1.2.3.4:258</route-distinguisher>
540 <source-as>64496</source-as>
541 </inter-as-i-pmsi-a-d>
548 "inter-as-i-pmsi-a-d" : {
549 "route-distinguisher": "1.2.3.4:258",
563 <route-distinguisher>1.2.3.4:258</route-distinguisher>
564 <multicast-source>10.0.0.10</multicast-source>
565 <c-g-address>12.0.0.12</c-g-address>
566 <orig-route-ip>1.0.0.1</orig-route-ip>
575 "route-distinguisher": "1.2.3.4:258",
576 "multicast-source": "10.0.0.10",
577 "c-g-address": "12.0.0.12",
578 "orig-route-ip": "1.0.0.1"
589 <route-distinguisher>1.2.3.4:258</route-distinguisher>
590 <multicast-source>10.0.0.10</multicast-source>
591 <ldp-mp-opaque-value>
592 <opaque-type>1</opaque-type>
593 <opaque-extended-type>0</opaque-extended-type>
594 <opaque>das75das48bvxc</opaque>
595 </ldp-mp-opaque-value>
596 <orig-route-ip>1.0.0.1</orig-route-ip>
605 "route-distinguisher": "1.2.3.4:258",
606 "multicast-source": "10.0.0.10",
607 "ldp-mp-opaque-value": {
609 "opaque-extended-type": 0,
610 "opaque": "das75das48bvxc"
612 "orig-route-ip": "1.0.0.1"
625 <inter-as-i-pmsi-a-d>
626 <route-distinguisher>1.2.3.4:258</route-distinguisher>
627 <source-as>1</source-as>
628 </inter-as-i-pmsi-a-d>
629 <orig-route-ip>1.0.0.1</orig-route-ip>
638 "inter-as-i-pmsi-a-d": {
639 "route-distinguisher": "1.2.3.4:258",
642 "orig-route-ip": "1.0.0.1"
654 <route-distinguisher>1.2.3.4:258</route-distinguisher>
655 <multicast-source>10.0.0.10</multicast-source>
656 <ldp-mp-opaque-value>
657 <opaque-type>1</opaque-type>
658 <opaque-extended-type>0</opaque-extended-type>
659 <opaque>das75das48bvxc</opaque>
660 </ldp-mp-opaque-value>
661 <orig-route-ip>1.0.0.1</orig-route-ip>
663 <orig-route-ip>1.0.0.1</orig-route-ip>
673 "route-distinguisher": "1.2.3.4:258",
674 "multicast-source": "10.0.0.10",
675 "ldp-mp-opaque-value": {
677 "opaque-extended-type": 0,
678 "opaque": "das75das48bvxc"
680 "orig-route-ip": "1.0.0.1"
682 "orig-route-ip": "1.0.0.1"
686 * **Source Active A-D**
695 <route-distinguisher>1.2.3.4:258</route-distinguisher>
696 <multicast-source>1.0.0.1</multicast-source>
697 <multicast-group>2.0.0.2</multicast-group>
705 "source-active-a-d" : {
706 "route-distinguisher": "1.2.3.4:258",
707 "multicast-source": "1.0.0.1",
708 "multicast-group": "2.0.0.2"
712 * **Shared Tree Join**
722 <route-distinguisher>1.2.3.4:258</route-distinguisher>
723 <source-as>64415</source-as>
724 <multicast-source>1.0.0.1</multicast-source>
725 <c-g-address>2.0.0.2</c-g-address>
734 "shared-tree-join" : {
736 "route-distinguisher": "1.2.3.4:258",
738 "multicast-source": "1.0.0.1",
739 "c-g-address": "2.0.0.2"
752 <route-distinguisher>1.2.3.4:258</route-distinguisher>
753 <source-as>64415</source-as>
754 <multicast-source>1.0.0.1</multicast-source>
755 <ldp-mp-opaque-value>
756 <opaque-type>1</opaque-type>
757 <opaque-extended-type>0</opaque-extended-type>
758 <opaque>das75das48bvxc</opaque>
759 </ldp-mp-opaque-value>
768 "shared-tree-join" : {
770 "route-distinguisher": "1.2.3.4:258",
772 "multicast-source": "1.0.0.1",
773 "ldp-mp-opaque-value": {
775 "opaque-extended-type": 0,
776 "opaque": "das75das48bvxc"
782 * **Source Tree Join**
792 <route-distinguisher>1.2.3.4:258</route-distinguisher>
793 <source-as>64415</source-as>
794 <multicast-source>1.0.0.1</multicast-source>
795 <c-g-address>2.0.0.2</c-g-address>
804 "source-tree-join" : {
806 "route-distinguisher": "1.2.3.4:258",
808 "multicast-source": "1.0.0.1",
809 "c-g-address": "2.0.0.2"
822 <route-distinguisher>1.2.3.4:258</route-distinguisher>
823 <source-as>64415</source-as>
824 <multicast-source>1.0.0.1</multicast-source>
825 <ldp-mp-opaque-value>
826 <opaque-type>1</opaque-type>
827 <opaque-extended-type>0</opaque-extended-type>
828 <opaque>das75das48bvxc</opaque>
829 </ldp-mp-opaque-value>
838 "source-tree-join" : {
840 "route-distinguisher": "1.2.3.4:258",
842 "multicast-source": "1.0.0.1",
843 "ldp-mp-opaque-value": {
845 "opaque-extended-type": 0,
846 "opaque": "das75das48bvxc"
854 .. include:: bgp-user-guide-pmsi-attribute.rst
856 * **PE Distinguisher Labels Attribute**
864 <pe-distinguisher-labels-attribute>
865 <pe-distinguisher-label-attribute>
866 <pe-address>10.10.10.1</pe-address>
867 <mpls-label>20024</mpls-label>
868 </pe-distinguisher-label-attribute>
869 <pe-distinguisher-label-attribute>
870 <pe-address>10.10.20.2</pe-address>
871 <mpls-label>20028</mpls-label>
872 </pe-distinguisher-label-attribute>
873 </pe-distinguisher-labels-attribute>
880 "pe-distinguisher-labels-attribute" : {
881 "pe-distinguisher-label-attribute": [
883 "pe-address": "10.10.10.1",
884 "mpls-label": "20024"
887 "pe-address": "10.10.20.2",
888 "mpls-label": "20028"
894 **Extended Communities:**
896 * **Source AS Extended Community**
904 <extended-communities>
905 <transitive>true</transitive>
906 <source-as-extended-community>
907 <global-administrator>65</global-administrator>
908 </source-as-extended-community>
909 </extended-communities>
916 "extended-communities" : {
918 "source-as-extended-community": {
919 "global-administrator": 65
924 * **Source AS 4 Octets Extended Community**
932 <extended-communities>
933 <transitive>true</transitive>
934 <source-as-4-extended-community>
935 <global-administrator>65555</global-administrator>
936 </source-as-4-extended-community>
937 </extended-communities>
944 "extended-communities" : {
946 "source-as-4-extended-community": {
947 "global-administrator": 65555
952 * **ES-Import Route Target**
960 <extended-communities>
961 <transitive>true</transitive>
962 <vrf-route-import-extended-community>
963 <inet4-specific-extended-community-common>
964 <global-administrator>10.0.0.1</global-administrator>
965 <local-administrator>123=</local-administrator>
966 </inet4-specific-extended-community-common>
967 </vrf-route-import-extended-community>
968 </extended-communities>
975 "extended-communities" : {
977 "vrf-route-import-extended-community": {
978 "inet4-specific-extended-community-common": {
979 "global-administrator": "10.0.0.1",
980 "local-administrator": "123="
988 To remove the route added above, following request can be used:
990 **URL:** ``/restconf/config/bgp-rib:application-rib/10.25.1.9/tables/bgp-types:ipv4-address-family/bgp-mvpn:mcast-vpn-subsequent-address-family/bgp-mvpn-ipv4:mvpn-routes/mvpn-route/mvpn/0``
992 **Method:** ``DELETE``
996 * `Multicast in MPLS/BGP IP VPNs <https://tools.ietf.org/html/rfc6513>`_
997 * `BGP Encodings and Procedures for Multicast in MPLS/BGP IP VPNs <https://tools.ietf.org/html/rfc6514>`_
998 * `IPv4 and IPv6 Infrastructure Addresses in BGP Updates for Multicast VPN <https://tools.ietf.org/html/rfc6515>`_