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

#include <Ipv6ProtocolDissector.h>

Inheritance diagram for inet::Ipv6ProtocolDissector:
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::Ipv6ProtocolDissector::dissect ( Packet packet,
const Protocol protocol,
ICallback callback 
) const
overridevirtual

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

Implements inet::ProtocolDissector.

20 {
21  auto trailerPopOffset = packet->getBackOffset();
22  const auto& header = packet->popAtFront<Ipv6Header>();
23  auto ipv6EndOffset = packet->getFrontOffset() + B(header->getPayloadLength());
24  callback.startProtocolDataUnit(&Protocol::ipv6);
25  bool incorrect = (ipv6EndOffset > trailerPopOffset);
26  if (incorrect) {
27  callback.markIncorrect();
28  ipv6EndOffset = trailerPopOffset;
29  }
30  callback.visitChunk(header, &Protocol::ipv6);
31  packet->setBackOffset(ipv6EndOffset);
32  const Ipv6FragmentHeader *fh = dynamic_cast<const Ipv6FragmentHeader *>(header->findExtensionHeaderByType(IP_PROT_IPv6EXT_FRAGMENT));
33  if (fh)
34  callback.dissectPacket(packet, nullptr); // Fragment
35  else
36  callback.dissectPacket(packet, header->getProtocol());
37  if (incorrect && packet->getDataLength() > b(0))
38  callback.dissectPacket(packet, nullptr);
39  ASSERT(packet->getDataLength() == B(0));
40  packet->setFrontOffset(ipv6EndOffset);
41  packet->setBackOffset(trailerPopOffset);
42  callback.endProtocolDataUnit(&Protocol::ipv6);
43 }

The documentation for this class was generated from the following files:
inet::Protocol::ipv6
static const Protocol ipv6
Definition: Protocol.h:94
inet::IP_PROT_IPv6EXT_FRAGMENT
@ IP_PROT_IPv6EXT_FRAGMENT
Definition: IpProtocolId_m.h:114
inet::units::units::B
intscale< b, 1, 8 > B
Definition: Units.h:1168
inet::units::values::b
value< int64_t, units::b > b
Definition: Units.h:1241