Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

IGMP Component

IGMP (Internet Group Management Protocol) is how hosts on a directly attached segment tell this router which multicast traffic they want. Flock implements IGMPv2 (RFC 2236) and IGMPv3 (RFC 3376), restricted to source-specific membership: an IGMPv3 INCLUDE report names both the source and the group, and an IGMPv2 report names only the group, so it is mapped onto sources by the igmpv2_ssm_map configuration before it can drive anything.

IGMP is configured as part of PIM and runs on exactly the interfaces PIM runs on -- there is no separate IGMP configuration and no way to run one without the other. See the PIM component chapter for igmpv2_ssm_map and static_joins; the IGMP query timers run at their RFC 3376 defaults and are not configurable. What IGMP has of its own is the state it holds, which it reports here rather than through PIM.

The membership IGMP learns is what PIM builds its outgoing interface list from, so these commands answer "did the receiver ask?" while flockc pim vrf <vrf-name> rib answers "is it being forwarded?". When traffic is not reaching a receiver, this is the end to start from.

Operational State

Interfaces IGMP is running on

flock@r1:~$ flockc igmp vrf default intfs
[{"intf_id":12,"intf_name":"r1-n12","intf_addr":"10.0.12.1",
  "elected_querier":null,"v2_compat":false,"group_count":1,
  "last_modified":"2026-08-03T09:14:22.481Z"}]

elected_querier is null when this router holds the role itself, which is the ordinary case on a segment with no other multicast router. An address means another router won the election and this one has stopped sending queries; it takes the role back if that router goes quiet.

v2_compat is true while an IGMPv2 speaker has been heard recently enough that queries must go out in v2 format. A v2 report opens the window even when the report itself is dropped for want of an igmpv2_ssm_map entry, because what it proves is that a v2 speaker is on the segment.

last_modified records when any of the fields above last changed, to millisecond resolution. Query timers firing and reports that re-affirm what is already known do not move it.

A single interface

flock@r1:~$ flockc igmp vrf default intf r1-n12
{"intf_id":12,"intf_name":"r1-n12","intf_addr":"10.0.12.1",
 "elected_querier":null,"v2_compat":false,"group_count":1,
 "last_modified":"2026-08-03T09:14:22.481Z"}

Returns null when IGMP is not running on an interface of that name, which includes an interface that exists but has no PIM configured on it.

Group membership on an interface

flock@r1:~$ flockc igmp vrf default groups r1-n12
[{"group":"232.1.1.1","version":"V3","include_sources":["192.0.2.10"],
  "last_modified":"2026-08-03T09:14:22.481Z"}]

include_sources is the set of sources currently wanted for that group. A row is not evidence that a host asked: an operator static join holds membership with no report behind it, and the two are indistinguishable here.

version is the version of the last report that moved this group's state. A group listed as V2 was reported by an IGMPv2 host and expanded through igmpv2_ssm_map, so its include_sources are the mapped sources rather than anything the host named.

last_modified moves when the version or the source set changes. A report that only refreshes a source already tracked leaves it alone, so a steady stream of periodic reports from a settled receiver does not age the row.

IGMP Operation Commands Reference

Interfaces

flockc igmp vrf <vrf-name> intfs

Interface

flockc igmp vrf <vrf-name> intf <intf-name>

Groups

flockc igmp vrf <vrf-name> groups <intf-name>

The VRF names these commands accept are the ones PIM is configured in; flockc pim vrfs lists them.