packets: New function eth_addr_mark_random().
authorBen Pfaff <blp@nicira.com>
Fri, 20 Mar 2009 20:41:44 +0000 (13:41 -0700)
committerBen Pfaff <blp@nicira.com>
Fri, 20 Mar 2009 20:51:23 +0000 (13:51 -0700)
This function is useful for turning a sequence of random bits into a valid
MAC address, which we need for generating DPIDs under Xen.

lib/packets.h

index 0a0da381b6650e849236a4852db97ab0442cb896..9c7ee9ce4f0b48c653d0254c1eb050a6525b7610 100644 (file)
@@ -91,12 +91,16 @@ static inline void eth_addr_from_uint64(uint64_t x, uint8_t ea[ETH_ADDR_LEN])
     ea[4] = x >> 8;
     ea[5] = x;
 }
-static inline void eth_addr_random(uint8_t ea[ETH_ADDR_LEN])
+static inline void eth_addr_mark_random(uint8_t ea[ETH_ADDR_LEN])
 {
-    random_bytes(ea, ETH_ADDR_LEN);
     ea[0] &= ~1;                /* Unicast. */
     ea[0] |= 2;                 /* Private. */
 }
+static inline void eth_addr_random(uint8_t ea[ETH_ADDR_LEN])
+{
+    random_bytes(ea, ETH_ADDR_LEN);
+    eth_addr_mark_random(ea);
+}
 /* Returns true if 'ea' is a reserved multicast address, that a bridge must
  * never forward, false otherwise. */
 static inline bool eth_addr_is_reserved(const uint8_t ea[ETH_ADDR_LEN])