FreeBSD kernel IPv4 code
|
#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>
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_ifsoftc * | igi_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_ifsoftc * | igmp_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 |
#define V_current_state_timers_running VNET(current_state_timers_running) |
#define V_interface_timers_running VNET(interface_timers_running) |
#define V_state_change_timers_running VNET(state_change_timers_running) |
enum rectype_t |
__FBSDID | ( | "$FreeBSD$" | ) |
|
static |
Definition at line 633 of file igmp.c.
References igmp_ifsoftc::igi_flags, igmp_ifsoftc::igi_gq, igmp_ifsoftc::igi_ifp, igmp_ifsoftc::igi_qi, igmp_ifsoftc::igi_qri, igmp_ifsoftc::igi_rv, igmp_ifsoftc::igi_uri, igmp_ifsoftc::igi_version, IGMP_LOCK_ASSERT, IGMP_MAX_RESPONSE_PACKETS, IGMP_QI_INIT, IGMP_QRI_INIT, IGMP_RV_INIT, IGMP_URI_INIT, KTR_IGMPV3, V_igi_head, and V_igmp_default_version.
Referenced by igmp_domifattach().
|
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().
int igmp_change_state | ( | struct in_multi * | inm | ) |
Definition at line 2313 of file igmp.c.
References igmp_final_leave(), igmp_handle_state_change(), igmp_initial_join(), IGMP_LOCK, IGMP_UNLOCK, IN_MULTI_LOCK_ASSERT, in_multi::inm_ifma, in_multi::inm_ifp, in_multi::inm_st, in_multi::inm_st::iss_fmode, and KTR_IGMPV3.
Referenced by in_joingroup_locked(), in_leavegroup_locked(), inp_block_unblock_source(), inp_join_group(), inp_leave_group(), and inp_set_source_filters().
|
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().
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().
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().
void igmp_fasttimo | ( | void | ) |
Definition at line 1659 of file igmp.c.
References igmp_fasttimo_vnet().
|
static |
Definition at line 1679 of file igmp.c.
References ifma_restart, igmp_ifsoftc::igi_flags, igmp_ifsoftc::igi_ifp, igmp_ifsoftc::igi_uri, igmp_ifsoftc::igi_v3_timer, igmp_ifsoftc::igi_version, IGIF_LOOPBACK, igmp_dispatch_queue(), IGMP_LOCK, IGMP_MAX_G_GS_PACKETS, IGMP_MAX_STATE_CHANGE_PACKETS, IGMP_RANDOM_DELAY, IGMP_UNLOCK, igmp_v1v2_process_group_timer(), igmp_v3_dispatch_general_query(), igmp_v3_process_group_timers(), IGMP_VERSION_1, IGMP_VERSION_2, IGMP_VERSION_3, IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, inm_release_list_deferred(), KTR_IGMPV3, next, V_current_state_timers_running, V_igi_head, V_interface_timers_running, and V_state_change_timers_running.
Referenced by igmp_fasttimo().
|
static |
Definition at line 2563 of file igmp.c.
References igmp_ifsoftc::igi_flags, igmp_ifsoftc::igi_rv, igmp_ifsoftc::igi_version, IGIF_LOOPBACK, IGMP_AWAKENING_MEMBER, IGMP_G_QUERY_PENDING_MEMBER, IGMP_HOST_LEAVE_MESSAGE, IGMP_IDLE_MEMBER, IGMP_LAZY_MEMBER, IGMP_LEAVING_MEMBER, IGMP_LOCK_ASSERT, IGMP_NOT_MEMBER, IGMP_REPORTING_MEMBER, IGMP_SG_QUERY_PENDING_MEMBER, IGMP_SILENT_MEMBER, IGMP_SLEEPING_MEMBER, igmp_v1v2_queue_report(), igmp_v3_enqueue_group_record(), IGMP_VERSION_2, IGMP_VERSION_3, IN_MULTI_LIST_LOCK_ASSERT, inm_acquire_locked(), in_multi::inm_addr, inm_commit(), in_multi::inm_ifp, in_multi::inm_scq, in_multi::inm_scrv, in_multi::inm_sctimer, in_multi::inm_st, in_multi::inm_state, in_multi::inm_timer, in_multi::inm_st::iss_fmode, KTR_IGMPV3, in_addr::s_addr, and V_state_change_timers_running.
Referenced by igmp_change_state().
|
static |
Definition at line 2505 of file igmp.c.
References igmp_ifsoftc::igi_flags, igmp_ifsoftc::igi_ifp, igmp_ifsoftc::igi_rv, igmp_ifsoftc::igi_version, IGIF_LOOPBACK, IGIF_SILENT, igmp_isgroupreported(), IGMP_LOCK_ASSERT, igmp_v3_enqueue_group_record(), IGMP_VERSION_3, IN_MULTI_LIST_LOCK_ASSERT, in_multi::inm_addr, inm_commit(), in_multi::inm_ifp, in_multi::inm_scq, in_multi::inm_scrv, in_multi::inm_sctimer, KTR_IGMPV3, in_addr::s_addr, and V_state_change_timers_running.
Referenced by igmp_change_state().
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().
|
static |
Definition at line 2377 of file igmp.c.
References igmp_ifsoftc::igi_flags, igmp_ifsoftc::igi_ifp, igmp_ifsoftc::igi_rv, igmp_ifsoftc::igi_version, IGIF_LOOPBACK, IGIF_SILENT, IGMP_IDLE_MEMBER, igmp_isgroupreported(), IGMP_LEAVING_MEMBER, IGMP_LOCK_ASSERT, IGMP_RANDOM_DELAY, IGMP_REPORTING_MEMBER, IGMP_SILENT_MEMBER, IGMP_v1_HOST_MEMBERSHIP_REPORT, IGMP_V1V2_MAX_RI, igmp_v1v2_queue_report(), IGMP_v2_HOST_MEMBERSHIP_REPORT, igmp_v3_enqueue_group_record(), IGMP_VERSION_1, IGMP_VERSION_2, IGMP_VERSION_3, IN_MULTI_LOCK_ASSERT, in_multi::inm_addr, inm_commit(), in_multi::inm_ifp, in_multi::inm_refcount, inm_rele_locked(), in_multi::inm_scq, in_multi::inm_scrv, in_multi::inm_sctimer, in_multi::inm_state, in_multi::inm_timer, KTR_IGMPV3, in_addr::s_addr, V_current_state_timers_running, and V_state_change_timers_running.
Referenced by igmp_change_state().
int igmp_input | ( | struct mbuf ** | mp, |
int * | offp, | ||
int | proto | ||
) |
Definition at line 1464 of file igmp.c.
References igmp::igmp_code, IGMP_DVMRP, IGMP_HOST_MEMBERSHIP_QUERY, igmp_input_v1_query(), igmp_input_v1_report(), igmp_input_v2_query(), igmp_input_v2_report(), igmp_input_v3_query(), IGMP_MINLEN, igmpv3::igmp_numsrc, igmp::igmp_type, IGMP_v1_HOST_MEMBERSHIP_REPORT, IGMP_v2_HOST_MEMBERSHIP_REPORT, IGMP_v3_HOST_MEMBERSHIP_REPORT, IGMP_V3_QUERY_MINLEN, IGMP_VERSION_1, IGMP_VERSION_2, IGMP_VERSION_3, IGMPSTAT_INC, ip_checkrouteralert(), ip::ip_len, ip::ip_ttl, KTR_IGMPV3, rip_input(), V_igmp_v1enable, and V_igmp_v2enable.
|
static |
Definition at line 753 of file igmp.c.
References igmp_ifsoftc::igi_flags, IGIF_LOOPBACK, IGMP_AWAKENING_MEMBER, IGMP_G_QUERY_PENDING_MEMBER, igmp::igmp_group, IGMP_IDLE_MEMBER, IGMP_LAZY_MEMBER, IGMP_LEAVING_MEMBER, IGMP_LOCK, IGMP_NOT_MEMBER, IGMP_RANDOM_DELAY, IGMP_REPORTING_MEMBER, igmp_set_version(), IGMP_SG_QUERY_PENDING_MEMBER, IGMP_SILENT_MEMBER, IGMP_SLEEPING_MEMBER, IGMP_UNLOCK, IGMP_V1V2_MAX_RI, IGMP_VERSION_1, IGMPSTAT_INC, in_allhosts, IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, in_nullhost, in_multi::inm_state, in_multi::inm_timer, ip::ip_dst, KTR_IGMPV3, and V_current_state_timers_running.
Referenced by igmp_input().
Definition at line 1256 of file igmp.c.
References in_ifaddr::ia_subnet, IFP_TO_IA, igmp_ifsoftc::igi_version, IGMP_AWAKENING_MEMBER, IGMP_G_QUERY_PENDING_MEMBER, igmp::igmp_group, IGMP_IDLE_MEMBER, IGMP_LAZY_MEMBER, IGMP_LEAVING_MEMBER, IGMP_NOT_MEMBER, IGMP_REPORTING_MEMBER, IGMP_SG_QUERY_PENDING_MEMBER, IGMP_SILENT_MEMBER, IGMP_SLEEPING_MEMBER, igmp_v3_suppress_group_record(), IGMP_VERSION_1, IGMP_VERSION_2, IGMP_VERSION_3, IGMPSTAT_INC, in_hosteq, IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, in_nullhost, in_multi::inm_igi, inm_lookup(), in_multi::inm_state, in_multi::inm_timer, ip::ip_dst, KTR_IGMPV3, in_addr::s_addr, V_igmp_legacysupp, and V_igmp_recvifkludge.
Referenced by igmp_input().
|
static |
Definition at line 838 of file igmp.c.
References igmp_ifsoftc::igi_flags, igmp_ifsoftc::igi_version, IGIF_LOOPBACK, igmp::igmp_code, igmp::igmp_group, IGMP_LOCK, igmp_set_version(), IGMP_TIMER_SCALE, IGMP_UNLOCK, igmp_v2_update_group(), IGMP_VERSION_1, IGMP_VERSION_2, IGMPSTAT_INC, in_allhosts, IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, in_nullhost, inm_lookup(), ip::ip_dst, KTR_IGMPV3, and in_addr::s_addr.
Referenced by igmp_input().
Definition at line 1364 of file igmp.c.
References IA_SIN, in_ifaddr::ia_subnet, IFP_TO_IA, igmp_ifsoftc::igi_version, IGMP_AWAKENING_MEMBER, IGMP_G_QUERY_PENDING_MEMBER, igmp::igmp_group, IGMP_IDLE_MEMBER, IGMP_LAZY_MEMBER, IGMP_LEAVING_MEMBER, IGMP_NOT_MEMBER, IGMP_REPORTING_MEMBER, IGMP_SG_QUERY_PENDING_MEMBER, IGMP_SILENT_MEMBER, IGMP_SLEEPING_MEMBER, igmp_v3_suppress_group_record(), IGMP_VERSION_3, IGMPSTAT_INC, in_hosteq, IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, in_nullhost, in_multi::inm_igi, inm_lookup(), in_multi::inm_state, in_multi::inm_timer, ip::ip_dst, KTR_IGMPV3, in_addr::s_addr, V_igmp_legacysupp, and V_igmp_recvifkludge.
Referenced by igmp_input().
|
static |
Definition at line 1154 of file igmp.c.
References IGMP_AWAKENING_MEMBER, IGMP_G_QUERY_PENDING_MEMBER, IGMP_IDLE_MEMBER, IGMP_LAZY_MEMBER, IGMP_LEAVING_MEMBER, IGMP_LOCK_ASSERT, IGMP_NOT_MEMBER, igmpv3::igmp_numsrc, IGMP_RANDOM_DELAY, IGMP_REPORTING_MEMBER, IGMP_SG_QUERY_PENDING_MEMBER, IGMP_SILENT_MEMBER, IGMP_SLEEPING_MEMBER, IN_MULTI_LIST_LOCK_ASSERT, inm_clear_recorded(), in_multi::inm_nsrc, inm_record_source(), in_multi::inm_state, in_multi::inm_timer, KTR_IGMPV3, in_addr::s_addr, and V_current_state_timers_running.
Referenced by igmp_input_v3_query().
|
static |
Definition at line 990 of file igmp.c.
References igmp_ifsoftc::igi_flags, igmp_ifsoftc::igi_qi, igmp_ifsoftc::igi_qri, igmp_ifsoftc::igi_rv, igmp_ifsoftc::igi_v3_timer, igmp_ifsoftc::igi_version, IGIF_LOOPBACK, igmpv3::igmp_code, IGMP_EXP, igmpv3::igmp_group, igmp_input_v3_group_query(), IGMP_LOCK, IGMP_MANT, igmpv3::igmp_misc, igmpv3::igmp_numsrc, igmpv3::igmp_qqi, IGMP_QRV, IGMP_RANDOM_DELAY, IGMP_RV_INIT, igmp_set_version(), IGMP_TIMER_SCALE, IGMP_UNLOCK, IGMP_VERSION_3, IGMPSTAT_INC, in_allhosts, IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, in_nullhost, in_multi::inm_lastgsrtv, inm_lookup(), ip::ip_dst, KTR_IGMPV3, in_addr::s_addr, V_igmp_gsrdelay, and V_interface_timers_running.
Referenced by igmp_input().
|
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.
|
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().
|
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.
|
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().
|
static |
Definition at line 327 of file igmp.c.
Referenced by igmp_intr().
|
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().
|
static |
Definition at line 312 of file igmp.c.
Referenced by igmp_intr().
|
static |
Definition at line 1988 of file igmp.c.
References igmp_ifsoftc::igi_ifp, igmp_ifsoftc::igi_qi, igmp_ifsoftc::igi_qri, igmp_ifsoftc::igi_rv, igmp_ifsoftc::igi_v1_timer, igmp_ifsoftc::igi_v2_timer, igmp_ifsoftc::igi_version, IGMP_LOCK_ASSERT, igmp_v3_cancel_link_timers(), IGMP_VERSION_1, IGMP_VERSION_2, and KTR_IGMPV3.
Referenced by igmp_input_v1_query(), igmp_input_v2_query(), and igmp_input_v3_query().
void igmp_slowtimo | ( | void | ) |
Definition at line 2197 of file igmp.c.
References igmp_slowtimo_vnet().
|
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().
|
static |
Definition at line 1796 of file igmp.c.
References IGMP_AWAKENING_MEMBER, IGMP_G_QUERY_PENDING_MEMBER, IGMP_IDLE_MEMBER, IGMP_LAZY_MEMBER, IGMP_LEAVING_MEMBER, IGMP_LOCK_ASSERT, IGMP_NOT_MEMBER, IGMP_REPORTING_MEMBER, IGMP_SG_QUERY_PENDING_MEMBER, IGMP_SILENT_MEMBER, IGMP_SLEEPING_MEMBER, IGMP_v1_HOST_MEMBERSHIP_REPORT, igmp_v1v2_queue_report(), IGMP_v2_HOST_MEMBERSHIP_REPORT, IGMP_VERSION_2, IN_MULTI_LIST_LOCK_ASSERT, in_multi::inm_state, in_multi::inm_timer, and V_current_state_timers_running.
Referenced by igmp_fasttimo_vnet().
|
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().
|
static |
Definition at line 2232 of file igmp.c.
References igmp_ifsoftc::igi_flags, IGIF_LOOPBACK, igmp::igmp_cksum, igmp::igmp_code, igmp::igmp_group, IGMP_HOST_LEAVE_MESSAGE, IGMP_LOCK_ASSERT, igmp_save_context(), igmp::igmp_type, IN_MULTI_LIST_LOCK_ASSERT, INADDR_ANY, in_multi::inm_addr, in_multi::inm_ifp, in_multi::inm_igi, ip::ip_dst, ip::ip_len, ip::ip_off, ip::ip_p, ip::ip_tos, KTR_IGMPV3, M_IGMP_LOOP, M_IGMPV2, and in_addr::s_addr.
Referenced by igmp_final_leave(), igmp_initial_join(), and igmp_v1v2_process_group_timer().
|
static |
Definition at line 944 of file igmp.c.
References IGMP_AWAKENING_MEMBER, IGMP_G_QUERY_PENDING_MEMBER, IGMP_IDLE_MEMBER, IGMP_LAZY_MEMBER, IGMP_LEAVING_MEMBER, IGMP_NOT_MEMBER, IGMP_RANDOM_DELAY, IGMP_REPORTING_MEMBER, IGMP_SG_QUERY_PENDING_MEMBER, IGMP_SILENT_MEMBER, IGMP_SLEEPING_MEMBER, IN_MULTI_LIST_LOCK_ASSERT, in_multi::inm_addr, in_multi::inm_ifp, in_multi::inm_state, in_multi::inm_timer, KTR_IGMPV3, in_addr::s_addr, and V_current_state_timers_running.
Referenced by igmp_input_v2_query().
|
static |
Definition at line 2037 of file igmp.c.
References igmp_ifsoftc::igi_ifp, igmp_ifsoftc::igi_v3_timer, IGMP_AWAKENING_MEMBER, IGMP_G_QUERY_PENDING_MEMBER, IGMP_IDLE_MEMBER, IGMP_LAZY_MEMBER, IGMP_LEAVING_MEMBER, IGMP_LOCK_ASSERT, IGMP_NOT_MEMBER, IGMP_REPORTING_MEMBER, IGMP_SG_QUERY_PENDING_MEMBER, IGMP_SILENT_MEMBER, IGMP_SLEEPING_MEMBER, IN_MULTI_LIST_LOCK_ASSERT, inm_clear_recorded(), inm_rele_locked(), inm_release_list_deferred(), in_multi::inm_scq, in_multi::inm_sctimer, in_multi::inm_state, in_multi::inm_timer, and KTR_IGMPV3.
Referenced by igmp_set_version(), and igmp_v1v2_process_querier_timers().
|
static |
Definition at line 3354 of file igmp.c.
References igmp_ifsoftc::igi_flags, igmp_ifsoftc::igi_gq, igmp_ifsoftc::igi_ifp, igmp_ifsoftc::igi_v3_timer, igmp_ifsoftc::igi_version, IGIF_LOOPBACK, IGMP_AWAKENING_MEMBER, igmp_dispatch_queue(), IGMP_G_QUERY_PENDING_MEMBER, IGMP_IDLE_MEMBER, IGMP_LAZY_MEMBER, IGMP_LEAVING_MEMBER, IGMP_LOCK_ASSERT, IGMP_MAX_RESPONSE_BURST, IGMP_NOT_MEMBER, IGMP_RANDOM_DELAY, IGMP_REPORTING_MEMBER, IGMP_RESPONSE_BURST_INTERVAL, IGMP_SG_QUERY_PENDING_MEMBER, IGMP_SILENT_MEMBER, IGMP_SLEEPING_MEMBER, igmp_v3_enqueue_group_record(), IGMP_VERSION_3, IN_MULTI_LIST_LOCK_ASSERT, in_multi::inm_ifp, in_multi::inm_state, KTR_IGMPV3, and V_interface_timers_running.
Referenced by igmp_fasttimo_vnet().
|
static |
Definition at line 3531 of file igmp.c.
References in_ifaddr::ia_addr, IFP_TO_IA, IGMP_v3_HOST_MEMBERSHIP_REPORT, INADDR_ANY, IP_DF, ip::ip_dst, ip::ip_len, ip::ip_off, ip::ip_p, ip::ip_sum, ip::ip_tos, IPTOS_PREC_INTERNETCONTROL, KTR_IGMPV3, M_IGMP_LOOP, M_IGMPV3_HDR, in_addr::s_addr, and sockaddr_in::sin_addr.
Referenced by igmp_intr().
|
static |
Definition at line 3044 of file igmp.c.
References igmp_grouprec::ig_group, igmp_grouprec::ig_numsrc, igmp_grouprec::ig_type, IGMP_ALLOW_NEW_SOURCES, IGMP_BLOCK_OLD_SOURCES, IGMP_LEADINGSPACE, igmp_save_context(), IGMP_V3_REPORT_MAXRECS, ims_get_mode(), ip_msource::ims_haddr, IN_MULTI_LIST_LOCK_ASSERT, in_multi::inm_addr, in_multi::inm_ifp, in_multi::inm_nsrc, in_multi::inm_srcs, in_multi::inm_st, in_multi::inm_st::iss_asm, in_multi::inm_st::iss_fmode, KTR_IGMPV3, REC_ALLOW, REC_BLOCK, REC_FULL, and REC_NONE.
Referenced by igmp_v3_enqueue_group_record().
|
static |
Definition at line 2683 of file igmp.c.
References igmp_grouprec::ig_datalen, igmp_grouprec::ig_group, igmp_grouprec::ig_numsrc, igmp_grouprec::ig_type, IGMP_CHANGE_TO_EXCLUDE_MODE, IGMP_CHANGE_TO_INCLUDE_MODE, IGMP_DO_NOTHING, IGMP_LEADINGSPACE, IGMP_MODE_IS_EXCLUDE, IGMP_MODE_IS_INCLUDE, igmp_save_context(), igmp_v3_enqueue_filter_change(), IGMP_V3_REPORT_MAXRECS, ims_get_mode(), ip_msource::ims_haddr, ip_msource::ims_stp, IN_MULTI_LIST_LOCK_ASSERT, in_multi::inm_addr, in_multi::inm_ifp, in_multi::inm_nsrc, in_multi::inm_srcs, in_multi::inm_st, in_multi::inm_st::iss_asm, in_multi::inm_st::iss_fmode, KTR_IGMPV3, and in_addr::s_addr.
Referenced by igmp_final_leave(), igmp_handle_state_change(), igmp_initial_join(), igmp_v3_dispatch_general_query(), and igmp_v3_process_group_timers().
|
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().
|
static |
Definition at line 1842 of file igmp.c.
References IGMP_AWAKENING_MEMBER, IGMP_G_QUERY_PENDING_MEMBER, IGMP_IDLE_MEMBER, IGMP_LAZY_MEMBER, IGMP_LEAVING_MEMBER, IGMP_LOCK_ASSERT, IGMP_NOT_MEMBER, IGMP_REPORTING_MEMBER, IGMP_SG_QUERY_PENDING_MEMBER, IGMP_SILENT_MEMBER, IGMP_SLEEPING_MEMBER, igmp_v3_enqueue_group_record(), igmp_v3_merge_state_changes(), IN_MULTI_LIST_LOCK_ASSERT, in_multi::inm_addr, inm_clear_recorded(), inm_commit(), in_multi::inm_ifp, inm_rele_locked(), in_multi::inm_scrv, in_multi::inm_sctimer, in_multi::inm_state, in_multi::inm_timer, KTR_IGMPV3, in_addr::s_addr, V_current_state_timers_running, and V_state_change_timers_running.
Referenced by igmp_fasttimo_vnet().
|
static |
Definition at line 1964 of file igmp.c.
References igmp_ifsoftc::igi_version, IGMP_G_QUERY_PENDING_MEMBER, IGMP_REPORTING_MEMBER, IGMP_SG_QUERY_PENDING_MEMBER, IGMP_VERSION_3, IN_MULTI_LIST_LOCK_ASSERT, inm_clear_recorded(), in_multi::inm_igi, in_multi::inm_state, and in_multi::inm_timer.
Referenced by igmp_input_v1_report(), and igmp_input_v2_report().
|
static |
|
static |
Definition at line 404 of file igmp.c.
References IGMP_LOCK, IGMP_UNLOCK, IGMP_VERSION_3, KTR_IGMPV3, and V_igmp_default_version.
|
static |
Definition at line 443 of file igmp.c.
References IGMP_LOCK, IGMP_UNLOCK, KTR_IGMPV3, and V_igmp_gsrdelay.
|
static |
Definition at line 483 of file igmp.c.
References igmp_ifinfo::igi_flags, igmp_ifsoftc::igi_flags, igmp_ifsoftc::igi_ifp, igmp_ifinfo::igi_qi, igmp_ifsoftc::igi_qi, igmp_ifinfo::igi_qri, igmp_ifsoftc::igi_qri, igmp_ifinfo::igi_rv, igmp_ifsoftc::igi_rv, igmp_ifinfo::igi_uri, igmp_ifsoftc::igi_uri, igmp_ifinfo::igi_v1_timer, igmp_ifsoftc::igi_v1_timer, igmp_ifinfo::igi_v2_timer, igmp_ifsoftc::igi_v2_timer, igmp_ifinfo::igi_v3_timer, igmp_ifsoftc::igi_v3_timer, igmp_ifinfo::igi_version, igmp_ifsoftc::igi_version, IGMP_LOCK, IGMP_UNLOCK, IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, and V_igi_head.
|
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 | ( | _net_inet_igmp | , |
OID_AUTO | , | ||
legacysupp | , | ||
CTLFLAG_VNET| | CTLFLAG_RW, | ||
& | VNET_NAMEigmp_legacysupp, | ||
0 | , | ||
"Allow v1/v2 reports to suppress v3 group responses" | |||
) |
SYSCTL_INT | ( | _net_inet_igmp | , |
OID_AUTO | , | ||
recvifkludge | , | ||
CTLFLAG_VNET| | CTLFLAG_RW, | ||
& | VNET_NAMEigmp_recvifkludge, | ||
0 | , | ||
"Rewrite IGMPv1/v2 reports from 0.0.0.0 to contain subnet address" | |||
) |
SYSCTL_INT | ( | _net_inet_igmp | , |
OID_AUTO | , | ||
sendlocal | , | ||
CTLFLAG_VNET| | CTLFLAG_RW, | ||
& | VNET_NAMEigmp_sendlocal, | ||
0 | , | ||
"Send IGMP membership reports for 224.0.0.0/24 groups" | |||
) |
SYSCTL_INT | ( | _net_inet_igmp | , |
OID_AUTO | , | ||
sendra | , | ||
CTLFLAG_VNET| | CTLFLAG_RW, | ||
& | VNET_NAMEigmp_sendra, | ||
0 | , | ||
"Send IP Router Alert option in IGMPv2/v3 messages" | |||
) |
SYSCTL_INT | ( | _net_inet_igmp | , |
OID_AUTO | , | ||
v1enable | , | ||
CTLFLAG_VNET| | CTLFLAG_RW, | ||
& | VNET_NAMEigmp_v1enable, | ||
0 | , | ||
"Enable backwards compatibility with IGMPv1" | |||
) |
SYSCTL_INT | ( | _net_inet_igmp | , |
OID_AUTO | , | ||
v2enable | , | ||
CTLFLAG_VNET| | CTLFLAG_RW, | ||
& | VNET_NAMEigmp_v2enable, | ||
0 | , | ||
"Enable backwards compatibility with IGMPv2" | |||
) |
|
static |
SYSCTL_PROC | ( | _net_inet_igmp | , |
IGMPCTL_STATS | , | ||
stats | , | ||
CTLFLAG_VNET|CTLTYPE_STRUCT|CTLFLAG_RW| | CTLFLAG_MPSAFE, | ||
& | VNET_NAMEigmpstat, | ||
0 | , | ||
sysctl_igmp_stat | , | ||
" | S, | ||
igmpstat" | , | ||
"IGMP statistics (struct igmpstat, netinet/igmp_var.h)" | |||
) |
SYSCTL_PROC | ( | _net_inet_igmp | , |
OID_AUTO | , | ||
default_version | , | ||
CTLFLAG_VNET|CTLTYPE_INT|CTLFLAG_RW| | CTLFLAG_MPSAFE, | ||
& | VNET_NAMEigmp_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_NAMEigmp_gsrdelay.tv_sec, | ||
0 | , | ||
sysctl_igmp_gsr | , | ||
"I" | , | ||
"Rate limit for IGMPv3 Group-and-Source queries in seconds" | |||
) |
VNET_DEFINE_STATIC | ( | int | , |
current_state_timers_running | |||
) |
VNET_DEFINE_STATIC | ( | int | , |
igmp_default_version | |||
) |
VNET_DEFINE_STATIC | ( | int | , |
igmp_legacysupp | |||
) |
VNET_DEFINE_STATIC | ( | int | , |
igmp_recvifkludge | |||
) |
VNET_DEFINE_STATIC | ( | int | , |
igmp_sendlocal | |||
) |
VNET_DEFINE_STATIC | ( | int | , |
igmp_sendra | |||
) |
VNET_DEFINE_STATIC | ( | int | , |
igmp_v1enable | |||
) |
VNET_DEFINE_STATIC | ( | int | , |
igmp_v2enable | |||
) |
VNET_DEFINE_STATIC | ( | int | , |
interface_timers_running | |||
) |
VNET_DEFINE_STATIC | ( | int | , |
state_change_timers_running | |||
) |
VNET_DEFINE_STATIC | ( | LIST_HEAD(, igmp_ifsoftc) | , |
igi_head | |||
) |
VNET_DEFINE_STATIC | ( | struct timeval | , |
igmp_gsrdelay | |||
) |
VNET_PCPUSTAT_SYSINIT | ( | igmpstat | ) |
VNET_PCPUSTAT_SYSUNINIT | ( | igmpstat | ) |
|
static |
|
static |
Definition at line 149 of file igmp.c.
Referenced by igmp_modevent().
struct mbuf* m_raopt |
Definition at line 198 of file igmp.c.
Referenced by igmp_intr(), and igmp_modevent().