FreeBSD kernel IPv4 code
igmp.c File Reference
#include <sys/cdefs.h>
#include "opt_ddb.h"
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/module.h>
#include <sys/malloc.h>
#include <sys/mbuf.h>
#include <sys/socket.h>
#include <sys/protosw.h>
#include <sys/kernel.h>
#include <sys/lock.h>
#include <sys/sysctl.h>
#include <sys/ktr.h>
#include <sys/condvar.h>
#include <net/if.h>
#include <net/if_var.h>
#include <net/netisr.h>
#include <net/vnet.h>
#include <netinet/in.h>
#include <netinet/in_var.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/ip_var.h>
#include <netinet/ip_options.h>
#include <netinet/igmp.h>
#include <netinet/igmp_var.h>
#include <machine/in_cksum.h>
#include <security/mac/mac_framework.h>
Include dependency graph for igmp.c:

Go to the source code of this file.

Macros

#define KTR_IGMPV3   KTR_INET
 
#define V_interface_timers_running   VNET(interface_timers_running)
 
#define V_state_change_timers_running   VNET(state_change_timers_running)
 
#define V_current_state_timers_running   VNET(current_state_timers_running)
 
#define V_igi_head   VNET(igi_head)
 
#define V_igmp_gsrdelay   VNET(igmp_gsrdelay)
 
#define V_igmp_recvifkludge   VNET(igmp_recvifkludge)
 
#define V_igmp_sendra   VNET(igmp_sendra)
 
#define V_igmp_sendlocal   VNET(igmp_sendlocal)
 
#define V_igmp_v1enable   VNET(igmp_v1enable)
 
#define V_igmp_v2enable   VNET(igmp_v2enable)
 
#define V_igmp_legacysupp   VNET(igmp_legacysupp)
 
#define V_igmp_default_version   VNET(igmp_default_version)
 

Enumerations

enum  rectype_t { REC_NONE = 0x00 , REC_ALLOW = 0x01 , REC_BLOCK = 0x02 , REC_FULL = REC_ALLOW | REC_BLOCK }
 

Functions

 __FBSDID ("$FreeBSD$")
 
static struct igmp_ifsoftcigi_alloc_locked (struct ifnet *)
 
static void igi_delete_locked (const struct ifnet *)
 
static void igmp_dispatch_queue (struct mbufq *, int, const int)
 
static void igmp_fasttimo_vnet (void)
 
static void igmp_final_leave (struct in_multi *, struct igmp_ifsoftc *)
 
static int igmp_handle_state_change (struct in_multi *, struct igmp_ifsoftc *)
 
static int igmp_initial_join (struct in_multi *, struct igmp_ifsoftc *)
 
static int igmp_input_v1_query (struct ifnet *, const struct ip *, const struct igmp *)
 
static int igmp_input_v2_query (struct ifnet *, const struct ip *, const struct igmp *)
 
static int igmp_input_v3_query (struct ifnet *, const struct ip *, struct igmpv3 *)
 
static int igmp_input_v3_group_query (struct in_multi *, struct igmp_ifsoftc *, int, struct igmpv3 *)
 
static int igmp_input_v1_report (struct ifnet *, struct ip *, struct igmp *)
 
static int igmp_input_v2_report (struct ifnet *, struct ip *, struct igmp *)
 
static void igmp_intr (struct mbuf *)
 
static int igmp_isgroupreported (const struct in_addr)
 
static struct mbuf * igmp_ra_alloc (void)
 
static void igmp_set_version (struct igmp_ifsoftc *, const int)
 
static void igmp_slowtimo_vnet (void)
 
static int igmp_v1v2_queue_report (struct in_multi *, const int)
 
static void igmp_v1v2_process_group_timer (struct in_multi *, const int)
 
static void igmp_v1v2_process_querier_timers (struct igmp_ifsoftc *)
 
static void igmp_v2_update_group (struct in_multi *, const int)
 
static void igmp_v3_cancel_link_timers (struct igmp_ifsoftc *)
 
static void igmp_v3_dispatch_general_query (struct igmp_ifsoftc *)
 
static struct mbuf * igmp_v3_encap_report (struct ifnet *, struct mbuf *)
 
static int igmp_v3_enqueue_group_record (struct mbufq *, struct in_multi *, const int, const int, const int)
 
static int igmp_v3_enqueue_filter_change (struct mbufq *, struct in_multi *)
 
static void igmp_v3_process_group_timers (struct in_multi_head *, struct mbufq *, struct mbufq *, struct in_multi *, const int)
 
static int igmp_v3_merge_state_changes (struct in_multi *, struct mbufq *)
 
static void igmp_v3_suppress_group_record (struct in_multi *)
 
static int sysctl_igmp_default_version (SYSCTL_HANDLER_ARGS)
 
static int sysctl_igmp_gsr (SYSCTL_HANDLER_ARGS)
 
static int sysctl_igmp_ifinfo (SYSCTL_HANDLER_ARGS)
 
static int sysctl_igmp_stat (SYSCTL_HANDLER_ARGS)
 
static MALLOC_DEFINE (M_IGMP, "igmp", "igmp state")
 
 VNET_DEFINE_STATIC (int, interface_timers_running)
 
 VNET_DEFINE_STATIC (int, state_change_timers_running)
 
 VNET_DEFINE_STATIC (int, current_state_timers_running)
 
 VNET_PCPUSTAT_DEFINE (struct igmpstat, igmpstat)
 
 VNET_PCPUSTAT_SYSINIT (igmpstat)
 
 VNET_PCPUSTAT_SYSUNINIT (igmpstat)
 
 VNET_DEFINE_STATIC (LIST_HEAD(, igmp_ifsoftc), igi_head)
 
 VNET_DEFINE_STATIC (struct timeval, igmp_gsrdelay)
 
 VNET_DEFINE_STATIC (int, igmp_recvifkludge)
 
 VNET_DEFINE_STATIC (int, igmp_sendra)
 
 VNET_DEFINE_STATIC (int, igmp_sendlocal)
 
 VNET_DEFINE_STATIC (int, igmp_v1enable)
 
 VNET_DEFINE_STATIC (int, igmp_v2enable)
 
 VNET_DEFINE_STATIC (int, igmp_legacysupp)
 
 VNET_DEFINE_STATIC (int, igmp_default_version)
 
 SYSCTL_PROC (_net_inet_igmp, IGMPCTL_STATS, stats, CTLFLAG_VNET|CTLTYPE_STRUCT|CTLFLAG_RW|CTLFLAG_MPSAFE, &VNET_NAME(igmpstat), 0, sysctl_igmp_stat, "S,igmpstat", "IGMP statistics (struct igmpstat, netinet/igmp_var.h)")
 
 SYSCTL_INT (_net_inet_igmp, OID_AUTO, recvifkludge, CTLFLAG_VNET|CTLFLAG_RW, &VNET_NAME(igmp_recvifkludge), 0, "Rewrite IGMPv1/v2 reports from 0.0.0.0 to contain subnet address")
 
 SYSCTL_INT (_net_inet_igmp, OID_AUTO, sendra, CTLFLAG_VNET|CTLFLAG_RW, &VNET_NAME(igmp_sendra), 0, "Send IP Router Alert option in IGMPv2/v3 messages")
 
 SYSCTL_INT (_net_inet_igmp, OID_AUTO, sendlocal, CTLFLAG_VNET|CTLFLAG_RW, &VNET_NAME(igmp_sendlocal), 0, "Send IGMP membership reports for 224.0.0.0/24 groups")
 
 SYSCTL_INT (_net_inet_igmp, OID_AUTO, v1enable, CTLFLAG_VNET|CTLFLAG_RW, &VNET_NAME(igmp_v1enable), 0, "Enable backwards compatibility with IGMPv1")
 
 SYSCTL_INT (_net_inet_igmp, OID_AUTO, v2enable, CTLFLAG_VNET|CTLFLAG_RW, &VNET_NAME(igmp_v2enable), 0, "Enable backwards compatibility with IGMPv2")
 
 SYSCTL_INT (_net_inet_igmp, OID_AUTO, legacysupp, CTLFLAG_VNET|CTLFLAG_RW, &VNET_NAME(igmp_legacysupp), 0, "Allow v1/v2 reports to suppress v3 group responses")
 
 SYSCTL_PROC (_net_inet_igmp, OID_AUTO, default_version, CTLFLAG_VNET|CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_MPSAFE, &VNET_NAME(igmp_default_version), 0, sysctl_igmp_default_version, "I", "Default version of IGMP to run on each interface")
 
 SYSCTL_PROC (_net_inet_igmp, OID_AUTO, gsrdelay, CTLFLAG_VNET|CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_MPSAFE, &VNET_NAME(igmp_gsrdelay.tv_sec), 0, sysctl_igmp_gsr, "I", "Rate limit for IGMPv3 Group-and-Source queries in seconds")
 
static SYSCTL_NODE (_net_inet_igmp, OID_AUTO, ifinfo, CTLFLAG_RD|CTLFLAG_MPSAFE, sysctl_igmp_ifinfo, "Per-interface IGMPv3 state")
 
static __inline void igmp_save_context (struct mbuf *m, struct ifnet *ifp)
 
static __inline void igmp_scrub_context (struct mbuf *m)
 
static __inline uint32_t igmp_restore_context (struct mbuf *m)
 
struct igmp_ifsoftcigmp_domifattach (struct ifnet *ifp)
 
void igmp_ifdetach (struct ifnet *ifp)
 
void igmp_domifdetach (struct ifnet *ifp)
 
int igmp_input (struct mbuf **mp, int *offp, int proto)
 
void igmp_fasttimo (void)
 
void igmp_slowtimo (void)
 
int igmp_change_state (struct in_multi *inm)
 
static int igmp_modevent (module_t mod, int type, void *unused __unused)
 
 DECLARE_MODULE (igmp, igmp_mod, SI_SUB_PROTO_MC, SI_ORDER_MIDDLE)
 

Variables

static const struct netisr_handler igmp_nh
 
struct mtx igmp_mtx
 
struct mbuf * m_raopt
 
static moduledata_t igmp_mod
 

Macro Definition Documentation

◆ KTR_IGMPV3

#define KTR_IGMPV3   KTR_INET

Definition at line 93 of file igmp.c.

◆ V_current_state_timers_running

#define V_current_state_timers_running   VNET(current_state_timers_running)

Definition at line 230 of file igmp.c.

◆ V_igi_head

#define V_igi_head   VNET(igi_head)

Definition at line 240 of file igmp.c.

◆ V_igmp_default_version

#define V_igmp_default_version   VNET(igmp_default_version)

Definition at line 257 of file igmp.c.

◆ V_igmp_gsrdelay

#define V_igmp_gsrdelay   VNET(igmp_gsrdelay)

Definition at line 241 of file igmp.c.

◆ V_igmp_legacysupp

#define V_igmp_legacysupp   VNET(igmp_legacysupp)

Definition at line 256 of file igmp.c.

◆ V_igmp_recvifkludge

#define V_igmp_recvifkludge   VNET(igmp_recvifkludge)

Definition at line 251 of file igmp.c.

◆ V_igmp_sendlocal

#define V_igmp_sendlocal   VNET(igmp_sendlocal)

Definition at line 253 of file igmp.c.

◆ V_igmp_sendra

#define V_igmp_sendra   VNET(igmp_sendra)

Definition at line 252 of file igmp.c.

◆ V_igmp_v1enable

#define V_igmp_v1enable   VNET(igmp_v1enable)

Definition at line 254 of file igmp.c.

◆ V_igmp_v2enable

#define V_igmp_v2enable   VNET(igmp_v2enable)

Definition at line 255 of file igmp.c.

◆ V_interface_timers_running

#define V_interface_timers_running   VNET(interface_timers_running)

Definition at line 228 of file igmp.c.

◆ V_state_change_timers_running

#define V_state_change_timers_running   VNET(state_change_timers_running)

Definition at line 229 of file igmp.c.

Enumeration Type Documentation

◆ rectype_t

enum rectype_t
Enumerator
REC_NONE 
REC_ALLOW 
REC_BLOCK 
REC_FULL 

Definition at line 3015 of file igmp.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ DECLARE_MODULE()

DECLARE_MODULE ( igmp  ,
igmp_mod  ,
SI_SUB_PROTO_MC  ,
SI_ORDER_MIDDLE   
)

◆ igi_alloc_locked()

◆ igi_delete_locked()

static void igi_delete_locked ( const struct ifnet *  ifp)
static

Definition at line 723 of file igmp.c.

References igmp_ifsoftc::igi_gq, igmp_ifsoftc::igi_ifp, IGMP_LOCK_ASSERT, KTR_IGMPV3, and V_igi_head.

Referenced by igmp_domifdetach().

Here is the caller graph for this function:

◆ igmp_change_state()

int igmp_change_state ( struct in_multi inm)

◆ igmp_dispatch_queue()

static void igmp_dispatch_queue ( struct mbufq *  mq,
int  limit,
const int  loop 
)
static

Definition at line 546 of file igmp.c.

References KTR_IGMPV3, and M_IGMP_LOOP.

Referenced by igmp_fasttimo_vnet(), and igmp_v3_dispatch_general_query().

Here is the caller graph for this function:

◆ igmp_domifattach()

struct igmp_ifsoftc * igmp_domifattach ( struct ifnet *  ifp)

Definition at line 611 of file igmp.c.

References igi_alloc_locked(), igmp_ifsoftc::igi_flags, IGIF_SILENT, IGMP_LOCK, IGMP_UNLOCK, and KTR_IGMPV3.

Referenced by in_domifattach().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ igmp_domifdetach()

void igmp_domifdetach ( struct ifnet *  ifp)

Definition at line 711 of file igmp.c.

References igi_delete_locked(), IGMP_LOCK, IGMP_UNLOCK, and KTR_IGMPV3.

Referenced by in_domifdetach(), and in_ifscrub_all().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ igmp_fasttimo()

void igmp_fasttimo ( void  )

Definition at line 1659 of file igmp.c.

References igmp_fasttimo_vnet().

Here is the call graph for this function:

◆ igmp_fasttimo_vnet()

◆ igmp_final_leave()

◆ igmp_handle_state_change()

◆ igmp_ifdetach()

void igmp_ifdetach ( struct ifnet *  ifp)

Definition at line 671 of file igmp.c.

References ifma_restart, igmp_ifsoftc::igi_version, IGMP_LEAVING_MEMBER, IGMP_LOCK, IGMP_UNLOCK, IGMP_VERSION_3, inm_clear_recorded(), inm_rele_locked(), inm_release_list_deferred(), in_multi::inm_state, KTR_IGMPV3, and next.

Referenced by in_purgemaddrs().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ igmp_initial_join()

◆ igmp_input()

◆ igmp_input_v1_query()

◆ igmp_input_v1_report()

◆ igmp_input_v2_query()

static int igmp_input_v2_query ( struct ifnet *  ifp,
const struct ip ip,
const struct igmp igmp 
)
static

◆ igmp_input_v2_report()

◆ igmp_input_v3_group_query()

◆ igmp_input_v3_query()

◆ igmp_intr()

static void igmp_intr ( struct mbuf *  m)
static

Definition at line 3435 of file igmp.c.

References igmp_restore_context(), igmp_scrub_context(), igmp_v3_encap_report(), IGMPSTAT_INC, ip_output(), IPSTAT_INC, KTR_IGMPV3, M_IGMP_LOOP, M_IGMPV2, m_raopt, V_igmp_sendra, and V_ip_mrouter.

Here is the call graph for this function:

◆ igmp_isgroupreported()

static __inline int igmp_isgroupreported ( const struct in_addr  addr)
static

Definition at line 576 of file igmp.c.

References in_allhosts, in_addr::s_addr, and V_igmp_sendlocal.

Referenced by igmp_handle_state_change(), and igmp_initial_join().

Here is the caller graph for this function:

◆ igmp_modevent()

static int igmp_modevent ( module_t  mod,
int  type,
void *unused  __unused 
)
static

Definition at line 3676 of file igmp.c.

References IGMP_LOCK_DESTROY, IGMP_LOCK_INIT, igmp_nh, igmp_ra_alloc(), KTR_IGMPV3, and m_raopt.

Here is the call graph for this function:

◆ igmp_ra_alloc()

static struct mbuf * igmp_ra_alloc ( void  )
static

Definition at line 590 of file igmp.c.

References INADDR_ANY, ipoption::ipopt_dst, IPOPT_EOL, ipoption::ipopt_list, IPOPT_RA, and in_addr::s_addr.

Referenced by igmp_modevent().

Here is the caller graph for this function:

◆ igmp_restore_context()

static __inline uint32_t igmp_restore_context ( struct mbuf *  m)
static

Definition at line 327 of file igmp.c.

Referenced by igmp_intr().

Here is the caller graph for this function:

◆ igmp_save_context()

static __inline void igmp_save_context ( struct mbuf *  m,
struct ifnet *  ifp 
)
static

Definition at line 301 of file igmp.c.

Referenced by igmp_v1v2_queue_report(), igmp_v3_enqueue_filter_change(), and igmp_v3_enqueue_group_record().

Here is the caller graph for this function:

◆ igmp_scrub_context()

static __inline void igmp_scrub_context ( struct mbuf *  m)
static

Definition at line 312 of file igmp.c.

Referenced by igmp_intr().

Here is the caller graph for this function:

◆ igmp_set_version()

static void igmp_set_version ( struct igmp_ifsoftc igi,
const int  version 
)
static

◆ igmp_slowtimo()

void igmp_slowtimo ( void  )

Definition at line 2197 of file igmp.c.

References igmp_slowtimo_vnet().

Here is the call graph for this function:

◆ igmp_slowtimo_vnet()

static void igmp_slowtimo_vnet ( void  )
static

Definition at line 2214 of file igmp.c.

References IGMP_LOCK, IGMP_UNLOCK, igmp_v1v2_process_querier_timers(), and V_igi_head.

Referenced by igmp_slowtimo().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ igmp_v1v2_process_group_timer()

◆ igmp_v1v2_process_querier_timers()

static void igmp_v1v2_process_querier_timers ( struct igmp_ifsoftc igi)
static

Definition at line 2120 of file igmp.c.

References igmp_ifsoftc::igi_ifp, igmp_ifsoftc::igi_v1_timer, igmp_ifsoftc::igi_v2_timer, igmp_ifsoftc::igi_version, IGMP_LOCK_ASSERT, igmp_v3_cancel_link_timers(), IGMP_VERSION_2, IGMP_VERSION_3, KTR_IGMPV3, V_igmp_v1enable, and V_igmp_v2enable.

Referenced by igmp_slowtimo_vnet().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ igmp_v1v2_queue_report()

static int igmp_v1v2_queue_report ( struct in_multi inm,
const int  type 
)
static

◆ igmp_v2_update_group()

◆ igmp_v3_cancel_link_timers()

◆ igmp_v3_dispatch_general_query()

◆ igmp_v3_encap_report()

static struct mbuf * igmp_v3_encap_report ( struct ifnet *  ifp,
struct mbuf *  m 
)
static

◆ igmp_v3_enqueue_filter_change()

◆ igmp_v3_enqueue_group_record()

◆ igmp_v3_merge_state_changes()

static int igmp_v3_merge_state_changes ( struct in_multi inm,
struct mbufq *  scq 
)
static

Definition at line 3249 of file igmp.c.

References IGMP_LEADINGSPACE, IGMP_LOCK_ASSERT, IGMP_V3_REPORT_MAXRECS, IN_MULTI_LIST_LOCK_ASSERT, in_multi::inm_ifp, in_multi::inm_scq, in_multi::inm_scrv, and KTR_IGMPV3.

Referenced by igmp_v3_process_group_timers().

Here is the caller graph for this function:

◆ igmp_v3_process_group_timers()

◆ igmp_v3_suppress_group_record()

static void igmp_v3_suppress_group_record ( struct in_multi inm)
static

◆ MALLOC_DEFINE()

static MALLOC_DEFINE ( M_IGMP  ,
"igmp"  ,
"igmp state  
)
static

◆ sysctl_igmp_default_version()

static int sysctl_igmp_default_version ( SYSCTL_HANDLER_ARGS  )
static

Definition at line 404 of file igmp.c.

References IGMP_LOCK, IGMP_UNLOCK, IGMP_VERSION_3, KTR_IGMPV3, and V_igmp_default_version.

◆ sysctl_igmp_gsr()

static int sysctl_igmp_gsr ( SYSCTL_HANDLER_ARGS  )
static

Definition at line 443 of file igmp.c.

References IGMP_LOCK, IGMP_UNLOCK, KTR_IGMPV3, and V_igmp_gsrdelay.

◆ sysctl_igmp_ifinfo()

◆ sysctl_igmp_stat()

static int sysctl_igmp_stat ( SYSCTL_HANDLER_ARGS  )
static

Definition at line 343 of file igmp.c.

References igmpstat::igps_len, igmpstat::igps_version, IGPS_VERSION3_LEN, and IGPS_VERSION_3.

◆ SYSCTL_INT() [1/6]

SYSCTL_INT ( _net_inet_igmp  ,
OID_AUTO  ,
legacysupp  ,
CTLFLAG_VNET|  CTLFLAG_RW,
VNET_NAMEigmp_legacysupp,
,
"Allow v1/v2 reports to suppress v3 group responses"   
)

◆ SYSCTL_INT() [2/6]

SYSCTL_INT ( _net_inet_igmp  ,
OID_AUTO  ,
recvifkludge  ,
CTLFLAG_VNET|  CTLFLAG_RW,
VNET_NAMEigmp_recvifkludge,
,
"Rewrite IGMPv1/v2 reports from 0.0.0.0 to contain subnet address"   
)

◆ SYSCTL_INT() [3/6]

SYSCTL_INT ( _net_inet_igmp  ,
OID_AUTO  ,
sendlocal  ,
CTLFLAG_VNET|  CTLFLAG_RW,
VNET_NAMEigmp_sendlocal,
,
"Send IGMP membership reports for 224.0.0.0/24 groups"   
)

◆ SYSCTL_INT() [4/6]

SYSCTL_INT ( _net_inet_igmp  ,
OID_AUTO  ,
sendra  ,
CTLFLAG_VNET|  CTLFLAG_RW,
VNET_NAMEigmp_sendra,
,
"Send IP Router Alert option in IGMPv2/v3 messages"   
)

◆ SYSCTL_INT() [5/6]

SYSCTL_INT ( _net_inet_igmp  ,
OID_AUTO  ,
v1enable  ,
CTLFLAG_VNET|  CTLFLAG_RW,
VNET_NAMEigmp_v1enable,
,
"Enable backwards compatibility with IGMPv1"   
)

◆ SYSCTL_INT() [6/6]

SYSCTL_INT ( _net_inet_igmp  ,
OID_AUTO  ,
v2enable  ,
CTLFLAG_VNET|  CTLFLAG_RW,
VNET_NAMEigmp_v2enable,
,
"Enable backwards compatibility with IGMPv2"   
)

◆ SYSCTL_NODE()

static SYSCTL_NODE ( _net_inet_igmp  ,
OID_AUTO  ,
ifinfo  ,
CTLFLAG_RD|  CTLFLAG_MPSAFE,
sysctl_igmp_ifinfo  ,
"Per-interface IGMPv3 state  
)
static

◆ SYSCTL_PROC() [1/3]

SYSCTL_PROC ( _net_inet_igmp  ,
IGMPCTL_STATS  ,
stats  ,
CTLFLAG_VNET|CTLTYPE_STRUCT|CTLFLAG_RW|  CTLFLAG_MPSAFE,
VNET_NAMEigmpstat,
,
sysctl_igmp_stat  ,
S,
igmpstat ,
"IGMP statistics (struct igmpstat, netinet/igmp_var.h)"   
)

◆ SYSCTL_PROC() [2/3]

SYSCTL_PROC ( _net_inet_igmp  ,
OID_AUTO  ,
default_version  ,
CTLFLAG_VNET|CTLTYPE_INT|CTLFLAG_RW|  CTLFLAG_MPSAFE,
VNET_NAMEigmp_default_version,
,
sysctl_igmp_default_version  ,
"I"  ,
"Default version of IGMP to run on each interface"   
)

◆ SYSCTL_PROC() [3/3]

SYSCTL_PROC ( _net_inet_igmp  ,
OID_AUTO  ,
gsrdelay  ,
CTLFLAG_VNET|CTLTYPE_INT|CTLFLAG_RW|  CTLFLAG_MPSAFE,
VNET_NAMEigmp_gsrdelay.tv_sec,
,
sysctl_igmp_gsr  ,
"I"  ,
"Rate limit for IGMPv3 Group-and-Source queries in seconds"   
)

◆ VNET_DEFINE_STATIC() [1/12]

VNET_DEFINE_STATIC ( int  ,
current_state_timers_running   
)

◆ VNET_DEFINE_STATIC() [2/12]

VNET_DEFINE_STATIC ( int  ,
igmp_default_version   
)

◆ VNET_DEFINE_STATIC() [3/12]

VNET_DEFINE_STATIC ( int  ,
igmp_legacysupp   
)

◆ VNET_DEFINE_STATIC() [4/12]

VNET_DEFINE_STATIC ( int  ,
igmp_recvifkludge   
)

◆ VNET_DEFINE_STATIC() [5/12]

VNET_DEFINE_STATIC ( int  ,
igmp_sendlocal   
)

◆ VNET_DEFINE_STATIC() [6/12]

VNET_DEFINE_STATIC ( int  ,
igmp_sendra   
)

◆ VNET_DEFINE_STATIC() [7/12]

VNET_DEFINE_STATIC ( int  ,
igmp_v1enable   
)

◆ VNET_DEFINE_STATIC() [8/12]

VNET_DEFINE_STATIC ( int  ,
igmp_v2enable   
)

◆ VNET_DEFINE_STATIC() [9/12]

VNET_DEFINE_STATIC ( int  ,
interface_timers_running   
)

◆ VNET_DEFINE_STATIC() [10/12]

VNET_DEFINE_STATIC ( int  ,
state_change_timers_running   
)

◆ VNET_DEFINE_STATIC() [11/12]

VNET_DEFINE_STATIC ( LIST_HEAD(, igmp_ifsoftc ,
igi_head   
)

◆ VNET_DEFINE_STATIC() [12/12]

VNET_DEFINE_STATIC ( struct timeval  ,
igmp_gsrdelay   
)

◆ VNET_PCPUSTAT_DEFINE()

VNET_PCPUSTAT_DEFINE ( struct igmpstat  ,
igmpstat   
)

◆ VNET_PCPUSTAT_SYSINIT()

VNET_PCPUSTAT_SYSINIT ( igmpstat  )

◆ VNET_PCPUSTAT_SYSUNINIT()

VNET_PCPUSTAT_SYSUNINIT ( igmpstat  )

Variable Documentation

◆ igmp_mod

moduledata_t igmp_mod
static
Initial value:
= {
"igmp",
0
}
static int igmp_modevent(module_t mod, int type, void *unused __unused)
Definition: igmp.c:3676

Definition at line 3699 of file igmp.c.

◆ igmp_mtx

struct mtx igmp_mtx

Definition at line 196 of file igmp.c.

◆ igmp_nh

const struct netisr_handler igmp_nh
static
Initial value:
= {
.nh_name = "igmp",
.nh_handler = igmp_intr,
.nh_proto = NETISR_IGMP,
.nh_policy = NETISR_POLICY_SOURCE,
}
static void igmp_intr(struct mbuf *)
Definition: igmp.c:3435

Definition at line 149 of file igmp.c.

Referenced by igmp_modevent().

◆ m_raopt

struct mbuf* m_raopt

Definition at line 198 of file igmp.c.

Referenced by igmp_intr(), and igmp_modevent().