vlib_buffer_advance (b0, sizeof (h0[0]));
vlan_count = 2;
-
if (*type == ETHERNET_TYPE_VLAN)
{
// More than double tagged packet
*match_flags = SUBINT_CONFIG_VALID | SUBINT_CONFIG_MATCH_3_TAG;
+
+ vlib_buffer_advance (b0, sizeof (h0[0]));
vlan_count = 3; // "unknown" number, aka, 3-or-more
}
}
// record the L2 len and reset the buffer so the L2 header is preserved
u32 eth_start = vnet_buffer (b0)->ethernet.start_of_ethernet_header;
vnet_buffer (b0)->l2.l2_len = b0->current_data - eth_start;
+ ASSERT (vnet_buffer (b0)->l2.l2_len ==
+ ethernet_buffer_header_size (b0));
vlib_buffer_advance (b0, -ethernet_buffer_header_size (b0));
// check for common IP/MPLS ethertypes
if (config0->output_vtr.push_and_pop_bytes)
{
/* perform the tag rewrite on two packets */
- if (l2_vtr_process
- (b0,
- &(vec_elt_at_index
- (l2output_main.configs, sw_if_index0)->input_vtr)))
+ if (l2_vtr_process (b0, &config0->input_vtr))
{
/* Drop packet */
next0 = L2_INVTR_NEXT_DROP;
{
if (config1->output_vtr.push_and_pop_bytes)
{
- if (l2_vtr_process
- (b1,
- &(vec_elt_at_index
- (l2output_main.configs, sw_if_index1)->input_vtr)))
+ if (l2_vtr_process (b1, &config1->input_vtr))
{
/* Drop packet */
next1 = L2_INVTR_NEXT_DROP;
if (config0->output_vtr.push_and_pop_bytes)
{
/* perform the tag rewrite on one packet */
- if (l2_vtr_process
- (b0,
- &(vec_elt_at_index
- (l2output_main.configs, sw_if_index0)->input_vtr)))
+ if (l2_vtr_process (b0, &config0->input_vtr))
{
/* Drop packet */
next0 = L2_INVTR_NEXT_DROP;
}
in_config->pop_bytes = 8;
in_config->push_bytes = 0;
-
- out_config->push_bytes = in_config->pop_bytes;
- out_config->pop_bytes = in_config->push_bytes;
break;
case L2_VTR_PUSH_1: