userver: userver/utils/macaddr.hpp Source File
Loading...
Searching...
No Matches
macaddr.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/utils/macaddr.hpp
4/// @brief MAC address types
5
6#include <array>
7#include <stdexcept>
8#include <string>
9#include <string_view>
10#include <utility>
11
12#include <userver/compiler/impl/lifetime.hpp>
13#include <userver/utils/encoding/hex.hpp>
14
15USERVER_NAMESPACE_BEGIN
16
17namespace utils {
18
19/// @ingroup userver_containers
20///
21/// @brief Base class for Macaddr/Macaddr8
22template <std::size_t N>
23class MacaddrBase final {
24 static_assert(N == 6 || N == 8, "Address can only be 6 or 8 bytes size");
25
26public:
27 using OctetsType = std::array<unsigned char, N>;
28
29 MacaddrBase() = default;
30
31 explicit MacaddrBase(const OctetsType& macaddr) noexcept : macaddr_(macaddr) {}
32
33 /// @brief Get octets of MAC-address
34 const OctetsType& GetOctets() const noexcept USERVER_IMPL_LIFETIME_BOUND { return macaddr_; }
35
36 friend bool operator==(const MacaddrBase<N>& a, const MacaddrBase<N>& b) noexcept {
37 return a.GetOctets() == b.GetOctets();
38 }
39
40private:
41 OctetsType macaddr_ = {0};
42};
43
44/// @ingroup userver_containers
45///
46/// @brief 48-bit MAC address
47using Macaddr = MacaddrBase<6>;
48
49/// @ingroup userver_containers
50///
51/// @brief 64-bit MAC address
52using Macaddr8 = MacaddrBase<8>;
53
54/// @brief Get 48-bit MAC address as a string in "xx:xx:.." format.
55std::string MacaddrToString(Macaddr macaddr);
56
57/// @brief Get 64-bit MAC address as a string in "xx:xx:.." format.
58std::string Macaddr8ToString(Macaddr8 macaddr);
59
60/// @brief Get 48-bit MAC address from std::string.
61Macaddr MacaddrFromString(std::string_view str);
62
63/// @brief Get 64-bit MAC address from std::string.
64Macaddr8 Macaddr8FromString(std::string_view str);
65
66} // namespace utils
67
68USERVER_NAMESPACE_END