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);