INET Framework for OMNeT++/OMNEST
inet::Icmpv6ProtocolDissector Class Reference

#include <Icmpv6ProtocolDissector.h>

Inheritance diagram for inet::Icmpv6ProtocolDissector:
inet::ProtocolDissector

Public Member Functions

virtual void dissect (Packet *packet, const Protocol *protocol, ICallback &callback) const override
 Dissects the packet according to the protocol implemented by this ProtocolDissector. More...
 

Member Function Documentation

◆ dissect()

void inet::Icmpv6ProtocolDissector::dissect ( Packet packet,
const Protocol protocol,
ICallback callback 
) const
overridevirtual

Dissects the packet according to the protocol implemented by this ProtocolDissector.

Implements inet::ProtocolDissector.

19 {
20  bool isBadPacket = !Icmpv6::verifyCrc(packet);
21  const auto& header = packet->popAtFront<Icmpv6Header>();
22  callback.startProtocolDataUnit(&Protocol::icmpv6);
23  if (isBadPacket)
24  callback.markIncorrect();
25  callback.visitChunk(header, &Protocol::icmpv6);
26  if (header->getType() < 128) {
27  // ICMPv6 ERROR
28  // TODO packet contains a complete Ipv6Header and the first 8 bytes of transport header (or ICMPv6). (protocol specified in Ipv6Header.)
29  callback.dissectPacket(packet, nullptr);
30  }
31  else {
32  // ICMPv6 INFO packets (e.g. ping), ICMPv6 Neighbour Discovery
33  if (packet->getDataLength() > b(0))
34  callback.dissectPacket(packet, nullptr);
35  }
36  callback.endProtocolDataUnit(&Protocol::icmpv6);
37 }

The documentation for this class was generated from the following files:
inet::units::values::b
value< int64_t, units::b > b
Definition: Units.h:1241
inet::Protocol::icmpv6
static const Protocol icmpv6
Definition: Protocol.h:72
inet::Icmpv6::verifyCrc
static bool verifyCrc(const Packet *packet)
Definition: Icmpv6.cc:361