Coverage Report

Created: 2026-10-17 07:09

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/PcapPlusPlus/Packet++/src/VxlanLayer.cpp
Line
Count
Source
1
#include "VxlanLayer.h"
2
#include "EthLayer.h"
3
#include "PayloadLayer.h"
4
#include "EndianPortable.h"
5
6
#include <cstring>
7
8
namespace pcpp
9
{
10
11
  VxlanLayer::VxlanLayer(uint32_t vni, uint16_t groupPolicyID, bool setGbpFlag, bool setPolicyAppliedFlag,
12
                         bool setDontLearnFlag)
13
0
  {
14
0
    allocData(sizeof(vxlan_header));
15
0
    m_Protocol = VXLAN;
16
17
0
    if (vni != 0)
18
0
      setVNI(vni);
19
20
0
    vxlan_header* vxlanHeader = getVxlanHeader();
21
22
0
    if (groupPolicyID != 0)
23
0
      vxlanHeader->groupPolicyID = htobe16(groupPolicyID);
24
25
0
    vxlanHeader->vniPresentFlag = 1;
26
27
0
    if (setGbpFlag)
28
0
      vxlanHeader->gbpFlag = 1;
29
0
    if (setPolicyAppliedFlag)
30
0
      vxlanHeader->policyAppliedFlag = 1;
31
0
    if (setDontLearnFlag)
32
0
      vxlanHeader->dontLearnFlag = 1;
33
0
  }
34
35
  uint32_t VxlanLayer::getVNI() const
36
0
  {
37
0
    return (be32toh(getVxlanHeader()->vni) >> 8);
38
0
  }
39
40
  void VxlanLayer::setVNI(uint32_t vni)
41
0
  {
42
0
    getVxlanHeader()->vni = htobe32(vni << 8);
43
0
  }
44
45
  std::string VxlanLayer::toString() const
46
1.43k
  {
47
1.43k
    return "VXLAN Layer";
48
1.43k
  }
49
50
  void VxlanLayer::parseNextLayer()
51
6.12k
  {
52
6.12k
    if (m_DataLen <= sizeof(vxlan_header))
53
0
      return;
54
55
6.12k
    auto payload = m_Data + sizeof(vxlan_header);
56
6.12k
    auto payloadLen = m_DataLen - sizeof(vxlan_header);
57
6.12k
    tryConstructNextLayerWithFallback<EthLayer, PayloadLayer>(payload, payloadLen);
58
6.12k
  }
59
60
  const FieldDescriptor VxlanLayer::SerializedFields::ValidVNI{ Layer::SerializedFields::MaxID + 1, "validVNI" };
61
  const FieldDescriptor VxlanLayer::SerializedFields::GroupPolicyID{ Layer::SerializedFields::MaxID + 2,
62
                                                                   "groupPolicyID" };
63
  const FieldDescriptor VxlanLayer::SerializedFields::VNI{ Layer::SerializedFields::MaxID + 3, "vni" };
64
65
  void VxlanLayer::serializeLayer(ObjectScope& serializer) const
66
0
  {
67
0
    auto* header = getVxlanHeader();
68
0
    serializer.writeField(SerializedFields::ValidVNI, header->vniPresentFlag ? true : false);
69
    serializer.writeField(SerializedFields::GroupPolicyID, be16toh(header->groupPolicyID));
70
0
    serializer.writeField(SerializedFields::VNI, getVNI());
71
0
  }
72
}  // namespace pcpp