Coverage Report

Created: 2025-08-26 07:54

/src/PcapPlusPlus/Packet++/src/VxlanLayer.cpp
Line
Count
Source (jump to first uncovered line)
1
#include "VxlanLayer.h"
2
#include "EthLayer.h"
3
#include "EndianPortable.h"
4
5
#include <cstring>
6
7
namespace pcpp
8
{
9
10
  VxlanLayer::VxlanLayer(uint32_t vni, uint16_t groupPolicyID, bool setGbpFlag, bool setPolicyAppliedFlag,
11
                         bool setDontLearnFlag)
12
0
  {
13
0
    const size_t headerLen = sizeof(vxlan_header);
14
0
    m_DataLen = headerLen;
15
0
    m_Data = new uint8_t[headerLen];
16
0
    memset(m_Data, 0, headerLen);
17
0
    m_Protocol = VXLAN;
18
19
0
    if (vni != 0)
20
0
      setVNI(vni);
21
22
0
    vxlan_header* vxlanHeader = getVxlanHeader();
23
24
0
    if (groupPolicyID != 0)
25
0
      vxlanHeader->groupPolicyID = htobe16(groupPolicyID);
26
27
0
    vxlanHeader->vniPresentFlag = 1;
28
29
0
    if (setGbpFlag)
30
0
      vxlanHeader->gbpFlag = 1;
31
0
    if (setPolicyAppliedFlag)
32
0
      vxlanHeader->policyAppliedFlag = 1;
33
0
    if (setDontLearnFlag)
34
0
      vxlanHeader->dontLearnFlag = 1;
35
0
  }
36
37
  uint32_t VxlanLayer::getVNI() const
38
0
  {
39
0
    return (be32toh(getVxlanHeader()->vni) >> 8);
40
0
  }
41
42
  void VxlanLayer::setVNI(uint32_t vni)
43
0
  {
44
0
    getVxlanHeader()->vni = htobe32(vni << 8);
45
0
  }
46
47
  std::string VxlanLayer::toString() const
48
0
  {
49
0
    return "VXLAN Layer";
50
0
  }
51
52
  void VxlanLayer::parseNextLayer()
53
0
  {
54
0
    if (m_DataLen <= sizeof(vxlan_header))
55
0
      return;
56
57
0
    m_NextLayer = new EthLayer(m_Data + sizeof(vxlan_header), m_DataLen - sizeof(vxlan_header), this, m_Packet);
58
0
  }
59
60
}  // namespace pcpp