18 #ifndef __IGMP_GROUP_H__ 19 #define __IGMP_GROUP_H__ 32 #define foreach_igmp_group_timer \ 33 _(QUERY_REPLY, "query-reply") \ 34 _(QUERY_SENT, "query-sent") \ 35 _(RESEND_REPORT, "resend-report") \ 36 _(FILTER_MODE_CHANGE, "filter-mode-change") 43 #define _(v,s) IGMP_GROUP_TIMER_##v, 48 #define IGMP_GROUP_N_TIMERS (IGMP_GROUP_TIMER_FILTER_MODE_CHANGE + 1) 90 #define FOR_EACH_SRC(_src, _group, _filter, _body) \ 92 igmp_key_t *__key__; \ 94 hash_foreach_mem(__key__, __sid__, ((igmp_group_t*)_group)->igmp_src_by_key[(_filter)], \ 96 _src = pool_elt_at_index(igmp_main.srcs, __sid__); \ 97 do { _body; } while (0); \ 123 const ip46_address_t *
128 const ip46_address_t *
u32 igmp_group_index(const igmp_group_t *g)
void igmp_group_clear(igmp_group_t **group)
u8 * format_igmp_group_timer_type(u8 *s, va_list *args)
void igmp_group_free_all_srcs(igmp_group_t *group)
igmp_group_t * igmp_group_get(u32 index)
enum igmp_group_timer_type_t_ igmp_group_timer_type_t
Types of timers maintained for each group.
struct igmp_group_t_ igmp_group_t
IGMP group A multicast group address for which reception has been requested.
#define IGMP_N_FILTER_MODES
u32 n_reports_sent
The number of times the last report has been sent.
igmp_group_t * igmp_group_alloc(struct igmp_config_t_ *config, const igmp_key_t *gkey, igmp_filter_mode_t mode)
void igmp_group_src_remove(igmp_group_t *group, igmp_src_t *src)
vl_api_ip4_address_t saddrs[n_srcs]
u32 config
The pool index of the config object this group is in.
igmp_src_t * igmp_src_lookup(igmp_group_t *group, const igmp_key_t *key)
igmp group lookup
vl_api_tunnel_mode_t mode
igmp_src_t * igmp_group_src_update(igmp_group_t *group, const igmp_key_t *skey, igmp_mode_t mode)
#define foreach_igmp_group_timer
QUERY_REPLY = Timer running to reply to a G/SG specific query QUERY_SENT = wait for response from a s...
u32 timers[IGMP_GROUP_N_TIMERS]
A vector of running timers for the group.
ip46_address_t * igmp_group_new_intersect_present(igmp_group_t *group, igmp_filter_mode_t mode, const ip46_address_t *saddrs)
enum igmp_filter_mode_t_ igmp_filter_mode_t
u8 * format_igmp_group(u8 *s, va_list *args)
#define IGMP_GROUP_N_TIMERS
ip46_address_t igmp_key_t
IGMP Key Used to index groups within an interface config and sources within a list.
igmp_group_timer_type_t_
Types of timers maintained for each group.
igmp_filter_mode_t router_filter_mode
The current filter mode of the group (see 6.2.1)
IGMP interface configuration.
igmp_key_t * key
The group's key within the per-interface config.
IGMP group A multicast group address for which reception has been requested.
enum igmp_mode_t_ igmp_mode_t
ip46_address_t * igmp_group_present_minus_new(igmp_group_t *group, igmp_filter_mode_t mode, const ip46_address_t *saddrs)
the set of present sources minus the new set
uword * igmp_src_by_key[IGMP_N_FILTER_MODES]
Source list per-filter mode.
ip46_address_t * igmp_group_new_minus_present(igmp_group_t *group, igmp_filter_mode_t mode, const ip46_address_t *saddrs)
the set of new sources minus the present set
IGMP source The representation of a specified source address with in multicast group.
u32 igmp_group_n_srcs(const igmp_group_t *group, igmp_filter_mode_t mode)