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, typename = std::enable_if_t<std::is_convertible<T, std::string>::value>>
61  MacAddress(const T& addr) : MacAddress(static_cast<std::string>(addr))
62  {}
63 
71  MacAddress(uint8_t firstOctet, uint8_t secondOctet, uint8_t thirdOctet, uint8_t fourthOctet, uint8_t fifthOctet,
72  uint8_t sixthOctet)
73  : m_Address{ firstOctet, secondOctet, thirdOctet, fourthOctet, fifthOctet, sixthOctet }
74  {}
75 
80  MacAddress(std::initializer_list<uint8_t> octets)
81  {
82  if (octets.size() != m_Address.size())
83  {
84  throw std::invalid_argument("Invalid initializer list size, should be 6");
85  }
86  std::copy(octets.begin(), octets.end(), std::begin(m_Address));
87  }
88 
92  bool operator==(const MacAddress& other) const
93  {
94  return m_Address == other.m_Address;
95  }
96 
100  bool operator!=(const MacAddress& other) const
101  {
102  return !operator==(other);
103  }
104 
109  MacAddress& operator=(std::initializer_list<uint8_t> octets)
110  {
111  if (octets.size() != sizeof(m_Address))
112  {
113  throw std::invalid_argument("Invalid initializer list size, should be 6");
114  }
115 
116  std::copy(octets.begin(), octets.end(), m_Address.begin());
117  return *this;
118  }
119 
122  const uint8_t* getRawData() const
123  {
124  return m_Address.data();
125  }
126 
129  std::string toString() const;
130 
132  std::array<uint8_t, 6> toByteArray() const
133  {
134  return m_Address;
135  }
136 
142  PCPP_DEPRECATED("Use copyToNewBuffer instead.")
143  void copyTo(uint8_t** arr) const
144  {
145  size_t unused = 0;
146  copyToNewBuffer(arr, unused);
147  }
148 
155  void copyTo(uint8_t arr[6]) const
156  {
157  copyTo(arr, 6);
158  }
159 
168  size_t copyTo(uint8_t* buffer, size_t size) const;
169 
177  bool copyToNewBuffer(uint8_t** buffer, size_t& size) const;
178 
180  static MacAddress Zero;
183 
184  private:
185  std::array<uint8_t, 6> m_Address{};
186  };
187 
188  inline std::ostream& operator<<(std::ostream& oss, const pcpp::MacAddress& macAddress)
189  {
190  oss << macAddress.toString();
191  return oss;
192  }
193 } // namespace pcpp
Definition: MacAddress.h:24
MacAddress & operator=(std::initializer_list< uint8_t > octets)
Definition: MacAddress.h:109
MacAddress(const T &addr)
Definition: MacAddress.h:61
static 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:180
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:71
MacAddress(const uint8_t addr[6])
Definition: MacAddress.h:36
std::array< uint8_t, 6 > toByteArray() const
Definition: MacAddress.h:132
static MacAddress Broadcast
A static value representing a broadcast MAC address, meaning address of value "ff:ff:ff:ff:ff:ff".
Definition: MacAddress.h:182
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:92
MacAddress(std::initializer_list< uint8_t > octets)
Definition: MacAddress.h:80
void copyTo(uint8_t arr[6]) const
Definition: MacAddress.h:155
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:122
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:143
std::string toString() const
bool operator!=(const MacAddress &other) const
Definition: MacAddress.h:100
The main namespace for the PcapPlusPlus lib.