PcapPlusPlus  Next
SllLayer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "MacAddress.h"
4 #include "Layer.h"
5 
7 
10 namespace pcpp
11 {
14 #pragma pack(push, 1)
15  struct sll_header
16  {
20  uint16_t packet_type;
22  uint16_t ARPHRD_type;
27  uint8_t link_layer_addr[8];
29  uint16_t protocol_type;
30  };
31 #pragma pack(pop)
32  static_assert(sizeof(sll_header) == 16, "sll_header size is not 16 bytes");
33 
36  class SllLayer : public Layer
37  {
38  public:
43  SllLayer(uint8_t* data, size_t dataLen, Packet* packet) : Layer(data, dataLen, nullptr, packet, SLL)
44  {}
45 
49  SllLayer(uint16_t packetType, uint16_t ARPHRDType);
50 
51  ~SllLayer() override = default;
52 
57  {
58  return reinterpret_cast<sll_header*>(m_Data);
59  }
60 
65  bool setLinkLayerAddr(uint8_t* addr, size_t addrLength);
66 
70  bool setMacAddressAsLinkLayer(const MacAddress& macAddr);
71 
74  void parseNextLayer() override;
75 
77  size_t getHeaderLen() const override
78  {
79  return sizeof(sll_header);
80  }
81 
83  void computeCalculateFields() override;
84 
85  std::string toString() const override;
86 
88  {
89  return OsiModelDataLinkLayer;
90  }
91 
96  {
98  static std::vector<FieldDescriptor> all()
99  {
100  auto result = Layer::SerializedFields::all();
101  std::initializer_list<FieldDescriptor> extra{ PacketType, ArpHeaderType, ProtocolType,
103  std::copy(extra.begin(), extra.end(), std::back_inserter(result));
104  return result;
105  }
106 
109 
112 
115 
118  };
119 
120  protected:
121  void serializeLayer(ObjectScope& serializer) const override;
122  };
123 
124 } // namespace pcpp
Definition: Layer.h:117
Definition: MacAddress.h:24
Definition: Serializers.h:230
Definition: Packet.h:49
Definition: SllLayer.h:37
SllLayer(uint16_t packetType, uint16_t ARPHRDType)
bool setMacAddressAsLinkLayer(const MacAddress &macAddr)
size_t getHeaderLen() const override
Definition: SllLayer.h:77
bool setLinkLayerAddr(uint8_t *addr, size_t addrLength)
sll_header * getSllHeader() const
Definition: SllLayer.h:56
std::string toString() const override
void serializeLayer(ObjectScope &serializer) const override
OsiModelLayer getOsiModelLayer() const override
Definition: SllLayer.h:87
void parseNextLayer() override
void computeCalculateFields() override
Calculate the next protocol type for known protocols: IPv4, IPv6, ARP, VLAN.
SllLayer(uint8_t *data, size_t dataLen, Packet *packet)
Definition: SllLayer.h:43
const ProtocolType SLL
SLL (Linux cooked capture) protocol.
Definition: ProtocolType.h:114
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: Layer.h:212
static std::vector< FieldDescriptor > all()
Definition: Layer.h:214
Definition: SllLayer.h:96
static const FieldDescriptor ProtocolType
EtherType of the encapsulated protocol, in host byte order.
Definition: SllLayer.h:114
static const FieldDescriptor LinkLayerAddress
Link-layer address of the sender.
Definition: SllLayer.h:117
static const FieldDescriptor ArpHeaderType
ARPHRD_* link-layer address type (e.g. 1 for Ethernet)
Definition: SllLayer.h:111
static const FieldDescriptor PacketType
Packet type.
Definition: SllLayer.h:108
static std::vector< FieldDescriptor > all()
Definition: SllLayer.h:98
Definition: SllLayer.h:16
uint16_t protocol_type
Contains an Ethernet protocol type of the next layer.
Definition: SllLayer.h:29
uint16_t ARPHRD_type
Contains a Linux ARPHRD_ value for the link-layer device type.
Definition: SllLayer.h:22
uint16_t packet_type
Definition: SllLayer.h:20
uint16_t link_layer_addr_len
Contains the length of the link-layer address of the sender of the packet. That length could be zero.
Definition: SllLayer.h:24
uint8_t link_layer_addr[8]
Definition: SllLayer.h:27