Go to the documentation of this file.
26 #define IGMP_TYPE_MEMBERSHIP_QUERY 0x11
27 #define IGMP_TYPE_MEMBERSHIP_REPORT_V1 0x12
28 #define IGMP_TYPE_MEMBERSHIP_REPORT_V2 0x16
29 #define IGMP_TYPE_LEAVE_GROUP_V2 0x17
30 #define IGMP_TYPE_MEMBERSHIP_REPORT_V3 0x22
35 #define IGMP_V3_MAX_N_SOURCES (65535 - 24 - 12) / 4
38 #define RGMP_DEST_ADDRESS 0xe0000019
79 const IGMPHdr *igmp = PacketSetIGMP(p, pkt);
80 p->
proto = IPPROTO_IGMP;
87 if (PacketIsIPv4(p)) {
88 const IPV4Hdr *ip4h = PacketGetIPv4(p);
109 const uint32_t header_len =
111 if (
len < header_len) {
116 if (header_len >= UINT16_MAX) {
121 p->
payload = (uint8_t *)pkt + header_len;
141 for (uint32_t i = 0; i < n_group_recs; i++) {
143 SCLogDebug(
"len %u - header_len %u < IGMPv3MemberReportGroupRecord %u",
len,
153 if (
len - header_len < (uint32_t)(grec->
aux_data_len *
sizeof(uint32_t))) {
154 SCLogDebug(
"len %u - header_len %u aux_data_len %u",
len, header_len,
159 header_len += (uint32_t)(grec->
aux_data_len *
sizeof(uint32_t));
161 uint32_t sources_len = (uint32_t)
SCNtohs(grec->
n_sources) * (uint32_t)
sizeof(uint32_t);
162 if (
len - header_len < sources_len) {
163 SCLogDebug(
"len %u - header_len %u sources_len %u",
len, header_len, sources_len);
167 header_len += sources_len;
169 if (header_len >= UINT16_MAX) {
174 p->
payload = (uint8_t *)pkt + header_len;
#define IGMP_TYPE_LEAVE_GROUP_V2
#define IGMP_TYPE_MEMBERSHIP_QUERY
uint32_t address_un_data32[4]
struct IGMPv3MemberReportHdr_ IGMPv3MemberReportHdr
union Address_::@29 address
int DecodeIGMP(ThreadVars *tv, DecodeThreadVars *dtv, Packet *p, const uint8_t *pkt, uint32_t len)
#define RGMP_DEST_ADDRESS
Per thread variable structure.
#define IGMP_TYPE_MEMBERSHIP_REPORT_V1
void StatsCounterIncr(StatsThreadContext *stats, StatsCounterId id)
Increments the local counter.
struct IGMPv3MemberReportGroupRecord_ IGMPv3MemberReportGroupRecord
#define IPV4_GET_RAW_IPTTL(ip4h)
#define IGMP_TYPE_MEMBERSHIP_REPORT_V3
struct IGMPv3MemberQueryHdr_ IGMPv3MemberQueryHdr
StatsCounterId counter_igmp
#define IGMP_TYPE_MEMBERSHIP_REPORT_V2
Structure to hold thread specific data for all decode modules.
#define IGMP_V3_MAX_N_SOURCES
#define ENGINE_SET_INVALID_EVENT(p, e)
union PacketL4::L4Vars vars