Skip to content

IPv6 Multicast

Thomas Mangin edited this page Nov 15, 2025 · 5 revisions

IPv6 Multicast Address Family

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.

Table of Contents


What is IPv6 Multicast (SAFI 2)?

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.

How IPv6 Multicast Works

[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:

  1. BGP IPv6 Multicast Route Advertisement: ASes advertise reachable IPv6 multicast sources via BGP SAFI 2
  2. RPF Information: BGP routes provide RPF information for PIMv6
  3. PIMv6 Tree Building: PIMv6 uses BGP routes to determine upstream direction toward source
  4. MLDv2 Listener Reports: Receivers send MLDv2 reports to join multicast groups
  5. Traffic Flow: IPv6 multicast traffic flows from source to receivers via PIMv6-constructed tree

Why Use BGP for IPv6 Multicast?

Advantages of IPv6 Multicast with BGP

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

Common Use Cases

  1. IPv6-Only IPTV: Next-generation video delivery over IPv6
  2. IoT Multicast: IPv6 IoT device discovery and data distribution
  3. IPv6 Data Centers: Multicast replication in IPv6-only data centers
  4. Financial Services: Market data over IPv6 networks
  5. CDN (Content Delivery): IPv6 multicast content distribution

ExaBGP IPv6 Multicast Capabilities

ExaBGP provides full IPv6 Multicast (AFI 2, SAFI 2) support:

Supported Features

βœ… 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 Support

  • 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

IPv6 Multicast vs IPv4 Multicast

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

Key IPv6 Multicast Advantages

  1. Larger Address Space: ff00::/8 provides 2^120 multicast addresses
  2. SSM Native: Source-Specific Multicast is integral to IPv6 multicast design
  3. Simplified Protocol: MLDv2 based on ICMPv6 (no separate protocol like IGMP)
  4. Better Scoping: Built-in scope field (ff0s::) - link-local, site-local, organization-local, global
  5. No Fragmentation: IPv6 Path MTU Discovery avoids multicast fragmentation issues

Key Concepts

IPv6 Multicast Addresses

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 (Multicast Listener Discovery)

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

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 in IPv6

RPF (Reverse Path Forwarding) Check for IPv6 multicast:

  1. Router receives IPv6 multicast packet from source S (2001:db8:1::10)
  2. 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?"
  3. If YES: RPF check passes β†’ forward multicast packet
  4. 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

Configuration Examples

Basic IPv6 Multicast Configuration

# /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;
}

Dual-Stack Multicast Configuration

# /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;
}

API Examples

Announce IPv6 Multicast Route (Text API)

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)

Text API Format Examples

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()

Conditional IPv6 Multicast Announcement

#!/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)

JSON API Format

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"]
              }
            }
          }
        }
      }
    }
  }
}

Use Cases

1. IPv6-Only IPTV Deployment

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 ]")

2. IoT Device Discovery (IPv6 Multicast)

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

3. IPv6 Data Center Replication

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

4. Financial Services (IPv6 Market Data)

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

5. Content Delivery Network (IPv6 CDN)

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

Common Errors and Solutions

Error: "IPv6 Multicast family not enabled"

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
            }
        }
    }
}

Error: "IPv6 next-hop must be global unicast or link-local"

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")  # Error

Error: "PIMv6 RPF check failing"

Cause: 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
    }
}

Error: "MLDv2 not receiving multicast traffic"

Cause: Multiple potential issues:

  1. PIMv6 not running on router
  2. MLDv2 not enabled on receiver-facing interfaces
  3. RPF check failing
  4. 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 route

Check MLDv2:

# Linux
ip -6 maddress show  # Show IPv6 multicast group memberships

Error: "IPv6 multicast routes announced but not forwarding"

Cause: 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)

Important Considerations

ExaBGP Does Not Manipulate RIB/FIB

⚠️ CRITICAL: ExaBGP is a BGP protocol engine. It does NOT:

  • 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)

IPv6 Next-Hop Handling

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.

IPv6 Multicast Scoping

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 (Source-Specific Multicast) Preference

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.

Performance Considerations

  • 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

Security Considerations

  • 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)

See Also

ExaBGP Documentation

Related Address Families

  • L3VPN - Multicast VPN (MVPN) for IPv6

Use Cases

Operations

  • Debugging - Troubleshooting IPv6 multicast issues
  • Monitoring - Monitoring IPv6 multicast routes

Getting Started


References

RFCs and Standards

ExaBGP Resources

Vendor Documentation

  • 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

Books and Articles

  • 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)

Clone this wiki locally