L2FWD:fix seq_num overwritten + validate l2fib entries when forwarding
[vpp.git] / src / vnet / l2 / l2_learn.c
index faed0d6..3ff2e70 100644 (file)
@@ -138,13 +138,14 @@ l2learn_process (vlib_node_runtime_t * node,
        * The entry was in the table, and the sw_if_index matched, the normal case
        */
       counter_base[L2LEARN_ERROR_HIT] += 1;
-      if (PREDICT_FALSE (result0->fields.timestamp != timestamp))
-       result0->fields.timestamp = timestamp;
-      if (PREDICT_FALSE
-         (result0->fields.int_sn != vnet_buffer (b0)->l2.int_sn))
-       result0->fields.int_sn = vnet_buffer (b0)->l2.int_sn;
-      if (PREDICT_FALSE (result0->fields.bd_sn != vnet_buffer (b0)->l2.bd_sn))
-       result0->fields.bd_sn = vnet_buffer (b0)->l2.bd_sn;
+      if (!result0->fields.static_mac)
+       {
+         if (PREDICT_FALSE (result0->fields.timestamp != timestamp))
+           result0->fields.timestamp = timestamp;
+         if (PREDICT_FALSE
+             (result0->fields.sn.as_u16 != vnet_buffer (b0)->l2.l2fib_sn))
+           result0->fields.sn.as_u16 = vnet_buffer (b0)->l2.l2fib_sn;
+       }
     }
   else if (result0->raw == ~0)
     {
@@ -171,8 +172,7 @@ l2learn_process (vlib_node_runtime_t * node,
          result0->raw = 0;     /* clear all fields */
          result0->fields.sw_if_index = sw_if_index0;
          result0->fields.timestamp = timestamp;
-         result0->fields.bd_sn = vnet_buffer (b0)->l2.bd_sn;
-         result0->fields.int_sn = vnet_buffer (b0)->l2.int_sn;
+         result0->fields.sn.as_u16 = vnet_buffer (b0)->l2.l2fib_sn;
          kv.key = key0->raw;
          kv.value = result0->raw;
 
@@ -210,8 +210,7 @@ l2learn_process (vlib_node_runtime_t * node,
          result0->raw = 0;     /* clear all fields */
          result0->fields.sw_if_index = sw_if_index0;
          result0->fields.timestamp = timestamp;
-         result0->fields.bd_sn = vnet_buffer (b0)->l2.bd_sn;
-         result0->fields.int_sn = vnet_buffer (b0)->l2.int_sn;
+         result0->fields.sn.as_u16 = vnet_buffer (b0)->l2.l2fib_sn;
 
          kv.key = key0->raw;
          kv.value = result0->raw;