|
@@ -2416,16 +2416,25 @@ static void mlxsw_sp_neigh_fini(struct mlxsw_sp *mlxsw_sp)
|
|
|
rhashtable_destroy(&mlxsw_sp->router->neigh_ht);
|
|
|
}
|
|
|
|
|
|
+static int mlxsw_sp_neigh_rif_flush(struct mlxsw_sp *mlxsw_sp,
|
|
|
+ const struct mlxsw_sp_rif *rif)
|
|
|
+{
|
|
|
+ char rauht_pl[MLXSW_REG_RAUHT_LEN];
|
|
|
+
|
|
|
+ mlxsw_reg_rauht_pack(rauht_pl, MLXSW_REG_RAUHT_OP_WRITE_DELETE_ALL,
|
|
|
+ rif->rif_index, rif->addr);
|
|
|
+ return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(rauht), rauht_pl);
|
|
|
+}
|
|
|
+
|
|
|
static void mlxsw_sp_neigh_rif_gone_sync(struct mlxsw_sp *mlxsw_sp,
|
|
|
struct mlxsw_sp_rif *rif)
|
|
|
{
|
|
|
struct mlxsw_sp_neigh_entry *neigh_entry, *tmp;
|
|
|
|
|
|
+ mlxsw_sp_neigh_rif_flush(mlxsw_sp, rif);
|
|
|
list_for_each_entry_safe(neigh_entry, tmp, &rif->neigh_list,
|
|
|
- rif_list_node) {
|
|
|
- mlxsw_sp_neigh_entry_update(mlxsw_sp, neigh_entry, false);
|
|
|
+ rif_list_node)
|
|
|
mlxsw_sp_neigh_entry_destroy(mlxsw_sp, neigh_entry);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
enum mlxsw_sp_nexthop_type {
|