21 static ip46_address_t *
24 ip46_address_t *srcs = NULL;
38 srcs[0].ip4.as_u32 = 0;
45 for (ii = 0; ii < n; ii++)
59 ip46_address_t
key = {
71 ip46_address_t *
src, *srcs;
77 IGMP_DBG (
" ..group-update: %U (*, %U)",
94 IGMP_DBG (
" ..group-update: %U (*, %U) source exclude ignored",
104 ip46_address_t *s, *srcs;
107 ip46_address_t
key = {
114 IGMP_DBG (
" ..group-block: %U (%U, %U)",
151 ip46_address_t *
src, *srcs;
153 ip46_address_t
key = {
168 IGMP_DBG (
" ..group-update: %U (%U, %U)",
195 switch (igmp_group->
type)
197 case IGMP_MEMBERSHIP_GROUP_mode_is_include:
198 case IGMP_MEMBERSHIP_GROUP_change_to_include:
199 case IGMP_MEMBERSHIP_GROUP_allow_new_sources:
202 case IGMP_MEMBERSHIP_GROUP_block_old_sources:
205 case IGMP_MEMBERSHIP_GROUP_mode_is_exclude:
206 case IGMP_MEMBERSHIP_GROUP_change_to_exclude:
230 if (IGMP_MODE_HOST == config->
mode)
246 for (ii = 0; ii < n_groups; ii++)
#define vec_validate(V, I)
Make sure vector is long enough for given index (no header, unspecified alignment) ...
igmp_membership_group_v3_type_t type
void igmp_pkt_query_v3_send(igmp_pkt_build_query_t *bq)
igmp_membership_group_v3_t groups[0]
igmp_group_t * igmp_group_lookup(igmp_config_t *config, const igmp_key_t *key)
igmp group lookup
vnet_main_t * vnet_get_main(void)
static void igmp_handle_group_update(igmp_config_t *config, const igmp_membership_group_v3_t *igmp_group)
void igmp_handle_report(const igmp_report_args_t *args)
void igmp_proxy_device_merge_config(igmp_config_t *config, u8 block)
typedef igmp_group
Used by a 'host' to enable the reception/listening of packets for a specific multicast group...
igmp_src_t * igmp_group_src_update(igmp_group_t *group, const igmp_key_t *skey, igmp_mode_t mode)
void igmp_src_blocked(igmp_src_t *src)
format_function_t format_vnet_sw_if_index_name
igmp_membership_report_v3_t report[0]
static void igmp_handle_group(igmp_config_t *config, const igmp_membership_group_v3_t *igmp_group)
igmp_config_t * igmp_config_lookup(u32 sw_if_index)
igmp config lookup
igmp_src_t * igmp_src_lookup(igmp_group_t *group, const igmp_key_t *key)
igmp group lookup
A copy of the report message sent from the worker to the main thread.
igmp_group_t * igmp_group_alloc(igmp_config_t *config, const igmp_key_t *gkey, igmp_filter_mode_t mode)
#define vec_free(V)
Free vector's memory (no header).
void igmp_pkt_query_v3_add_group(igmp_pkt_build_query_t *bq, const igmp_group_t *group, const ip46_address_t *srcs)
static ip46_address_t * igmp_group_mk_source_list(const igmp_membership_group_v3_t *r)
ip4_address_t group_address
IGMP interface configuration.
static u32 igmp_membership_group_v3_length(const igmp_membership_group_v3_t *g)
IGMP group A multicast group address for which reception has been requested.
void igmp_pkt_build_query_init(igmp_pkt_build_query_t *bq, u32 sw_if_index)
ip4_address_t src_addresses[0]
#define vec_foreach(var, vec)
Vector iterator.
static void igmp_handle_group_block(igmp_config_t *config, const igmp_membership_group_v3_t *igmp_group)
IGMP source The representation of a specified source address with in multicast group.
static void igmp_handle_group_exclude(igmp_config_t *config, const igmp_membership_group_v3_t *igmp_group)