26 static_assert(
sizeof(
igmp_header) == 8,
"igmp_header size is not 8 bytes");
47 static_assert(
sizeof(
igmpv3_query_header) == 12,
"igmpv3_query_header size is not 12 bytes");
142 :
Layer(data, dataLen, prevLayer, packet, igmpVer)
147 uint16_t calculateChecksum();
358 const std::vector<IPv4Address>& sourceAddresses,
int offset);
407 const std::vector<IPv4Address>& sourceAddresses);
419 const std::vector<IPv4Address>& sourceAddresses,
int index);
Definition: IpAddress.h:28
Definition: IgmpLayer.h:139
IPv4Address getGroupAddress() const
Definition: IgmpLayer.h:163
std::string toString() const override
void setGroupAddress(const IPv4Address &groupAddr)
igmp_header * getIgmpHeader() const
Definition: IgmpLayer.h:157
static ProtocolType getIGMPVerFromData(uint8_t *data, size_t dataLen, bool &isQuery)
size_t getHeaderLen() const override
Definition: IgmpLayer.h:195
void parseNextLayer() override
Does nothing for this layer (IGMP layer is always last)
Definition: IgmpLayer.h:191
void setType(IgmpType type)
OsiModelLayer getOsiModelLayer() const override
Definition: IgmpLayer.h:202
Definition: IgmpLayer.h:212
void computeCalculateFields() override
Calculate the IGMP checksum and set igmp_header::maxResponseTime to 0 (this field is unused in IGMPv1...
IgmpV1Layer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: IgmpLayer.h:219
~IgmpV1Layer() override=default
A destructor for this layer (does nothing)
IgmpV1Layer(IgmpType type, const IPv4Address &groupAddr=IPv4Address())
Definition: IgmpLayer.h:227
Definition: IgmpLayer.h:244
void computeCalculateFields() override
Calculate the IGMP checksum.
~IgmpV2Layer() override=default
A destructor for this layer (does nothing)
IgmpV2Layer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: IgmpLayer.h:251
IgmpV2Layer(IgmpType type, const IPv4Address &groupAddr=IPv4Address(), uint8_t maxResponseTime=0)
Definition: IgmpLayer.h:261
Definition: IgmpLayer.h:277
uint16_t getSourceAddressCount() const
bool addSourceAddressAtIndex(const IPv4Address &addr, int index)
bool addSourceAddress(const IPv4Address &addr)
size_t getHeaderLen() const override
IgmpV3QueryLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
bool removeSourceAddressAtIndex(int index)
IPv4Address getSourceAddressAtIndex(int index) const
IgmpV3QueryLayer(const IPv4Address &multicastAddr=IPv4Address(), uint8_t maxResponseTime=0, uint8_t s_qrv=0)
void computeCalculateFields() override
Calculate the IGMP checksum.
bool removeAllSourceAddresses()
igmpv3_query_header * getIgmpV3QueryHeader() const
Definition: IgmpLayer.h:300
Definition: IgmpLayer.h:355
igmpv3_group_record * addGroupRecord(uint8_t recordType, const IPv4Address &multicastAddress, const std::vector< IPv4Address > &sourceAddresses)
igmpv3_group_record * addGroupRecordAtIndex(uint8_t recordType, const IPv4Address &multicastAddress, const std::vector< IPv4Address > &sourceAddresses, int index)
IgmpV3ReportLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: IgmpLayer.h:366
size_t getHeaderLen() const override
Definition: IgmpLayer.h:440
bool removeGroupRecordAtIndex(int index)
igmpv3_report_header * getReportHeader() const
Definition: IgmpLayer.h:377
uint16_t getGroupRecordCount() const
bool removeAllGroupRecords()
void computeCalculateFields() override
Calculate the IGMP checksum.
IgmpV3ReportLayer()
A constructor that allocates a new IGMPv3 membership report with 0 group addresses.
Definition: IgmpLayer.h:371
igmpv3_group_record * getFirstGroupRecord() const
igmpv3_group_record * getNextGroupRecord(igmpv3_group_record *groupRecord) const
The main namespace for the PcapPlusPlus lib.
uint8_t ProtocolType
Definition: ProtocolType.h:13
const ProtocolType IGMPv2
IGMPv2 protocol.
Definition: ProtocolType.h:101
const ProtocolType IGMPv3
IGMPv3 protocol.
Definition: ProtocolType.h:104
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:225
@ OsiModelNetworkLayer
Network layer (layer 3)
Definition: ProtocolType.h:231
const ProtocolType IGMPv1
IGMPv1 protocol.
Definition: ProtocolType.h:98
IgmpType
IGMP message types.
Definition: IgmpLayer.h:103
@ IgmpType_MulticastRouterTermination
MRD, Multicast Router Termination.
Definition: IgmpLayer.h:131
@ IgmpType_Unknown
Unknown message type.
Definition: IgmpLayer.h:105
@ IgmpType_MembershipReportV2
IGMPv2 Membership Report.
Definition: IgmpLayer.h:117
@ IgmpType_DVMRP
DVMRP.
Definition: IgmpLayer.h:111
@ IgmpType_MembershipReportV3
IGMPv3 Membership Report.
Definition: IgmpLayer.h:125
@ IgmpType_MulticastTraceroute
Multicast Traceroute.
Definition: IgmpLayer.h:123
@ IgmpType_P1Mv1
PIM version 1.
Definition: IgmpLayer.h:113
@ IgmpType_LeaveGroup
IGMPv2 Leave Group.
Definition: IgmpLayer.h:119
@ IgmpType_MembershipReportV1
IGMPv1 Membership Report.
Definition: IgmpLayer.h:109
@ IgmpType_MulticastRouterAdvertisement
MRD, Multicast Router Advertisement.
Definition: IgmpLayer.h:127
@ IgmpType_MulticastRouterSolicitation
MRD, Multicast Router Solicitation.
Definition: IgmpLayer.h:129
@ IgmpType_CiscoTrace
Cisco Trace Messages.
Definition: IgmpLayer.h:115
@ IgmpType_MembershipQuery
IGMP Membership Query.
Definition: IgmpLayer.h:107
@ IgmpType_MulticastTracerouteResponse
Multicast Traceroute Response.
Definition: IgmpLayer.h:121
Definition: IgmpLayer.h:70
uint8_t sourceAddresses[]
A vector of n IP unicast addresses, where n is the value in this record's Number of Sources field.
Definition: IgmpLayer.h:80
size_t getRecordLen() const
uint32_t multicastAddress
Contains the IP multicast address to which this Group Record pertains.
Definition: IgmpLayer.h:78
uint8_t auxDataLen
Contains the length of the Auxiliary Data field in this Group Record. A value other than 0 isn't supp...
Definition: IgmpLayer.h:74
uint8_t recordType
Group record type.
Definition: IgmpLayer.h:72
IPv4Address getMulticastAddress() const
Definition: IgmpLayer.h:83
uint16_t numOfSources
Specifies how many source addresses are present in this Group Record.
Definition: IgmpLayer.h:76
IPv4Address getSourceAddressAtIndex(int index) const
uint16_t getSourceAddressCount() const