-
Notifications
You must be signed in to change notification settings - Fork 460
IPv6 Multicast
IPv6 Multicast is a BGP address family (AFI 2, SAFI 2) that enables BGP to carry multicast routing information for IPv6 networks. It provides Reverse Path Forwarding (RPF) information for IPv6 multicast protocols like PIMv6 (Protocol Independent Multicast for IPv6) and MLDv2 (Multicast Listener Discovery version 2), enabling inter-domain IPv6 multicast routing.
ExaBGP provides full IPv6 Multicast (SAFI 2) support, enabling applications to programmatically announce and receive IPv6 multicast routes for next-generation multicast services, IPv6-only content delivery, and modern IPTV deployments.
- What is IPv6 Multicast (SAFI 2)?
- Why Use BGP for IPv6 Multicast?
- ExaBGP IPv6 Multicast Capabilities
- IPv6 Multicast vs IPv4 Multicast
- Key Concepts
- Configuration Examples
- API Examples
- Use Cases
- Common Errors and Solutions
- Important Considerations
- See Also
- References
IPv6 Multicast (AFI 2, SAFI 2) is a BGP Subsequent Address Family Identifier that enables BGP to carry IPv6 multicast routing information. Like its IPv4 counterpart, it provides Reverse Path Forwarding (RPF) information for source-based multicast tree construction, but operates on IPv6 addresses and integrates with PIMv6 and MLDv2.
[IPv6 Inter-Domain Multicast Architecture]
IPv6 Multicast Source (2001:db8:1::10)
β
β Streams: ff3e::1234:5678
β
ββββΌβββ ββββββββ
β AS β BGP IPv6 Multicast β AS β
β65001ββββββββββββββββββββββββββββββββΊβ65002 β
β β (AFI 2, SAFI 2 Routes) β β
βββββββ ββββ¬ββββ
β β
β PIMv6 Join β PIMv6 Join
β MLDv2 β MLDv2
β β
Receivers Receivers
(ff3e::1234:5678) (ff3e::1234:5678)
Process:
- BGP IPv6 Multicast Route Advertisement: ASes advertise reachable IPv6 multicast sources via BGP SAFI 2
- RPF Information: BGP routes provide RPF information for PIMv6
- PIMv6 Tree Building: PIMv6 uses BGP routes to determine upstream direction toward source
- MLDv2 Listener Reports: Receivers send MLDv2 reports to join multicast groups
- Traffic Flow: IPv6 multicast traffic flows from source to receivers via PIMv6-constructed tree
IPv6 Multicast + BGP Benefits:
- β Inter-AS IPv6 multicast routing
- β RPF information distribution for PIMv6
- β Policy-based multicast routing via BGP attributes
- β Scalable multicast across IPv6-only networks
- β Separate IPv6 unicast and multicast topologies
- β Support for SSM (Source-Specific Multicast) - native to IPv6
- IPv6-Only IPTV: Next-generation video delivery over IPv6
- IoT Multicast: IPv6 IoT device discovery and data distribution
- IPv6 Data Centers: Multicast replication in IPv6-only data centers
- Financial Services: Market data over IPv6 networks
- CDN (Content Delivery): IPv6 multicast content distribution
ExaBGP provides full IPv6 Multicast (AFI 2, SAFI 2) support:
β IPv6 Multicast Routes (SAFI 2):
- Announce IPv6 prefixes with multicast SAFI
- Receive IPv6 multicast routes from BGP peers
- Next-hop handling for multicast RPF (IPv6 addresses)
β Standard BGP Attributes:
- AS-PATH, MED, LOCAL_PREF, COMMUNITIES
- Extended communities for policy
- All standard BGP attributes apply to IPv6 multicast routes
β IPv6-Specific Handling:
- Link-local next-hop support (fe80::/10)
- Global unicast next-hop (2000::/3)
- IPv6 prefix encoding (up to /128)
β Integration with PIMv6 and MLDv2:
- Provides RPF information for PIMv6
- Coordinates inter-AS IPv6 multicast tree building
- Supports SSM (Source-Specific Multicast) - ff3x::/32
Implementation:
-
src/exabgp/bgp/message/update/nlri/inet.py(IPv6 NLRI handling) -
src/exabgp/protocol/family.py(AFI.ipv6, SAFI.multicast)
-
RFC 4760: Multiprotocol Extensions for BGP-4 - Fully Implemented
- AFI 2, SAFI 2 (IPv6 Multicast) support
- MP_REACH_NLRI and MP_UNREACH_NLRI for IPv6 multicast routes
-
RFC 2545: Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing
- IPv6 address family support in BGP
| Feature | IPv4 Multicast | IPv6 Multicast |
|---|---|---|
| AFI/SAFI | AFI 1, SAFI 2 | AFI 2, SAFI 2 |
| Address Space | 224.0.0.0/4 (class D) | ff00::/8 |
| Listener Protocol | IGMP (v1/v2/v3) | MLDv2 (based on ICMPv6) |
| PIM Protocol | PIM-SM, PIM-SSM | PIMv6 |
| SSM Range | 232.0.0.0/8 | ff3x::/32 |
| Next-Hop | IPv4 address | IPv6 address (can be link-local) |
| Address Allocation | Limited (268M addresses) | Abundant (2^120 addresses) |
| Deployment | Legacy networks | Modern/greenfield networks |
- Larger Address Space: ff00::/8 provides 2^120 multicast addresses
- SSM Native: Source-Specific Multicast is integral to IPv6 multicast design
- Simplified Protocol: MLDv2 based on ICMPv6 (no separate protocol like IGMP)
- Better Scoping: Built-in scope field (ff0s::) - link-local, site-local, organization-local, global
- No Fragmentation: IPv6 Path MTU Discovery avoids multicast fragmentation issues
Format: ffxy::/8 where:
-
ff= Fixed prefix for multicast -
x= Flags (0 = permanent, 1 = transient) -
y= Scope (1 = interface-local, 2 = link-local, 5 = site-local, 8 = organization-local, e = global)
Common Scopes:
ff02::/16 Link-local multicast
ff05::/16 Site-local multicast
ff08::/16 Organization-local multicast
ff0e::/16 Global multicast
Well-Known IPv6 Multicast Addresses:
ff02::1 All nodes (link-local)
ff02::2 All routers (link-local)
ff02::5 OSPFv3 routers
ff02::6 OSPFv3 DR routers
ff02::9 RIP routers
ff02::d PIM routers
ff02::16 MLDv2-capable routers
SSM (Source-Specific Multicast) Range:
ff3x::/32 SSM range (x = scope)
Examples:
ff3e::/32 Global SSM
ff35::/32 Site-local SSM
MLDv2 is the IPv6 equivalent of IGMPv3, used by receivers to signal multicast group membership to routers.
MLDv2 Message Types (ICMPv6):
- Multicast Listener Query: Router queries for active listeners
- Multicast Listener Report: Receiver reports group membership
- Multicast Listener Done: Receiver leaves group (optimization)
MLDv2 vs IGMPv3:
- MLDv2 uses ICMPv6 (type 130, 131, 132) instead of IGMP
- Same SSM support (include/exclude source lists)
- Integrated with IPv6 Neighbor Discovery
BGP's Role: BGP provides RPF information; MLDv2 handles receiver signaling.
PIMv6 (Protocol Independent Multicast for IPv6) is the multicast routing protocol for IPv6.
PIMv6 Modes:
- PIM-SM (Sparse Mode): Uses Rendezvous Point (RP)
- PIM-SSM (Source-Specific Multicast): No RP required, uses (S,G) state only
PIMv6 Messages (sent to ff02::d - all PIM routers):
- Hello, Join/Prune, Assert, Bootstrap, Register
BGP Integration: PIMv6 uses BGP IPv6 multicast routes (SAFI 2) for RPF checks.
RPF (Reverse Path Forwarding) Check for IPv6 multicast:
- Router receives IPv6 multicast packet from source S (2001:db8:1::10)
- Router checks: "If I were to send a packet to 2001:db8:1::10, would it go out the interface this multicast packet arrived on?"
- If YES: RPF check passes β forward multicast packet
- If NO: RPF check fails β drop packet (loop prevention)
BGP's Role: Provides IPv6 routes in multicast RIB (mRIB) for RPF checks.
Link-Local Next-Hop Consideration:
- IPv6 BGP can use link-local next-hops (fe80::/10)
- For RPF, global unicast next-hop preferred
- ExaBGP supports both link-local and global next-hops
# /etc/exabgp/ipv6-multicast.conf
neighbor 2001:db8::1 {
router-id 192.0.2.2; # Router ID still IPv4 format
local-address 2001:db8::2; # Local IPv6 address
local-as 65001;
peer-as 65000;
# Enable IPv6 Multicast address family
family {
ipv6 multicast; # AFI 2, SAFI 2
}
# API process for dynamic IPv6 multicast route announcements
api {
processes [ ipv6-multicast-controller ];
}
}
process ipv6-multicast-controller {
run python3 /etc/exabgp/ipv6-multicast-announce.py;
encoder text;
}# /etc/exabgp/dual-stack-multicast.conf
neighbor 2001:db8::1 {
router-id 192.0.2.2;
local-address 2001:db8::2;
local-as 65001;
peer-as 65000;
# Enable both IPv4 and IPv6 multicast
family {
ipv4 unicast;
ipv4 multicast;
ipv6 unicast;
ipv6 multicast; # IPv6 multicast for RPF
}
api {
processes [ dual-stack-controller ];
}
}
process dual-stack-controller {
run python3 /etc/exabgp/dual-stack-announce.py;
encoder text;
}Basic IPv6 multicast route announcement:
#!/usr/bin/env python3
# /etc/exabgp/ipv6-multicast-announce.py
import sys
import time
def announce_ipv6_multicast(prefix, nexthop="self", local_pref=None):
"""Announce IPv6 multicast route for RPF"""
cmd = f"announce route {prefix} next-hop {nexthop}"
if local_pref:
cmd += f" local-preference {local_pref}"
print(cmd)
sys.stdout.flush()
def withdraw_ipv6_multicast(prefix, nexthop="self"):
"""Withdraw IPv6 multicast route"""
print(f"withdraw route {prefix} next-hop {nexthop}")
sys.stdout.flush()
# Announce IPv6 multicast route for source network
announce_ipv6_multicast(
prefix="2001:db8:1::/48", # Network containing multicast sources
nexthop="self",
local_pref=200 # Prefer this path for multicast RPF
)
# Keep process running
while True:
time.sleep(60)Announce IPv6 multicast route:
# Basic announcement
print("announce route 2001:db8:1::/48 next-hop self")
sys.stdout.flush()
# With BGP attributes
print("announce route 2001:db8:1::/48 "
"next-hop self "
"local-preference 200 "
"med 10 "
"community [ 65001:100 ]")
sys.stdout.flush()
# With explicit IPv6 next-hop
print("announce route 2001:db8:1::/48 "
"next-hop 2001:db8::1 " # Explicit global unicast next-hop
"local-preference 200")
sys.stdout.flush()Withdraw IPv6 multicast route:
print("withdraw route 2001:db8:1::/48 next-hop self")
sys.stdout.flush()#!/usr/bin/env python3
# /etc/exabgp/ipv6-multicast-health-check.py
import sys
import time
import subprocess
def check_ipv6_source_reachable(source_ipv6):
"""Check if IPv6 multicast source is reachable"""
try:
result = subprocess.run(
['ping6', '-c', '1', '-W', '1', source_ipv6],
capture_output=True,
timeout=2
)
return result.returncode == 0
except:
return False
def announce_multicast(prefix, nexthop="self"):
print(f"announce route {prefix} next-hop {nexthop} local-preference 200")
sys.stdout.flush()
def withdraw_multicast(prefix, nexthop="self"):
print(f"withdraw route {prefix} next-hop {nexthop}")
sys.stdout.flush()
prefix = "2001:db8:1::/48"
source_ipv6 = "2001:db8:1::10"
announced = False
while True:
reachable = check_ipv6_source_reachable(source_ipv6)
if reachable and not announced:
announce_multicast(prefix)
announced = True
print(f"# IPv6 multicast source {source_ipv6} reachable, route announced", file=sys.stderr)
elif not reachable and announced:
withdraw_multicast(prefix)
announced = False
print(f"# IPv6 multicast source {source_ipv6} unreachable, route withdrawn", file=sys.stderr)
time.sleep(5)Received IPv6 multicast route (JSON format from ExaBGP):
{
"exabgp": "5.0",
"type": "update",
"neighbor": {
"address": {"local": "2001:db8::2", "peer": "2001:db8::1"},
"message": {
"update": {
"announce": {
"ipv6 multicast": {
"2001:db8:1::/48": {
"attributes": {
"next-hop": "2001:db8::1",
"local-preference": 200,
"med": 10,
"as-path": [65000],
"community": ["65001:100"]
}
}
}
}
}
}
}
}Scenario: Service provider deploying next-generation IPTV over IPv6-only infrastructure.
How IPv6 Multicast Helps:
- Native IPv6 multicast for video delivery
- Larger address space for channel allocation
- Better scalability than IPv4 multicast
- BGP coordination across IPv6-only ASes
ExaBGP Role:
- Announce IPv6 encoder networks
- Health-check-based route management
- Policy-based path selection (low-latency routes)
- Integration with IPv6 IPTV head-end
Example:
# Announce IPv6 IPTV source network
print("announce route 2001:db8:iptv::/48 "
"next-hop self "
"local-preference 300 "
"community [ 65001:IPTV-PRIMARY ]")Scenario: Large-scale IPv6 IoT deployment using multicast for device discovery and data distribution.
How IPv6 Multicast Helps:
- Efficient device discovery (ff02::1, ff05::, etc.)
- Firmware updates via multicast
- Sensor data aggregation
- Inter-site IoT data distribution via BGP
ExaBGP Role:
- Announce IoT controller networks
- Dynamic route updates for IoT infrastructure changes
- Inter-site multicast coordination
Scenario: IPv6-only data centers using multicast for database replication and distributed cache updates.
How IPv6 Multicast Helps:
- Efficient data replication (one send, many receivers)
- BGP multicast for inter-DC coordination
- Lower latency than TCP-based replication
- Native IPv6 simplifies dual-stack complexity
ExaBGP Role:
- Announce data center IPv6 prefixes
- Health-based route failover
- Integration with IPv6 orchestration
Scenario: Stock exchanges migrating to IPv6, distributing market data via IPv6 multicast.
How IPv6 Multicast Helps:
- Future-proof infrastructure (IPv6)
- Low-latency multicast distribution
- Abundant address space for market data feeds
- Inter-exchange coordination via BGP
ExaBGP Role:
- Announce exchange IPv6 networks
- Rapid failover (primary/backup exchanges)
- Policy-based low-latency routing
Scenario: CDN delivering live events via IPv6 multicast to edge caches.
How IPv6 Multicast Helps:
- Efficient live event distribution
- IPv6-only edge nodes (simplified infrastructure)
- BGP multicast for inter-PoP coordination
- Abundant IPv6 address space
ExaBGP Role:
- Announce origin server IPv6 networks
- Dynamic route updates during live events
- Failover and load balancing
Cause: BGP session doesn't have ipv6 multicast family configured.
Solution: Enable IPv6 multicast address family on both peers.
ExaBGP:
neighbor 2001:db8::1 {
family {
ipv6 multicast; # Enable AFI 2, SAFI 2
}
}Cisco IOS-XR:
router bgp 65000
neighbor 2001:db8::2
address-family ipv6 multicast β Enable IPv6 multicast
!
!
!
Juniper Junos:
protocols {
bgp {
group exabgp {
family inet6 {
multicast; β Enable IPv6 multicast
}
}
}
}
Cause: Invalid next-hop address (not global unicast 2000::/3 or link-local fe80::/10).
Solution: Use valid IPv6 next-hop.
# Valid: Global unicast
print("announce route 2001:db8:1::/48 next-hop 2001:db8::1")
# Valid: "self" (ExaBGP uses local-address)
print("announce route 2001:db8:1::/48 next-hop self")
# Invalid: Loopback (::1)
print("announce route 2001:db8:1::/48 next-hop ::1") # ErrorCause: PIMv6 router not using IPv6 multicast RIB (mRIB) for RPF checks.
Solution: Ensure PIMv6 is configured to use IPv6 multicast BGP routes for RPF.
Cisco IOS-XR:
router pim
address-family ipv6
rpf topology route-policy ipv6-mcast-rpf β Use IPv6 multicast RIB
!
!
Juniper Junos:
protocols {
pim {
rib-group inet6 ipv6-multicast-rib; β Use IPv6 multicast RIB
}
}
Cause: Multiple potential issues:
- PIMv6 not running on router
- MLDv2 not enabled on receiver-facing interfaces
- RPF check failing
- Multicast forwarding not enabled
Solution: Verify full multicast stack.
Check PIMv6:
# Cisco IOS-XR
show pim ipv6 neighbor
show mrib ipv6 route
# Juniper Junos
show pim neighbors
show multicast ipv6 routeCheck MLDv2:
# Linux
ip -6 maddress show # Show IPv6 multicast group membershipsCause: ExaBGP does NOT forward IPv6 multicast traffic. It only provides BGP signaling.
Solution: ExaBGP provides RPF information via BGP. The router must:
- Run PIMv6 (Protocol Independent Multicast for IPv6)
- Have MLDv2 enabled on receiver interfaces
- Use BGP IPv6 multicast routes in mRIB for RPF
- Have IPv6 multicast forwarding enabled in kernel
Remember: ExaBGP announces routes for RPF but does NOT:
- Forward IPv6 multicast packets
- Run PIMv6
- Handle MLDv2
- Install IPv6 multicast forwarding entries (mfib)
- Forward IPv6 multicast packets
- Run PIMv6 (Protocol Independent Multicast for IPv6)
- Handle MLDv2 (Multicast Listener Discovery)
- Install IPv6 multicast forwarding entries (mfib)
- Perform RPF checks
What ExaBGP DOES:
- β Send/receive IPv6 multicast routes via BGP (AFI 2, SAFI 2)
- β Provide RPF information for PIMv6
- β Coordinate inter-AS IPv6 multicast routing via BGP signaling
- β Support policy-based IPv6 multicast route control
External Infrastructure Required:
- IPv6 multicast-capable routers: Cisco, Juniper, Arista with PIMv6 support
- PIMv6 configuration: PIM-SM or PIM-SSM must be configured
- MLDv2: Receivers must send MLDv2 reports to join groups
- IPv6 multicast forwarding: Kernel IPv6 multicast forwarding must be enabled
Typical Architecture:
[Your Application]
β
βββ [ExaBGP] βββ BGP IPv6 Multicast ββββ [Routers]
β (RPF Signaling) β
β ββ PIMv6 (tree building)
β ββ MLDv2 (listener discovery)
β ββ IPv6 Multicast Forwarding
β
[IPv6 Multicast Sources] βββββββββββ [Routers] βββ [Receivers]
(Traffic Flow) (PIMv6 Tree)
Global Unicast Next-Hop (Recommended for RPF):
# Explicit global unicast next-hop
print("announce route 2001:db8:1::/48 next-hop 2001:db8::1")
# "self" uses local-address (must be global unicast)
print("announce route 2001:db8:1::/48 next-hop self")Link-Local Next-Hop (Valid but use with caution):
- Link-local next-hops (fe80::/10) are valid in IPv6 BGP
- For multicast RPF, global unicast next-hop is preferred
- Link-local next-hop requires interface specification (not in BGP NLRI)
Best Practice: Use global unicast next-hops for multicast routes.
Scope Management is critical in IPv6 multicast:
ff02::/16 Link-local (stays on local link)
ff05::/16 Site-local (stays within site)
ff08::/16 Org-local (stays within organization)
ff0e::/16 Global (internet-wide)
BGP Role: BGP multicast routes typically used for global or organization-local scope. Link-local and site-local handled by local PIMv6.
SSM (ff3x::/32) is preferred for new deployments:
SSM Advantages:
- No Rendezvous Point (RP) required
- (S,G) state only (no (*,G) state)
- Better security (receivers explicitly join source)
- Simpler configuration
ASM (ff0x::/96) for compatibility:
- Required for legacy applications
- Uses RP (Rendezvous Point)
- (*,G) and (S,G) state
ExaBGP supports both - announce source networks for SSM or ASM.
- Route Scale: ExaBGP handles thousands of IPv6 multicast routes
- BGP Convergence: Typically 1-5 seconds for route updates
- RPF Impact: Minimal latency (microseconds)
- IPv6 Multicast Forwarding: Line-rate forwarding (hardware-dependent)
Best Practices:
- Aggregate IPv6 source networks (/48 or /32 prefixes)
- Use SSM (ff3x::/32) for new deployments
- Monitor PIMv6 neighbor adjacencies
- Use route policies to control distribution
- BGP Authentication: Use MD5 or TCP-AO for BGP sessions
- IPv6 Multicast Access Control: Filter multicast sources and groups
- RPF Strict Mode: Drop packets failing RPF check
- Rate Limiting: Limit IPv6 multicast traffic to prevent abuse
- Neighbor Discovery Security: RA Guard, SEND (Secure Neighbor Discovery)
- IPv4 Multicast - IPv4 multicast address family
- IPv6 Unicast - IPv6 unicast routing
- Text API Reference - API commands for multicast
- JSON API Reference - JSON message format
- Configuration Syntax - Family configuration
- L3VPN - Multicast VPN (MVPN) for IPv6
- Content Delivery - CDN multicast use cases
- IPTV Services - Video delivery via multicast
- Debugging - Troubleshooting IPv6 multicast issues
- Monitoring - Monitoring IPv6 multicast routes
- First BGP Session - Basic BGP setup
- Quick Start - 5-minute tutorial
-
RFC 4760: Multiprotocol Extensions for BGP-4
- AFI 2, SAFI 2 (IPv6 Multicast) definition
- MP_REACH_NLRI and MP_UNREACH_NLRI
- https://datatracker.ietf.org/doc/html/rfc4760
-
RFC 2545: Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing
- IPv6 address family in BGP
- https://datatracker.ietf.org/doc/html/rfc2545
-
RFC 4291: IP Version 6 Addressing Architecture
- IPv6 multicast address format (ff00::/8)
- Scope definitions
- https://datatracker.ietf.org/doc/html/rfc4291
-
RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for IPv6
- MLDv2 protocol specification
- Source-Specific Multicast support
- https://datatracker.ietf.org/doc/html/rfc3810
-
RFC 5015: Bidirectional Protocol Independent Multicast (BIDIR-PIM)
- PIMv6 bidirectional mode
- https://datatracker.ietf.org/doc/html/rfc5015
-
RFC 4607: Source-Specific Multicast for IP
- SSM model (ff3x::/32 for IPv6)
- https://datatracker.ietf.org/doc/html/rfc4607
- ExaBGP GitHub: https://github.com/Exa-Networks/exabgp
- RFC Implementation: RFC-Information.md
-
Source Code:
src/exabgp/protocol/family.py(AFI.ipv6, SAFI.multicast)
- Cisco IPv6 Multicast Configuration: PIMv6 and BGP multicast integration
- Juniper IPv6 Multicast Routing: Junos IPv6 multicast and MBGP configuration
- Arista IPv6 Multicast: EOS IPv6 multicast routing
- IPv6 Network Administration (David Malone, Niall Richard Murphy) - IPv6 multicast chapter
- IP Multicast, Volume I (Josh Loveless, Ray Blair) - IPv6 multicast sections
π» Ghost written by Claude (Anthropic AI)
π Home
π Getting Started
π§ API
π‘οΈ Use Cases
π Address Families
βοΈ Configuration
π Operations
π Reference
- Architecture
- BGP State Machine
- Communities (RFC)
- Extended Communities
- BGP Ecosystem
- Capabilities (AFI/SAFI)
- RFC Support
π Migration
π Community
π External
- GitHub Repo β
- Slack β
- Issues β
π» Ghost written by Claude (Anthropic AI)