elt = pool_elt_at_index (ip_neighbor_elt_pool, ipn->ipn_elt);
clib_llist_remove (ip_neighbor_elt_pool, ipne_anchor, elt);
+
+ ipn->ipn_elt = ~0;
}
}
return -2;
}
+ /* A dynamic entry can become static, but not vice-versa.
+ * i.e. since if it was programmed by the CP then it must
+ * be removed by the CP */
+ if ((flags & IP_NEIGHBOR_FLAG_STATIC) &&
+ !(ipn->ipn_flags & IP_NEIGHBOR_FLAG_STATIC))
+ {
+ ip_neighbor_list_remove (ipn);
+ ipn->ipn_flags |= IP_NEIGHBOR_FLAG_STATIC;
+ ipn->ipn_flags &= ~IP_NEIGHBOR_FLAG_DYNAMIC;
+ }
+
/*
* prevent a DoS attack from the data-plane that
* spams us with no-op updates to the MAC address
}
mac_address_copy (&ipn->ipn_mac, mac);
-
- /* A dynamic entry can become static, but not vice-versa.
- * i.e. since if it was programmed by the CP then it must
- * be removed by the CP */
- if ((flags & IP_NEIGHBOR_FLAG_STATIC) &&
- !(ipn->ipn_flags & IP_NEIGHBOR_FLAG_STATIC))
- {
- ip_neighbor_list_remove (ipn);
- ipn->ipn_flags |= IP_NEIGHBOR_FLAG_STATIC;
- ipn->ipn_flags &= ~IP_NEIGHBOR_FLAG_DYNAMIC;
- }
}
else
{