howto/multicast

  • Search
  • Home
  • All
  • Files
  • Home

    • Getting Started
    • Registry Authentication
    • Address Space
    • BGP communities
    • Interconnections
    • Policies
    • FAQ
    • Links
  • How-To

    • Wireguard
    • Openvpn
    • Universal Network Requirements
    • IPsec With Public Keys
    • Tinc
    • GRE on FreeBSD
    • GRE on OpenBSD
    • IPv6 Multicast (PIM-SM)
    • SSM Multicast
    • MPLS
    • Bird2
    • FRRouting
    • OpenBGPD
    • Mikrotik RouterOS
    • EdgeRouter
    • Static routes on Windows
    • VyOS
    • NixOS
    • GeoFeed
    • Telephony (Asterisk)
  • Services

    • IRC
    • Whois registry
    • DNS
    • ROA + RPKI
    • IX Collection
    • Public DNS
    • Looking Glasses
    • Pingables
    • Automatic Peering
    • Distributed Wiki
    • Certificate Authority
    • Route Collector
  • Internal

    • Internal services
    • APIs
    • Show and Tell
  • External Tools

    • Paste Board
    • Git Repositories
    • Registry

dn42

Multicast

RFC 8815 deprecated interdomain PIM-ASM (any-source multicast) so PIM-SSM (source-specific multicast) is the way to go!

Setup

For it to work, you'll need to do the following:

  • Ask your peering to enable IPv4/IPv6 multicast AFI on your peering
  • Set up IPv4/IPv6 PIM for the (s,g) joins to pass through
  • Be prepared to setup IGMPv3 and MLDv2 from your listeners

You're done! You should receive the multicast routes from peers advertising them.

frr configuration

Enable PIM:

router pim
 no autorp discovery
exit
router pim6
exit
For IPv4, you can also add the send-v6-secondary directive, which allows you to omit an IPv4 address (as with "extended next hop") on the interface. (Does this work? I haven't tried it yet.)

Import kernel multicast table into frr:

ip import-table [TABLE NUMBER] mrib
ipv6 import-table [TABLE NUMBER] mrib
This method is suitable when frr is used only as a multicast routing daemon and another daemon, such as bird, is used for BGP. In this case, bird can export the unicast routes intended for multicast to a special kernel routing table, and frr can import them. If frr also handles BGP, it can store the corresponding unicast routes directly in mrib.

Enable PIM on a interface:

interface [INTERFACE NAME]
 ip pim
 ip pim use-source [SOURCE IPv4 ADDRESS]
 ipv6 pim
 ipv6 pim use-source [SOURCE IPv6 ADDRESS]
exit
Specifying a source address is optional, but can be used if frr would otherwise select the wrong address.

Enable multicast for a client:

interface client21
 ip igmp
 ip igmp max-groups 32
 ip igmp require-router-alert
 ip igmp version 3
 ip pim
 ip pim passive
 ipv6 mld
 ipv6 mld max-groups 32
 ipv6 mld require-router-alert
 ipv6 mld version 2
 ipv6 pim
 ipv6 pim passive
exit
The number of maximum groups is optional and can be set freely. For security reasons, this number should not be set unreasonably high. Specifying an explicit IGMP or MLD version is also optional. IGMP and MLD messages must follow a specific format. require-router-alert filters out invalid messages. Even if an interface is only intended to handle IGMP/MLD, PIM must be enabled on it. If you still do not want to use PIM, a firewall rule is recommended.

Participants

Current participants:

  • NOP-MNT
  • GRAWITY-MNT
  • MIRSAL-MNT
  • C4TG1RL5-MNT
  • KIOUBIT-MNT
  • PREVARINITE-MNT
  • MARK22K-MNT

Feel free to ask for a peering and set it up!

Current streams

NOP music stream

cs broadcasts a 96 kHz, 24-bit music stream. An SDP file is required to receive it:

v=0
o=Node 0 0 IN IP4 172.23.199.110
s=None
c=IN IP4 232.2.3.2
t=0 0
m=audio 1234 RTP/AVP 96
a=rtpmap:96 L24/96000/2
a=source-filter: incl IN IP4 232.2.3.2 172.23.199.110
v=0
o=Node 0 0 IN IP6 fd40:cc1e:c0de::fffe
s=None
c=IN IP6 ff3e::8232:232
t=0 0
m=audio 1234 RTP/AVP 96
a=rtpmap:96 L24/96000/2
a=source-filter: incl IN IP6 ff3e::8232:232 fd40:cc1e:c0de::fffe

The stream can then be streamed with ffplay -protocol_whitelist file,fd,udp,rtp -fflags +genpts /path/to/sdp_file.

mping

mping is a program that sends a ping message to a multicast group every second (and responds to incoming pings, if any). There are two implementations:

  • The original implementation by troglobit, which supports both sending and receiving.
  • A reimplementation, which supports only sending.

  • mcjoin -j -i [INTERFACE] [fd00:8e13:ce5d::9bee],[ff3e::8000:42]:4321 mping-sender

Hosted by: BURBLE-MNT, GRMML-MNT, XUU-MNT, JAN-MNT, LARE-MNT, SARU-MNT, ANDROW-MNT, MARK22K-MNT, IEDON-MNT | Accessible via: dn42, dn42.dev, dn42.eu, wiki.dn42.us, dn42.de (IPv6-only), dn42.cc (wiki-ng), dn42.wiki, dn42.pp.ua, dn42.obl.ong, dn42.jp (wiki-go)

Last edited by Marek Küthe, 2026-08-05 19:30:46