fib6_info
static bool __prestera_fi6_is_direct(struct fib6_info *fi)
static bool prestera_fi6_is_direct(struct fib6_info *fi)
static bool prestera_fi6_is_nh(struct fib6_info *fi)
struct fib6_info *iter;
struct fib6_info *rt;
struct fib6_info *rt = mlxsw_sp_rt6->rt;
struct fib6_info **rt_arr,
struct fib6_info **rt_arr,
static bool mlxsw_sp_fib6_rt_should_ignore(const struct fib6_info *rt)
static struct mlxsw_sp_rt6 *mlxsw_sp_rt6_create(struct fib6_info *rt)
static void mlxsw_sp_rt6_release(struct fib6_info *rt)
static void mlxsw_sp_rt6_release(struct fib6_info *rt)
static struct fib6_info *
const struct fib6_info *rt)
const struct fib6_info *rt,
const struct fib6_info *rt)
const struct fib6_info *rt)
struct fib6_info *rt = mlxsw_sp_rt6->rt;
struct fib6_info *rt = mlxsw_sp_fib6_entry_rt(fib6_entry);
struct fib6_info **rt_arr, unsigned int nrt6)
struct fib6_info **rt_arr, unsigned int nrt6)
const struct fib6_info *rt)
const struct fib6_info *rt)
struct fib6_info **rt_arr, unsigned int nrt6)
const struct fib6_info *rt)
struct fib6_info *cmp_rt;
struct fib6_info *rt, *rt_replaced;
struct fib6_info **rt_arr,
struct fib6_info *rt = rt_arr[0];
struct fib6_info **rt_arr,
struct fib6_info *rt = rt_arr[0];
struct fib6_info **rt_arr,
struct fib6_info *rt = rt_arr[0];
struct fib6_info **rt_arr;
struct fib6_info *rt = fen6_info->rt;
struct fib6_info **rt_arr;
struct fib6_info *iter;
rt_arr = kzalloc_objs(struct fib6_info *, nrt6, GFP_ATOMIC);
struct fib6_info **rt_arr;
const struct fib6_info *rt)
struct fib6_info *rt)
static void nsim_rt6_release(struct fib6_info *rt)
static void nsim_rt6_release(struct fib6_info *rt)
const struct fib6_info *rt)
struct fib6_info **rt_arr, unsigned int nrt6)
struct fib6_info *rt = rt_arr[0];
nsim_fib6_rt_lookup(struct rhashtable *fib_rt_ht, const struct fib6_info *rt)
struct fib6_info *rt = fib6_event->rt_arr[0];
struct fib6_info **rt_arr,
struct fib6_info **rt_arr,
struct fib6_info *rt = fib6_event->rt_arr[0];
struct fib6_info *rt = fib6_event->rt_arr[0];
struct fib6_info *rt = fen6_info->rt;
struct fib6_info **rt_arr;
struct fib6_info *iter;
rt_arr = kzalloc_objs(struct fib6_info *, nrt6, GFP_ATOMIC);
struct fib6_info *rt;
struct fib6_info *aca_rt;
struct fib6_info *rt;
struct fib6_info __rcu *fib6_next;
struct fib6_info __rcu *from;
struct fib6_info *f6i;
static inline bool fib6_requires_src(const struct fib6_info *rt)
static inline void fib6_clean_expires(struct fib6_info *f6i)
static inline void fib6_set_expires(struct fib6_info *f6i,
static inline bool fib6_check_expired(const struct fib6_info *f6i)
static inline bool fib6_get_cookie_safe(const struct fib6_info *f6i,
struct fib6_info *from;
struct fib6_info *fib6_info_alloc(gfp_t gfp_flags, bool with_fib6_nh);
static inline void fib6_info_hold(struct fib6_info *f6i)
static inline bool fib6_info_hold_safe(struct fib6_info *f6i)
struct fib6_info;
static inline void fib6_info_release(struct fib6_info *f6i)
struct fib6_info *leaf;
struct fib6_info *rt;
void fib6_clean_all(struct net *net, int (*func)(struct fib6_info *, void *arg),
int (*func)(struct fib6_info *, void *arg),
int fib6_add(struct fib6_node *root, struct fib6_info *rt,
int fib6_del(struct fib6_info *rt, struct nl_info *info);
const struct fib6_info *from;
struct fib6_info *rt,
struct fib6_info *rt,
int call_fib6_entry_notifiers_replace(struct net *net, struct fib6_info *rt);
void fib6_rt_update(struct net *net, struct fib6_info *rt,
static inline void fib6_rt_update(struct net *net, struct fib6_info *rt,
void inet6_rt_notify(int event, struct fib6_info *rt, struct nl_info *info,
void fib6_age_exceptions(struct fib6_info *rt, struct fib6_gc_args *gc_args,
static inline void fib6_add_gc_list(struct fib6_info *f6i)
static inline void fib6_remove_gc_list(struct fib6_info *f6i)
struct fib6_info *f6i)
void fib6_update_sernum(struct net *net, struct fib6_info *rt);
void fib6_update_sernum_upto_root(struct net *net, struct fib6_info *rt);
static inline void fib6_update_sernum_upto_root(struct net *net, struct fib6_info *rt)
void fib6_metric_set(struct fib6_info *f6i, int metric, u32 val);
static inline bool fib6_metric_locked(struct fib6_info *f6i, int metric)
void fib6_info_hw_flags_set(struct net *net, struct fib6_info *f6i,
__bpf_md_ptr(struct fib6_info *, rt);
struct fib6_info __rcu *leaf;
struct fib6_info __rcu *rr_ptr;
int ip6_ins_rt(struct net *net, struct fib6_info *f6i);
int ip6_del_rt(struct net *net, struct fib6_info *f6i, bool skip_notify);
static inline int ip6_del_rt(struct net *net, struct fib6_info *f6i,
void rt6_flush_exceptions(struct fib6_info *f6i);
void rt6_age_exceptions(struct fib6_info *f6i, struct fib6_gc_args *gc_args,
static inline int ip6_route_get_saddr(struct net *net, struct fib6_info *f6i,
struct fib6_info *addrconf_f6i_alloc(struct net *net, struct inet6_dev *idev,
struct fib6_info *rt6_get_dflt_router(struct net *net,
struct fib6_info *rt6_add_dflt_router(struct net *net,
int rt6_dump_route(struct fib6_info *f6i, void *p_arg, unsigned int skip);
void rt6_multipath_rebalance(struct fib6_info *f6i);
static inline bool rt6_duplicate_nexthop(struct fib6_info *a, struct fib6_info *b)
static inline bool rt6_qualify_for_ecmp(const struct fib6_info *f6i)
struct fib6_info *fib6_null_entry;
static inline struct net_device *fib6_info_nh_dev(struct fib6_info *f6i)
struct fib6_info *f6i;
struct fib6_info *f6i;
struct fib6_info *f6i;
struct fib6_info *f6i = NULL;
struct fib6_info *f6i;
static struct fib6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
static struct fib6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
struct fib6_info *rt = NULL;
struct fib6_info *rt;
struct fib6_info *f6i, *prev;
struct fib6_info *rt = NULL;
struct fib6_info *f6i;
struct fib6_info *rt;
static struct ifacaddr6 *aca_alloc(struct fib6_info *f6i,
struct fib6_info *f6i;
struct fib6_info *from;
struct fib6_info *arg = _arg;
static void fib6_drop_pcpu_from(struct fib6_info *f6i)
static void fib6_purge_rt(struct fib6_info *rt, struct fib6_node *fn,
struct fib6_info *leaf = rcu_dereference_protected(fn->leaf,
struct fib6_info *new_leaf;
void fib6_update_sernum(struct net *net, struct fib6_info *f6i)
static int fib6_add_rt2node(struct fib6_node *fn, struct fib6_info *rt,
struct fib6_info *leaf = rcu_dereference_protected(fn->leaf,
struct fib6_info *iter = NULL;
struct fib6_info __rcu **ins;
struct fib6_info __rcu **fallback_ins = NULL;
struct fib6_info *sibling, *temp_sibling;
struct fib6_info *sibling, *next_sibling;
static int fib6_add_rt2node_nh(struct fib6_node *fn, struct fib6_info *rt,
static void fib6_start_gc(struct net *net, struct fib6_info *rt)
static void __fib6_update_sernum_upto_root(struct fib6_info *rt,
void fib6_update_sernum_upto_root(struct net *net, struct fib6_info *rt)
int fib6_add(struct fib6_node *root, struct fib6_info *rt,
offsetof(struct fib6_info, fib6_dst), allow_create,
struct fib6_info *fib6_info_alloc(gfp_t gfp_flags, bool with_fib6_nh)
offsetof(struct fib6_info, fib6_src),
struct fib6_info *f6i;
offsetof(struct fib6_info, fib6_src),
struct fib6_info *iter, *next;
struct fib6_info *pn_leaf =
struct fib6_info *leaf = rcu_dereference(fn->leaf);
.offset = offsetof(struct fib6_info, fib6_dst),
.offset = offsetof(struct fib6_info, fib6_src),
struct fib6_info *f6i = container_of(head, struct fib6_info, rcu);
struct fib6_info *leaf = rcu_dereference(fn->leaf);
offsetof(struct fib6_info, fib6_dst),
offsetof(struct fib6_info, fib6_src),
static struct fib6_info *fib6_find_prefix(struct net *net,
struct fib6_info *fn_leaf = rcu_dereference_protected(fn->leaf,
struct fib6_info *pn_leaf = rcu_dereference_protected(pn->leaf,
struct fib6_info *new_fn_leaf;
struct fib6_info __rcu **rtp, struct nl_info *info)
struct fib6_info *leaf, *replace_rt = NULL;
struct fib6_info *rt = rcu_dereference_protected(*rtp,
struct fib6_info *sibling, *next_sibling;
int fib6_del(struct fib6_info *rt, struct nl_info *info)
struct fib6_info __rcu **rtp;
struct fib6_info __rcu **rtp_next;
struct fib6_info *cur = rcu_dereference_protected(*rtp,
struct fib6_info *rt;
struct fib6_info, fib6_siblings);
int (*func)(struct fib6_info *, void *arg),
int (*func)(struct fib6_info *, void *),
void fib6_clean_all(struct net *net, int (*func)(struct fib6_info *, void *),
int (*func)(struct fib6_info *, void *),
void fib6_age_exceptions(struct fib6_info *rt, struct fib6_gc_args *gc_args,
static int fib6_age(struct fib6_info *rt, struct fib6_gc_args *gc_args)
struct fib6_info *rt;
struct fib6_info *rt = v;
struct fib6_info *n;
n = rcu_dereference(((struct fib6_info *)v)->fib6_next);
struct fib6_info *rt,
struct fib6_info *rt,
struct fib6_info *rt,
struct fib6_info *rt,
int call_fib6_entry_notifiers_replace(struct net *net, struct fib6_info *rt)
static int fib6_rt_dump(struct fib6_info *rt, struct fib6_dump_arg *arg)
int (*func)(struct fib6_info *, void *arg);
struct fib6_info *rt;
struct fib6_info,
static struct fib6_info *fib6_find_prefix(struct net *net,
void fib6_metric_set(struct fib6_info *f6i, int metric, u32 val)
struct fib6_info *leaf = rcu_dereference_protected(fn->leaf,
const struct fib6_info *match)
struct fib6_info *from;
struct fib6_info *rt = NULL;
static bool nft_fib6_info_nh_uses_dev(struct fib6_info *rt,
struct fib6_info *iter;
static size_t rt6_nlmsg_size(struct fib6_info *f6i);
static unsigned short fib6_info_dst_flags(struct fib6_info *rt)
struct fib6_info *rt, struct dst_entry *dst,
struct fib6_info *f6i = res->f6i;
static void rt6_set_from(struct rt6_info *rt, struct fib6_info *from)
struct fib6_info *f6i = res->f6i;
static struct fib6_info *rt6_add_route_info(struct net *net,
struct fib6_info *f6i = res->f6i;
static struct fib6_info *rt6_get_route_info(struct net *net,
static int __ip6_ins_rt(struct fib6_info *rt, struct nl_info *info,
int ip6_ins_rt(struct net *net, struct fib6_info *rt)
struct fib6_info *f6i = res->f6i;
struct fib6_info *f6i = res->f6i;
struct fib6_info *from;
struct fib6_info *f6i = res->f6i;
static void fib6_nh_flush_exceptions(struct fib6_nh *nh, struct fib6_info *from)
struct fib6_info *f6i = arg;
void rt6_flush_exceptions(struct fib6_info *f6i)
struct fib6_info *from;
struct fib6_info *from;
void rt6_age_exceptions(struct fib6_info *f6i,
static bool fib6_check(struct fib6_info *f6i, u32 cookie)
struct fib6_info *from,
struct fib6_info *from,
struct fib6_info *from;
static const struct fib6_info fib6_null_entry_template = {
struct fib6_info *from;
struct fib6_info *from;
struct fib6_info *rt;
struct fib6_info *f6i = res->f6i;
struct fib6_info *from;
struct fib6_info *from;
static struct fib6_info *ip6_route_info_create(struct fib6_config *cfg,
struct fib6_info *rt;
static int ip6_route_info_create_nh(struct fib6_info *rt,
struct fib6_info *rt;
static int __ip6_del_rt(struct fib6_info *rt, struct nl_info *info)
int ip6_del_rt(struct net *net, struct fib6_info *rt, bool skip_notify)
struct fib6_info *from;
static int __ip6_del_rt_siblings(struct fib6_info *rt, struct fib6_config *cfg)
struct fib6_info *sibling, *next_sibling;
struct fib6_info *last_sibling, *replace_rt;
struct fib6_info,
static int ip6_del_cached_rt(struct fib6_config *cfg, struct fib6_info *rt,
struct fib6_info *f6i;
static int ip6_del_cached_rt_nh(struct fib6_config *cfg, struct fib6_info *f6i)
static struct fib6_info *
struct fib6_info *rt;
rt6_multipath_first_sibling_rcu(const struct fib6_info *rt)
struct fib6_info *iter;
static struct fib6_info *rt6_get_route_info(struct net *net,
struct fib6_info *rt = NULL;
static struct fib6_info *rt6_add_route_info(struct net *net,
struct fib6_info *first, *match = res->f6i;
struct fib6_info *sibling;
struct fib6_info *rt6_get_dflt_router(struct net *net,
struct fib6_info *rt;
struct fib6_info *rt6_add_dflt_router(struct net *net,
struct fib6_info *rt;
struct fib6_info *addrconf_f6i_alloc(struct net *net,
struct fib6_info *f6i;
static int fib6_remove_prefsrc(struct fib6_info *rt, void *arg)
static int fib6_clean_tohost(struct fib6_info *rt, void *arg)
static struct fib6_info *rt6_multipath_first_sibling(const struct fib6_info *rt)
struct fib6_info *iter;
static bool rt6_is_dead(const struct fib6_info *rt)
static int rt6_multipath_total_weight(const struct fib6_info *rt)
struct fib6_info *iter;
static void rt6_upper_bound_set(struct fib6_info *rt, int *weight, int total)
static void rt6_multipath_upper_bound_set(struct fib6_info *rt, int total)
struct fib6_info *iter;
void rt6_multipath_rebalance(struct fib6_info *rt)
struct fib6_info *first;
static int fib6_ifup(struct fib6_info *rt, void *p_arg)
static bool rt6_multipath_uses_dev(const struct fib6_info *rt,
struct fib6_info *iter;
static void rt6_multipath_flush(struct fib6_info *rt)
struct fib6_info *iter;
static unsigned int rt6_multipath_dead_count(const struct fib6_info *rt,
struct fib6_info *iter;
static void rt6_multipath_nh_flags_set(struct fib6_info *rt,
struct fib6_info *iter;
static int fib6_ifdown(struct fib6_info *rt, void *p_arg)
struct fib6_info *f6i;
struct fib6_info *f6i = arg->f6i;
static int rt6_mtu_change_route(struct fib6_info *f6i, void *p_arg)
struct fib6_info *fib6_info;
struct fib6_info *rt,
if (rt6_duplicate_nexthop(nh->fib6_info, rt))
nh->fib6_info = rt;
static void ip6_route_mpath_notify(struct fib6_info *rt,
struct fib6_info *rt_last,
struct fib6_info,
static bool ip6_route_mpath_should_notify(const struct fib6_info *rt)
struct fib6_info *leaf;
struct fib6_info *rt_notif = NULL, *rt_last = NULL;
struct fib6_info *rt;
err = __ip6_ins_rt(nh->fib6_info, info, extack);
rt_last = nh->fib6_info;
rt_notif = nh->fib6_info;
fib6_info_release(nh->fib6_info);
struct fib6_info *f6i = res->f6i;
struct fib6_info *spf6i;
static size_t rt6_nlmsg_size(struct fib6_info *f6i)
struct fib6_info *sibling;
struct fib6_info *rt, struct dst_entry *dst,
struct fib6_info *sibling;
static bool fib6_info_uses_dev(const struct fib6_info *f6i,
const struct fib6_info *sibling;
struct fib6_info *rt;
int rt6_dump_route(struct fib6_info *rt, void *p_arg, unsigned int skip)
struct fib6_info *from;
void inet6_rt_notify(int event, struct fib6_info *rt, struct nl_info *info,
void fib6_rt_update(struct net *net, struct fib6_info *rt,
void fib6_info_hw_flags_set(struct net *net, struct fib6_info *f6i,
DEFINE_BPF_ITER_FUNC(ipv6_route, struct bpf_iter_meta *meta, struct fib6_info *rt)
BTF_ID_LIST_SINGLE(btf_fib6_info_id, struct, fib6_info)
static void __find_rr_leaf(struct fib6_info *f6i_start,
struct fib6_info *nomatch, u32 metric,
struct fib6_result *res, struct fib6_info **cont,
struct fib6_info *f6i;
static void find_rr_leaf(struct fib6_node *fn, struct fib6_info *leaf,
struct fib6_info *rr_head, int oif, int strict,
struct fib6_info *cont = NULL;
struct fib6_info *leaf = rcu_dereference(fn->leaf);
struct fib6_info *rt0;
struct fib6_info *next = rcu_dereference(rt0->fib6_next);
struct fib6_info *rt;
struct fib6_info *rt = ctx->rt;