PcapPlusPlus  Next
VlanLayer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "Layer.h"
4 #include "EthLayer.h"
5 
7 
10 namespace pcpp
11 {
14 #pragma pack(push, 1)
15  struct vlan_header
16  {
24  uint16_t vlan;
26  uint16_t etherType;
27  };
28 #pragma pack(pop)
29  static_assert(sizeof(vlan_header) == 4, "vlan_header size is not 4 bytes");
30 
33  class VlanLayer : public Layer
34  {
35  public:
41  VlanLayer(uint8_t* data, size_t dataLen, Layer* prevLayer, Packet* packet)
42  : Layer(data, dataLen, prevLayer, packet, VLAN)
43  {}
44 
51  VlanLayer(const uint16_t vlanID, bool cfi, uint8_t priority, uint16_t etherType = 0);
52 
53  ~VlanLayer() override = default;
54 
59  {
60  return reinterpret_cast<vlan_header*>(m_Data);
61  }
62 
67  uint16_t getVlanID() const;
68 
71  uint8_t getCFI() const;
72 
75  uint8_t getPriority() const;
76 
81  void setVlanID(uint16_t id);
82 
86  void setCFI(bool cfi);
87 
91  void setPriority(uint8_t priority);
92 
93  // implement abstract methods
94 
97  void parseNextLayer() override;
98 
100  size_t getHeaderLen() const override
101  {
102  return sizeof(vlan_header);
103  }
104 
106  void computeCalculateFields() override;
107 
108  std::string toString() const override;
109 
111  {
112  return OsiModelDataLinkLayer;
113  }
114  };
115 } // namespace pcpp
Definition: Layer.h:60
Definition: Packet.h:22
Definition: VlanLayer.h:34
uint8_t getCFI() const
std::string toString() const override
uint16_t getVlanID() const
VlanLayer(const uint16_t vlanID, bool cfi, uint8_t priority, uint16_t etherType=0)
void parseNextLayer() override
uint8_t getPriority() const
VlanLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: VlanLayer.h:41
vlan_header * getVlanHeader() const
Definition: VlanLayer.h:58
void setPriority(uint8_t priority)
OsiModelLayer getOsiModelLayer() const override
Definition: VlanLayer.h:110
size_t getHeaderLen() const override
Definition: VlanLayer.h:100
void computeCalculateFields() override
Calculate the EtherType for known protocols: IPv4, IPv6, ARP, VLAN.
void setCFI(bool cfi)
void setVlanID(uint16_t id)
The main namespace for the PcapPlusPlus lib.
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:225
@ OsiModelDataLinkLayer
Data link layer (layer 2)
Definition: ProtocolType.h:229
const ProtocolType VLAN
VLAN protocol.
Definition: ProtocolType.h:53
Definition: VlanLayer.h:16
uint16_t etherType
Ethernet type for next layer.
Definition: VlanLayer.h:26
uint16_t vlan
Definition: VlanLayer.h:24