ethernet: mac must support 64-bits loads
[vpp.git] / src / vnet / ethernet / node.c
index 73e9eec..efe7290 100644 (file)
@@ -694,9 +694,11 @@ ethernet_input_inline_dmac_check (vnet_hw_interface_t * hi,
                                  u32 n_packets, ethernet_interface_t * ei,
                                  u8 have_sec_dmac)
 {
-  u64 hwaddr = (*(u64 *) hi->hw_address) & DMAC_MASK;
+  u64 hwaddr = ei->address.as_u64;
   u8 bad = 0;
 
+  ASSERT (0 == ei->address.zero);
+
   dmacs_bad[0] = is_dmac_bad (dmacs[0], hwaddr);
   dmacs_bad[1] = ((n_packets > 1) & is_dmac_bad (dmacs[1], hwaddr));
 
@@ -704,11 +706,12 @@ ethernet_input_inline_dmac_check (vnet_hw_interface_t * hi,
 
   if (PREDICT_FALSE (bad && have_sec_dmac))
     {
-      mac_address_t *sec_addr;
+      ethernet_interface_address_t *sec_addr;
 
       vec_foreach (sec_addr, ei->secondary_addrs)
       {
-       hwaddr = (*(u64 *) sec_addr) & DMAC_MASK;
+       ASSERT (0 == sec_addr->zero);
+       hwaddr = sec_addr->as_u64;
 
        bad = (eth_input_sec_dmac_check_x1 (hwaddr, dmacs, dmacs_bad) |
               eth_input_sec_dmac_check_x1 (hwaddr, dmacs + 1,
@@ -726,12 +729,14 @@ eth_input_process_frame_dmac_check (vnet_hw_interface_t * hi,
                                    u32 n_packets, ethernet_interface_t * ei,
                                    u8 have_sec_dmac)
 {
-  u64 hwaddr = (*(u64 *) hi->hw_address) & DMAC_MASK;
+  u64 hwaddr = ei->address.as_u64;
   u64 *dmac = dmacs;
   u8 *dmac_bad = dmacs_bad;
   u32 bad = 0;
   i32 n_left = n_packets;
 
+  ASSERT (0 == ei->address.zero);
+
 #ifdef CLIB_HAVE_VEC256
   while (n_left > 0)
     {
@@ -760,15 +765,17 @@ eth_input_process_frame_dmac_check (vnet_hw_interface_t * hi,
 
   if (have_sec_dmac && bad)
     {
-      mac_address_t *addr;
+      ethernet_interface_address_t *addr;
 
       vec_foreach (addr, ei->secondary_addrs)
       {
-       u64 hwaddr = ((u64 *) addr)[0] & DMAC_MASK;
+       u64 hwaddr = addr->as_u64;
        i32 n_left = n_packets;
        u64 *dmac = dmacs;
        u8 *dmac_bad = dmacs_bad;
 
+       ASSERT (0 == addr->zero);
+
        bad = 0;
 
        while (n_left > 0)