- bi0 = from[0];
- bi1 = from[1];
- bi2 = from[2];
- bi3 = from[3];
-
- b0 = vlib_get_buffer (vm, bi0);
- b1 = vlib_get_buffer (vm, bi1);
- b2 = vlib_get_buffer (vm, bi2);
- b3 = vlib_get_buffer (vm, bi3);
-
- VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b0);
- VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b1);
- VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b2);
- VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b3);
-
- sw_if_index = vnet_buffer (b0)->sw_if_index[VLIB_TX];
- sw_if_index1 = vnet_buffer (b1)->sw_if_index[VLIB_TX];
- sw_if_index2 = vnet_buffer (b2)->sw_if_index[VLIB_TX];
- sw_if_index3 = vnet_buffer (b3)->sw_if_index[VLIB_TX];
-
- port =
- (bond_load_balance_table[bif->lb]).load_balance (vm, node, bif, b0);
- port1 =
- (bond_load_balance_table[bif->lb]).load_balance (vm, node, bif, b1);
- port2 =
- (bond_load_balance_table[bif->lb]).load_balance (vm, node, bif, b2);
- port3 =
- (bond_load_balance_table[bif->lb]).load_balance (vm, node, bif, b3);
-
- sif_if_index = *vec_elt_at_index (bif->active_slaves, port);
- sif_if_index1 = *vec_elt_at_index (bif->active_slaves, port1);
- sif_if_index2 = *vec_elt_at_index (bif->active_slaves, port2);
- sif_if_index3 = *vec_elt_at_index (bif->active_slaves, port3);
-
- vnet_buffer (b0)->sw_if_index[VLIB_TX] = sif_if_index;
- vnet_buffer (b1)->sw_if_index[VLIB_TX] = sif_if_index1;
- vnet_buffer (b2)->sw_if_index[VLIB_TX] = sif_if_index2;
- vnet_buffer (b3)->sw_if_index[VLIB_TX] = sif_if_index3;
-
- f = vnet_get_frame_to_sw_interface (vnm, sif_if_index);
- f1 = vnet_get_frame_to_sw_interface (vnm, sif_if_index1);
- f2 = vnet_get_frame_to_sw_interface (vnm, sif_if_index2);
- f3 = vnet_get_frame_to_sw_interface (vnm, sif_if_index3);
-
- to_next = vlib_frame_vector_args (f);
- to_next1 = vlib_frame_vector_args (f1);
- to_next2 = vlib_frame_vector_args (f2);
- to_next3 = vlib_frame_vector_args (f3);
-
- to_next += f->n_vectors;
- to_next1 += f1->n_vectors;
- to_next2 += f2->n_vectors;
- to_next3 += f3->n_vectors;
-
- to_next[0] = vlib_get_buffer_index (vm, b0);
- to_next1[0] = vlib_get_buffer_index (vm, b1);
- to_next2[0] = vlib_get_buffer_index (vm, b2);
- to_next3[0] = vlib_get_buffer_index (vm, b3);
-
- f->n_vectors++;
- f1->n_vectors++;
- f2->n_vectors++;
- f3->n_vectors++;
-
- vnet_put_frame_to_sw_interface (vnm, sif_if_index, f);
- vnet_put_frame_to_sw_interface (vnm, sif_if_index1, f1);
- vnet_put_frame_to_sw_interface (vnm, sif_if_index2, f2);
- vnet_put_frame_to_sw_interface (vnm, sif_if_index3, f3);
-
- if (PREDICT_FALSE (n_trace > 0))
- {
- vlib_trace_buffer (vm, node, next0, b0, 0 /* follow_chain */ );
- vlib_set_trace_count (vm, node, --n_trace);
- t0 = vlib_add_trace (vm, node, b0, sizeof (*t0));
- eth = (ethernet_header_t *) vlib_buffer_get_current (b0);
- t0->ethernet = *eth;
- t0->sw_if_index = sw_if_index;
- t0->bond_sw_if_index = vnet_buffer (b0)->sw_if_index[VLIB_TX];
-
- if (PREDICT_TRUE (n_trace > 0))
- {
- vlib_trace_buffer (vm, node, next1, b1, 0 /* follow_chain */ );
- vlib_set_trace_count (vm, node, --n_trace);
- t0 = vlib_add_trace (vm, node, b1, sizeof (*t0));
- eth = (ethernet_header_t *) vlib_buffer_get_current (b1);
- t0->ethernet = *eth;
- t0->sw_if_index = sw_if_index1;
- t0->bond_sw_if_index = vnet_buffer (b1)->sw_if_index[VLIB_TX];
-
- if (PREDICT_TRUE (n_trace > 0))
- {
- vlib_trace_buffer (vm, node, next2, b2,
- 0 /* follow_chain */ );
- vlib_set_trace_count (vm, node, --n_trace);
- t0 = vlib_add_trace (vm, node, b2, sizeof (*t0));
- eth = (ethernet_header_t *) vlib_buffer_get_current (b2);
- t0->ethernet = *eth;
- t0->sw_if_index = sw_if_index2;
- t0->bond_sw_if_index =
- vnet_buffer (b2)->sw_if_index[VLIB_TX];
-
- if (PREDICT_TRUE (n_trace > 0))
- {
- vlib_trace_buffer (vm, node, next3, b3,
- 0 /* follow_chain */ );
- vlib_set_trace_count (vm, node, --n_trace);
- t0 = vlib_add_trace (vm, node, b3, sizeof (*t0));
- eth =
- (ethernet_header_t *) vlib_buffer_get_current (b3);
- t0->ethernet = *eth;
- t0->sw_if_index = sw_if_index3;
- t0->bond_sw_if_index =
- vnet_buffer (b3)->sw_if_index[VLIB_TX];
- }
- }
- }
- }
-
- from += 4;
- n_left_from -= 4;