From: Jon Loeliger Date: Mon, 9 Mar 2020 18:13:35 +0000 (-0500) Subject: ethernet: Copy only 6 bytes of mac address into a u64 X-Git-Tag: v20.09-rc0~392 X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=commitdiff_plain;h=6a32ce326495bfe48ebef74dfbb8a9c1cf37a530 ethernet: Copy only 6 bytes of mac address into a u64 Rather than leaving 2 bytes of junk in the upper word of a mac address represented as a u64, zero them out. That way later compairsons stand a chance of matching when deleting a bridge's arp termination entries. The volatile qualifier shouldn't be needed here, but without it the compiler removes the clib_memcpy() at -O2. Bad compiler. No biscuit. Type: fix commit: faf22cb303b65e2a6bf8dad959d7f5ee6d031c4f Change-Id: Iebcf35fdd421293dccbcaefadef767f7e139438e Signed-off-by: Jon Loeliger --- diff --git a/src/vnet/ethernet/mac_address.h b/src/vnet/ethernet/mac_address.h index 68feb3977f0..0631ec38bd2 100644 --- a/src/vnet/ethernet/mac_address.h +++ b/src/vnet/ethernet/mac_address.h @@ -111,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