{"id":217,"date":"2026-06-15T00:00:00","date_gmt":"2026-06-14T20:30:00","guid":{"rendered":"https:\/\/www.anynet.ir\/blog\/%d8%b3%d8%b1%d9%88%db%8c%d8%b3%d9%87%d8%a7%db%8c-%da%86%d9%86%d8%af%d9%be%d8%ae%d8%b4%db%8c-multicast-%d8%a8%d8%b1-%d8%a8%d8%b3%d8%aa%d8%b1-%d9%87%d8%b3%d8%aa%d9%87%d9%87%d8%a7%db%8c-srv6-ipv6-en\/"},"modified":"2026-06-15T00:00:00","modified_gmt":"2026-06-14T20:30:00","slug":"%d8%b3%d8%b1%d9%88%db%8c%d8%b3%d9%87%d8%a7%db%8c-%da%86%d9%86%d8%af%d9%be%d8%ae%d8%b4%db%8c-multicast-%d8%a8%d8%b1-%d8%a8%d8%b3%d8%aa%d8%b1-%d9%87%d8%b3%d8%aa%d9%87%d9%87%d8%a7%db%8c-srv6-ipv6-en","status":"publish","type":"post","link":"https:\/\/www.anynet.ir\/blog\/en\/%d8%b3%d8%b1%d9%88%db%8c%d8%b3%d9%87%d8%a7%db%8c-%da%86%d9%86%d8%af%d9%be%d8%ae%d8%b4%db%8c-multicast-%d8%a8%d8%b1-%d8%a8%d8%b3%d8%aa%d8%b1-%d9%87%d8%b3%d8%aa%d9%87%d9%87%d8%a7%db%8c-srv6-ipv6-en\/","title":{"rendered":"Multicast Services over SRv6 \/ IPv6 Cores"},"content":{"rendered":"<div><\/div>\n<div>\n<div><\/div>\n<\/div>\n<div>\n<div>\n<div>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700\">Introduction<\/h2>\n<p>Service provider cores are steadily moving toward IPv6-only transport and Segment Routing over IPv6 (SRv6) services, but multicast cannot be treated as an afterthought. The goal is to carry existing multicast VPN use cases forward without introducing a separate multicast transport model or SRv6-specific replication behavior.<\/p>\n<p>The approach described here keeps the provider multicast tree native to IPv6 and uses BGP Multicast VPN (MVPN) for service signaling. SRv6 remains the unicast and service context; multicast forwarding is handled by PIMv6-SSM and IP-in-IP encapsulation.<\/p>\n<p>This article is structured in three parts. The first covers Multicast VPN fundamentals: core tree types, Multicast Distribution Tree (MDT) mechanisms, and PMSI concepts that apply to any MVPN deployment regardless of transport. The second presents Cisco&#8217;s multicast architecture for SRv6 \/ IPv6 cores, showing how these fundamentals are realized using native IPv6 multicast, PIMv6-SSM, and BGP MVPN over an IPv6 core used for SRv6 services. The third provides sample configuration and verification tied to a reference topology, so the reader can move from concept to deployment.<\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700\">Why Multicast Matters<\/h2>\n<p>Multicast workloads continue to grow across service provider, enterprise, and government networks, driven by live media, IPTV, financial market data, surveillance, and IoT. As these networks migrate to SRv6, multicast services must migrate with them.<\/p>\n<p>The architecture described in this article ensures multicast carries forward into IPv6\/SRv6 networks natively, without parallel infrastructure or protocol overlays outside the IPv6 stack.<\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700\">Multicast VPN Fundamentals<\/h2>\n<p>Before examining the IPv6-native solution, it is essential to understand the foundational Multicast VPN concepts that underpin the architecture. This section covers the building blocks, core tree types, and MDT mechanisms that any multicast VPN deployment relies on, regardless of the underlying transport.<\/p>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Core Trees<\/h3>\n<p>In an MVPN architecture, provider edge (PE) routers must deliver customer multicast traffic across the provider core without requiring core routers to hold per-VPN state. This is achieved through core trees: provider-level multicast distribution trees that carry encapsulated customer traffic between PEs.<\/p>\n<p>The core tree is formally referred to as a Provider Multicast Service Interface (PMSI). The PMSI abstracts the provider core as a multicast-capable tunnel connecting PEs participating in a given VPN.<\/p>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Point-to-Multipoint Trees<\/h3>\n<p>A point-to-multipoint (P2MP) tree has a single root, the ingress PE, and multiple leaves, the egress PEs with interested receivers. Unlike point-to-point tunnels that require a separate path per destination, a P2MP tree replicates traffic at branching points in the core, delivering one copy of each packet to all interested receivers efficiently.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/figure-01-1780463169.webp\" alt=\"Point-to-multipoint tree\"><br \/>\n<em>Figure 1: Point-to-multipoint (P2MP) tree with one ingress PE branching to multiple egress PEs. Core routers replicate traffic at branch points.<\/em><\/p>\n<ul>\n<li>The ingress PE acts as the root of the tree and sources customer multicast traffic into the core.<\/li>\n<li>Each egress PE with active receivers joins the tree as a leaf.<\/li>\n<li>Core P routers replicate traffic at branching points. They forward multicast without any awareness of the customer overlay.<\/li>\n<li>Tree construction is typically hop-by-hop using PIM joins toward the root PE&#8217;s address.<\/li>\n<\/ul>\n<p>This model keeps provider core state proportional to the number of active multicast sources, not the number of customer flows.<\/p>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">PMSI Types<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/figure-02-1780463176.webp\" alt=\"PMSI types\"><br \/>\n<em>Figure 2: The two primary PMSI categories: I-PMSI, also known as Default MDT, connects all PEs, while S-PMSI, also known as Data MDT, connects only interested PEs.<\/em><\/p>\n<p>The MVPN framework defines several PMSI types. The two most relevant are:<\/p>\n<table class=\"english-numbers\">\n<thead>\n<tr>\n<th>PMSI type<\/th>\n<th>Tree scope<\/th>\n<th>Used for<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Inclusive PMSI (I-PMSI)<\/td>\n<td>Connects all PEs in a VRF<\/td>\n<td>Default MDT<\/td>\n<\/tr>\n<tr>\n<td>Selective PMSI (S-PMSI)<\/td>\n<td>Connects only PEs with active receivers<\/td>\n<td>Data MDT<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The I-PMSI is always present and carries control signaling and low-rate multicast traffic. The S-PMSI is created on demand to optimize high-rate flows by delivering them only to PEs that need them.<\/p>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Default MDT<\/h3>\n<p>The Default MDT is the foundational tree that connects all PE routers participating in a multicast-enabled VPN Routing and Forwarding (VRF) instance. It is always active and serves as the baseline transport for customer multicast traffic and, in PIM-signaled models, customer multicast control messages.<\/p>\n<p>When a VRF is configured with multicast, each PE is assigned a multicast group address for the Default MDT. All PEs in that VRF join this group, forming a shared multicast tree across the provider core.<\/p>\n<p>From the perspective of PIM running in the customer VRF overlay, the Default MDT can act like a virtual LAN where all PEs appear as directly connected PIM neighbors. In the BGP C-multicast model validated in this article, PE discovery and customer multicast joins are signaled with BGP MVPN; the MDT provides the provider tunnel used to carry encapsulated customer multicast traffic.<\/p>\n<p>Key characteristics:<\/p>\n<ul>\n<li><strong style=\"color: rgb(26, 26, 26)\">Always on<\/strong> &#8211; The Default MDT is established as soon as the VRF is configured with multicast, regardless of whether customer traffic is flowing.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Carries baseline customer traffic<\/strong> &#8211; Customer multicast <code>(S,G)<\/code> flows are initially forwarded on the Default MDT unless a Data MDT is triggered.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Separates overlay signaling from transport<\/strong> &#8211; In this BGP-signaled example, PE discovery and C-multicast joins are BGP MVPN routes, while the MDT is the provider transport tree.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Shared across address families<\/strong> &#8211; A single Default MDT group serves both IPv4 and IPv6 customer multicast within the same VRF.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">One per VRF<\/strong> &#8211; Each multicast-enabled VRF has its own Default MDT with a unique multicast group.<\/li>\n<\/ul>\n<p>Because all PEs in a VRF share a single Default MDT, the provider core maintains one multicast tree per VRF, not one per customer flow. This keeps core state manageable even as the number of customer <code>(S,G)<\/code> entries grows.<\/p>\n<p>However, the Default MDT delivers traffic to all PEs in the VRF, including those without active receivers. For low-rate flows and control traffic, this overhead is acceptable. For high-bandwidth flows, the Data MDT provides a more efficient alternative.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/figure-03-1780463177.webp\" alt=\"Default MDT forwarding\"><br \/>\n<em>Figure 3: Default MDT delivers multicast traffic to all PEs in the VRF. PEs without interested receivers for a given flow drop the unwanted traffic.<\/em><\/p>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Data MDT<\/h3>\n<p>The Data MDT addresses the efficiency limitation of the Default MDT. While the Default MDT delivers traffic to all PEs in a VRF, the Data MDT creates a selective tree that only includes PEs with active receivers for a specific customer <code>(S,G)<\/code> flow.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/figure-04-1780463183.webp\" alt=\"Data MDT forwarding\"><br \/>\n<em>Figure 4: Data MDT creates a selective P2MP tree. Only PEs with active receivers join the Data MDT; PEs without receivers cache the signaling but do not join.<\/em><\/p>\n<p>The sequence is:<\/p>\n<table class=\"english-numbers\">\n<thead>\n<tr>\n<th>Step<\/th>\n<th>Function<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1. Threshold trigger<\/td>\n<td>The ingress PE monitors the traffic rate for each customer <code>(S,G)<\/code> on the Default MDT. When a flow exceeds a configurable bandwidth threshold, or immediately if configured, the ingress PE initiates a Data MDT.<\/td>\n<\/tr>\n<tr>\n<td>2. Signaling<\/td>\n<td>The ingress PE advertises a BGP MVPN Type 3, S-PMSI Auto-Discovery, route to all PEs in the VRF. This route identifies the customer <code>(S,G)<\/code> and the new multicast group to be used for the Data MDT.<\/td>\n<\/tr>\n<tr>\n<td>3. Selective join<\/td>\n<td>Only egress PEs with active receivers for that <code>(S,G)<\/code> join the new Data MDT tree in the core. PEs without receivers cache the advertisement but do not join.<\/td>\n<\/tr>\n<tr>\n<td>4. Switchover<\/td>\n<td>After a brief hold-down period, the ingress PE moves the customer <code>(S,G)<\/code> traffic from the Default MDT onto the Data MDT. The flow is now delivered only to interested PEs.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Key characteristics:<\/p>\n<ul>\n<li><strong style=\"color: rgb(26, 26, 26)\">Per-<code>(S,G)<\/code> granularity<\/strong> &#8211; Each Data MDT carries a single customer <code>(S,G)<\/code> flow. Data MDTs apply to source-specific trees only, not shared trees.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">On-demand creation<\/strong> &#8211; Data MDTs are created only when traffic exceeds the threshold, keeping core state minimal during low-traffic periods.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Separate P2MP tree<\/strong> &#8211; Each Data MDT uses its own multicast group, creating an independent P2MP tree in the provider core.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">BGP-signaled<\/strong> &#8211; The Type 3 route ensures all PEs are informed of the switchover; egress PEs join autonomously based on receiver interest.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Reversible<\/strong> &#8211; If the traffic rate drops below the threshold or receivers disconnect, the flow can move back to the Default MDT.<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/figure-05-1780463173.webp\" alt=\"Data MDT BGP update\"><br \/>\n<em>Figure 5: BGP IPv4 MVPN update carrying Data MDT information, including PMSI tunnel details used by the ingress PE to signal the Data MDT switchover.<\/em><\/p>\n<table class=\"english-numbers\">\n<thead>\n<tr>\n<th>Aspect<\/th>\n<th>Default MDT<\/th>\n<th>Data MDT<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Scope<\/td>\n<td>All PEs in the VRF<\/td>\n<td>Only PEs with active receivers<\/td>\n<\/tr>\n<tr>\n<td>Activation<\/td>\n<td>Always on<\/td>\n<td>On demand, threshold-based<\/td>\n<\/tr>\n<tr>\n<td>Traffic type<\/td>\n<td>Control and low-rate data<\/td>\n<td>High-rate <code>(S,G)<\/code> flows<\/td>\n<\/tr>\n<tr>\n<td>Core tree<\/td>\n<td>One per VRF<\/td>\n<td>One per <code>(S,G)<\/code> flow<\/td>\n<\/tr>\n<tr>\n<td>Signaling<\/td>\n<td>BGP MVPN Type 1, Auto-Discovery<\/td>\n<td>BGP MVPN Type 3, S-PMSI A-D<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>In a typical deployment, the Default MDT handles baseline multicast connectivity and low-bandwidth multicast flows, while high-bandwidth streams such as IPTV channels and live video feeds are offloaded to Data MDTs for efficient delivery.<\/p>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">BGP Auto-Discovery and Signaling<\/h3>\n<p>Traditional MVPN, or Draft-Rosen, relied on PIM in the provider core for both tree construction and PE discovery. NG-MVPN, defined by RFC 6513 and RFC 6514, replaces this with BGP-based Auto-Discovery where PEs advertise their participation in a multicast VPN through BGP, eliminating the need for PIM adjacencies across the Default MDT for PE discovery.<\/p>\n<p>BGP MVPN introduces two key functions:<\/p>\n<ul>\n<li><strong style=\"color: rgb(26, 26, 26)\">Auto-Discovery<\/strong> &#8211; PEs automatically learn which other PEs are enabled for multicast in a given VPN. Each PE advertises its loopback address and VPN membership via BGP, removing the need for manual configuration or PIM-based discovery.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Customer signaling in overlay<\/strong> &#8211; Customer C-multicast Join and Prune messages are signaled via BGP rather than PIM between PEs. This means customer multicast state is carried in BGP updates as C-multicast routes, not as PIM messages flooded across the Default MDT.<\/li>\n<\/ul>\n<p>Every BGP MVPN update that binds a customer multicast flow to a provider tunnel carries a PMSI Tunnel Attribute. The PTA contains two critical pieces of information:<\/p>\n<ul>\n<li><strong style=\"color: rgb(26, 26, 26)\">Tunnel type<\/strong> &#8211; Identifies the core tree protocol, such as PIM-SSM, mLDP P2MP, RSVP-TE P2MP, or IR. This tells the receiving PE how to join the provider tree.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Tunnel identifier<\/strong> &#8211; Uniquely identifies the specific tunnel instance, such as the multicast group address for PIM-SSM or the FEC element for mLDP. This tells the receiving PE which tree to join.<\/li>\n<\/ul>\n<p>The PTA connects the BGP MVPN control plane to the underlying provider multicast infrastructure. It is the bridge between the overlay signaling and the underlay tree.<\/p>\n<p>The BGP MVPN address family defines seven route types in RFC 6514. The ones most relevant to this article are:<\/p>\n<ul>\n<li><strong style=\"color: rgb(26, 26, 26)\">Type 1, Intra-AS I-PMSI A-D<\/strong> &#8211; Each PE advertises its membership in a multicast VPN, establishing the Default MDT.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Type 3, S-PMSI A-D<\/strong> &#8211; The ingress PE signals a Data MDT, binding a customer <code>(S,G)<\/code> flow to a selective provider tunnel.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Type 5, Source Active A-D<\/strong> &#8211; The source PE advertises that a customer multicast source is active; this is relevant when the customer VRF uses PIM-SM.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Type 6, Shared Tree Join<\/strong> &#8211; An egress PE signals interest in a customer shared tree; this is relevant when the customer VRF uses PIM-SM.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Type 7, Source Tree Join<\/strong> &#8211; An egress PE signals interest in a customer source tree; this is used for source-tree joins, including SSM flows.<\/li>\n<\/ul>\n<p>Other MVPN route types are outside the single-AS Default MDT verification scope used in the configuration example.<\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700\">SRv6 \/ IPv6 Core Architecture<\/h2>\n<p>Cisco&#8217;s multicast strategy for SRv6 \/ IPv6 core networks is MVPN over an IPv6 core used for SRv6 services, using native PIMv6-SSM in the underlay and IP-in-IP encapsulation for customer traffic. In this architecture, multicast forwarding does not use SRv6 SIDs, Segment Routing Headers, or SRv6 packet formats; the provider tree is native IPv6 multicast. This leverages mature IPv6 multicast standards without requiring SRv6-specific multicast extensions. Multicast services share the same IPv6 core used for unicast and no separate multicast infrastructure is needed.<\/p>\n<p>In the validation lab, SRv6 is configured so the environment represents an SRv6 L3VPN service, but multicast transport itself uses IPv6\/PIMv6, not SRv6 SID\/SRH forwarding.<\/p>\n<p>The architecture builds on RFC 6513\/6514 MVPN procedures, RFC 6515 for IPv6 infrastructure addresses, RFC 8950 for advertising IPv4 NLRI with IPv6 next-hops, and RFC 7761 for PIM-SM and PIM-SSM behavior. The SRv6 service context is based on RFC 8402 and RFC 8986, while Flex-Algo path influence is covered by RFC 9350 and RFC 9502.<\/p>\n<p>Design principles:<\/p>\n<ul>\n<li><strong style=\"color: rgb(26, 26, 26)\">Native IPv6 multicast<\/strong> &#8211; PIMv6-SSM builds provider trees; no new SRv6-specific mechanisms are required.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">BGP MVPN overlay<\/strong> &#8211; Customer multicast signaling occurs between PEs.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">IP-in-IP encapsulation<\/strong> &#8211; The data plane uses lightweight transport without an additional overlay shim.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Operational simplicity<\/strong> &#8211; A consistent PIMv6-SSM MDT transport model for multicast VRF services gives operators one set of procedures to learn and one set of show commands to master, replacing the traditional mix of protocol combinations.<\/li>\n<\/ul>\n<p>The approach has multi-vendor IETF support. <code>draft-ietf-pim-multicast-over-srv6<\/code> is an active PIM Working Group document, with authors from Cisco, Juniper, Nokia, Aramco, and Verizon. As an Internet-Draft, it should be treated as work in progress while the core design continues to use existing standards-based building blocks.<\/p>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Control Plane<\/h3>\n<p>The multicast control plane uses a two-plane architecture:<\/p>\n<ul>\n<li><strong style=\"color: rgb(26, 26, 26)\">BGP MVPN overlay<\/strong> &#8211; Root, Mid, and Tail PE routers exchange MVPN routes through the Route Reflector for Auto-Discovery and customer multicast signaling. No direct PE-to-PE PIM adjacencies are needed in the overlay.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">IPv6 underlay<\/strong> &#8211; The same IPv6 network used for SRv6 unicast. PIMv6-SSM runs within this underlay to build the native IPv6 multicast distribution trees. All routers participate, Root, Mid, and Tail as PEs and P1\/P2 as transit routers, but only P1 and P2 are exclusive to this layer; they have no awareness of customer VPN state.<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/figure-06-1780463178.webp\" alt=\"Two-plane architecture\"><br \/>\n<em>Figure 6: Multicast services over SRv6 \/ IPv6 cores use a two-plane architecture: BGP MVPN overlay for service signaling and IPv6 underlay with PIMv6-SSM for provider multicast transport.<\/em><\/p>\n<p><strong style=\"color: rgb(26, 26, 26)\">BGP Overlay Discovery<\/strong><\/p>\n<p>Using the BGP MVPN Auto-Discovery mechanism introduced earlier, each PE, Root, Mid, and Tail, advertises a Type 1 Intra-AS I-PMSI A-D route via the RR. The Type 1 route carries the PMSI Tunnel Attribute, which specifies the tunnel type, PIM-SSM, the MDT source, the PE loopback, and the MDT group, unique per VRF. At the end of this exchange, all three PEs know each other and know exactly how to build the underlay tree, but no trees are built yet.<\/p>\n<p><strong style=\"color: rgb(26, 26, 26)\">PIMv6-SSM Underlay Tree Build<\/strong><\/p>\n<p>Triggered by the PMSI TA received during overlay discovery, each PE reads the MDT source and group and initiates PIMv6-SSM <code>(S,G)<\/code> joins toward the other PEs&#8217; loopbacks. These joins propagate hop-by-hop through P1 and P2, the transit routers, and Mid, the bud node acting as both transit hop and PE, building one source-rooted P2MP tree per PE. Collectively, these per-PE trees provide bidirectional PE-to-PE MDT connectivity, while each individual tree remains rooted at a single PE. Transit routers participate in PIM but have no awareness of VPN state. This is pure native IPv6 multicast.<\/p>\n<p>At the end of control plane setup, the provider core has bidirectional PIM trees connecting all PEs, with BGP auto-discovery complete.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/figure-07-1780463175.webp\" alt=\"Control plane setup\"><br \/>\n<em>Figure 7: End of control plane setup. BGP exchange auto-discovery connects PEs through the RR, while PIMv6-SSM trees are built in the core.<\/em><\/p>\n<p><strong style=\"color: rgb(26, 26, 26)\">Customer Join Signaling<\/strong><\/p>\n<p>When a receiver sends an IGMP\/PIM join for a customer <code>(S,G)<\/code>, the egress PE, such as Tail, performs a VRF Reverse Path Forwarding (RPF) lookup pointing to the ingress PE via BGP next-hop, generates a BGP MVPN Type 7 Source Tree Join route, and advertises it to the ingress PE, Root, via the RR. Root programs its VRF entry to forward that customer flow onto the Default MDT. No PIM signaling between PEs is needed, only BGP.<\/p>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Data Plane<\/h3>\n<p>Customer <code>(S,G)<\/code> traffic arrives at Root, the ingress PE, from the CE, is encapsulated in IP-in-IPv6, and is forwarded onto the PIM-built tree. P1 and P2 forward the packet as native IPv6 multicast and never inspect the inner customer payload. At Tail, the egress PE, the outer header is stripped and the customer packet is delivered to the receiver. PEs maintain both a provider <code>P(S,G)<\/code> entry and a customer <code>C(S,G)<\/code> entry; transit routers forward based on <code>P(S,G)<\/code> only.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/figure-08-1780463181.webp\" alt=\"Data plane forwarding\"><br \/>\n<em>Figure 8: Data plane forwarding with provider P(S,G) state for core IPv6 multicast forwarding and customer C(S,G) state for VRF delivery. Core routers forward natively; only edge PEs perform encapsulation and decapsulation.<\/em><\/p>\n<p>The encapsulation is simple IP-in-IPv6, with no GRE, MPLS, or additional tunnel header.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/figure-09-1780463174.webp\" alt=\"IPv4 customer traffic encapsulation\"><br \/>\n<em>Figure 9: IPv4 customer traffic encapsulation using IP-in-IPv6. The provider IPv6 Next Header field is set to 4 because the inner customer header is IPv4.<\/em><\/p>\n<p>At the ingress PE, the customer IPv4 packet is encapsulated in an outer provider IPv6 header; transit routers forward natively; at the egress PE, the outer header is stripped. The <code>Next Header<\/code> field in the provider IPv6 header must be set to <code>4<\/code>, since the customer IP header is an IPv4 header.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/figure-10-1780463180.webp\" alt=\"IPv6 customer traffic encapsulation\"><br \/>\n<em>Figure 10: IPv6 customer traffic encapsulation using IP-in-IPv6. The provider IPv6 Next Header field is set to 41 because the inner customer header is IPv6.<\/em><\/p>\n<p>The IPv6 customer traffic flow is the same, but the inner header is an IPv6 customer header. The <code>Next Header<\/code> field in the provider IPv6 header must be set to <code>41<\/code>, since the customer IP header is an IPv6 header.<\/p>\n<p>Transit P routers require only native IPv6 multicast and PIMv6 support; they forward native IPv6 multicast packets without awareness of the overlay. Only edge PEs require multicast VPN functionality, minimizing the deployment footprint.<\/p>\n<p><strong style=\"color: rgb(26, 26, 26)\">Why two protocols?<\/strong> BGP coordinates between PEs, determining who participates with Type 1 routes and who wants what traffic with Type 7 routes. PIM builds the multicast forwarding path through the core routers. Core routers run PIM but never touch BGP MVPN. PEs run both, but for different purposes.<\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700\">Sample Configuration<\/h2>\n<p>The following configuration and verification sections use this reference topology.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.anynet.ir\/blog\/wp-content\/uploads\/2026\/10\/figure-11-1780463182.webp\" alt=\"Reference topology\"><br \/>\n<em>Figure 11: Multicast services over SRv6 \/ IPv6 cores reference topology. Root is the ingress PE, Mid is a bud-node PE, Tail is the egress PE, P1\/P2 are transit routers, and RR is the route reflector.<\/em><\/p>\n<p>Root is the ingress\/source PE, Mid is a bud-node PE, Tail is an egress\/receiver PE, P1\/P2 are transit routers, and RR is the route reflector. Attached hosts represent validation traffic endpoints.<\/p>\n<table class=\"english-numbers\">\n<thead>\n<tr>\n<th>Node<\/th>\n<th>Role<\/th>\n<th>Loopback0 IPv6<\/th>\n<th>Loopback0 IPv4<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Root<\/td>\n<td>Ingress\/source PE<\/td>\n<td><code>2001:db8:100::1\/128<\/code><\/td>\n<td><code>192.0.2.1\/32<\/code><\/td>\n<\/tr>\n<tr>\n<td>P1<\/td>\n<td>Transit P router<\/td>\n<td><code>2001:db8:100::2\/128<\/code><\/td>\n<td><code>192.0.2.2\/32<\/code><\/td>\n<\/tr>\n<tr>\n<td>Mid<\/td>\n<td>Bud-node PE<\/td>\n<td><code>2001:db8:100::3\/128<\/code><\/td>\n<td><code>192.0.2.3\/32<\/code><\/td>\n<\/tr>\n<tr>\n<td>P2<\/td>\n<td>Transit P router<\/td>\n<td><code>2001:db8:100::4\/128<\/code><\/td>\n<td><code>192.0.2.4\/32<\/code><\/td>\n<\/tr>\n<tr>\n<td>Tail<\/td>\n<td>Receiver\/egress PE<\/td>\n<td><code>2001:db8:100::5\/128<\/code><\/td>\n<td><code>192.0.2.5\/32<\/code><\/td>\n<\/tr>\n<tr>\n<td>RR<\/td>\n<td>Route Reflector<\/td>\n<td><code>2001:db8:100::6\/128<\/code><\/td>\n<td><code>192.0.2.6\/32<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>These snippets cover the multicast-specific components and the BGP address families relevant to the example. IPv6 unicast reachability through the provider core, including IS-IS, SRv6 locators, and Loopback0 reachability, is assumed to be already operational. The SRv6 lines provide the L3VPN service context; the multicast tree remains native IPv6 multicast.<\/p>\n<p>The packet-level validation in this article focuses on an IPv4 customer multicast flow carried over an IPv6 Default MDT:<\/p>\n<ul>\n<li>Customer source: <code>198.51.100.100<\/code><\/li>\n<li>Customer group: <code>232.1.1.1<\/code><\/li>\n<li>VRF: <code>red<\/code><\/li>\n<li>Default MDT group: <code>ff3e::8000:1<\/code><\/li>\n<\/ul>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Root Ingress PE<\/h3>\n<p>Root uses <code>2001:db8:100::1<\/code>, AS <code>65000<\/code>, and VRF <code>red<\/code>.<\/p>\n<pre><code><span>router bgp 65000\n<\/span><span> mvpn\n<\/span><span> bgp router-id 192.0.2.1\n<\/span><span> address-family ipv4 unicast\n<\/span><span>!\n<\/span><span> address-family vpnv4 unicast\n<\/span><span>!\n<\/span><span> address-family ipv6 unicast\n<\/span><span>!\n<\/span><span> address-family vpnv6 unicast\n<\/span><span>!\n<\/span><span> address-family ipv4 mvpn\n<\/span><span>!\n<\/span><span> address-family ipv6 mvpn\n<\/span><span>!\n<\/span><span> neighbor 2001:db8:100::6\n<\/span><span> remote-as 65000\n<\/span><span> update-source Loopback0\n<\/span><span> address-family vpnv4 unicast\n<\/span><span>!\n<\/span><span> address-family vpnv6 unicast\n<\/span><span>!\n<\/span><span> address-family ipv6 unicast\n<\/span><span>!\n<\/span><span> address-family ipv4 mvpn\n<\/span><span>!\n<\/span><span> address-family ipv6 mvpn\n<\/span><span>!\n<\/span><span>!\n<\/span><span> vrf red\n<\/span><span> rd auto\n<\/span><span> address-family ipv4 unicast\n<\/span><span> segment-routing srv6\n<\/span><span> locator MAIN\n<\/span><span> alloc mode per-vrf\n<\/span><span>!\n<\/span><span> redistribute connected\n<\/span><span> redistribute static\n<\/span><span>!\n<\/span><span> address-family ipv6 unicast\n<\/span><span> segment-routing srv6\n<\/span><span> locator MAIN\n<\/span><span> alloc mode per-vrf\n<\/span><span>!\n<\/span><span> redistribute connected\n<\/span><span>!\n<\/span><span> address-family ipv4 mvpn\n<\/span><span>!\n<\/span><span> address-family ipv6 mvpn\n<\/span><span>!\n<\/span><span>!\n<\/span><span>router static\n<\/span><span> vrf red\n<\/span><span> address-family ipv4 unicast\n<\/span><span> 198.51.100.100\/32 198.51.100.1\n<\/span><span>!\n<\/span><span>!\n<\/span><span>!\n<\/span><span>route-policy rpf-for-srv6-mcast\n<\/span><span> set core-tree pim-default-v6\n<\/span><span>end-policy\n<\/span><span>multicast-routing\n<\/span><span> address-family ipv6\n<\/span><span> interface all enable\n<\/span><span>!\n<\/span><span> vrf red\n<\/span><span> address-family ipv4\n<\/span><span> mdt source ipv6 Loopback0\n<\/span><span> interface all enable\n<\/span><span> bgp auto-discovery pim6\n<\/span><span>!\n<\/span><span> mdt default ipv6 ff3e::8000:1\n<\/span><span>!\n<\/span><span> address-family ipv6\n<\/span><span> mdt source ipv6 Loopback0\n<\/span><span> interface all enable\n<\/span><span> bgp auto-discovery pim6\n<\/span><span>!\n<\/span><span> mdt default ipv6 ff3e::8000:1\n<\/span><span>!\n<\/span><span>!\n<\/span><span>!\n<\/span><span>router pim\n<\/span><span> address-family ipv6\n<\/span><span> interface Loopback0\n<\/span><span> enable\n<\/span><span>!\n<\/span><span> interface HundredGigE0\/0\/0\/0\n<\/span><span> enable\n<\/span><span>!\n<\/span><span>!\n<\/span><span> vrf red\n<\/span><span> address-family ipv4\n<\/span><span> rpf topology route-policy rpf-for-srv6-mcast\n<\/span><span> mdt c-multicast-routing bgp\n<\/span><span>!\n<\/span><span> interface HundredGigE0\/0\/0\/2\n<\/span><span> enable\n<\/span><span>!\n<\/span><span>!\n<\/span><span> address-family ipv6\n<\/span><span> rpf topology route-policy rpf-for-srv6-mcast\n<\/span><span> mdt c-multicast-routing bgp\n<\/span><span>!\n<\/span><span> interface HundredGigE0\/0\/0\/2\n<\/span><span> enable\n<\/span><span>!\n<\/span><span>!\n<\/span><span>!\n<\/span><span>!\n<\/span><\/code><\/pre>\n<p>The same PE structure applies to Mid, <code>2001:db8:100::3<\/code>, and Tail, <code>2001:db8:100::5<\/code>; only the loopback addresses, SRv6 locator, BGP router ID, and CE-facing interface differ. In the validation lab, Root redistributes a static route for the IPv4 customer source so receiver PEs have unicast\/RPF reachability for <code>198.51.100.100\/32<\/code>.<\/p>\n<p>Configuration notes:<\/p>\n<ul>\n<li><code>mdt default ipv6 ff3e::8000:1<\/code> &#8211; The IPv6 SSM group for the Default MDT; each VRF gets a unique group.<\/li>\n<li><code>mdt source ipv6 Loopback0<\/code> &#8211; The PE loopback used as PIM tree source. It must be reachable through the IPv6 underlay.<\/li>\n<li><code>bgp auto-discovery pim6<\/code> &#8211; Enables BGP MVPN auto-discovery with a PIMv6-SSM provider tunnel.<\/li>\n<li><code>rpf topology route-policy rpf-for-srv6-mcast<\/code> &#8211; Directs RPF to use the PIMv6-SSM core tree.<\/li>\n<li><code>mdt c-multicast-routing bgp<\/code> &#8211; Generates MVPN Type 7 routes instead of PIM over MDT for C-multicast state.<\/li>\n<li>PIM is enabled on Loopback0 and all core-facing interfaces, which builds the PIMv6-SSM underlay trees.<\/li>\n<li><code>address-family ipv4 mvpn<\/code> and <code>address-family ipv6 mvpn<\/code> are the MVPN address families used in this IOS XR validation. Do not replace them with <code>vpnv4 multicast<\/code> or <code>vpnv6 multicast<\/code>.<\/li>\n<\/ul>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Route Reflector<\/h3>\n<p>The RR uses <code>2001:db8:100::6<\/code> and AS <code>65000<\/code>.<\/p>\n<pre><code><span>router bgp 65000\n<\/span><span> mvpn\n<\/span><span> bgp router-id 192.0.2.6\n<\/span><span> address-family ipv4 unicast\n<\/span><span>!\n<\/span><span> address-family vpnv4 unicast\n<\/span><span>!\n<\/span><span> address-family ipv6 unicast\n<\/span><span>!\n<\/span><span> address-family vpnv6 unicast\n<\/span><span>!\n<\/span><span> address-family ipv4 mvpn\n<\/span><span>!\n<\/span><span> address-family ipv6 mvpn\n<\/span><span>!\n<\/span><span>! Root (PE1)\n<\/span><span> neighbor 2001:db8:100::1\n<\/span><span> remote-as 65000\n<\/span><span> update-source Loopback0\n<\/span><span> address-family ipv4 unicast\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family vpnv4 unicast\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family ipv6 unicast\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family vpnv6 unicast\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family ipv4 mvpn\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family ipv6 mvpn\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span>!\n<\/span><span>! Mid (PE2)\n<\/span><span> neighbor 2001:db8:100::3\n<\/span><span> remote-as 65000\n<\/span><span> update-source Loopback0\n<\/span><span> address-family ipv4 unicast\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family vpnv4 unicast\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family ipv6 unicast\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family vpnv6 unicast\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family ipv4 mvpn\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family ipv6 mvpn\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span>!\n<\/span><span>! Tail (PE3)\n<\/span><span> neighbor 2001:db8:100::5\n<\/span><span> remote-as 65000\n<\/span><span> update-source Loopback0\n<\/span><span> address-family ipv4 unicast\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family vpnv4 unicast\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family ipv6 unicast\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family vpnv6 unicast\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family ipv4 mvpn\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span> address-family ipv6 mvpn\n<\/span><span> route-reflector-client\n<\/span><span>!\n<\/span><span>!\n<\/span><span>!\n<\/span><\/code><\/pre>\n<p>The RR does not need VRF configuration; it only reflects BGP MVPN routes. All three PEs, Root, Mid, and Tail, are <code>route-reflector-client<\/code> under <code>ipv4 mvpn<\/code> and <code>ipv6 mvpn<\/code>. VPN unicast address families are still needed for customer route reachability.<\/p>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Transit Routers<\/h3>\n<p>P1 uses <code>2001:db8:100::2<\/code>; P2 uses <code>2001:db8:100::4<\/code>.<\/p>\n<pre><code><span>multicast-routing\n<\/span><span> address-family ipv6\n<\/span><span> interface all enable\n<\/span><span>!\n<\/span><span>!\n<\/span><span>router pim\n<\/span><span> address-family ipv6\n<\/span><span> interface HundredGigE0\/0\/0\/0\n<\/span><span> enable\n<\/span><span>!\n<\/span><span> interface HundredGigE0\/0\/0\/1\n<\/span><span> enable\n<\/span><span>!\n<\/span><span> interface HundredGigE0\/0\/0\/2\n<\/span><span> enable\n<\/span><span>!\n<\/span><span>!\n<\/span><span>!\n<\/span><\/code><\/pre>\n<p>P routers need only global IPv6 multicast routing and PIMv6 on core-facing interfaces, with no BGP MVPN, no VRF, and no multicast-routing VRF configuration. They forward native IPv6 multicast and propagate PIMv6-SSM joins hop-by-hop with zero awareness of customer VPN state.<\/p>\n<p>PIM is enabled only on the required core-facing interfaces. This avoids activating PIM on unintended links; <code>interface all enable<\/code> under <code>multicast-routing<\/code> is retained only as a lab convenience.<\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700\">Verification<\/h2>\n<p>The following verification steps walk through the multicast state layer by layer, matching the order in which the control plane builds up: first BGP MVPN auto-discovery, then provider PIM trees, then customer multicast joins, and finally data-plane forwarding. Run the commands on the indicated routers using the reference topology.<\/p>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Step 1: BGP MVPN Auto-Discovery<\/h3>\n<p>After enabling <code>bgp auto-discovery pim6<\/code> on all PEs, each PE originates a Type 1, Intra-AS I-PMSI A-D, route carrying a PMSI Tunnel Attribute that tells remote PEs how to join its Default MDT.<\/p>\n<pre><code><span>! === Root - verify Type 1 exchange ===\n<\/span><span>show bgp ipv4 mvpn route-type 1\n<\/span><span>! Expected: Three Type 1 routes - one local, two received via RR:\n<\/span><span>! *&gt; [1][2001:db8:100::1]\/136\n<\/span><span>! *&gt;i[1][2001:db8:100::3]\/136\n<\/span><span>! *&gt;i[1][2001:db8:100::5]\/136\n<\/span><span>! The \"i\" prefix means iBGP-learned; absence means locally originated.\n<\/span><span>! === RR - verify it reflects all three Type 1 routes ===\n<\/span><span>show bgp ipv4 mvpn route-type 1\n<\/span><span>! Expected: All three PE Type 1 routes, each with the originator's loopback as next-hop:\n<\/span><span>! *&gt;i[1][2001:db8:100::1]\/136\n<\/span><span>! *&gt;i[1][2001:db8:100::3]\/136\n<\/span><span>! *&gt;i[1][2001:db8:100::5]\/136\n<\/span><\/code><\/pre>\n<p>Optionally inspect the PMSI Tunnel Attribute inside a Type 1 route to confirm the underlay tree parameters.<\/p>\n<pre><code><span>! === Tail - inspect Root's Type 1 detail ===\n<\/span><span>show bgp ipv4 mvpn [1][2001:db8:100::1]\/136 detail\n<\/span><span>! Key fields to verify in the output:\n<\/span><span>! PMSI: flags 0x00, type 3 (PIM SSM), label 0\n<\/span><span>! Originating PE: 2001:db8:100::1\n<\/span><span>! Multicast Group: ff3e::8000:1\n<\/span><span>!\n<\/span><span>! This tells Tail: \"To receive Root's MDT traffic, join the PIMv6-SSM tree\n<\/span><span>! (2001:db8:100::1, ff3e::8000:1).\"\n<\/span><span>! PMSI tunnel type 3 = PIM-SSM. This is separate from BGP MVPN route type 3,\n<\/span><span>! which is S-PMSI A-D \/ Data MDT signaling.\n<\/span><\/code><\/pre>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Step 2: Provider PIM Trees<\/h3>\n<p>Triggered by the PMSI information in Type 1 routes, each PE initiates PIMv6-SSM joins toward the other PEs&#8217; loopbacks for group <code>ff3e::8000:1<\/code>. Transit routers P1 and P2 forward these joins hop-by-hop with no BGP awareness needed.<\/p>\n<pre><code><span>! === Root - verify provider PIM trees ===\n<\/span><span>show pim ipv6 topology ff3e::8000:1\n<\/span><span>! Expected: P(S,G) entries for the Default MDT group ff3e::8000:1:\n<\/span><span>!\n<\/span><span>! (2001:db8:100::1, ff3e::8000:1) SPT - Root's own tree\n<\/span><span>! RPF: Loopback0,2001:db8:100::1*\n<\/span><span>! Loopback0 fwd LI LH\n<\/span><span>! HundredGigE0\/0\/0\/0 fwd Join\n<\/span><span>!\n<\/span><span>! (2001:db8:100::5, ff3e::8000:1) SPT - Tail's tree\n<\/span><span>! RPF: HundredGigE0\/0\/0\/0,fe80::...\n<\/span><span>! Loopback0 fwd LH MVS MV6S\n<\/span><span>!\n<\/span><span>! \"MV6S\" flag = IPv6 multicast VPN source - indicates this tree feeds the MDT.\n<\/span><span>! \"LI\" = local interest, \"LH\" = last hop.\n<\/span><span>! === P2 (transit router) - verify hop-by-hop PIM state ===\n<\/span><span>show pim ipv6 topology ff3e::8000:1\n<\/span><span>! Expected: P2 is pure transit - no VRF and no MVPN state:\n<\/span><span>!\n<\/span><span>! (2001:db8:100::1, ff3e::8000:1) SPT\n<\/span><span>! RPF: toward Root's direction (HundredGigE0\/0\/0\/0 toward Mid\/P1)\n<\/span><span>! Outgoing: toward Tail (HundredGigE0\/0\/0\/1)\n<\/span><span>!\n<\/span><span>! (2001:db8:100::5, ff3e::8000:1) SPT\n<\/span><span>! RPF: toward Tail's direction (HundredGigE0\/0\/0\/1)\n<\/span><span>! Outgoing: toward Root\/Mid (HundredGigE0\/0\/0\/0)\n<\/span><span>!\n<\/span><span>! P2 forwards native IPv6 multicast only.\n<\/span><span>! === Tail - verify provider PIM trees ===\n<\/span><span>show pim ipv6 topology ff3e::8000:1\n<\/span><span>! Expected: Mirror image of Root:\n<\/span><span>!\n<\/span><span>! (2001:db8:100::1, ff3e::8000:1) SPT - Root's tree (Tail joined it)\n<\/span><span>! RPF: toward P2 (incoming from core)\n<\/span><span>! Loopback0 fwd LH MV6S\n<\/span><span>!\n<\/span><span>! (2001:db8:100::5, ff3e::8000:1) SPT - Tail's own tree\n<\/span><span>! RPF: Loopback0,2001:db8:100::5*\n<\/span><span>! Loopback0 fwd LI LH\n<\/span><span>! HundredGigE0\/0\/0\/0 fwd Join\n<\/span><\/code><\/pre>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Step 3: Customer Multicast Join<\/h3>\n<p>When a receiver sends an IGMP or PIM join for a customer <code>(S,G)<\/code>, the receiver PE creates VRF <code>C(S,G)<\/code> state and originates a BGP MVPN Type 7 Source Tree Join route. The ingress PE, Root, receives the Type 7 via the RR and starts forwarding customer traffic onto the MDT.<\/p>\n<pre><code><span>! === Tail - verify VRF customer multicast state after receiver joins ===\n<\/span><span>show pim vrf red topo 232.1.1.1 198.51.100.100\n<\/span><span>! Expected for customer flow (198.51.100.100, 232.1.1.1):\n<\/span><span>!\n<\/span><span>! (198.51.100.100,232.1.1.1) SPT\n<\/span><span>! JP: Join(BGP) RPF: mdt6red,2001:db8:100::1\n<\/span><span>! HundredGigE0\/0\/0\/1 fwd Join(...) LI\n<\/span><span>!\n<\/span><span>! KEY INDICATORS:\n<\/span><span>! \"Join(BGP)\" - the join was signaled via BGP Type 7, NOT PIM over the MDT.\n<\/span><span>! \"RPF: mdt6red,2001:db8:100::1\" - RPF points to Root via the MDT tunnel interface.\n<\/span><span>! The outgoing interface is toward the CE\/receiver.\n<\/span><span>! === Tail - verify Type 7 route originated locally ===\n<\/span><span>show bgp ipv4 mvpn route-type 7\n<\/span><span>! Expected: locally originated Type 7 encoding the customer C-source and C-group:\n<\/span><span>! *&gt; [7][192.0.2.1:0][65000][32][198.51.100.100][32][232.1.1.1]\/184\n<\/span><span>! 0.0.0.0 0 i\n<\/span><span>!\n<\/span><span>! Route encoding: [Type][RD][Source-AS][SrcLen][C-Source][GrpLen][C-Group]\n<\/span><span>! Next-hop 0.0.0.0 = locally originated.\n<\/span><span>! === Root - verify VRF customer multicast state after receiving Type 7 ===\n<\/span><span>show pim vrf red topo 232.1.1.1 198.51.100.100\n<\/span><span>! Expected:\n<\/span><span>! (198.51.100.100,232.1.1.1) SPT\n<\/span><span>! JP: Join(...) RPF: HundredGigE0\/0\/0\/2,198.51.100.1\n<\/span><span>! mdt6red fwd BGP\n<\/span><span>!\n<\/span><span>! KEY INDICATORS:\n<\/span><span>! \"Join(now)\" - Root has an active join for this C(S,G).\n<\/span><span>! \"RPF: HundredGigE0\/0\/0\/2,198.51.100.1\" - RPF toward the CE\/source.\n<\/span><span>! \"mdt6red fwd BGP\" - outgoing onto the MDT tunnel, triggered by BGP Type 7.\n<\/span><span>! === Root - verify Type 7 received from a receiver PE via RR ===\n<\/span><span>show bgp ipv4 mvpn route-type 7\n<\/span><span>! Expected: Type 7 received from a receiver PE via RR:\n<\/span><span>! *&gt;i[7][192.0.2.1:0][65000][32][198.51.100.100][32][232.1.1.1]\/184\n<\/span><span>! 2001:db8:100::3 100 0 i\n<\/span><span>!\n<\/span><span>! If both Mid and Tail have active receivers, the RR can learn one Type 7 route\n<\/span><span>! per receiver PE. The ingress PE installs the selected path or paths according\n<\/span><span>! to normal BGP best-path and multipath behavior.\n<\/span><\/code><\/pre>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Step 4: IPv4 Customer Data Plane<\/h3>\n<p>Once the control plane is fully converged, verify that the IPv4 customer multicast traffic is flowing end-to-end over the IPv6 MDT.<\/p>\n<p>In the validation setup, traffic generator and receiver hosts were attached to the PE customer-facing interfaces to prove packet delivery for the IPv4 SSM flow. A traffic source host generated UDP multicast traffic from <code>198.51.100.100<\/code> toward <code>232.1.1.1<\/code>. Receiver hosts behind Mid and Tail joined the group and each received the full packet stream. The attached validation hosts are used only to generate and receive customer multicast traffic; they are not part of the provider multicast service architecture.<\/p>\n<pre><code><span>! === Root - confirm customer traffic is encapsulated onto the MDT ===\n<\/span><span>show mrib vrf red route 232.1.1.1 198.51.100.100\n<\/span><span>! Expected: forwarding entry for the customer (S,G) with:\n<\/span><span>! Incoming interface: HundredGigE0\/0\/0\/2\n<\/span><span>! Outgoing interface: mdt6red\n<\/span><span>! === Tail - confirm customer traffic is decapsulated from the MDT ===\n<\/span><span>show mrib vrf red route 232.1.1.1 198.51.100.100\n<\/span><span>! Expected: forwarding entry for the customer (S,G) with:\n<\/span><span>! Incoming interface: mdt6red\n<\/span><span>! Outgoing interface: HundredGigE0\/0\/0\/1\n<\/span><span>! === Provider core - confirm native IPv6 MDT state ===\n<\/span><span>show mrib ipv6 route ff3e::8000:1\n<\/span><span>! Expected: provider P(S,G) entries for the PE loopbacks and MDT group.\n<\/span><span>! On transit P routers, the entries should contain only core-facing physical interfaces,\n<\/span><span>! with no VRF, no BGP MVPN, and no MDT tunnel interface.\n<\/span><\/code><\/pre>\n<p>Representative validation lab output from the IPv4 packet test:<\/p>\n<pre><code><span>TrafficSource:\n<\/span><span> 1000 packets sent from 198.51.100.100 to 232.1.1.1 UDP\/5000\n<\/span><span>MidReceiver:\n<\/span><span> 1000 packets received\n<\/span><span> rx1000 from 198.51.100.100... srv6-mcast seq=1000\n<\/span><span>TailReceiver:\n<\/span><span> 1000 packets received\n<\/span><span> rx1000 from 198.51.100.100... srv6-mcast seq=1000\n<\/span><\/code><\/pre>\n<p>Representative PE state while traffic was active:<\/p>\n<pre><code><span>Root:\n<\/span><span> (198.51.100.100,232.1.1.1) SPT\n<\/span><span> RPF: HundredGigE0\/0\/0\/2,198.51.100.1\n<\/span><span> mdt6red fwd BGP\n<\/span><span> Incoming Interface List\n<\/span><span> HundredGigE0\/0\/0\/2\n<\/span><span> Outgoing Interface List\n<\/span><span> mdt6red\n<\/span><span>Mid:\n<\/span><span> (198.51.100.100,232.1.1.1) SPT\n<\/span><span> JP: Join(BGP) RPF: mdt6red,2001:db8:100::1\n<\/span><span> Incoming Interface List\n<\/span><span> mdt6red\n<\/span><span> Outgoing Interface List\n<\/span><span> HundredGigE0\/0\/0\/2\n<\/span><span>Tail:\n<\/span><span> (198.51.100.100,232.1.1.1) SPT\n<\/span><span> JP: Join(BGP) RPF: mdt6red,2001:db8:100::1\n<\/span><span> Incoming Interface List\n<\/span><span> mdt6red\n<\/span><span> Outgoing Interface List\n<\/span><span> HundredGigE0\/0\/0\/1\n<\/span><\/code><\/pre>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Step 5: IPv6 Customer Data Plane<\/h3>\n<p>The same VRF and Default MDT model also carries IPv6 customer multicast traffic. In the validation setup, the IPv6 customer source is <code>2001:db8:198:51::100<\/code>, the IPv6 customer SSM group is <code>ff3e::8000:2321<\/code>, and the traffic is carried in VRF <code>red<\/code> over the same IPv6 Default MDT group <code>ff3e::8000:1<\/code>.<\/p>\n<p>Mid and Tail use static MLD receiver state for the IPv6 customer SSM flow:<\/p>\n<pre><code><span>router mld\n<\/span><span> vrf red\n<\/span><span> interface HundredGigE0\/0\/0\/2\n<\/span><span> static-group ff3e::8000:2321 2001:db8:198:51::100\n<\/span><span>!\n<\/span><span>!\n<\/span><span>!\n<\/span><\/code><\/pre>\n<p>On Tail, the receiver-facing interface is <code>HundredGigE0\/0\/0\/1<\/code>; the static group statement is otherwise the same. This creates customer VRF receiver interest for the IPv6 <code>C(S,G)<\/code>, just as IGMP or PIM receiver interest creates customer VRF state for the IPv4 <code>C(S,G)<\/code>.<\/p>\n<pre><code><span>! === Root - confirm IPv6 customer traffic is encapsulated onto the MDT ===\n<\/span><span>show pim vrf red ipv6 topology\n<\/span><span>show mrib vrf red ipv6 route\n<\/span><span>! Expected: forwarding entry for the IPv6 customer C(S,G) with:\n<\/span><span>! C-source: 2001:db8:198:51::100\n<\/span><span>! C-group: ff3e::8000:2321\n<\/span><span>! Incoming interface: HundredGigE0\/0\/0\/2\n<\/span><span>! Outgoing interface: mdt6red\n<\/span><span>! === Mid - confirm IPv6 customer traffic is decapsulated from the MDT ===\n<\/span><span>show pim vrf red ipv6 topology\n<\/span><span>show mrib vrf red ipv6 route\n<\/span><span>! Expected: forwarding entry for the IPv6 customer C(S,G) with:\n<\/span><span>! Incoming interface: mdt6red\n<\/span><span>! Outgoing interface: HundredGigE0\/0\/0\/2\n<\/span><span>! === Tail - confirm IPv6 customer traffic is decapsulated from the MDT ===\n<\/span><span>show pim vrf red ipv6 topology\n<\/span><span>show mrib vrf red ipv6 route\n<\/span><span>! Expected: forwarding entry for the IPv6 customer C(S,G) with:\n<\/span><span>! Incoming interface: mdt6red\n<\/span><span>! Outgoing interface: HundredGigE0\/0\/0\/1\n<\/span><\/code><\/pre>\n<p>Representative validation lab output from the IPv6 packet test:<\/p>\n<pre><code><span>TrafficSource:\n<\/span><span> 1000 packets sent from 2001:db8:198:51::100 to ff3e::8000:2321 UDP\/5001\n<\/span><span>MidReceiver:\n<\/span><span> 1000 packets received\n<\/span><span> rx1000 from 2001:db8:198:51::100... srv6-mcast6 seq=1000\n<\/span><span>TailReceiver:\n<\/span><span> 1000 packets received\n<\/span><span> rx1000 from 2001:db8:198:51::100... srv6-mcast6 seq=1000\n<\/span><\/code><\/pre>\n<p>Representative IPv6 customer VRF state while traffic was active:<\/p>\n<pre><code><span>Root:\n<\/span><span> (2001:db8:198:51::100,ff3e::8000:2321) SPT\n<\/span><span> RPF: HundredGigE0\/0\/0\/2,2001:db8:198:51::1\n<\/span><span> mdt6red fwd BGP\n<\/span><span> Incoming Interface List\n<\/span><span> HundredGigE0\/0\/0\/2\n<\/span><span> Outgoing Interface List\n<\/span><span> mdt6red\n<\/span><span>Mid:\n<\/span><span> (2001:db8:198:51::100,ff3e::8000:2321) SPT\n<\/span><span> JP: Join(BGP) RPF: mdt6red,2001:db8:100::1\n<\/span><span> Incoming Interface List\n<\/span><span> mdt6red\n<\/span><span> Outgoing Interface List\n<\/span><span> HundredGigE0\/0\/0\/2\n<\/span><span>Tail:\n<\/span><span> (2001:db8:198:51::100,ff3e::8000:2321) SPT\n<\/span><span> JP: Join(BGP) RPF: mdt6red,2001:db8:100::1\n<\/span><span> Incoming Interface List\n<\/span><span> mdt6red\n<\/span><span> Outgoing Interface List\n<\/span><span> HundredGigE0\/0\/0\/1\n<\/span><\/code><\/pre>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700\">Deployment Considerations<\/h2>\n<p>For each multicast-enabled VRF, the initial deployment model uses MDT transport over IPv6 only. Operators transitioning from an IPv4 multicast core should plan for a dedicated migration window rather than a mixed-mode cutover.<\/p>\n<p>Key design considerations:<\/p>\n<ul>\n<li>Each multicast-enabled VRF should be planned around a single MDT\/core transport address family for a given deployment phase.<\/li>\n<li>Migration from IPv4 GRE-based MDTs to IPv6 IP-in-IP MDTs requires a planned cutover per VRF.<\/li>\n<li>This article covers single-AS deployments; inter-AS MVPN and extranet multicast are outside the current scope.<\/li>\n<li>Consult the platform-specific release notes for supported hardware configurations and scale limits.<\/li>\n<\/ul>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700\">Future Enhancements<\/h2>\n<p>The following capabilities build on the architecture described above and are supported by the underlying standards, but they are not part of the initial deployment model and are planned for subsequent phases. Consult the platform-specific release notes for current availability.<\/p>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Flex-Algo Integration<\/h3>\n<p>Flex-Algo can extend this architecture to influence multicast tree construction in the provider core:<\/p>\n<ul>\n<li>PIM tree construction can follow Flex-Algo constraint-based paths for latency, affinity, or bandwidth.<\/li>\n<li>On receiving a multicast subscription for <code>(S,G)<\/code>, a hop-by-hop tree is built toward the source following the Flex-Algo-defined path.<\/li>\n<li>This enables traffic-engineered multicast without RSVP-TE.<\/li>\n<\/ul>\n<h3 style=\"color: rgb(26, 26, 26); font-weight: 700\">Global Table Multicast<\/h3>\n<p>The architecture described above focuses on VRF multicast, where customer traffic is encapsulated in IP-in-IPv6 tunnels across the provider core. However, not all multicast requires VPN isolation.<\/p>\n<p>For multicast in the global routing table, an end-to-end IPv6 core simplifies things further: IPv6 multicast flows natively via PIMv6 without any encapsulation, tunnels, or MDT overlay. This is the simplest deployment model: standard PIMv6-SSM forwarding with no additional machinery.<\/p>\n<p>RFC 7716 extends BGP MVPN procedures to the global table, providing an option to use BGP-based Auto-Discovery and signaling for global table multicast, useful when operators want a consistent BGP MVPN operational model across both VRF and global table multicast.<\/p>\n<table class=\"english-numbers\">\n<thead>\n<tr>\n<th>Aspect<\/th>\n<th>VRF multicast<\/th>\n<th>Global Table Multicast<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Forwarding context<\/td>\n<td>Per-VRF<\/td>\n<td>Global routing table<\/td>\n<\/tr>\n<tr>\n<td>Encapsulation<\/td>\n<td>IP-in-IPv6<\/td>\n<td>None, native PIMv6<\/td>\n<\/tr>\n<tr>\n<td>BGP signaling<\/td>\n<td>Required, MVPN Types 1 and 7<\/td>\n<td>Optional, RFC 7716<\/td>\n<\/tr>\n<tr>\n<td>Use case<\/td>\n<td>L3VPN customer multicast<\/td>\n<td>Network-wide multicast without VPN isolation<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>In the basic GTM case, multicast forwarding is native IPv6 multicast in the global routing table: no VRF, no route distinguisher, no MDT overlay, and no IP-in-IP encapsulation are used. RFC 7716 defines an optional BGP MVPN-based model for global table multicast. The configuration and verification example in this article focuses on the VRF multicast model using BGP MVPN and IPv6 MDTs.<\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700\">Conclusion<\/h2>\n<p>Cisco&#8217;s architecture for multicast services over SRv6 \/ IPv6 cores uses a two-plane design: BGP MVPN overlay for PE discovery and customer signaling, and PIMv6-SSM underlay for native IPv6 multicast transport, with simple IP-in-IP encapsulation. No SRv6-specific multicast extensions are required.<\/p>\n<p>Key takeaways:<\/p>\n<ul>\n<li><strong style=\"color: rgb(26, 26, 26)\">Standards-based building blocks<\/strong> &#8211; Built on RFC 6513\/6514 MVPN, RFC 6515\/8950 IPv6 underlay signaling support, and RFC 7761 PIM-SM\/SSM behavior. No proprietary protocols are in the forwarding path.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Minimal deployment footprint<\/strong> &#8211; Only edge PEs require multicast VPN functionality. Transit P routers need native IPv6 multicast\/PIMv6 support, but no VPN awareness.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Unified transport<\/strong> &#8211; The same PIMv6-SSM Default MDT infrastructure carries L3VPN multicast for both IPv4 and IPv6 customer traffic.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Scalable<\/strong> &#8211; Default MDTs provide baseline per-VRF connectivity; Data MDTs deliver bandwidth-efficient selective trees for high-rate flows.<\/li>\n<li><strong style=\"color: rgb(26, 26, 26)\">Room to grow<\/strong> &#8211; Flex-Algo traffic engineering and Global Table Multicast are standards-based enhancements planned for subsequent phases.<\/li>\n<\/ul>\n<p>With growing multi-vendor IETF support, this is the direction Cisco is driving for multicast services over SRv6 \/ IPv6 cores.<\/p>\n<h2 style=\"color: rgb(26, 26, 26); font-weight: 700\">References<\/h2>\n<table class=\"english-numbers\">\n<thead>\n<tr>\n<th>Topic<\/th>\n<th>Link<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>RFC 6513 &#8211; Multicast in MPLS\/BGP IP VPNs<\/td>\n<td><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc6513\" style=\"color: rgb(0, 102, 204)\">rfc-editor.org\/rfc\/rfc6513<\/a><\/td>\n<\/tr>\n<tr>\n<td>RFC 6514 &#8211; BGP Encodings and Procedures for Multicast in MPLS\/BGP IP VPNs<\/td>\n<td><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc6514\" style=\"color: rgb(0, 102, 204)\">rfc-editor.org\/rfc\/rfc6514<\/a><\/td>\n<\/tr>\n<tr>\n<td>RFC 6515 &#8211; IPv4 and IPv6 Infrastructure Addresses in BGP Updates for Multicast VPNs<\/td>\n<td><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc6515\" style=\"color: rgb(0, 102, 204)\">rfc-editor.org\/rfc\/rfc6515<\/a><\/td>\n<\/tr>\n<tr>\n<td>RFC 7716 &#8211; Global Table Multicast with BGP Multicast VPN Procedures<\/td>\n<td><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc7716\" style=\"color: rgb(0, 102, 204)\">rfc-editor.org\/rfc\/rfc7716<\/a><\/td>\n<\/tr>\n<tr>\n<td>RFC 8950 &#8211; Advertising IPv4 NLRI with an IPv6 Next Hop<\/td>\n<td><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8950\" style=\"color: rgb(0, 102, 204)\">rfc-editor.org\/rfc\/rfc8950<\/a><\/td>\n<\/tr>\n<tr>\n<td>RFC 7761 &#8211; Protocol Independent Multicast &#8211; Sparse Mode<\/td>\n<td><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc7761\" style=\"color: rgb(0, 102, 204)\">rfc-editor.org\/info\/rfc7761<\/a><\/td>\n<\/tr>\n<tr>\n<td>RFC 8402 &#8211; Segment Routing Architecture<\/td>\n<td><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc8402\" style=\"color: rgb(0, 102, 204)\">rfc-editor.org\/info\/rfc8402<\/a><\/td>\n<\/tr>\n<tr>\n<td>RFC 8986 &#8211; Segment Routing over IPv6 Network Programming<\/td>\n<td><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc8986\" style=\"color: rgb(0, 102, 204)\">rfc-editor.org\/info\/rfc8986<\/a><\/td>\n<\/tr>\n<tr>\n<td>RFC 9350 &#8211; IGP Flexible Algorithm<\/td>\n<td><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc9350\" style=\"color: rgb(0, 102, 204)\">rfc-editor.org\/info\/rfc9350<\/a><\/td>\n<\/tr>\n<tr>\n<td>RFC 9502 &#8211; IGP Flexible Algorithm in IP Networks<\/td>\n<td><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc9502\" style=\"color: rgb(0, 102, 204)\">rfc-editor.org\/info\/rfc9502<\/a><\/td>\n<\/tr>\n<tr>\n<td>Multicast over SRv6 IETF PIM WG draft<\/td>\n<td><a href=\"https:\/\/datatracker.ietf.org\/doc\/draft-ietf-pim-multicast-over-srv6\/\" style=\"color: rgb(0, 102, 204)\">datatracker.ietf.org\/doc\/draft-ietf-pim-multicast-over-srv6<\/a><\/td>\n<\/tr>\n<tr>\n<td>Multicast Distribution Trees on xrdocs<\/td>\n<td><a href=\"https:\/\/xrdocs.io\/multicast\/blogs\/multicast-distribution-trees-mdts\" style=\"color: rgb(0, 102, 204)\">xrdocs.io\/multicast\/blogs\/multicast-distribution-trees-mdts<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Service provider cores are steadily moving toward IPv6-only transport and Segment Routing over IPv6 (SRv6) services, but multicast cannot be treated as an\u2026<\/p>\n","protected":false},"author":1,"featured_media":215,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[69,200,206,202,204],"tags":[],"class_list":["post-217","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-iosxr-en-en","category-ipv6-en","category-multicast-en","category-mvpn-en","category-srv6-en"],"_links":{"self":[{"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/posts\/217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/comments?post=217"}],"version-history":[{"count":0,"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/posts\/217\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/media\/215"}],"wp:attachment":[{"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/media?parent=217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/categories?post=217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.anynet.ir\/blog\/wp-json\/wp\/v2\/tags?post=217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}