+
+ if ((sif->lacp_enabled && bif->numa_only)
+ && (vm->numa_node == hw->numa_node))
+ {
+ vec_insert_elts (bif->active_slaves, &sif->sw_if_index, 1,
+ bif->n_numa_slaves);
+ bif->n_numa_slaves++;
+ }
+ else
+ {
+ vec_add1 (bif->active_slaves, sif->sw_if_index);
+ }
+
+ /* First slave becomes active? */
+ if ((vec_len (bif->active_slaves) == 1) &&
+ (bif->mode == BOND_MODE_ACTIVE_BACKUP))
+ {
+ bif->sw_if_index_working = sif->sw_if_index;
+ bif->is_local_numa = (vm->numa_node == hw->numa_node) ? 1 : 0;
+ vlib_process_signal_event (bm->vlib_main, bond_process_node.index,
+ BOND_SEND_GARP_NA, bif->hw_if_index);
+ }
+ else if ((vec_len (bif->active_slaves) > 1)
+ && (bif->mode == BOND_MODE_ACTIVE_BACKUP)
+ && bif->is_local_numa == 0)
+ {
+ if (vm->numa_node == hw->numa_node)
+ {
+ vec_foreach_index (i, bif->active_slaves)
+ {
+ p = *vec_elt_at_index (bif->active_slaves, 0);
+ if (p == sif->sw_if_index)
+ break;
+
+ vec_del1 (bif->active_slaves, 0);
+ hash_unset (bif->active_slave_by_sw_if_index, p);
+ vec_add1 (bif->active_slaves, p);
+ hash_set (bif->active_slave_by_sw_if_index, p, p);
+ }
+ bif->sw_if_index_working = sif->sw_if_index;
+ bif->is_local_numa = 1;
+ vlib_process_signal_event (bm->vlib_main,
+ bond_process_node.index,
+ BOND_SEND_GARP_NA, bif->hw_if_index);
+
+ }
+ }