- bi0 = from[0];
- bi1 = from[1];
- bi2 = from[2];
- bi3 = from[3];
- to_tx[0] = bi0;
- to_tx[1] = bi1;
- to_tx[2] = bi2;
- to_tx[3] = bi3;
-
- or_flags = b[0]->flags | b[1]->flags | b[2]->flags | b[3]->flags;
-
- from += 4;
- to_tx += 4;
- n_left_to_tx -= 4;
-
- /* Be grumpy about zero length buffers for benefit of
- driver tx function. */
- ASSERT (b[0]->current_length > 0);
- ASSERT (b[1]->current_length > 0);
- ASSERT (b[2]->current_length > 0);
- ASSERT (b[3]->current_length > 0);
-
- n_bytes_b0 = vlib_buffer_length_in_chain (vm, b[0]);
- n_bytes_b1 = vlib_buffer_length_in_chain (vm, b[1]);
- n_bytes_b2 = vlib_buffer_length_in_chain (vm, b[2]);
- n_bytes_b3 = vlib_buffer_length_in_chain (vm, b[3]);
- tx_swif0 = vnet_buffer (b[0])->sw_if_index[VLIB_TX];
- tx_swif1 = vnet_buffer (b[1])->sw_if_index[VLIB_TX];
- tx_swif2 = vnet_buffer (b[2])->sw_if_index[VLIB_TX];
- tx_swif3 = vnet_buffer (b[3])->sw_if_index[VLIB_TX];
-
- n_bytes += n_bytes_b0 + n_bytes_b1;
- n_bytes += n_bytes_b2 + n_bytes_b3;
- n_packets += 4;
-
- if (PREDICT_FALSE (current_config_index != ~0))
- {
- vnet_buffer (b[0])->feature_arc_index = arc;
- vnet_buffer (b[1])->feature_arc_index = arc;
- vnet_buffer (b[2])->feature_arc_index = arc;
- vnet_buffer (b[3])->feature_arc_index = arc;
- b[0]->current_config_index = current_config_index;
- b[1]->current_config_index = current_config_index;
- b[2]->current_config_index = current_config_index;
- b[3]->current_config_index = current_config_index;
- }