IGMP(4)

πŸ“¦ version 15.1, in freebsd 14.5, freebsd 15.1, nixpkgs unstable

πŸ’– IGMP(4) β€” the Kernel Interfaces Manual glow-up πŸ’–

okay bestie, so this is the Kernel Interfaces Manual, and today's main character is igmp β€” the Internet Group Management Protocol πŸ’…βœ¨

πŸ¦‹ NAME πŸ¦‹

igmp β€” Internet Group Management Protocol, no cap πŸ’…

✨ SYNOPSIS ✨

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/igmp.h>

int
socket(AF_INET, SOCK_RAW, IPPROTO_IGMP);

🌸 DESCRIPTION 🌸

okay so IGMP is literally the control plane protocol that IPv4 hosts and routers use to spread the word about multicast group membership info 🫢. Normally you're not touching this directly β€” it's the kernel itself doing the work, responding to multicast membership requests from user apps. Routing protocols can open a raw socket to talk to igmp directly though, iykyk.

And fr fr, as of FreeBSD 8.0, IGMP version 3 is implemented πŸ‘‘. This is the era that adds support for Source-Specific Multicast (SSM) β€” meaning apps can tell upstream multicast routers "bestie, I only wanna receive multicast streams from these particular sources," and that's iconic.

🧚 SYSCTL VARIABLES 🧚

  • net.inet.igmp.stats β€” this opaque read-only variable exposes the stack-wide IGMPv3 protocol statistics to netstat(1). basically the receipts πŸ’…
  • net.inet.igmp.ifinfo β€” this opaque read-only variable exposes the per-link IGMPv3 status to ifmcstat(8). per-link vibes ✨
  • net.inet.igmp.gsrdelay β€” this one specifies the time threshold, in seconds, for processing Group-and-Source Specific Queries (GSR). and here's the tea: since GSR query processing requires maintaining state on the host, it can cause memory to be allocated, so it's lowkey a potential attack point for Denial-of-Service (DoS) 😭. If more than one GSR query comes in within this threshold, it gets dropped β€” all to mitigate the potential for DoS. protect your bag bestie 🫢
  • net.inet.igmp.default_version β€” controls the default version of IGMP used on all links. this sysctl is normally set to 3 by default, periodt.
  • net.inet.igmp.legacysupp β€” if this is non-zero, then IGMP v1 and v2 membership reports received on a link are allowed to suppress the IGMP v3 state-change reports that this host would otherwise issue. this sysctl is normally enabled by default πŸ’–
  • net.inet.igmp.v2enable β€” if non-zero, then IGMP v2 membership queries get processed by this host, and backwards compatibility is enabled until the v2 'Old Querier Present' timer expires. normally enabled by default ✨
  • net.inet.igmp.v1enable β€” if non-zero, then IGMP v1 membership queries get processed by this host, and backwards compatibility is enabled until the v1 'Old Querier Present' timer expires. normally enabled by default πŸ’…
  • net.inet.igmp.sendlocal β€” if non-zero, then IGMP state-changes for groups in the 224.0.0.0/24 link-scope prefix will be issued. this behaviour is recommended if you're deploying FreeBSD in a network environment with layer 2 devices that snoop IGMP traffic to mitigate multicast propagation throughout the network πŸ‘€. normally enabled by default.
  • net.inet.igmp.sendra β€” if non-zero, then IGMP v2 and v3 reports will contain the IP Router Alert option. normally enabled by default πŸŽ€
  • net.inet.igmp.recvifkludge β€” if non-zero, then received IGMP reports containing 0.0.0.0 as their source get rewritten to contain the subnet address. useful when there are hosts on-link that haven't been configured with a primary IPv4 address yet β€” a little glow-up for the unconfigured girlies πŸ’–. normally enabled by default.

πŸ”₯ SEE ALSO πŸ”₯

netstat(1), sourcefilter(3), inet(4), multicast(4), ifmcstat(8) β€” go read these next, bestie, they're all connected 🌈

πŸ’œ HISTORY πŸ’œ

The igmp manual page re-appeared in FreeBSD 8.0. a comeback era, honestly πŸ‘‘


and that's the whole page, bestie 🫢 this was the Debian version from March 9, 2009 β€” yeah, she's a little vintage but she ate πŸ’…βœ¨

πŸ“¦ where this page comes from