/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 |