Bridge IGMP Snooping
Bridge IGMP Snooping
Section titled “Bridge IGMP Snooping”Summary
Section titled “Summary”Bridge IGMP snooping allows a RouterOS bridge to listen to IGMP (IPv4) and MLD (IPv6) membership control packets and build a multicast database (MDB). Instead of flooding all multicast streams to every bridge port, the bridge forwards each group only to ports that have active receivers — significantly reducing unnecessary multicast traffic on L2 segments.
IGMP snooping is commonly used in IPTV deployments, video surveillance networks, and any environment with high-bandwidth multicast streams.
How It Works
Section titled “How It Works”Without IGMP snooping, the bridge treats multicast frames like unknown unicast — flooding them to all ports. With snooping enabled:
- The bridge inspects IGMP Join and Leave messages from hosts.
- It builds a Multicast Database (MDB) mapping group addresses to interested ports.
- Multicast streams for known groups are forwarded only to member ports.
- Unknown multicast (no MDB entry) is handled according to
unknown-multicast-floodsettings on each port.
MLD snooping works identically for IPv6 multicast (MLDv1/v2).
Quick Start
Section titled “Quick Start”Enable IGMP snooping on a bridge:
/interface bridgeset [find name=bridge1] igmp-snooping=yesEnable a multicast querier (required when there is no upstream multicast router):
/interface bridgeset [find name=bridge1] igmp-snooping=yes multicast-querier=yesVerify MDB entries are populated:
/interface bridge mdb printBridge Settings
Section titled “Bridge Settings”igmp-snooping
Section titled “igmp-snooping”Enables IGMP and MLD snooping on the bridge.
/interface bridge set [find name=bridge1] igmp-snooping=yesWhen disabled (default), multicast is flooded to all ports. This setting must be enabled before any other IGMP snooping configuration takes effect.
multicast-querier
Section titled “multicast-querier”Enables the bridge to act as an IGMP/MLD querier, sending periodic General Query messages to prompt hosts to report their group memberships.
/interface bridge set [find name=bridge1] multicast-querier=yesIf there is no IGMP querier on the segment (no multicast router), memberships will age out and multicast forwarding will revert to flooding. Enable multicast-querier=yes on one bridge in each broadcast domain to prevent this.
multicast-router (bridge level)
Section titled “multicast-router (bridge level)”Sets the bridge’s own behavior when it receives multicast from its routing interface:
/interface bridge set [find name=bridge1] multicast-router=permanentValues: disabled, temporary-query (default), permanent.
Port Settings
Section titled “Port Settings”fast-leave
Section titled “fast-leave”When enabled on a port, the bridge immediately removes that port’s group membership when an IGMP/MLD Leave message is received — without waiting for the standard leave query/response cycle.
/interface bridge port set [find interface=ether10] fast-leave=yesUse fast-leave=yes only on single-host access ports (e.g., one IPTV set-top box per port). If multiple receivers share a port (e.g., through a downstream unmanaged switch), a Leave from one host will drop the stream for all others behind that port.
multicast-router (port level)
Section titled “multicast-router (port level)”Controls whether a port is treated as a multicast router port — streams are always forwarded toward multicast router ports regardless of MDB membership.
/interface bridge port set [find interface=ether1] multicast-router=permanent| Value | Behavior |
|---|---|
disabled | Port is never treated as mrouter port |
temporary-query | Auto-detected by observing IGMP queries (default) |
permanent | Always treated as mrouter port |
Set multicast-router=permanent on uplink ports connected to a multicast-capable router to ensure all streams are forwarded upstream.
unknown-multicast-flood
Section titled “unknown-multicast-flood”Controls whether unknown multicast frames (no MDB entry) are flooded out this port:
/interface bridge port set [find interface=ether20] unknown-multicast-flood=noSetting this to no on access ports prevents multicast streams for unregistered groups from flooding those ports. The uplink port should generally keep unknown-multicast-flood=yes.
Multicast Database (MDB)
Section titled “Multicast Database (MDB)”The MDB stores learned and static multicast group memberships.
Viewing the MDB
Section titled “Viewing the MDB”/interface bridge mdb print detailOutput shows group address, member ports, VLAN ID (if VLAN filtering enabled), and whether the entry is static or dynamic.
Static MDB Entries
Section titled “Static MDB Entries”Pin a multicast group to specific ports permanently, bypassing IGMP learning. Useful for non-IGMP capable devices or fixed IPTV channel assignments:
/interface bridge mdbadd bridge=bridge1 group=239.1.1.1 ports=ether10,ether11With VLAN filtering enabled, add the VLAN ID:
/interface bridge mdbadd bridge=bridge1 group=239.1.1.1 ports=ether10,ether11 vlan-id=20Static entries are never aged out and take precedence over dynamic learning for the same group.
MLD Snooping for IPv6
Section titled “MLD Snooping for IPv6”MLD (Multicast Listener Discovery) snooping is the IPv6 equivalent of IGMP snooping. Enabling igmp-snooping=yes on a bridge simultaneously activates MLD snooping — there is no separate toggle. Both MLDv1 (equivalent to IGMPv2, ASM) and MLDv2 (equivalent to IGMPv3, SSM) are processed.
MLD Querier
Section titled “MLD Querier”multicast-querier=yes enables both IGMP and MLD querier functions on the bridge. When acting as MLD querier, the bridge sends periodic MLD General Queries sourced from its IPv6 link-local address. Verify a link-local address exists before relying on MLD querier:
/ipv6 address print where interface=bridge1If no link-local address is present, the MLD querier cannot send queries and IPv6 group memberships will age out.
Viewing IPv6 MDB Entries
Section titled “Viewing IPv6 MDB Entries”IPv6 multicast addresses use the ff00::/8 prefix and appear in the same MDB table as IPv4 entries:
/interface bridge mdb printTo filter for IPv6 groups only:
/interface bridge mdb print where group~"ff0"Static IPv6 MDB Entry
Section titled “Static IPv6 MDB Entry”Pin an IPv6 multicast group to specific ports without relying on MLD learning:
/interface bridge mdbadd bridge=bridge1 group=ff15::1:2:3 ports=ether10With VLAN filtering enabled, include the VLAN ID:
/interface bridge mdbadd bridge=bridge1 group=ff15::1:2:3 ports=ether10 vlan-id=20VLAN-Aware IGMP Snooping
Section titled “VLAN-Aware IGMP Snooping”When vlan-filtering=yes is enabled on the bridge, IGMP snooping becomes VLAN-aware: group memberships are tracked per VLAN, and streams are forwarded only within the correct VLAN context.
Ensure the VLAN table is fully configured before enabling snooping with VLAN filtering, or multicast will appear broken even though snooping is active.
/interface bridgeadd name=bridge1 vlan-filtering=yes igmp-snooping=yes multicast-querier=yesThe querier sends queries with a source IP — assign an IP to the bridge VLAN interface if precise querier source addressing matters:
/ip address add address=192.168.20.1/24 interface=bridge1Configuration Example: IPTV on VLAN 20
Section titled “Configuration Example: IPTV on VLAN 20”A complete setup with VLAN-aware IGMP snooping for IPTV set-top boxes:
/interface bridgeadd name=bridge1 vlan-filtering=yes igmp-snooping=yes multicast-querier=yes
/interface bridge portadd bridge=bridge1 interface=ether1 multicast-router=permanent ; uplink to IPTV headendadd bridge=bridge1 interface=ether10 pvid=20 fast-leave=yes ; STB port 1add bridge=bridge1 interface=ether11 pvid=20 fast-leave=yes ; STB port 2add bridge=bridge1 interface=ether24 ; trunk to distribution
/interface bridge vlanadd bridge=bridge1 vlan-ids=20 tagged=bridge1,ether1,ether24 untagged=ether10,ether11
; Optional: pin a known IPTV channel to avoid join latency/interface bridge mdbadd bridge=bridge1 vlan-id=20 group=239.10.10.10 ports=ether10,ether11This configuration:
- Forwards multicast only to STB ports that have joined each group
- Removes membership immediately on Leave (fast-leave) for each STB port
- Always forwards toward the uplink (multicast-router=permanent)
- Scopes snooping to VLAN 20
Monitoring
Section titled “Monitoring”Check bridge snooping state:
/interface bridge monitor bridge1Key fields: igmp-snooping (enabled/disabled), multicast-querier state.
View MDB entries:
/interface bridge mdb print detailCheck port-level settings:
/interface bridge port print detail where bridge=bridge1Common Issues
Section titled “Common Issues”Multicast Still Flooded After Enabling Snooping
Section titled “Multicast Still Flooded After Enabling Snooping”- Verify
igmp-snooping=yesis set on the bridge, not just a port. - If there is no querier, hosts may not send reports — enable
multicast-querier=yes. - Check MDB: if no entries exist, the bridge has no membership information and falls back to flooding behavior based on
unknown-multicast-floodsettings.
Multicast Stops After Join
Section titled “Multicast Stops After Join”- Confirm the upstream port has
multicast-routerset appropriately (permanent or auto-detected viatemporary-query). - With VLAN filtering, verify the VLAN table includes the receiving ports in the correct VLAN.
fast-leave Drops Stream for Other Viewers
Section titled “fast-leave Drops Stream for Other Viewers”fast-leaveis only safe for single-host ports. Remove it from ports with multiple receivers behind an unmanaged switch.
Snooping Not Working with VLAN Filtering
Section titled “Snooping Not Working with VLAN Filtering”- IGMP snooping is VLAN-aware when
vlan-filtering=yes. Ensure receiving ports appear asuntagged(ortagged) in the correct VLAN entry in/interface bridge vlan. - Check that the multicast source VLAN and receiver VLAN match.