Track number of ethernet vlans in a frame
[vpp.git] / vnet / vnet / l2 / l2_input.h
index a1cd037..50649e7 100644 (file)
@@ -72,6 +72,8 @@ typedef struct {
 
 extern l2input_main_t l2input_main;
 
+extern vlib_node_registration_t l2input_node;
+
 static_always_inline l2_bridge_domain_t * 
 l2input_bd_config_from_index (l2input_main_t * l2im, u32 bd_index)
 {
@@ -225,6 +227,7 @@ vnet_update_l2_len (vlib_buffer_t * b)
 {
   ethernet_header_t * eth;
   u16 ethertype;
+  u8 vlan_count = 0;
 
   /* point at currrent l2 hdr */
   eth = vlib_buffer_get_current (b);
@@ -243,12 +246,15 @@ vnet_update_l2_len (vlib_buffer_t * b)
       (ethertype == ETHERNET_TYPE_VLAN_9200)) {    
     ethernet_vlan_header_t * vlan;
     vnet_buffer(b)->l2.l2_len += sizeof (*vlan);
+    vlan_count = 1;
     vlan = (void *) (eth+1);
     ethertype = clib_net_to_host_u16 (vlan->type);
     if (ethertype == ETHERNET_TYPE_VLAN) {
       vnet_buffer(b)->l2.l2_len += sizeof (*vlan);
+      vlan_count = 2;
     }
   }
+  ethernet_buffer_set_vlan_count(b, vlan_count);
 }
 
 /*