PcapPlusPlus  Next
MacAddress.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <algorithm>
4 #include <initializer_list>
5 #include <iterator>
6 #include <ostream>
7 #include <cstdint>
8 #include <string>
9 #include <array>
10 #include <memory>
11 
12 #include "DeprecationUtils.h"
13 
15 
18 namespace pcpp
19 {
20 
23  class MacAddress
24  {
25  public:
28  MacAddress() = default;
29 
36  explicit MacAddress(const uint8_t addr[6]) : MacAddress(addr, 6)
37  {}
38 
44  explicit MacAddress(const uint8_t* addr, size_t size);
45 
49  explicit MacAddress(const std::array<uint8_t, 6>& addr) : m_Address(addr)
50  {}
51 
55  explicit MacAddress(const std::string& addr);
56 
60  template <typename T,
61  typename = std::enable_if_t<std::is_convertible<T, std::string>::value && !std::is_array<T>::value>>
62  MacAddress(const T& addr) : MacAddress(static_cast<std::string>(addr))
63  {}
64 
70  template <size_t N>
71  MacAddress(const char (&addr)[N]) : MacAddress(std::string(addr, std::find(addr, addr + N, '\0')))
72  {}
73 
81  MacAddress(uint8_t firstOctet, uint8_t secondOctet, uint8_t thirdOctet, uint8_t fourthOctet, uint8_t fifthOctet,
82  uint8_t sixthOctet)
83  : m_Address{ firstOctet, secondOctet, thirdOctet, fourthOctet, fifthOctet, sixthOctet }
84  {}
85 
90  MacAddress(std::initializer_list<uint8_t> octets)
91  {
92  if (octets.size() != m_Address.size())
93  {
94  throw std::invalid_argument("Invalid initializer list size, should be 6");
95  }
96  std::copy(octets.begin(), octets.end(), std::begin(m_Address));
97  }
98 
102  bool operator==(const MacAddress& other) const
103  {
104  return m_Address == other.m_Address;
105  }
106 
110  bool operator!=(const MacAddress& other) const
111  {
112  return !operator==(other);
113  }
114 
119  MacAddress& operator=(std::initializer_list<uint8_t> octets)
120  {
121  if (octets.size() != sizeof(m_Address))
122  {
123  throw std::invalid_argument("Invalid initializer list size, should be 6");
124  }
125 
126  std::copy(octets.begin(), octets.end(), m_Address.begin());
127  return *this;
128  }
129 
132  const uint8_t* getRawData() const
133  {
134  return m_Address.data();
135  }
136 
139  std::string toString() const;
140 
142  std::array<uint8_t, 6> toByteArray() const
143  {
144  return m_Address;
145  }
146 
152  PCPP_DEPRECATED("Use copyToNewBuffer instead.")
153  void copyTo(uint8_t** arr) const
154  {
155  size_t unused = 0;
156  copyToNewBuffer(arr, unused);
157  }
158 
165  void copyTo(uint8_t arr[6]) const
166  {
167  copyTo(arr, 6);
168  }
169 
178  size_t copyTo(uint8_t* buffer, size_t size) const;
179 
187  bool copyToNewBuffer(uint8_t** buffer, size_t& size) const;
188 
190  static const MacAddress Zero;
192  static const MacAddress Broadcast;
193 
194  private:
195  std::array<uint8_t, 6> m_Address{};
196  };
197 
198  namespace literals
199  {
200  inline MacAddress operator""_mac(const char* addrString, size_t size)
201  {
202  return MacAddress(std::string(addrString, size));
203  }
204  } // namespace literals
205 
206  inline std::ostream& operator<<(std::ostream& oss, const pcpp::MacAddress& macAddress)
207  {
208  oss << macAddress.toString();
209  return oss;
210  }
211 } // namespace pcpp
Definition: MacAddress.h:24
MacAddress(const char(&addr)[N])
Definition: MacAddress.h:71
MacAddress & operator=(std::initializer_list< uint8_t > octets)
Definition: MacAddress.h:119
MacAddress(const T &addr)
Definition: MacAddress.h:62
MacAddress(const std::string &addr)
MacAddress(uint8_t firstOctet, uint8_t secondOctet, uint8_t thirdOctet, uint8_t fourthOctet, uint8_t fifthOctet, uint8_t sixthOctet)
Definition: MacAddress.h:81
MacAddress(const uint8_t addr[6])
Definition: MacAddress.h:36
std::array< uint8_t, 6 > toByteArray() const
Definition: MacAddress.h:142
static const MacAddress Zero
A static value representing a zero value of MAC address, meaning address of value "00:00:00:00:00:00"...
Definition: MacAddress.h:190
MacAddress(const std::array< uint8_t, 6 > &addr)
Definition: MacAddress.h:49
MacAddress()=default
MacAddress(const uint8_t *addr, size_t size)
A constructor that creates an instance of the class out of a byte array of 6 bytes.
bool operator==(const MacAddress &other) const
Definition: MacAddress.h:102
MacAddress(std::initializer_list< uint8_t > octets)
Definition: MacAddress.h:90
static const MacAddress Broadcast
A static value representing a broadcast MAC address, meaning address of value "ff:ff:ff:ff:ff:ff".
Definition: MacAddress.h:192
void copyTo(uint8_t arr[6]) const
Definition: MacAddress.h:165
size_t copyTo(uint8_t *buffer, size_t size) const
Copies the address value to a user-provided buffer.
const uint8_t * getRawData() const
Definition: MacAddress.h:132
bool copyToNewBuffer(uint8_t **buffer, size_t &size) const
Allocates a new buffer and copies the address value to it. The user is responsible for deallocating t...
void copyTo(uint8_t **arr) const
Definition: MacAddress.h:153
std::string toString() const
bool operator!=(const MacAddress &other) const
Definition: MacAddress.h:110
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
@ PCPP_DEPRECATED
Deprecated typo, use OsiModelSessionLayer instead.
Definition: ProtocolType.h:437