21 NDP_OPTION_SOURCE_LINK_LAYER = 1,
22 NDP_OPTION_TARGET_LINK_LAYER = 2,
23 NDP_OPTION_PREFIX_INFORMATION = 3,
24 NDP_OPTION_REDIRECTED_HEADER = 4,
26 NDP_OPTION_UNKNOWN = 255
47 if (m_Data ==
nullptr)
48 return NDPNeighborOptionTypes::NDP_OPTION_UNKNOWN;
57 if (m_Data ==
nullptr)
60 return static_cast<size_t>(m_Data->recordLen) * 8;
65 if (m_Data ==
nullptr)
71 return static_cast<size_t>(m_Data->recordLen) * 8 - (2 *
sizeof(uint8_t));
145 static std::vector<FieldDescriptor>
all()
148 std::initializer_list<FieldDescriptor> extra{
Options };
149 std::copy(extra.begin(), extra.end(), std::back_inserter(result));
167 void serializeOptions(
ObjectScope& serializer)
const;
172 virtual size_t getNdpHeaderLen()
const = 0;
173 virtual uint8_t* getNdpOptionsBasePtr()
const
175 return m_Data + getNdpHeaderLen();
177 NdpOption addNdpOptionAt(
const NdpOptionBuilder& optionBuilder,
int offset);
187 #pragma pack(push, 1)
250 static std::vector<FieldDescriptor>
all()
254 std::copy(extra.begin(), extra.end(), std::back_inserter(result));
269 void initLayer(uint8_t code,
const IPv6Address& targetIP);
274 size_t getNdpHeaderLen()
const override
276 return sizeof(ndpneighborsolicitationhdr);
287 #pragma pack(push, 1)
290 #if (BYTE_ORDER == LITTLE_ENDIAN)
347 bool routerFlag,
bool unicastFlag,
bool overrideFlag);
376 return getNdpHeader()->
router;
399 static std::vector<FieldDescriptor>
all()
404 std::copy(extra.begin(), extra.end(), std::back_inserter(result));
428 void initLayer(uint8_t code,
const IPv6Address& targetIP,
bool routerFlag,
bool unicastFlag,
bool overrideFlag);
433 size_t getNdpHeaderLen()
const override
435 return sizeof(ndpneighboradvertisementhdr);
Definition: IpAddress.h:165
Definition: IcmpV6Layer.h:124
Definition: MacAddress.h:24
Definition: NdpLayer.h:100
NdpOption getFirstNdpOption() const
size_t getNdpOptionCount() const
bool removeAllNdpOptions()
NdpOption getNdpOption(NDPNeighborOptionTypes option) const
NdpOption addNdpOption(const NdpOptionBuilder &optionBuilder)
NdpOption getNextNdpOption(NdpOption &option) const
Definition: NdpLayer.h:283
MacAddress getTargetMac() const
bool hasTargetMacInfo() const
IPv6Address getTargetIP() const
Definition: NdpLayer.h:365
NDPNeighborAdvertisementLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: NdpLayer.h:325
std::string toString() const override
bool getRouterFlag() const
Definition: NdpLayer.h:374
static bool isDataValid(const uint8_t *data, size_t dataLen)
Definition: NdpLayer.h:333
NDPNeighborAdvertisementLayer(uint8_t code, const IPv6Address &targetIP, const MacAddress &targetMac, bool routerFlag, bool unicastFlag, bool overrideFlag)
NDPNeighborAdvertisementLayer(uint8_t code, const IPv6Address &targetIP, bool routerFlag, bool unicastFlag, bool overrideFlag)
void serializeLayer(ObjectScope &serializer) const override
bool getUnicastFlag() const
Definition: NdpLayer.h:380
bool getOverrideFlag() const
Definition: NdpLayer.h:386
Definition: NdpLayer.h:183
bool hasLinkLayerAddress() const
NDPNeighborSolicitationLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: NdpLayer.h:202
void serializeLayer(ObjectScope &serializer) const override
IPv6Address getTargetIP() const
Definition: NdpLayer.h:229
NDPNeighborSolicitationLayer(uint8_t code, const IPv6Address &targetIP)
MacAddress getLinkLayerAddress() const
static bool isDataValid(const uint8_t *data, size_t dataLen)
Definition: NdpLayer.h:210
std::string toString() const override
NDPNeighborSolicitationLayer(uint8_t code, const IPv6Address &targetIP, const MacAddress &srcMac)
Definition: NdpLayer.h:79
NdpOptionBuilder(NDPNeighborOptionTypes optionType, const uint8_t *optionValue, uint8_t optionValueLen)
Definition: NdpLayer.h:87
Definition: NdpLayer.h:33
NDPNeighborOptionTypes getNdpOptionType() const
Definition: NdpLayer.h:45
~NdpOption() override=default
A d'tor for this class, currently does nothing.
NdpOption(uint8_t *optionRawData)
Definition: NdpLayer.h:37
size_t getDataSize() const override
Definition: NdpLayer.h:63
size_t getTotalSize() const override
Definition: NdpLayer.h:55
Definition: Serializers.h:230
Definition: TLVData.h:374
Definition: TLVData.h:219
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
NDPNeighborOptionTypes
An enum representing the available option types for Neighbor Discovery in IPv6 (see RFC 4861)
Definition: NdpLayer.h:20
Definition: Serializers.h:18
Definition: IcmpV6Layer.h:192
static constexpr uint16_t MaxID
The highest field ID used by IcmpV6Layer.
Definition: IcmpV6Layer.h:194
static std::vector< FieldDescriptor > all()
Definition: IcmpV6Layer.h:197
Definition: NdpLayer.h:140
static const FieldDescriptor Options
Array of NDP options; elements described by Option.
Definition: NdpLayer.h:154
static constexpr uint16_t MaxID
The highest field ID used by NDPLayerBase.
Definition: NdpLayer.h:142
static std::vector< FieldDescriptor > all()
Definition: NdpLayer.h:145
static const FieldDescriptor Option
One option's type name; an Options element, not included in all()
Definition: NdpLayer.h:157
Definition: NdpLayer.h:397
static std::vector< FieldDescriptor > all()
Definition: NdpLayer.h:399
static const FieldDescriptor TargetMac
Target MAC address option, as a string (if present)
Definition: NdpLayer.h:421
static const FieldDescriptor OverrideFlag
Override flag.
Definition: NdpLayer.h:418
static const FieldDescriptor UnicastFlag
Solicited (unicast) flag.
Definition: NdpLayer.h:415
static const FieldDescriptor RouterFlag
Router flag.
Definition: NdpLayer.h:412
static const FieldDescriptor TargetIP
Target IPv6 address, as a string.
Definition: NdpLayer.h:409
Definition: NdpLayer.h:289
uint32_t override
Flag indicating that this entry should override the old one.
Definition: NdpLayer.h:295
uint8_t targetIP[16]
Target address - Either source address of advertisement or address for requested MAC.
Definition: NdpLayer.h:316
uint32_t solicited
Definition: NdpLayer.h:298
uint32_t router
Flag indicating that the advertisement is sent by a router.
Definition: NdpLayer.h:300
uint32_t reserved
Unused field.
Definition: NdpLayer.h:293
uint32_t reserved2
Unused field.
Definition: NdpLayer.h:302
Definition: NdpLayer.h:248
static std::vector< FieldDescriptor > all()
Definition: NdpLayer.h:250
static const FieldDescriptor LinkLayerAddress
Link-layer MAC address option, as a string (if present)
Definition: NdpLayer.h:262
static const FieldDescriptor TargetIP
Target IPv6 address, as a string.
Definition: NdpLayer.h:259
Definition: NdpLayer.h:189
uint32_t reserved
Reserved.
Definition: NdpLayer.h:191
uint8_t targetIP[16]
Target address - Target address of solicitation message.
Definition: NdpLayer.h:193
Definition: IcmpV6Layer.h:96