• Home
  • Raw
  • Download

Lines Matching refs:fa

77 				   int dst_len, struct fib_alias *fa,  in call_fib_entry_notifier()  argument
84 .fi = fa->fa_info, in call_fib_entry_notifier()
85 .dscp = fa->fa_dscp, in call_fib_entry_notifier()
86 .type = fa->fa_type, in call_fib_entry_notifier()
87 .tb_id = fa->tb_id, in call_fib_entry_notifier()
94 int dst_len, struct fib_alias *fa, in call_fib_entry_notifiers() argument
101 .fi = fa->fa_info, in call_fib_entry_notifiers()
102 .dscp = fa->fa_dscp, in call_fib_entry_notifiers()
103 .type = fa->fa_type, in call_fib_entry_notifiers()
104 .tb_id = fa->tb_id, in call_fib_entry_notifiers()
296 struct fib_alias *fa = container_of(head, struct fib_alias, rcu); in __alias_free_mem() local
297 kmem_cache_free(fn_alias_kmem, fa); in __alias_free_mem()
300 static inline void alias_free_mem_rcu(struct fib_alias *fa) in alias_free_mem_rcu() argument
302 call_rcu(&fa->rcu, __alias_free_mem); in alias_free_mem_rcu()
353 static struct key_vector *leaf_new(t_key key, struct fib_alias *fa) in leaf_new() argument
367 l->slen = fa->fa_slen; in leaf_new()
371 hlist_add_head(&fa->fa_list, &l->leaf); in leaf_new()
986 struct fib_alias *fa; in fib_find_alias() local
991 hlist_for_each_entry(fa, fah, fa_list) { in fib_find_alias()
993 u8 __fa_dscp = inet_dscp_to_dsfield(fa->fa_dscp); in fib_find_alias()
996 if (fa->fa_slen < slen) in fib_find_alias()
998 if (fa->fa_slen != slen) in fib_find_alias()
1000 if (fa->tb_id > tb_id) in fib_find_alias()
1002 if (fa->tb_id != tb_id) in fib_find_alias()
1005 return fa; in fib_find_alias()
1008 if (fa->fa_info->fib_priority >= prio || __fa_dscp < __dscp) in fib_find_alias()
1009 return fa; in fib_find_alias()
1021 struct fib_alias *fa; in fib_find_matching_alias() local
1033 hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { in fib_find_matching_alias()
1034 if (fa->fa_slen == slen && fa->tb_id == fri->tb_id && in fib_find_matching_alias()
1035 fa->fa_dscp == fri->dscp && fa->fa_info == fri->fi && in fib_find_matching_alias()
1036 fa->fa_type == fri->type) in fib_find_matching_alias()
1037 return fa; in fib_find_matching_alias()
1161 struct fib_alias *fa, t_key key) in fib_insert_alias() argument
1166 if (fa) { in fib_insert_alias()
1167 hlist_add_before_rcu(&new->fa_list, &fa->fa_list); in fib_insert_alias()
1177 fa = last; in fib_insert_alias()
1180 if (fa) in fib_insert_alias()
1181 hlist_add_behind_rcu(&new->fa_list, &fa->fa_list); in fib_insert_alias()
1219 struct fib_alias *fa, *new_fa; in fib_table_insert() local
1244 fa = l ? fib_find_alias(&l->leaf, slen, dscp, fi->fib_priority, in fib_table_insert()
1256 if (fa && fa->fa_dscp == dscp && in fib_table_insert()
1257 fa->fa_info->fib_priority == fi->fib_priority) { in fib_table_insert()
1272 fa_first = fa; in fib_table_insert()
1273 hlist_for_each_entry_from(fa, fa_list) { in fib_table_insert()
1274 if ((fa->fa_slen != slen) || in fib_table_insert()
1275 (fa->tb_id != tb->tb_id) || in fib_table_insert()
1276 (fa->fa_dscp != dscp)) in fib_table_insert()
1278 if (fa->fa_info->fib_priority != fi->fib_priority) in fib_table_insert()
1280 if (fa->fa_type == cfg->fc_type && in fib_table_insert()
1281 fa->fa_info == fi) { in fib_table_insert()
1282 fa_match = fa; in fib_table_insert()
1292 fa = fa_first; in fib_table_insert()
1294 if (fa == fa_match) in fib_table_insert()
1303 fi_drop = fa->fa_info; in fib_table_insert()
1304 new_fa->fa_dscp = fa->fa_dscp; in fib_table_insert()
1307 state = fa->fa_state; in fib_table_insert()
1309 new_fa->fa_slen = fa->fa_slen; in fib_table_insert()
1316 hlist_replace_rcu(&fa->fa_list, &new_fa->fa_list); in fib_table_insert()
1318 if (fib_find_alias(&l->leaf, fa->fa_slen, 0, 0, in fib_table_insert()
1328 &fa->fa_list); in fib_table_insert()
1336 alias_free_mem_rcu(fa); in fib_table_insert()
1354 fa = fa_first; in fib_table_insert()
1378 err = fib_insert_alias(t, tp, l, new_fa, fa, key); in fib_table_insert()
1453 struct fib_alias *fa; in fib_table_lookup() local
1573 hlist_for_each_entry_rcu(fa, &n->leaf, fa_list) { in fib_table_lookup()
1574 struct fib_info *fi = fa->fa_info; in fib_table_lookup()
1578 if ((BITS_PER_LONG > KEYLENGTH) || (fa->fa_slen < KEYLENGTH)) { in fib_table_lookup()
1579 if (index >= (1ul << fa->fa_slen)) in fib_table_lookup()
1582 if (fa->fa_dscp && in fib_table_lookup()
1583 inet_dscp_to_dsfield(fa->fa_dscp) != flp->flowi4_tos) in fib_table_lookup()
1588 if (fa->fa_info->fib_scope < flp->flowi4_scope) in fib_table_lookup()
1590 fib_alias_accessed(fa); in fib_table_lookup()
1591 err = fib_props[fa->fa_type].error; in fib_table_lookup()
1626 res->prefixlen = KEYLENGTH - fa->fa_slen; in fib_table_lookup()
1629 res->type = fa->fa_type; in fib_table_lookup()
1631 res->dscp = fa->fa_dscp; in fib_table_lookup()
1656 struct fib_alias *fa = hlist_entry(pprev, typeof(*fa), fa_list.next); in fib_remove_alias() local
1678 l->slen = fa->fa_slen; in fib_remove_alias()
1679 node_pull_suffix(tp, fa->fa_slen); in fib_remove_alias()
1717 struct fib_alias *fa, *fa_to_delete; in fib_table_delete() local
1734 fa = fib_find_alias(&l->leaf, slen, dscp, 0, tb->tb_id, false); in fib_table_delete()
1735 if (!fa) in fib_table_delete()
1742 hlist_for_each_entry_from(fa, fa_list) { in fib_table_delete()
1743 struct fib_info *fi = fa->fa_info; in fib_table_delete()
1745 if ((fa->fa_slen != slen) || in fib_table_delete()
1746 (fa->tb_id != tb->tb_id) || in fib_table_delete()
1747 (fa->fa_dscp != dscp)) in fib_table_delete()
1750 if ((!cfg->fc_type || fa->fa_type == cfg->fc_type) && in fib_table_delete()
1752 fa->fa_info->fib_scope == cfg->fc_scope) && in fib_table_delete()
1759 fa_to_delete = fa; in fib_table_delete()
1848 struct fib_alias *fa; in fib_trie_free() local
1885 hlist_for_each_entry_safe(fa, tmp, &n->leaf, fa_list) { in fib_trie_free()
1886 hlist_del_rcu(&fa->fa_list); in fib_trie_free()
1887 alias_free_mem_rcu(fa); in fib_trie_free()
1905 struct fib_alias *fa; in fib_trie_unmerge() local
1921 hlist_for_each_entry(fa, &l->leaf, fa_list) { in fib_trie_unmerge()
1924 if (local_tb->tb_id != fa->tb_id) in fib_trie_unmerge()
1932 memcpy(new_fa, fa, sizeof(*fa)); in fib_trie_unmerge()
1965 struct fib_alias *fa; in fib_table_flush_external() local
2003 hlist_for_each_entry_safe(fa, tmp, &n->leaf, fa_list) { in fib_table_flush_external()
2007 if (tb->tb_id != fa->tb_id) { in fib_table_flush_external()
2008 hlist_del_rcu(&fa->fa_list); in fib_table_flush_external()
2009 alias_free_mem_rcu(fa); in fib_table_flush_external()
2014 slen = fa->fa_slen; in fib_table_flush_external()
2035 struct fib_alias *fa; in fib_table_flush() local
2074 hlist_for_each_entry_safe(fa, tmp, &n->leaf, fa_list) { in fib_table_flush()
2075 struct fib_info *fi = fa->fa_info; in fib_table_flush()
2077 if (!fi || tb->tb_id != fa->tb_id || in fib_table_flush()
2079 !fib_props[fa->fa_type].error)) { in fib_table_flush()
2080 slen = fa->fa_slen; in fib_table_flush()
2087 if (!flush_all && fib_props[fa->fa_type].error) { in fib_table_flush()
2088 slen = fa->fa_slen; in fib_table_flush()
2092 fib_notify_alias_delete(net, n->key, &n->leaf, fa, in fib_table_flush()
2095 rtmsg_fib(RTM_DELROUTE, htonl(n->key), fa, in fib_table_flush()
2096 KEYLENGTH - fa->fa_slen, tb->tb_id, &info, 0); in fib_table_flush()
2097 hlist_del_rcu(&fa->fa_list); in fib_table_flush()
2098 fib_release_info(fa->fa_info); in fib_table_flush()
2099 alias_free_mem_rcu(fa); in fib_table_flush()
2123 struct fib_alias *fa; in __fib_info_notify_update() local
2152 hlist_for_each_entry(fa, &n->leaf, fa_list) { in __fib_info_notify_update()
2153 struct fib_info *fi = fa->fa_info; in __fib_info_notify_update()
2155 if (!fi || !fi->nh_updated || fa->tb_id != tb->tb_id) in __fib_info_notify_update()
2158 rtmsg_fib(RTM_NEWROUTE, htonl(n->key), fa, in __fib_info_notify_update()
2159 KEYLENGTH - fa->fa_slen, tb->tb_id, in __fib_info_notify_update()
2183 struct fib_alias *fa; in fib_leaf_notify() local
2187 hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { in fib_leaf_notify()
2188 struct fib_info *fi = fa->fa_info; in fib_leaf_notify()
2196 if (tb->tb_id != fa->tb_id) in fib_leaf_notify()
2199 if (fa->fa_slen == last_slen) in fib_leaf_notify()
2202 last_slen = fa->fa_slen; in fib_leaf_notify()
2204 l->key, KEYLENGTH - fa->fa_slen, in fib_leaf_notify()
2205 fa, extack); in fib_leaf_notify()
2276 struct fib_alias *fa; in fn_trie_dump_leaf() local
2287 hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { in fn_trie_dump_leaf()
2288 struct fib_info *fi = fa->fa_info; in fn_trie_dump_leaf()
2295 if (tb->tb_id != fa->tb_id) in fn_trie_dump_leaf()
2299 if (filter->rt_type && fa->fa_type != filter->rt_type) in fn_trie_dump_leaf()
2318 fri.dst_len = KEYLENGTH - fa->fa_slen; in fn_trie_dump_leaf()
2319 fri.dscp = fa->fa_dscp; in fn_trie_dump_leaf()
2320 fri.type = fa->fa_type; in fn_trie_dump_leaf()
2321 fri.offload = READ_ONCE(fa->offload); in fn_trie_dump_leaf()
2322 fri.trap = READ_ONCE(fa->trap); in fn_trie_dump_leaf()
2323 fri.offload_failed = READ_ONCE(fa->offload_failed); in fn_trie_dump_leaf()
2534 struct fib_alias *fa; in trie_collect_stats() local
2541 hlist_for_each_entry_rcu(fa, &n->leaf, fa_list) in trie_collect_stats()
2816 struct fib_alias *fa; in fib_trie_seq_show() local
2821 hlist_for_each_entry_rcu(fa, &n->leaf, fa_list) { in fib_trie_seq_show()
2826 KEYLENGTH - fa->fa_slen, in fib_trie_seq_show()
2828 fa->fa_info->fib_scope), in fib_trie_seq_show()
2830 fa->fa_type)); in fib_trie_seq_show()
2831 if (fa->fa_dscp) in fib_trie_seq_show()
2833 inet_dscp_to_dsfield(fa->fa_dscp)); in fib_trie_seq_show()
2972 struct fib_alias *fa; in fib_route_seq_show() local
2985 hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { in fib_route_seq_show()
2986 struct fib_info *fi = fa->fa_info; in fib_route_seq_show()
2987 __be32 mask = inet_make_mask(KEYLENGTH - fa->fa_slen); in fib_route_seq_show()
2988 unsigned int flags = fib_flag_trans(fa->fa_type, mask, fi); in fib_route_seq_show()
2990 if ((fa->fa_type == RTN_BROADCAST) || in fib_route_seq_show()
2991 (fa->fa_type == RTN_MULTICAST)) in fib_route_seq_show()
2994 if (fa->tb_id != tb->tb_id) in fib_route_seq_show()