PcapPlusPlus  Next
MplsLayer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "Layer.h"
4 
6 
9 namespace pcpp
10 {
13  class MplsLayer : public Layer
14  {
15  private:
16 #pragma pack(push, 1)
17  struct mpls_header
18  {
19  uint16_t hiLabel;
20  uint8_t misc;
21  uint8_t ttl;
22  };
23 #pragma pack(pop)
24  static_assert(sizeof(mpls_header) == 4, "mpls_header size is not 4 bytes");
25 
26  mpls_header* getMplsHeader() const
27  {
28  return reinterpret_cast<mpls_header*>(m_Data);
29  }
30 
31  public:
37  MplsLayer(uint8_t* data, size_t dataLen, Layer* prevLayer, Packet* packet)
38  : Layer(data, dataLen, prevLayer, packet, MPLS)
39  {}
40 
47  MplsLayer(uint32_t mplsLabel, uint8_t ttl, uint8_t experimentalUseValue, bool bottomOfStack);
48 
49  ~MplsLayer() override = default;
50 
52  uint8_t getTTL() const
53  {
54  return getMplsHeader()->ttl;
55  }
56 
59  void setTTL(uint8_t ttl)
60  {
61  getMplsHeader()->ttl = ttl;
62  }
63 
66  bool isBottomOfStack() const;
67 
70  void setBottomOfStack(bool val);
71 
73  uint8_t getExperimentalUseValue() const;
74 
78  bool setExperimentalUseValue(uint8_t val);
79 
81  uint32_t getMplsLabel() const;
82 
86  bool setMplsLabel(uint32_t label);
87 
88  // implement abstract methods
89 
91  void parseNextLayer() override;
92 
94  size_t getHeaderLen() const override
95  {
96  return sizeof(mpls_header);
97  }
98 
101  void computeCalculateFields() override;
102 
103  std::string toString() const override;
104 
106  {
107  return OsiModelNetworkLayer;
108  }
109  };
110 
111 } // namespace pcpp
Definition: Layer.h:60
Definition: MplsLayer.h:14
uint8_t getTTL() const
Definition: MplsLayer.h:52
bool setMplsLabel(uint32_t label)
void parseNextLayer() override
Currently identifies the following next layers: IPv4Layer, IPv6Layer, MplsLayer. Otherwise sets Paylo...
uint8_t getExperimentalUseValue() const
bool setExperimentalUseValue(uint8_t val)
void computeCalculateFields() override
MplsLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: MplsLayer.h:37
void setTTL(uint8_t ttl)
Definition: MplsLayer.h:59
OsiModelLayer getOsiModelLayer() const override
Definition: MplsLayer.h:105
size_t getHeaderLen() const override
Definition: MplsLayer.h:94
bool isBottomOfStack() const
uint32_t getMplsLabel() const
void setBottomOfStack(bool val)
MplsLayer(uint32_t mplsLabel, uint8_t ttl, uint8_t experimentalUseValue, bool bottomOfStack)
std::string toString() const override
Definition: Packet.h:22
The main namespace for the PcapPlusPlus lib.
const ProtocolType MPLS
MPLS protocol.
Definition: ProtocolType.h:71
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:225
@ OsiModelNetworkLayer
Network layer (layer 3)
Definition: ProtocolType.h:231