FreeBSD kernel IPv4 code
|
#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/lock.h>
#include <sys/malloc.h>
#include <sys/mbuf.h>
#include <sys/protosw.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
#include <sys/sysctl.h>
#include <sys/ktr.h>
#include <sys/taskqueue.h>
#include <sys/tree.h>
#include <net/if.h>
#include <net/if_var.h>
#include <net/if_dl.h>
#include <net/route.h>
#include <net/route/nhop.h>
#include <net/vnet.h>
#include <net/ethernet.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/in_fib.h>
#include <netinet/in_pcb.h>
#include <netinet/in_var.h>
#include <netinet/ip_var.h>
#include <netinet/igmp_var.h>
Go to the source code of this file.
Data Structures | |
union | sockunion |
Macros | |
#define | KTR_IGMPV3 KTR_INET |
#define | __SOCKUNION_DECLARED |
Typedefs | |
typedef union sockunion | sockunion_t |
Functions | |
__FBSDID ("$FreeBSD$") | |
static | MALLOC_DEFINE (M_INMFILTER, "in_mfilter", "IPv4 multicast PCB-layer source filter") |
static | MALLOC_DEFINE (M_IPMADDR, "in_multi", "IPv4 multicast group") |
static | MALLOC_DEFINE (M_IPMOPTS, "ip_moptions", "IPv4 multicast options") |
static | MALLOC_DEFINE (M_IPMSOURCE, "ip_msource", "IPv4 multicast IGMP-layer source filter") |
MTX_SYSINIT (in_multi_mtx, &in_multi_list_mtx, "in_multi_list_mtx", MTX_DEF) | |
MTX_SYSINIT (in_multi_free_mtx, &in_multi_free_mtx, "in_multi_free_mtx", MTX_DEF) | |
SX_SYSINIT (in_multi_sx, &in_multi_sx, "in_multi_sx") | |
static void | imf_commit (struct in_mfilter *) |
static int | imf_get_source (struct in_mfilter *imf, const struct sockaddr_in *psin, struct in_msource **) |
static struct in_msource * | imf_graft (struct in_mfilter *, const uint8_t, const struct sockaddr_in *) |
static void | imf_leave (struct in_mfilter *) |
static int | imf_prune (struct in_mfilter *, const struct sockaddr_in *) |
static void | imf_purge (struct in_mfilter *) |
static void | imf_rollback (struct in_mfilter *) |
static void | imf_reap (struct in_mfilter *) |
static struct in_mfilter * | imo_match_group (const struct ip_moptions *, const struct ifnet *, const struct sockaddr *) |
static struct in_msource * | imo_match_source (struct in_mfilter *, const struct sockaddr *) |
static void | ims_merge (struct ip_msource *ims, const struct in_msource *lims, const int rollback) |
static int | in_getmulti (struct ifnet *, const struct in_addr *, struct in_multi **) |
static int | inm_get_source (struct in_multi *inm, const in_addr_t haddr, const int noalloc, struct ip_msource **pims) |
static int | inm_merge (struct in_multi *, struct in_mfilter *) |
static void | inm_purge (struct in_multi *) |
static void | inm_reap (struct in_multi *) |
static void | inm_release (struct in_multi *) |
static struct ip_moptions * | inp_findmoptions (struct inpcb *) |
static int | inp_get_source_filters (struct inpcb *, struct sockopt *) |
static int | inp_join_group (struct inpcb *, struct sockopt *) |
static int | inp_leave_group (struct inpcb *, struct sockopt *) |
static struct ifnet * | inp_lookup_mcast_ifp (const struct inpcb *, const struct sockaddr_in *, const struct in_addr) |
static int | inp_block_unblock_source (struct inpcb *, struct sockopt *) |
static int | inp_set_multicast_if (struct inpcb *, struct sockopt *) |
static int | inp_set_source_filters (struct inpcb *, struct sockopt *) |
static int | sysctl_ip_mcast_filters (SYSCTL_HANDLER_ARGS) |
static | SYSCTL_NODE (_net_inet_ip, OID_AUTO, mcast, CTLFLAG_RW|CTLFLAG_MPSAFE, 0, "IPv4 multicast") |
SYSCTL_ULONG (_net_inet_ip_mcast, OID_AUTO, maxgrpsrc, CTLFLAG_RWTUN, &in_mcast_maxgrpsrc, 0, "Max source filters per group") | |
SYSCTL_ULONG (_net_inet_ip_mcast, OID_AUTO, maxsocksrc, CTLFLAG_RWTUN, &in_mcast_maxsocksrc, 0, "Max source filters per socket") | |
SYSCTL_INT (_net_inet_ip_mcast, OID_AUTO, loop, CTLFLAG_RWTUN, &in_mcast_loop, 0, "Loopback multicast datagrams by default") | |
static | SYSCTL_NODE (_net_inet_ip_mcast, OID_AUTO, filters, CTLFLAG_RD|CTLFLAG_MPSAFE, sysctl_ip_mcast_filters, "Per-interface stack-wide source filters") |
TASKQUEUE_DEFINE_THREAD (inm_free) | |
static void | inm_release_task (void *arg __unused, int pending __unused) |
void | inm_release_wait (void *arg __unused) |
void | inm_release_list_deferred (struct in_multi_head *inmh) |
void | inm_disconnect (struct in_multi *inm) |
void | inm_release_deferred (struct in_multi *inm) |
static __inline void | imf_init (struct in_mfilter *imf, const int st0, const int st1) |
struct in_mfilter * | ip_mfilter_alloc (const int mflags, const int st0, const int st1) |
void | ip_mfilter_free (struct in_mfilter *imf) |
struct in_multi * | inm_lookup_locked (struct ifnet *ifp, const struct in_addr ina) |
struct in_multi * | inm_lookup (struct ifnet *ifp, const struct in_addr ina) |
int | imo_multi_filter (const struct ip_moptions *imo, const struct ifnet *ifp, const struct sockaddr *group, const struct sockaddr *src) |
void | inm_clear_recorded (struct in_multi *inm) |
int | inm_record_source (struct in_multi *inm, const in_addr_t naddr) |
void | inm_commit (struct in_multi *inm) |
int | in_joingroup (struct ifnet *ifp, const struct in_addr *gina, struct in_mfilter *imf, struct in_multi **pinm) |
int | in_joingroup_locked (struct ifnet *ifp, const struct in_addr *gina, struct in_mfilter *imf, struct in_multi **pinm) |
int | in_leavegroup (struct in_multi *inm, struct in_mfilter *imf) |
int | in_leavegroup_locked (struct in_multi *inm, struct in_mfilter *imf) |
void | inp_freemoptions (struct ip_moptions *imo) |
int | inp_getmoptions (struct inpcb *inp, struct sockopt *sopt) |
int | inp_setmoptions (struct inpcb *inp, struct sockopt *sopt) |
void | inm_print (const struct in_multi *inm) |
RB_GENERATE (ip_msource_tree, ip_msource, ims_link, ip_msource_cmp) | |
Variables | |
struct mtx | in_multi_list_mtx |
struct mtx | in_multi_free_mtx |
struct sx | in_multi_sx |
int | ifma_restart |
static u_long | in_mcast_maxgrpsrc = IP_MAX_GROUP_SRC_FILTER |
static u_long | in_mcast_maxsocksrc = IP_MAX_SOCK_SRC_FILTER |
int | in_mcast_loop = IP_DEFAULT_MULTICAST_LOOP |
static struct in_multi_head | inm_free_list = SLIST_HEAD_INITIALIZER() |
static struct task | inm_free_task = TASK_INITIALIZER(0, inm_release_task, NULL) |
#define __SOCKUNION_DECLARED |
Definition at line 84 of file in_mcast.c.
#define KTR_IGMPV3 KTR_INET |
Definition at line 73 of file in_mcast.c.
typedef union sockunion sockunion_t |
Definition at line 83 of file in_mcast.c.
__FBSDID | ( | "$FreeBSD$" | ) |
|
static |
Definition at line 875 of file in_mcast.c.
References in_mfilter::imf_sources, in_mfilter::imf_st, and in_msource::imsl_st.
Referenced by inp_block_unblock_source(), inp_join_group(), inp_leave_group(), and inp_set_source_filters().
|
static |
Definition at line 738 of file in_mcast.c.
References in_mfilter::imf_nsrc, in_mfilter::imf_sources, ip_msource::ims_haddr, in_msource::ims_haddr, in_msource::imsl_st, in_mcast_maxsocksrc, in_addr::s_addr, and sockaddr_in::sin_addr.
Referenced by inp_set_source_filters().
|
static |
Definition at line 782 of file in_mcast.c.
References in_mfilter::imf_nsrc, in_mfilter::imf_sources, in_msource::ims_haddr, in_msource::imsl_st, in_addr::s_addr, and sockaddr_in::sin_addr.
Referenced by inp_block_unblock_source(), and inp_join_group().
|
static |
Definition at line 330 of file in_mcast.c.
References in_mfilter::imf_sources, and in_mfilter::imf_st.
Referenced by in_joingroup_locked(), in_leavegroup_locked(), and ip_mfilter_alloc().
|
static |
Definition at line 859 of file in_mcast.c.
References in_mfilter::imf_sources, in_mfilter::imf_st, and in_msource::imsl_st.
Referenced by inp_freemoptions(), inp_leave_group(), and inp_set_source_filters().
|
static |
Definition at line 811 of file in_mcast.c.
References in_mfilter::imf_sources, ip_msource::ims_haddr, in_msource::imsl_st, in_addr::s_addr, and sockaddr_in::sin_addr.
Referenced by inp_block_unblock_source(), and inp_leave_group().
|
static |
Definition at line 912 of file in_mcast.c.
References in_mfilter::imf_nsrc, in_mfilter::imf_sources, in_mfilter::imf_st, and KTR_IGMPV3.
Referenced by ip_mfilter_free().
|
static |
Definition at line 891 of file in_mcast.c.
References in_mfilter::imf_nsrc, in_mfilter::imf_sources, in_msource::imsl_st, and KTR_IGMPV3.
Referenced by inp_block_unblock_source(), inp_join_group(), inp_leave_group(), and inp_set_source_filters().
|
static |
Definition at line 831 of file in_mcast.c.
References in_mfilter::imf_nsrc, in_mfilter::imf_sources, in_mfilter::imf_st, in_msource::imsl_st, and KTR_IGMPV3.
Referenced by inp_block_unblock_source(), inp_join_group(), inp_leave_group(), and inp_set_source_filters().
|
static |
Definition at line 410 of file in_mcast.c.
References in_mfilter::imf_inm, in_hosteq, in_multi::inm_addr, in_multi::inm_ifp, IP_MFILTER_FOREACH, and sockaddr_in::sin_addr.
Referenced by imo_multi_filter(), inp_block_unblock_source(), inp_get_source_filters(), inp_join_group(), inp_leave_group(), and inp_set_source_filters().
|
static |
Definition at line 439 of file in_mcast.c.
References in_mfilter::imf_sources, ip_msource::ims_haddr, in_addr::s_addr, sockunion::sin, and sockaddr_in::sin_addr.
Referenced by imo_multi_filter(), inp_block_unblock_source(), inp_join_group(), and inp_leave_group().
int imo_multi_filter | ( | const struct ip_moptions * | imo, |
const struct ifnet * | ifp, | ||
const struct sockaddr * | group, | ||
const struct sockaddr * | src | ||
) |
Definition at line 462 of file in_mcast.c.
References in_mfilter::imf_st, imo_match_group(), imo_match_source(), in_msource::imsl_st, MCAST_NOTGMEMBER, MCAST_NOTSMEMBER, and MCAST_PASS.
|
static |
Definition at line 973 of file in_mcast.c.
References ip_msource::ims_st::ex, ip_msource::ims_haddr, ip_msource::ims_st, in_msource::imsl_st, ip_msource::ims_st::in, and KTR_IGMPV3.
Referenced by inm_merge().
|
static |
Definition at line 503 of file in_mcast.c.
References IGMP_MAX_STATE_CHANGES, IGMP_NOT_MEMBER, in_ifinfo::ii_igmp, in_hosteq, IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, IN_MULTI_LOCK_ASSERT, inet_ntoa_r(), inm_acquire_locked(), in_multi::inm_addr, in_multi::inm_ifma, in_multi::inm_ifp, in_multi::inm_igi, inm_lookup(), in_multi::inm_refcount, in_multi::inm_scq, in_multi::inm_srcs, in_multi::inm_st, in_multi::inm_state, in_multi::inm_st::iss_fmode, sockaddr_in::sin_addr, sockaddr_in::sin_family, and sockaddr_in::sin_len.
Referenced by in_joingroup_locked().
int in_joingroup | ( | struct ifnet * | ifp, |
const struct in_addr * | gina, | ||
struct in_mfilter * | imf, | ||
struct in_multi ** | pinm | ||
) |
Definition at line 1201 of file in_mcast.c.
References in_joingroup_locked(), IN_MULTI_LOCK, and IN_MULTI_UNLOCK.
Referenced by carp_multicast_setup(), and in_aifaddr_ioctl().
int in_joingroup_locked | ( | struct ifnet * | ifp, |
const struct in_addr * | gina, | ||
struct in_mfilter * | imf, | ||
struct in_multi ** | pinm | ||
) |
Definition at line 1223 of file in_mcast.c.
References igmp_change_state(), imf_init(), in_getmulti(), IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, IN_MULTI_LIST_UNLOCK_ASSERT, IN_MULTI_LOCK_ASSERT, inm_merge(), inm_release_deferred(), KTR_IGMPV3, and in_addr::s_addr.
Referenced by in_joingroup(), and inp_join_group().
int in_leavegroup | ( | struct in_multi * | inm, |
struct in_mfilter * | imf | ||
) |
Definition at line 1286 of file in_mcast.c.
References in_leavegroup_locked(), IN_MULTI_LOCK, and IN_MULTI_UNLOCK.
Referenced by carp_multicast_cleanup(), in_difaddr_ioctl(), and inp_freemoptions().
int in_leavegroup_locked | ( | struct in_multi * | inm, |
struct in_mfilter * | imf | ||
) |
Definition at line 1311 of file in_mcast.c.
References igmp_change_state(), imf_init(), IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, IN_MULTI_LIST_UNLOCK_ASSERT, IN_MULTI_LOCK_ASSERT, in_multi::inm_addr, in_multi::inm_ifp, inm_merge(), inm_release_deferred(), KTR_IGMPV3, and in_addr::s_addr.
Referenced by in_leavegroup(), and inp_leave_group().
void inm_clear_recorded | ( | struct in_multi * | inm | ) |
Definition at line 653 of file in_mcast.c.
References ip_msource::ims_stp, IN_MULTI_LIST_LOCK_ASSERT, in_multi::inm_srcs, in_multi::inm_st, and in_multi::inm_st::iss_rec.
Referenced by igmp_ifdetach(), igmp_input_v3_group_query(), igmp_v3_cancel_link_timers(), igmp_v3_process_group_timers(), and igmp_v3_suppress_group_record().
void inm_commit | ( | struct in_multi * | inm | ) |
Definition at line 1143 of file in_mcast.c.
References ip_msource::ims_st, inm_print(), in_multi::inm_srcs, in_multi::inm_st, and KTR_IGMPV3.
Referenced by igmp_final_leave(), igmp_handle_state_change(), igmp_initial_join(), and igmp_v3_process_group_timers().
void inm_disconnect | ( | struct in_multi * | inm | ) |
Definition at line 258 of file in_mcast.c.
References ifma_restart, in_multi::inm_ifma, and in_multi::inm_ifp.
Referenced by inm_rele_locked(), and inm_release_deferred().
|
static |
Definition at line 939 of file in_mcast.c.
References ip_msource::ims_haddr, in_mcast_maxgrpsrc, in_multi::inm_nsrc, in_multi::inm_srcs, and KTR_IGMPV3.
Referenced by inm_merge().
Definition at line 390 of file in_mcast.c.
References IN_MULTI_LIST_LOCK_ASSERT, and inm_lookup_locked().
Referenced by igmp_input_v1_report(), igmp_input_v2_query(), igmp_input_v2_report(), igmp_input_v3_query(), and in_getmulti().
Definition at line 364 of file in_mcast.c.
References IN_MULTI_LIST_LOCK_ASSERT, in_multi::inm_addr, and in_addr::s_addr.
Referenced by inm_lookup().
|
static |
Definition at line 1014 of file in_mcast.c.
References in_mfilter::imf_sources, in_mfilter::imf_st, in_msource::ims_haddr, ims_merge(), in_msource::imsl_st, IN_MULTI_LIST_LOCK_ASSERT, inm_get_source(), inm_print(), inm_reap(), in_multi::inm_st, in_multi::inm_st::iss_asm, in_multi::inm_st::iss_ex, in_multi::inm_st::iss_fmode, in_multi::inm_st::iss_in, 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().
void inm_print | ( | const struct in_multi * | inm | ) |
Definition at line 3033 of file in_mcast.c.
Referenced by inm_commit(), and inm_merge().
|
static |
Definition at line 1181 of file in_mcast.c.
References in_multi::inm_nsrc, in_multi::inm_srcs, and KTR_IGMPV3.
Referenced by inm_release().
|
static |
Definition at line 1161 of file in_mcast.c.
References ip_msource::ims_st::ex, ip_msource::ims_st, ip_msource::ims_stp, ip_msource::ims_st::in, in_multi::inm_nsrc, in_multi::inm_srcs, and KTR_IGMPV3.
Referenced by inm_merge().
Definition at line 692 of file in_mcast.c.
References ip_msource::ims_haddr, ip_msource::ims_stp, in_mcast_maxgrpsrc, IN_MULTI_LIST_LOCK_ASSERT, in_multi::inm_nsrc, in_multi::inm_srcs, in_multi::inm_st, and in_multi::inm_st::iss_rec.
Referenced by igmp_input_v3_group_query().
|
static |
Definition at line 619 of file in_mcast.c.
References in_multi::inm_ifma, in_multi::inm_ifp, inm_purge(), in_multi::inm_refcount, and KTR_IGMPV3.
Referenced by inm_release_task().
void inm_release_deferred | ( | struct in_multi * | inm | ) |
Definition at line 291 of file in_mcast.c.
References IN_MULTI_LIST_LOCK_ASSERT, inm_disconnect(), in_multi::inm_ifma, in_multi::inm_refcount, and inm_release_list_deferred().
Referenced by in_joingroup_locked(), in_leavegroup_locked(), and inp_join_group().
void inm_release_list_deferred | ( | struct in_multi_head * | inmh | ) |
Definition at line 246 of file in_mcast.c.
References in_multi_free_mtx, inm_free_list, and inm_free_task.
Referenced by igmp_fasttimo_vnet(), igmp_ifdetach(), igmp_v3_cancel_link_timers(), in_purgemaddrs(), and inm_release_deferred().
|
static |
Definition at line 307 of file in_mcast.c.
References in_multi_free_mtx, IN_MULTI_LOCK, IN_MULTI_UNLOCK, inm_free_list, and inm_release().
void inm_release_wait | ( | void *arg | __unused | ) |
Definition at line 231 of file in_mcast.c.
References inm_free_task.
Referenced by in_ifdetach().
|
static |
Definition at line 1377 of file in_mcast.c.
References igmp_change_state(), imf_commit(), imf_graft(), in_mfilter::imf_inm, imf_prune(), imf_reap(), imf_rollback(), in_mfilter::imf_st, imo_match_group(), imo_match_source(), IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, IN_MULTI_LOCK, IN_MULTI_UNLOCK, in_nullhost, INADDR_TO_IFP, inm_merge(), inp_findmoptions(), INP_WLOCK_ASSERT, INP_WUNLOCK, and KTR_IGMPV3.
Referenced by inp_setmoptions().
|
static |
Definition at line 1564 of file in_mcast.c.
References in_mcast_loop, INADDR_ANY, inpcb::inp_moptions, INP_WLOCK, and INP_WUNLOCK.
Referenced by inp_block_unblock_source(), inp_join_group(), inp_leave_group(), inp_set_multicast_if(), inp_set_source_filters(), and inp_setmoptions().
void inp_freemoptions | ( | struct ip_moptions * | imo | ) |
Definition at line 1593 of file in_mcast.c.
References in_mfilter::imf_inm, imf_leave(), in_leavegroup(), in_multi::inm_ifp, ip_mfilter_first(), ip_mfilter_free(), and ip_mfilter_remove().
Referenced by in_pcbfree().
|
static |
Definition at line 1625 of file in_mcast.c.
References in_mfilter::imf_sources, in_mfilter::imf_st, imo_match_group(), in_msource::ims_haddr, in_msource::imsl_st, in_mcast_maxsocksrc, inpcb::inp_moptions, INP_WLOCK, INP_WLOCK_ASSERT, INP_WUNLOCK, in_addr::s_addr, sockaddr_in::sin_addr, sockaddr_in::sin_family, sockaddr_in::sin_len, and sockaddr_in::sin_port.
Referenced by inp_getmoptions().
int inp_getmoptions | ( | struct inpcb * | inp, |
struct sockopt * | sopt | ||
) |
Definition at line 1743 of file in_mcast.c.
References IA_SIN, IFP_TO_IA, in_nullhost, inp_get_source_filters(), inpcb::inp_moptions, inpcb::inp_socket, INP_UNLOCK_ASSERT, INP_WLOCK, and INP_WUNLOCK.
Referenced by ip_ctloutput().
|
static |
Definition at line 1918 of file in_mcast.c.
References igmp_change_state(), imf_commit(), imf_graft(), in_mfilter::imf_inm, imf_reap(), imf_rollback(), in_mfilter::imf_st, imo_match_group(), imo_match_source(), in_joingroup_locked(), IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, IN_MULTI_LOCK, IN_MULTI_UNLOCK, in_pcbref(), in_pcbrele_wlocked(), inm_merge(), inm_release_deferred(), inp_findmoptions(), inp_lookup_mcast_ifp(), INP_WLOCK, INP_WLOCK_ASSERT, INP_WUNLOCK, ip_mfilter_alloc(), ip_mfilter_count(), ip_mfilter_free(), ip_mfilter_insert(), and KTR_IGMPV3.
Referenced by inp_setmoptions().
|
static |
Definition at line 2244 of file in_mcast.c.
References igmp_change_state(), imf_commit(), in_mfilter::imf_inm, imf_leave(), imf_prune(), imf_reap(), imf_rollback(), in_mfilter::imf_st, imo_match_group(), imo_match_source(), in_leavegroup_locked(), IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, IN_MULTI_LOCK, IN_MULTI_UNLOCK, in_nullhost, INADDR_ANY, INADDR_TO_IFP, inm_merge(), inp_findmoptions(), INP_WLOCK_ASSERT, INP_WUNLOCK, ip_mfilter_free(), ip_mfilter_remove(), and KTR_IGMPV3.
Referenced by inp_setmoptions().
|
static |
Definition at line 1872 of file in_mcast.c.
References fib4_lookup(), in_nullhost, INADDR_TO_IFP, in_conninfo::inc_fibnum, inpcb::inp_inc, in_addr::s_addr, sockaddr_in::sin_addr, sockaddr_in::sin_family, and V_in_ifaddrhead.
Referenced by inp_join_group().
|
static |
Definition at line 2463 of file in_mcast.c.
References in_nullhost, INADDR_ANY, INADDR_TO_IFP, inp_findmoptions(), INP_WUNLOCK, KTR_IGMPV3, and in_addr::s_addr.
Referenced by inp_setmoptions().
|
static |
Definition at line 2538 of file in_mcast.c.
References igmp_change_state(), imf_commit(), imf_get_source(), in_mfilter::imf_inm, imf_leave(), imf_reap(), imf_rollback(), in_mfilter::imf_st, imo_match_group(), in_msource::imsl_st, in_mcast_maxsocksrc, IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, IN_MULTI_LOCK, IN_MULTI_UNLOCK, inm_merge(), inp_findmoptions(), INP_WLOCK, INP_WLOCK_ASSERT, INP_WUNLOCK, KTR_IGMPV3, sockaddr_in::sin_family, and sockaddr_in::sin_len.
Referenced by inp_setmoptions().
int inp_setmoptions | ( | struct inpcb * | inp, |
struct sockopt * | sopt | ||
) |
Definition at line 2713 of file in_mcast.c.
References inp_block_unblock_source(), inp_findmoptions(), inp_join_group(), inp_leave_group(), inp_set_multicast_if(), inp_set_source_filters(), inpcb::inp_socket, INP_UNLOCK_ASSERT, INP_WUNLOCK, and legal_vif_num.
Referenced by ip_ctloutput().
struct in_mfilter * ip_mfilter_alloc | ( | const int | mflags, |
const int | st0, | ||
const int | st1 | ||
) |
Definition at line 339 of file in_mcast.c.
References imf_init().
Referenced by carp_multicast_setup(), and inp_join_group().
void ip_mfilter_free | ( | struct in_mfilter * | imf | ) |
Definition at line 351 of file in_mcast.c.
References imf_purge().
Referenced by carp_multicast_cleanup(), carp_multicast_setup(), inp_freemoptions(), inp_join_group(), and inp_leave_group().
|
static |
|
static |
|
static |
|
static |
MTX_SYSINIT | ( | in_multi_free_mtx | , |
& | in_multi_free_mtx, | ||
"in_multi_free_mtx" | , | ||
MTX_DEF | |||
) |
MTX_SYSINIT | ( | in_multi_mtx | , |
& | in_multi_list_mtx, | ||
"in_multi_list_mtx" | , | ||
MTX_DEF | |||
) |
RB_GENERATE | ( | ip_msource_tree | , |
ip_msource | , | ||
ims_link | , | ||
ip_msource_cmp | |||
) |
SX_SYSINIT | ( | in_multi_sx | , |
& | in_multi_sx, | ||
"in_multi_sx" | |||
) |
SYSCTL_INT | ( | _net_inet_ip_mcast | , |
OID_AUTO | , | ||
loop | , | ||
CTLFLAG_RWTUN | , | ||
& | in_mcast_loop, | ||
0 | , | ||
"Loopback multicast datagrams by default" | |||
) |
|
static |
Definition at line 2863 of file in_mcast.c.
References ims_get_mode(), ip_msource::ims_haddr, in_hosteq, in_mcast_maxgrpsrc, IN_MULTI_LIST_LOCK, IN_MULTI_LIST_UNLOCK, in_multi::inm_addr, in_multi::inm_srcs, in_multi::inm_st, in_multi::inm_st::iss_fmode, KTR_IGMPV3, and in_addr::s_addr.
|
static |
|
static |
SYSCTL_ULONG | ( | _net_inet_ip_mcast | , |
OID_AUTO | , | ||
maxgrpsrc | , | ||
CTLFLAG_RWTUN | , | ||
& | in_mcast_maxgrpsrc, | ||
0 | , | ||
"Max source filters per group" | |||
) |
SYSCTL_ULONG | ( | _net_inet_ip_mcast | , |
OID_AUTO | , | ||
maxsocksrc | , | ||
CTLFLAG_RWTUN | , | ||
& | in_mcast_maxsocksrc, | ||
0 | , | ||
"Max source filters per socket" | |||
) |
TASKQUEUE_DEFINE_THREAD | ( | inm_free | ) |
int ifma_restart |
Definition at line 116 of file in_mcast.c.
Referenced by igmp_fasttimo_vnet(), igmp_ifdetach(), in_purgemaddrs(), and inm_disconnect().
int in_mcast_loop = IP_DEFAULT_MULTICAST_LOOP |
Definition at line 188 of file in_mcast.c.
Referenced by inp_findmoptions(), ip_output(), and send_packet().
|
static |
Definition at line 178 of file in_mcast.c.
Referenced by inm_get_source(), inm_record_source(), and sysctl_ip_mcast_filters().
|
static |
Definition at line 183 of file in_mcast.c.
Referenced by imf_get_source(), inp_get_source_filters(), and inp_set_source_filters().
struct mtx in_multi_free_mtx |
Definition at line 110 of file in_mcast.c.
Referenced by inm_release_list_deferred(), and inm_release_task().
struct mtx in_multi_list_mtx |
Definition at line 107 of file in_mcast.c.
struct sx in_multi_sx |
Definition at line 113 of file in_mcast.c.
|
static |
Definition at line 226 of file in_mcast.c.
Referenced by inm_release_list_deferred(), and inm_release_task().
|
static |
Definition at line 228 of file in_mcast.c.
Referenced by inm_release_list_deferred(), and inm_release_wait().