join 1.0
lightweight network framework library
Loading...
Searching...
No Matches
mac_address.hpp
Go to the documentation of this file.
1
25#ifndef JOIN_CORE_MAC_ADDRESS_HPP
26#define JOIN_CORE_MAC_ADDRESS_HPP
27
28// libjoin.
29#include <join/ip_address.hpp>
30
31// C++
32#include <ostream>
33#include <compare>
34#include <string>
35#include <array>
36
37// C
38#include <unistd.h>
39#include <net/if.h>
40
41namespace join
42{
47 {
48 public:
50 using CaseConvert = std::ios_base&(std::ios_base&);
51
53 using iterator = std::array<uint8_t, IFHWADDRLEN>::iterator;
54
56 using const_iterator = std::array<uint8_t, IFHWADDRLEN>::const_iterator;
57
61 MacAddress ();
62
68
74
81 MacAddress (const uint8_t* address, size_t size);
82
88 MacAddress (const uint8_t (&address)[IFHWADDRLEN]);
89
95 MacAddress (std::initializer_list<uint8_t> address);
96
102 MacAddress (const struct sockaddr& address);
103
109 MacAddress (const char* address);
110
116 MacAddress (const std::string& address);
117
121 ~MacAddress () = default;
122
127 int family () const;
128
133 const uint8_t* addr () const;
134
139 socklen_t length () const;
140
145 bool isWildcard () const;
146
151 bool isBroadcast () const;
152
158 static bool isMacAddress (const std::string& address);
159
165 std::string toString (CaseConvert caseConvert = std::nouppercase) const;
166
173 IpAddress toIpv6 (const IpAddress& prefix, int len) const;
174
179 IpAddress toLinkLocalIpv6 () const;
180
186
190 void clear ();
191
196 iterator begin ();
197
202 const_iterator begin () const;
203
208 const_iterator cbegin () const;
209
214 iterator end ();
215
220 const_iterator end () const;
221
226 const_iterator cend () const;
227
233 static MacAddress address (const std::string& interface);
234
241
248
255 MacAddress& operator= (std::initializer_list<uint8_t> address);
256
263 MacAddress& operator= (const struct sockaddr& address);
264
270 MacAddress& operator+= (int value);
271
277
283
290 uint8_t& operator[] (size_t position);
291
298 const uint8_t& operator[] (size_t position) const;
299
304 MacAddress operator~() const;
305
307 static const MacAddress wildcard;
308
310 static const MacAddress broadcast;
311
312 private:
314 std::array<uint8_t, IFHWADDRLEN> _mac = {};
315 };
316
323 MacAddress operator+ (int value, const MacAddress& a);
324
331 MacAddress operator+ (const MacAddress& a, int value);
332
339 bool operator== (const MacAddress& a, const MacAddress& b);
340
347 std::strong_ordering operator<=> (const MacAddress& a, const MacAddress& b);
348
355 MacAddress operator& (const MacAddress& a, const MacAddress& b);
356
363 MacAddress operator| (const MacAddress& a, const MacAddress& b);
364
371 MacAddress operator^ (const MacAddress& a, const MacAddress& b);
372
379 std::ostream& operator<< (std::ostream& out, const MacAddress& a);
380}
381
382#endif
IPv6, IPv4 address class.
Definition ip_address.hpp:52
MAC address class.
Definition mac_address.hpp:47
socklen_t length() const
get the size in byte of the internal MAC address array.
Definition mac_address.cpp:173
void clear()
clear MAC address (wilcard address).
Definition mac_address.cpp:292
bool isBroadcast() const
check if MAC address is a broadcast address.
Definition mac_address.cpp:191
~MacAddress()=default
destroy the MacAddress instance.
static const MacAddress broadcast
broadcast MAC address.
Definition mac_address.hpp:310
std::array< uint8_t, IFHWADDRLEN >::iterator iterator
iterator from nested container.
Definition mac_address.hpp:53
int family() const
get address family.
Definition mac_address.cpp:155
iterator begin()
returns an iterator to the first element of the nested container.
Definition mac_address.cpp:301
MacAddress()
create the MacAddress instance (wilcard address).
Definition mac_address.cpp:55
IpAddress toUniqueLocalIpv6() const
convert MAC address to a unique local IPv6 address using eui-64.
Definition mac_address.cpp:272
static bool isMacAddress(const std::string &address)
check if the specified string is a MAC address.
Definition mac_address.cpp:201
bool isWildcard() const
check if MAC address is a wildcard address.
Definition mac_address.cpp:182
MacAddress & operator+=(int value)
add the provided value to the current MAC address.
Definition mac_address.cpp:432
MacAddress operator~() const
perform NOT operation on MAC address.
Definition mac_address.cpp:496
MacAddress & operator=(const MacAddress &address)
assign the MacAddress instance by copy.
Definition mac_address.cpp:381
const_iterator cbegin() const
returns an iterator to the first element of the nested container.
Definition mac_address.cpp:319
std::array< uint8_t, IFHWADDRLEN >::const_iterator const_iterator
constant iterator from nested container.
Definition mac_address.hpp:56
MacAddress & operator++()
perform pre-increment operation on MAC address.
Definition mac_address.cpp:448
IpAddress toLinkLocalIpv6() const
convert MAC address to a link local IPv6 address.
Definition mac_address.cpp:258
std::ios_base &(std::ios_base &) CaseConvert
case conversion function.
Definition mac_address.hpp:50
const_iterator cend() const
return an iterator to the element following the last element of the nested container.
Definition mac_address.cpp:346
static const MacAddress wildcard
wildcard MAC address.
Definition mac_address.hpp:307
IpAddress toIpv6(const IpAddress &prefix, int len) const
convert MAC address to IPv6 address using prefix.
Definition mac_address.cpp:238
std::string toString(CaseConvert caseConvert=std::nouppercase) const
convert internal address array to string.
Definition mac_address.cpp:219
const uint8_t * addr() const
get the internal MAC address array address.
Definition mac_address.cpp:164
uint8_t & operator[](size_t position)
returns a reference to the element at the specified location.
Definition mac_address.cpp:468
iterator end()
return an iterator to the element following the last element of the nested container.
Definition mac_address.cpp:328
Definition acceptor.hpp:32
bool operator==(const BasicLinkLayerEndpoint< Protocol > &a, const BasicLinkLayerEndpoint< Protocol > &b) noexcept
compare if endpoints are equal.
Definition endpoint.hpp:196
IpAddress operator^(const IpAddress &a, const IpAddress &b)
perform XOR operation on IP address.
Definition ip_address.cpp:1683
IpAddress operator&(const IpAddress &a, const IpAddress &b)
perform AND operation on IP address.
Definition ip_address.cpp:1629
std::ostream & operator<<(std::ostream &os, const BasicLinkLayerEndpoint< Protocol > &endpoint)
push endpoint representation into a stream.
Definition endpoint.hpp:221
IpAddress operator|(const IpAddress &a, const IpAddress &b)
perform OR operation on IP address.
Definition ip_address.cpp:1656
MacAddress operator+(int value, const MacAddress &a)
add the provided value to the provided MAC address.
Definition mac_address.cpp:512
std::strong_ordering operator<=>(const BasicLinkLayerEndpoint< Protocol > &a, const BasicLinkLayerEndpoint< Protocol > &b) noexcept
three-way compare endpoints.
Definition endpoint.hpp:208
IpAddress address
Definition tcp_acceptor_test.cpp:35