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 <jdl@netgate.com>
(cherry picked from commit 6a32ce326495bfe48ebef74dfbb8a9c1cf37a530)
This commit is contained in:
Jon Loeliger 2020-03-09 13:13:35 -05:00 committed by Andrew Yourtchenko
parent 0088c6875f
commit 8c6b575634

View File

@ -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