+ 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;
+
+ if (bif->per_thread_info[thread_index].frame[port] == 0)
+ bif->per_thread_info[thread_index].frame[port] =
+ vnet_get_frame_to_sw_interface (vnm, sif_if_index);
+
+ if (bif->per_thread_info[thread_index].frame[port1] == 0)
+ bif->per_thread_info[thread_index].frame[port1] =
+ vnet_get_frame_to_sw_interface (vnm, sif_if_index1);
+
+ if (bif->per_thread_info[thread_index].frame[port2] == 0)
+ bif->per_thread_info[thread_index].frame[port2] =
+ vnet_get_frame_to_sw_interface (vnm, sif_if_index2);
+
+ if (bif->per_thread_info[thread_index].frame[port3] == 0)
+ bif->per_thread_info[thread_index].frame[port3] =
+ vnet_get_frame_to_sw_interface (vnm, sif_if_index3);
+
+ f = bif->per_thread_info[thread_index].frame[port];
+ to_next = vlib_frame_vector_args (f);
+ to_next += f->n_vectors;
+ to_next[0] = vlib_get_buffer_index (vm, b0);
+ f->n_vectors++;