PcapPlusPlus  Next
Sll2Layer.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 sll2_header
16  {
18  uint16_t protocol_type;
20  uint16_t reserved;
23  uint32_t interface_index;
25  uint16_t ARPHRD_type;
29  uint8_t packet_type;
34  uint8_t link_layer_addr[8];
35  };
36 #pragma pack(pop)
37  static_assert(sizeof(sll2_header) == 20, "sll2_header size is not 20 bytes");
38 
41  class Sll2Layer : public Layer
42  {
43  public:
48  Sll2Layer(uint8_t* data, size_t dataLen, Packet* packet) : Layer(data, dataLen, nullptr, packet, SLL2)
49  {}
50 
55  Sll2Layer(uint32_t interfaceIndex, uint16_t ARPHRDType, uint8_t packetType);
56 
57  ~Sll2Layer() override = default;
58 
63  {
64  return reinterpret_cast<sll2_header*>(m_Data);
65  }
66 
71  static bool isDataValid(const uint8_t* data, size_t dataLen);
72 
75  uint16_t getProtocolType() const;
76 
79  void setProtocolType(uint16_t protocolType);
80 
83  uint32_t getInterfaceIndex() const;
84 
87  void setInterfaceIndex(uint32_t interfaceIndex);
88 
91  uint16_t getArphrdType() const;
92 
95  void setArphrdType(uint16_t arphrdType);
96 
99  uint8_t getPacketType() const;
100 
103  void setPacketType(uint8_t packetType);
104 
107  uint8_t getLinkLayerAddrLen() const;
108 
111  const uint8_t* getLinkLayerAddr() const;
112 
117  bool setLinkLayerAddr(const uint8_t* addr, size_t addrLength);
118 
123 
127  bool setMacAddressAsLinkLayer(const MacAddress& macAddr);
128 
129  // implement abstract methods
130 
133  void parseNextLayer() override;
134 
136  void computeCalculateFields() override;
137 
139  size_t getHeaderLen() const override
140  {
141  return sizeof(sll2_header);
142  }
143 
144  std::string toString() const override;
145 
147  {
148  return OsiModelDataLinkLayer;
149  }
150  };
151 
152 } // namespace pcpp
Definition: Layer.h:60
Definition: MacAddress.h:21
Definition: Packet.h:22
Definition: Sll2Layer.h:42
uint8_t getLinkLayerAddrLen() const
const uint8_t * getLinkLayerAddr() const
void setArphrdType(uint16_t arphrdType)
bool setLinkLayerAddr(const uint8_t *addr, size_t addrLength)
uint8_t getPacketType() const
size_t getHeaderLen() const override
Definition: Sll2Layer.h:139
Sll2Layer(uint8_t *data, size_t dataLen, Packet *packet)
Definition: Sll2Layer.h:48
void computeCalculateFields() override
Calculate the next protocol type for known protocols: IPv4, IPv6, ARP, VLAN.
uint16_t getProtocolType() const
bool setMacAddressAsLinkLayer(const MacAddress &macAddr)
void setProtocolType(uint16_t protocolType)
std::string toString() const override
OsiModelLayer getOsiModelLayer() const override
Definition: Sll2Layer.h:146
void setPacketType(uint8_t packetType)
uint16_t getArphrdType() const
MacAddress getLinkLayerAsMacAddress()
sll2_header * getSll2Header() const
Definition: Sll2Layer.h:62
void parseNextLayer() override
Sll2Layer(uint32_t interfaceIndex, uint16_t ARPHRDType, uint8_t packetType)
void setInterfaceIndex(uint32_t interfaceIndex)
uint32_t getInterfaceIndex() const
static bool isDataValid(const uint8_t *data, size_t dataLen)
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 SLL2
SLL2 protocol.
Definition: ProtocolType.h:203
Definition: Sll2Layer.h:16
uint16_t ARPHRD_type
Contains a Linux ARPHRD_ value for the link-layer device type.
Definition: Sll2Layer.h:25
uint16_t protocol_type
Contains an Ethernet protocol type of the next layer.
Definition: Sll2Layer.h:18
uint8_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: Sll2Layer.h:31
uint16_t reserved
The "Reserved (MBZ)" field is reserved, and must be set to zero.
Definition: Sll2Layer.h:20
uint8_t link_layer_addr[8]
Definition: Sll2Layer.h:34
uint32_t interface_index
Definition: Sll2Layer.h:23
uint8_t packet_type
Definition: Sll2Layer.h:29