40 #ifndef included_vnet_igmp_packet_h 41 #define included_vnet_igmp_packet_h 46 #define foreach_igmp_type \ 47 _ (0x11, membership_query) \ 48 _ (0x12, membership_report_v1) \ 51 _ (0x15, cisco_trace) \ 52 _ (0x16, membership_report_v2) \ 53 _ (0x17, leave_group_v2) \ 54 _ (0x1e, traceroute_response) \ 55 _ (0x1f, traceroute_request) \ 56 _ (0x22, membership_report_v3) \ 57 _ (0x30, router_advertisement) \ 58 _ (0x31, router_solicitation) \ 59 _ (0x32, router_termination) 63 #define _(n,f) IGMP_TYPE_##f = n, 86 if (header->
code < 128)
90 u8 mant = header->
code << 4;
91 u8 exp = (header->
code & 0x7) << 1;
93 qqi = ((mant | 0x10) << (exp + 3));
121 return (
sizeof (*q) +
132 #define foreach_igmp_membership_group_v3_type \ 133 _ (1, mode_is_include) \ 134 _ (2, mode_is_exclude) \ 135 _ (3, change_to_include) \ 136 _ (4, change_to_exclude) \ 137 _ (5, allow_new_sources) \ 138 _ (6, block_old_sources) 142 #define _(n,f) IGMP_MEMBERSHIP_GROUP_##f = n, 149 igmp_membership_group_v3_type_t
type;
166 return (
sizeof (*g) +
201 for (ii = 0; ii < clib_net_to_host_u16 (r->
n_groups); ii++)
igmp_membership_group_v3_type_t type
igmp_membership_group_v3_t groups[0]
static igmp_membership_group_v3_t * igmp_membership_group_v3_next(igmp_membership_group_v3_t *g)
igmp_membership_group_v3_type_t
static u32 igmp_membership_query_v3_length(const igmp_membership_query_v3_t *q)
#define foreach_igmp_membership_group_v3_type
static f64 igmp_header_get_max_resp_time(const igmp_header_t *header)
Calculate the maximum response time allowed from the header.
#define foreach_igmp_type
ip4_address_t group_address
static u32 igmp_membership_group_v3_length(const igmp_membership_group_v3_t *g)
static int igmp_membership_query_v3_is_general(const igmp_membership_query_v3_t *q)
ip4_address_t src_addresses[0]
static u32 igmp_membership_report_v3_length(const igmp_membership_report_v3_t *r)
ip4_address_t group_address