Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
ethernet: add sanity checks to p2p_ethernet_add/del
[vpp.git]
/
src
/
vnet
/
ethernet
/
mac_address.h
diff --git
a/src/vnet/ethernet/mac_address.h
b/src/vnet/ethernet/mac_address.h
index
87a66a2
..
0631ec3
100644
(file)
--- 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));
}
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)
{
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)
{
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
}
static_always_inline void
@@
-138,6
+149,13
@@
mac_address_set_zero (mac_address_t * mac)
mac->u.last_2 = 0;
}
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);
extern uword unformat_mac_address_t (unformat_input_t * input,
va_list * args);
extern u8 *format_mac_address_t (u8 * s, va_list * args);