X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fethernet%2Fmac_address.h;h=0631ec38bd222308b24af965d65dafb2c8aae775;hb=refs%2Fchanges%2F51%2F25751%2F6;hp=87a66a242be9d1b35de76c8a9f56e1920f20023e;hpb=37029305c671f4e2d091d6f6c22142634e409043;p=vpp.git diff --git a/src/vnet/ethernet/mac_address.h b/src/vnet/ethernet/mac_address.h index 87a66a242be..0631ec38bd2 100644 --- a/src/vnet/ethernet/mac_address.h +++ b/src/vnet/ethernet/mac_address.h @@ -70,6 +70,17 @@ ethernet_mac_address_is_zero (const u8 * mac) return ((*((u32 *) mac) == 0) && (*((u16 *) (mac + 4)) == 0)); } +static inline void +ethernet_mac_address_generate (u8 * mac) +{ + u32 rnd = clib_cpu_time_now (); + rnd = random_u32 (&rnd); + + memcpy (mac + 2, &rnd, sizeof (rnd)); + mac[0] = 2; + mac[1] = 0xfe; +} + static inline int ethernet_mac_address_equal (const u8 * a, const u8 * b) { @@ -100,11 +111,11 @@ mac_address_is_zero (const mac_address_t * mac) static_always_inline u64 mac_address_as_u64 (const mac_address_t * mac) { - u64 *as_u64; + volatile u64 as_u64 = 0; - as_u64 = (u64 *) mac->bytes; + clib_memcpy ((void *) &as_u64, mac->bytes, 6); - return (*as_u64); + return as_u64; } static_always_inline void @@ -138,6 +149,13 @@ mac_address_set_zero (mac_address_t * mac) mac->u.last_2 = 0; } +static_always_inline int +mac_address_n_bits_set (const mac_address_t * a) +{ + return (count_set_bits (mac_address_as_u64 (a))); +} + +extern void mac_address_increment (mac_address_t * mac); extern uword unformat_mac_address_t (unformat_input_t * input, va_list * args); extern u8 *format_mac_address_t (u8 * s, va_list * args);