packets: Add eth_addr_compare_3way function.
authorEthan Jackson <ethan@nicira.com>
Wed, 26 Jan 2011 00:20:08 +0000 (16:20 -0800)
committerEthan Jackson <ethan@nicira.com>
Thu, 3 Feb 2011 20:24:13 +0000 (12:24 -0800)
This commit adds eth_addr_compare_3way() which behaves like memcmp
for Ethernet addresses.

lib/packets.h
ofproto/in-band.c
vswitchd/bridge.c

index 3ff3bab..38f98fb 100644 (file)
@@ -60,10 +60,15 @@ static inline bool eth_addr_is_zero(const uint8_t ea[6])
 {
     return !(ea[0] | ea[1] | ea[2] | ea[3] | ea[4] | ea[5]);
 }
+static inline int eth_addr_compare_3way(const uint8_t a[ETH_ADDR_LEN],
+                                        const uint8_t b[ETH_ADDR_LEN])
+{
+    return memcmp(a, b, ETH_ADDR_LEN);
+}
 static inline bool eth_addr_equals(const uint8_t a[ETH_ADDR_LEN],
                                    const uint8_t b[ETH_ADDR_LEN])
 {
-    return !memcmp(a, b, ETH_ADDR_LEN);
+    return !eth_addr_compare_3way(a, b);
 }
 static inline uint64_t eth_addr_to_uint64(const uint8_t ea[ETH_ADDR_LEN])
 {
index be4a7e8..952ff8b 100644 (file)
@@ -641,7 +641,7 @@ compare_addrs(const void *a_, const void *b_)
 static int
 compare_macs(const void *a, const void *b)
 {
-    return memcmp(a, b, ETH_ADDR_LEN);
+    return eth_addr_compare_3way(a, b);
 }
 
 void
index fab6194..3637ec6 100644 (file)
@@ -1000,7 +1000,7 @@ bridge_pick_local_hw_addr(struct bridge *br, uint8_t ea[ETH_ADDR_LEN],
             !eth_addr_is_local(iface_ea) &&
             !eth_addr_is_reserved(iface_ea) &&
             !eth_addr_is_zero(iface_ea) &&
-            memcmp(iface_ea, ea, ETH_ADDR_LEN) < 0)
+            eth_addr_compare_3way(iface_ea, ea) < 0)
         {
             memcpy(ea, iface_ea, ETH_ADDR_LEN);
             *hw_addr_iface = iface;