mlxsw_sp_rt6
struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) {
struct fib6_nh *fib6_nh = mlxsw_sp_rt6->rt->fib6_nh;
struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) {
struct fib6_nh *fib6_nh = mlxsw_sp_rt6->rt->fib6_nh;
const struct mlxsw_sp_rt6 *mlxsw_sp_rt6);
struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) {
struct fib6_nh *fib6_nh = mlxsw_sp_rt6->rt->fib6_nh;
nh = mlxsw_sp_rt6_nexthop(nh_grp, mlxsw_sp_rt6);
const struct mlxsw_sp_rt6 *mlxsw_sp_rt6)
struct fib6_info *rt = mlxsw_sp_rt6->rt;
struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list)
fib6_info_hw_flags_set(mlxsw_sp_net(mlxsw_sp), mlxsw_sp_rt6->rt,
struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list)
fib6_info_hw_flags_set(mlxsw_sp_net(mlxsw_sp), mlxsw_sp_rt6->rt,
static struct mlxsw_sp_rt6 *mlxsw_sp_rt6_create(struct fib6_info *rt)
struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
mlxsw_sp_rt6 = kzalloc_obj(*mlxsw_sp_rt6);
if (!mlxsw_sp_rt6)
mlxsw_sp_rt6->rt = rt;
return mlxsw_sp_rt6;
static void mlxsw_sp_rt6_destroy(struct mlxsw_sp_rt6 *mlxsw_sp_rt6)
struct fib6_nh *fib6_nh = mlxsw_sp_rt6->rt->fib6_nh;
if (!mlxsw_sp_rt6->rt->nh)
mlxsw_sp_rt6_release(mlxsw_sp_rt6->rt);
kfree(mlxsw_sp_rt6);
return list_first_entry(&fib6_entry->rt6_list, struct mlxsw_sp_rt6,
static struct mlxsw_sp_rt6 *
struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
list_for_each_entry(mlxsw_sp_rt6, &fib6_entry->rt6_list, list) {
if (mlxsw_sp_rt6->rt == rt)
return mlxsw_sp_rt6;
struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
mlxsw_sp_rt6 = list_first_entry(&fib6_entry->rt6_list,
struct mlxsw_sp_rt6, list);
nhgi->gateway = mlxsw_sp_rt6_is_gateway(mlxsw_sp, mlxsw_sp_rt6->rt);
struct fib6_info *rt = mlxsw_sp_rt6->rt;
mlxsw_sp_rt6 = list_next_entry(mlxsw_sp_rt6, list);
struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
mlxsw_sp_rt6 = mlxsw_sp_rt6_create(rt_arr[i]);
if (IS_ERR(mlxsw_sp_rt6)) {
err = PTR_ERR(mlxsw_sp_rt6);
list_add_tail(&mlxsw_sp_rt6->list, &fib6_entry->rt6_list);
mlxsw_sp_rt6 = list_last_entry(&fib6_entry->rt6_list,
struct mlxsw_sp_rt6, list);
list_del(&mlxsw_sp_rt6->list);
mlxsw_sp_rt6_destroy(mlxsw_sp_rt6);
struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
mlxsw_sp_rt6 = mlxsw_sp_fib6_entry_rt_find(fib6_entry,
if (WARN_ON_ONCE(!mlxsw_sp_rt6))
list_del(&mlxsw_sp_rt6->list);
mlxsw_sp_rt6_destroy(mlxsw_sp_rt6);
struct mlxsw_sp_rt6 *mlxsw_sp_rt6, *tmp;
list_for_each_entry_safe(mlxsw_sp_rt6, tmp, &fib6_entry->rt6_list,
list_del(&mlxsw_sp_rt6->list);
mlxsw_sp_rt6_destroy(mlxsw_sp_rt6);
struct mlxsw_sp_rt6 *mlxsw_sp_rt6;
mlxsw_sp_rt6 = mlxsw_sp_rt6_create(rt_arr[i]);
if (IS_ERR(mlxsw_sp_rt6)) {
err = PTR_ERR(mlxsw_sp_rt6);
list_add_tail(&mlxsw_sp_rt6->list, &fib6_entry->rt6_list);
mlxsw_sp_rt6 = list_last_entry(&fib6_entry->rt6_list,
struct mlxsw_sp_rt6, list);
list_del(&mlxsw_sp_rt6->list);
mlxsw_sp_rt6_destroy(mlxsw_sp_rt6);