.. _bgp-user-guide-mvpn-family:
MCAST-VPN Family
================
The BGP Multicast VPN(BGP MCAST-VPN) Multiprotocol extension can be used for MVPN auto-discovery, advertising MVPN to Inclusive P-Multicast Service
Interface (I-PMSI) tunnel binding, advertising (C-S,C-G) to Selective PMSI (S-PMSI) tunnel binding, VPN customer multicast routing
information exchange among Provider Edge routers (PEs), choosing a single forwarder PE, and for procedures in support of co-locating a
Customer Rendezvous Point (C-RP) on a PE.
.. contents:: Contents
:depth: 2
:local:
Configuration
^^^^^^^^^^^^^
This section shows a way to enable MCAST-VPN family in BGP speaker and peer configuration.
BGP Speaker
'''''''''''
To enable MCAST-VPN support in BGP plugin, first configure BGP speaker instance:
**URL:** ``/restconf/config/openconfig-network-instance:network-instances/network-instance/global-bgp/openconfig-network-instance:protocols``
**Method:** ``POST``
**Content-Type:** ``application/xml``
**Request Body:**
.. code-block:: xml
bgp-example
x:BGP
192.0.2.2
65000
IPV4-MCAST-VPN
IPV6-MCAST-VPN
BGP Peer
''''''''
Here is an example for BGP peer configuration with enabled IPV4 MCAST-VPN family.
**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``
**Method:** ``POST``
**Content-Type:** ``application/xml``
**Request Body:**
.. code-block:: xml
192.0.2.1
IPV4-MCAST-VPN
Ipv4 MCAST-VPN Route API
^^^^^^^^^^^^^^^^^^^^^^^^
Following tree illustrates the BGP MCAST-VPN route structure.
.. code-block:: console
:(mvpn-routes-ipv4-case)
+--ro mvpn-routes-ipv4
+--ro mvpn-route* [route-key path-id]
+--ro (mvpn-choice)
+--:(intra-as-i-pmsi-a-d-case)
| +--ro intra-as-i-pmsi-a-d
+--:(inter-as-i-pmsi-a-d-case)
| +--ro inter-as-i-pmsi-a-d
| +--ro source-as inet:as-number
+--:(s-pmsi-a-d-case)
| +--ro s-pmsi-a-d
| +--ro multicast-source inet:ip-address
| +--ro (multicast-group)?
| +--:(c-g-address-case)
| | +--ro c-g-address? inet:ip-address
| +--:(ldp-mp-opaque-value-case)
| +--ro ldp-mp-opaque-value
| +--ro opaque-type uint8
| +--ro opaque-extended-type? uint16
| +--ro opaque yang:hex-string
+--:(leaf-a-d-case)
| +--ro leaf-a-d
| +--ro (leaf-a-d-route-key)
| +--:(inter-as-i-pmsi-a-d-case)
| | +--ro inter-as-i-pmsi-a-d
| | +--ro source-as inet:as-number
| +--:(s-pmsi-a-d-case)
| +--ro s-pmsi-a-d
| +--ro multicast-source inet:ip-address
| +--ro (multicast-group)?
| +--:(c-g-address-case)
| | +--ro c-g-address? inet:ip-address
| +--:(ldp-mp-opaque-value-case)
| +--ro ldp-mp-opaque-value
| +--ro opaque-type uint8
| +--ro opaque-extended-type? uint16
| +--ro opaque yang:hex-string
+--:(source-active-a-d-case)
| +--ro source-active-a-d
| +--ro multicast-source inet:ip-address
| +--ro multicast-group inet:ip-address
+--:(shared-tree-join-case)
| +--ro shared-tree-join
| +--ro c-multicast
| +--ro multicast-source inet:ip-address
| +--ro source-as inet:as-number
| +--ro (multicast-group)?
| +--:(c-g-address-case)
| | +--ro c-g-address? inet:ip-address
| +--:(ldp-mp-opaque-value-case)
| +--ro ldp-mp-opaque-value
| +--ro opaque-type uint8
| +--ro opaque-extended-type? uint16
| +--ro opaque yang:hex-string
+--:(source-tree-join-case)
+--ro source-tree-join
+--ro c-multicast
+--ro multicast-source inet:ip-address
+--ro source-as inet:as-number
+--ro (multicast-group)?
+--:(c-g-address-case)
| +--ro c-g-address? inet:ip-address
+--:(ldp-mp-opaque-value-case)
+--ro ldp-mp-opaque-value
+--ro opaque-type uint8
+--ro opaque-extended-type? uint16
+--ro opaque yang:hex-string
...
Ipv6 MCAST-VPN Route API
^^^^^^^^^^^^^^^^^^^^^^^^
Following tree illustrates the BGP MCAST-VPN route structure.
.. code-block:: console
:(mvpn-routes-ipv6-case)
+--ro mvpn-routes-ipv6
+--ro mvpn-route* [route-key path-id]
+--ro (mvpn-choice)
+--:(intra-as-i-pmsi-a-d-case)
| +--ro intra-as-i-pmsi-a-d
+--:(inter-as-i-pmsi-a-d-case)
| +--ro inter-as-i-pmsi-a-d
| +--ro source-as inet:as-number
+--:(s-pmsi-a-d-case)
| +--ro s-pmsi-a-d
| +--ro multicast-source inet:ip-address
| +--ro (multicast-group)?
| +--:(c-g-address-case)
| | +--ro c-g-address? inet:ip-address
| +--:(ldp-mp-opaque-value-case)
| +--ro ldp-mp-opaque-value
| +--ro opaque-type uint8
| +--ro opaque-extended-type? uint16
| +--ro opaque yang:hex-string
+--:(leaf-a-d-case)
| +--ro leaf-a-d
| +--ro (leaf-a-d-route-key)
| +--:(inter-as-i-pmsi-a-d-case)
| | +--ro inter-as-i-pmsi-a-d
| | +--ro source-as inet:as-number
| +--:(s-pmsi-a-d-case)
| +--ro s-pmsi-a-d
| +--ro multicast-source inet:ip-address
| +--ro (multicast-group)?
| +--:(c-g-address-case)
| | +--ro c-g-address? inet:ip-address
| +--:(ldp-mp-opaque-value-case)
| +--ro ldp-mp-opaque-value
| +--ro opaque-type uint8
| +--ro opaque-extended-type? uint16
| +--ro opaque yang:hex-string
+--:(source-active-a-d-case)
| +--ro source-active-a-d
| +--ro multicast-source inet:ip-address
| +--ro multicast-group inet:ip-address
+--:(shared-tree-join-case)
| +--ro shared-tree-join
| +--ro c-multicast
| +--ro multicast-source inet:ip-address
| +--ro source-as inet:as-number
| +--ro (multicast-group)?
| +--:(c-g-address-case)
| | +--ro c-g-address? inet:ip-address
| +--:(ldp-mp-opaque-value-case)
| +--ro ldp-mp-opaque-value
| +--ro opaque-type uint8
| +--ro opaque-extended-type? uint16
| +--ro opaque yang:hex-string
+--:(source-tree-join-case)
+--ro source-tree-join
+--ro c-multicast
+--ro multicast-source inet:ip-address
+--ro source-as inet:as-number
+--ro (multicast-group)?
+--:(c-g-address-case)
| +--ro c-g-address? inet:ip-address
+--:(ldp-mp-opaque-value-case)
+--ro ldp-mp-opaque-value
+--ro opaque-type uint8
+--ro opaque-extended-type? uint16
+--ro opaque yang:hex-string
...
Usage
^^^^^
The Ipv4 Multicast VPN table in an instance of the speaker's Loc-RIB can be verified via REST:
**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``
**Method:** ``GET``
**Response Body:**
.. code-block:: xml
flow1
0
172.16.0.44:101
192.168.100.1
199.20.166.41
igp
The Ipv6 Multicast VPN table in an instance of the speaker's Loc-RIB can be verified via REST:
**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``
**Method:** ``GET``
**Response Body:**
.. code-block:: xml
flow1
0
172.16.0.44:101
192.168.100.1
2001:db8:1::6
igp
Programming
^^^^^^^^^^^
These examples show how to originate and remove MCAST-VPN routes via programmable RIB.
There are seven different types of MCAST-VPN routes, and multiples extended communities.
Routes can be used for variety of use-cases supported by BGP/MPLS MCAST-VPN.
Make sure the *Application Peer* is configured first.
**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``
**Method:** ``POST``
**Content-Type:** ``application/xml``
**Request Body:**
.. code-block:: xml
:linenos:
:emphasize-lines: 4,17
mvpn
0
172.16.0.44:101
192.168.100.1
....
199.20.166.41
igp
....
@line 4: One of the MCAST-VPN route must be set here.
@line 15: In some cases, specific extended community presence is required.
-----
**MVPN Routes:**
* **Intra-AS I-PMSI A-D**
.. code-block:: xml
0:5:3
10.10.10.10
* **Inter-AS I-PMSI A-D**
.. code-block:: xml
1.2.3.4:258
64496
* **S-PMSI A-D**
.. code-block:: xml
1.2.3.4:258
10.0.0.10
12.0.0.12
1.0.0.1
.. code-block:: xml
1.2.3.4:258
10.0.0.10
1
0
das75das48bvxc
1.0.0.1
* **Leaf A-D**
.. code-block:: xml
1.2.3.4:258
1
1.0.0.1
.. code-block:: xml
1.2.3.4:258
10.0.0.10
1
0
das75das48bvxc
1.0.0.1
1.0.0.1
* **Source Active A-D**
.. code-block:: xml
1.2.3.4:258
1.0.0.1
2.0.0.2
* **Shared Tree Join**
.. code-block:: xml
1.2.3.4:258
64415
1.0.0.1
2.0.0.2
.. code-block:: xml
1.2.3.4:258
64415
1.0.0.1
1
0
das75das48bvxc
* **Source Tree Join**
.. code-block:: xml
1.2.3.4:258
64415
1.0.0.1
2.0.0.2
.. code-block:: xml
1.2.3.4:258
64415
1.0.0.1
1
0
das75das48bvxc
**Attributes:**
.. include:: bgp-user-guide-pmsi-attribute.rst
* **PE Distinguisher Labels Attribute**
.. code-block:: xml
10.10.10.1
20024
10.10.20.2
20028
**Extended Communities:**
* **Source AS Extended Community**
.. code-block:: xml
true
65
* **Source AS 4 Octets Extended Community**
.. code-block:: xml
true
65555
* **ES-Import Route Target**
.. code-block:: xml
true
10.0.0.1
123=
-----
To remove the route added above, following request can be used:
**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``
**Method:** ``DELETE``
References
^^^^^^^^^^
* `Multicast in MPLS/BGP IP VPNs `_
* `BGP Encodings and Procedures for Multicast in MPLS/BGP IP VPNs `_
* `IPv4 and IPv6 Infrastructure Addresses in BGP Updates for Multicast VPN `_