PcapPlusPlus  Next
WakeOnLanLayer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "IpAddress.h"
4 #include "Layer.h"
5 #include "MacAddress.h"
6 
8 
11 namespace pcpp
12 {
14  class WakeOnLanLayer : public Layer
15  {
16  private:
17  void init(uint16_t len);
18 
19  public:
22 #pragma pack(push, 1)
23  struct wol_header
24  {
26  uint8_t sync[6];
28  uint8_t addrBody[6 * 16];
29  };
30 #pragma pack(pop)
31  static_assert(sizeof(wol_header) == 102, "wol_header size is not 102 bytes");
32 
38  WakeOnLanLayer(uint8_t* data, size_t dataLen, Layer* prevLayer, Packet* packet)
39  : Layer(data, dataLen, prevLayer, packet, WakeOnLan)
40  {}
41 
44  explicit WakeOnLanLayer(const pcpp::MacAddress& targetAddr);
45 
50  WakeOnLanLayer(const pcpp::MacAddress& targetAddr, uint8_t* password, uint8_t len);
51 
55  WakeOnLanLayer(const pcpp::MacAddress& targetAddr, const pcpp::MacAddress& password);
56 
60  WakeOnLanLayer(const pcpp::MacAddress& targetAddr, const IPv4Address& password);
61 
66  {
67  return reinterpret_cast<wol_header*>(m_Data);
68  }
69 
73 
76  void setTargetAddr(const pcpp::MacAddress& targetAddr);
77 
80  std::string getPassword() const;
81 
86  bool setPassword(const uint8_t* password, uint8_t len);
87 
91  bool setPassword(const std::string& password);
92 
96  bool setPassword(const MacAddress& addr);
97 
101  bool setPassword(const IPv4Address& addr);
102 
105  static bool isWakeOnLanPort(uint16_t port)
106  {
107  return (port == 0) || (port == 7) || (port == 9);
108  }
109 
114  static bool isDataValid(const uint8_t* data, size_t dataSize);
115 
116  // overridden methods
117 
119  void parseNextLayer() override
120  {}
121 
123  size_t getHeaderLen() const override
124  {
125  return m_DataLen;
126  }
127 
129  void computeCalculateFields() override
130  {}
131 
134  {
135  return OsiModelDataLinkLayer;
136  }
137 
139  std::string toString() const override;
140  };
141 } // namespace pcpp
Definition: IpAddress.h:28
Definition: Layer.h:60
Definition: MacAddress.h:21
Definition: Packet.h:22
Class for representing the Wake on LAN Layer.
Definition: WakeOnLanLayer.h:15
WakeOnLanLayer(const pcpp::MacAddress &targetAddr, const IPv4Address &password)
std::string toString() const override
OsiModelLayer getOsiModelLayer() const override
Definition: WakeOnLanLayer.h:133
void computeCalculateFields() override
Does nothing for this layer.
Definition: WakeOnLanLayer.h:129
pcpp::MacAddress getTargetAddr() const
bool setPassword(const uint8_t *password, uint8_t len)
bool setPassword(const std::string &password)
WakeOnLanLayer(const pcpp::MacAddress &targetAddr)
wol_header * getWakeOnLanHeader() const
Definition: WakeOnLanLayer.h:65
static bool isDataValid(const uint8_t *data, size_t dataSize)
size_t getHeaderLen() const override
Definition: WakeOnLanLayer.h:123
WakeOnLanLayer(const pcpp::MacAddress &targetAddr, uint8_t *password, uint8_t len)
bool setPassword(const MacAddress &addr)
bool setPassword(const IPv4Address &addr)
WakeOnLanLayer(const pcpp::MacAddress &targetAddr, const pcpp::MacAddress &password)
void setTargetAddr(const pcpp::MacAddress &targetAddr)
static bool isWakeOnLanPort(uint16_t port)
Definition: WakeOnLanLayer.h:105
std::string getPassword() const
WakeOnLanLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: WakeOnLanLayer.h:38
void parseNextLayer() override
Parses the next layer. Wake on LAN is the always last so does nothing for this layer.
Definition: WakeOnLanLayer.h:119
The main namespace for the PcapPlusPlus lib.
const ProtocolType WakeOnLan
Wake On LAN (WOL) Protocol.
Definition: ProtocolType.h:182
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:225
@ OsiModelDataLinkLayer
Data link layer (layer 2)
Definition: ProtocolType.h:229
Definition: WakeOnLanLayer.h:24
uint8_t sync[6]
Sync stream (FF FF FF FF FF FF)
Definition: WakeOnLanLayer.h:26
uint8_t addrBody[6 *16]
Target MAC address repeated 16 times.
Definition: WakeOnLanLayer.h:28