28 explicit Mac_addr(
char const *_src)
35 unsigned char const *src =
reinterpret_cast<unsigned char const *
>(_src);
36 _mac = ((uint64_t)src[0]) | (((uint64_t)src[1]) << 8)
37 | (((uint64_t)src[2]) << 16) | (((uint64_t)src[3]) << 24)
38 | (((uint64_t)src[4]) << 32) | (((uint64_t)src[5]) << 40);
41 static Mac_addr from_uncached(
char volatile const *src)
42 {
return Mac_addr(src); }
44 explicit Mac_addr(uint64_t mac) : _mac{mac} {}
46 Mac_addr(Mac_addr
const &other) : _mac{other._mac} {}
67 {
return _mac == Addr_unknown; }
69 bool operator == (
Mac_addr const &other)
const
70 {
return _mac == other._mac; }
72 bool operator != (Mac_addr
const &other)
const
73 {
return _mac != other._mac; }
75 bool operator < (Mac_addr
const &other)
const
76 {
return _mac < other._mac; }
78 Mac_addr& operator = (Mac_addr
const &other)
79 { _mac = other._mac;
return *
this; }
81 Mac_addr& operator = (uint64_t mac)
82 { _mac = mac;
return *
this; }
85 void print(T &stream)
const
87 stream.cprintf(
"%02x:%02x:%02x:%02x:%02x:%02x",
88 (
int)(_mac & 0xff) , (
int)((_mac >> 8) & 0xff),
89 (
int)((_mac >> 16) & 0xff), (
int)((_mac >> 24) & 0xff),
90 (
int)((_mac >> 32) & 0xff), (
int)((_mac >> 40) & 0xff));
93 void to_array(
unsigned char mac[6])
const
95 mac[0] = _mac & 0xffU;
96 mac[1] = (_mac >> 8) & 0xffU;
97 mac[2] = (_mac >> 16) & 0xffU;
98 mac[3] = (_mac >> 24) & 0xffU;
99 mac[4] = (_mac >> 32) & 0xffU;
100 mac[5] = (_mac >> 40) & 0xffU;
104 explicit Mac_addr(
char volatile const *_src)
111 volatile unsigned char const *src =
reinterpret_cast<volatile unsigned char const *
>(_src);
112 _mac = ((uint64_t)src[0]) | (((uint64_t)src[1]) << 8)
113 | (((uint64_t)src[2]) << 16) | (((uint64_t)src[3]) << 24)
114 | (((uint64_t)src[4]) << 32) | (((uint64_t)src[5]) << 40);