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 
12 
15 namespace pcpp
16 {
17 
20  class MacAddress
21  {
22  public:
25  MacAddress() = default;
26 
31  explicit MacAddress(const uint8_t addr[6])
32  {
33  std::copy(addr, addr + 6, m_Address.begin());
34  }
35 
39  explicit MacAddress(const std::array<uint8_t, 6>& addr) : m_Address(addr)
40  {}
41 
45  explicit MacAddress(const std::string& addr);
46 
50  template <typename T, typename = typename std::enable_if<std::is_convertible<T, std::string>::value>::type>
51  MacAddress(const T& addr) : MacAddress(static_cast<std::string>(addr))
52  {}
53 
61  MacAddress(uint8_t firstOctet, uint8_t secondOctet, uint8_t thirdOctet, uint8_t fourthOctet, uint8_t fifthOctet,
62  uint8_t sixthOctet)
63  : m_Address{ firstOctet, secondOctet, thirdOctet, fourthOctet, fifthOctet, sixthOctet }
64  {}
65 
70  MacAddress(std::initializer_list<uint8_t> octets)
71  {
72  if (octets.size() != m_Address.size())
73  {
74  throw std::invalid_argument("Invalid initializer list size, should be 6");
75  }
76  std::copy(octets.begin(), octets.end(), std::begin(m_Address));
77  }
78 
82  bool operator==(const MacAddress& other) const
83  {
84  return m_Address == other.m_Address;
85  }
86 
90  bool operator!=(const MacAddress& other) const
91  {
92  return !operator==(other);
93  }
94 
99  MacAddress& operator=(std::initializer_list<uint8_t> octets)
100  {
101  if (octets.size() != sizeof(m_Address))
102  {
103  throw std::invalid_argument("Invalid initializer list size, should be 6");
104  }
105 
106  std::copy(octets.begin(), octets.end(), m_Address.begin());
107  return *this;
108  }
109 
112  const uint8_t* getRawData() const
113  {
114  return m_Address.data();
115  }
116 
119  std::string toString() const;
120 
122  std::array<uint8_t, 6> toByteArray() const
123  {
124  return m_Address;
125  }
126 
130  void copyTo(uint8_t** arr) const
131  {
132  *arr = new uint8_t[m_Address.size()];
133  std::copy(m_Address.begin(), m_Address.end(), *arr);
134  }
135 
139  void copyTo(uint8_t arr[6]) const
140  {
141  std::copy(m_Address.begin(), m_Address.end(), arr);
142  }
143 
145  static MacAddress Zero;
148 
149  private:
150  std::array<uint8_t, 6> m_Address{};
151  };
152 
153  inline std::ostream& operator<<(std::ostream& oss, const pcpp::MacAddress& macAddress)
154  {
155  oss << macAddress.toString();
156  return oss;
157  }
158 } // namespace pcpp
Definition: MacAddress.h:21
MacAddress & operator=(std::initializer_list< uint8_t > octets)
Definition: MacAddress.h:99
MacAddress(const T &addr)
Definition: MacAddress.h:51
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:145
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:61
MacAddress(const uint8_t addr[6])
Definition: MacAddress.h:31
std::array< uint8_t, 6 > toByteArray() const
Definition: MacAddress.h:122
static MacAddress Broadcast
A static value representing a broadcast MAC address, meaning address of value "ff:ff:ff:ff:ff:ff".
Definition: MacAddress.h:147
MacAddress(const std::array< uint8_t, 6 > &addr)
Definition: MacAddress.h:39
MacAddress()=default
bool operator==(const MacAddress &other) const
Definition: MacAddress.h:82
MacAddress(std::initializer_list< uint8_t > octets)
Definition: MacAddress.h:70
void copyTo(uint8_t arr[6]) const
Definition: MacAddress.h:139
const uint8_t * getRawData() const
Definition: MacAddress.h:112
void copyTo(uint8_t **arr) const
Definition: MacAddress.h:130
std::string toString() const
bool operator!=(const MacAddress &other) const
Definition: MacAddress.h:90
The main namespace for the PcapPlusPlus lib.