PcapPlusPlus  Next
LLCLayer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "Layer.h"
4 
6 
9 namespace pcpp
10 {
11 #pragma pack(push, 1)
14  struct llc_header
15  {
17  uint8_t dsap,
22  };
23 #pragma pack(pop)
24  static_assert(sizeof(llc_header) == 3, "llc_header size is not 3 bytes");
25 
28  class LLCLayer : public Layer
29  {
30  public:
36  LLCLayer(uint8_t* data, size_t dataLen, Layer* prevLayer, Packet* packet)
37  : Layer(data, dataLen, prevLayer, packet, LLC)
38  {}
39 
44  LLCLayer(uint8_t dsap, uint8_t ssap, uint8_t control);
45 
48  inline llc_header* getLlcHeader() const
49  {
50  return reinterpret_cast<llc_header*>(m_Data);
51  };
52 
53  // overridden methods
54 
56  void parseNextLayer() override;
57 
59  void computeCalculateFields() override
60  {}
61 
63  size_t getHeaderLen() const override
64  {
65  return sizeof(llc_header);
66  }
67 
69  std::string toString() const override;
70 
73  {
74  return OsiModelDataLinkLayer;
75  }
76 
81  static bool isDataValid(const uint8_t* data, size_t dataLen);
82 
87  {
89  static std::vector<FieldDescriptor> all()
90  {
91  auto result = Layer::SerializedFields::all();
92  std::initializer_list<FieldDescriptor> extra{ DSAP, SSAP, Control };
93  std::copy(extra.begin(), extra.end(), std::back_inserter(result));
94  return result;
95  }
96 
98  static const FieldDescriptor DSAP;
99 
101  static const FieldDescriptor SSAP;
102 
104  static const FieldDescriptor Control;
105  };
106 
107  protected:
108  void serializeLayer(ObjectScope& serializer) const override;
109  };
110 
111 } // namespace pcpp
Definition: LLCLayer.h:29
OsiModelLayer getOsiModelLayer() const override
Definition: LLCLayer.h:72
void parseNextLayer() override
Parses the next layer. Currently only STP supported as next layer.
size_t getHeaderLen() const override
Definition: LLCLayer.h:63
void computeCalculateFields() override
Does nothing for this layer.
Definition: LLCLayer.h:59
LLCLayer(uint8_t dsap, uint8_t ssap, uint8_t control)
LLCLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: LLCLayer.h:36
void serializeLayer(ObjectScope &serializer) const override
llc_header * getLlcHeader() const
Definition: LLCLayer.h:48
static bool isDataValid(const uint8_t *data, size_t dataLen)
std::string toString() const override
Definition: Layer.h:117
Definition: Serializers.h:230
Definition: Packet.h:49
const ProtocolType LLC
Logical Link Control (LLC)
Definition: ProtocolType.h:201
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:420
@ OsiModelDataLinkLayer
Data link layer (layer 2)
Definition: ProtocolType.h:424
Definition: Serializers.h:18
Definition: LLCLayer.h:87
static const FieldDescriptor SSAP
Source Service Access Point.
Definition: LLCLayer.h:101
static const FieldDescriptor Control
First byte of the LLC control field.
Definition: LLCLayer.h:104
static const FieldDescriptor DSAP
Destination Service Access Point.
Definition: LLCLayer.h:98
static std::vector< FieldDescriptor > all()
Definition: LLCLayer.h:89
Definition: Layer.h:212
static std::vector< FieldDescriptor > all()
Definition: Layer.h:214
Definition: LLCLayer.h:15
uint8_t dsap
Destination Service Access Point.
Definition: LLCLayer.h:17
uint8_t control
Control Field.
Definition: LLCLayer.h:21
uint8_t ssap
Source Service Access Point.
Definition: LLCLayer.h:19