Lines Matching refs:fa

272 	struct fib_alias *fa = container_of(head, struct fib_alias, rcu);  in __alias_free_mem()  local
273 kmem_cache_free(fn_alias_kmem, fa); in __alias_free_mem()
276 static inline void alias_free_mem_rcu(struct fib_alias *fa) in alias_free_mem_rcu() argument
278 call_rcu(&fa->rcu, __alias_free_mem); in alias_free_mem_rcu()
327 static struct key_vector *leaf_new(t_key key, struct fib_alias *fa) in leaf_new() argument
341 l->slen = fa->fa_slen; in leaf_new()
345 hlist_add_head(&fa->fa_list, &l->leaf); in leaf_new()
966 struct fib_alias *fa; in fib_find_alias() local
971 hlist_for_each_entry(fa, fah, fa_list) { in fib_find_alias()
972 if (fa->fa_slen < slen) in fib_find_alias()
974 if (fa->fa_slen != slen) in fib_find_alias()
976 if (fa->tb_id > tb_id) in fib_find_alias()
978 if (fa->tb_id != tb_id) in fib_find_alias()
980 if (fa->fa_tos > tos) in fib_find_alias()
982 if (fa->fa_info->fib_priority >= prio || fa->fa_tos < tos) in fib_find_alias()
983 return fa; in fib_find_alias()
1046 struct fib_alias *fa, t_key key) in fib_insert_alias() argument
1051 if (fa) { in fib_insert_alias()
1052 hlist_add_before_rcu(&new->fa_list, &fa->fa_list); in fib_insert_alias()
1062 fa = last; in fib_insert_alias()
1065 if (fa) in fib_insert_alias()
1066 hlist_add_behind_rcu(&new->fa_list, &fa->fa_list); in fib_insert_alias()
1084 struct fib_alias *fa, *new_fa; in fib_table_insert() local
1111 fa = l ? fib_find_alias(&l->leaf, slen, tos, fi->fib_priority, in fib_table_insert()
1123 if (fa && fa->fa_tos == tos && in fib_table_insert()
1124 fa->fa_info->fib_priority == fi->fib_priority) { in fib_table_insert()
1137 fa_first = fa; in fib_table_insert()
1138 hlist_for_each_entry_from(fa, fa_list) { in fib_table_insert()
1139 if ((fa->fa_slen != slen) || in fib_table_insert()
1140 (fa->tb_id != tb->tb_id) || in fib_table_insert()
1141 (fa->fa_tos != tos)) in fib_table_insert()
1143 if (fa->fa_info->fib_priority != fi->fib_priority) in fib_table_insert()
1145 if (fa->fa_type == cfg->fc_type && in fib_table_insert()
1146 fa->fa_info == fi) { in fib_table_insert()
1147 fa_match = fa; in fib_table_insert()
1156 fa = fa_first; in fib_table_insert()
1158 if (fa == fa_match) in fib_table_insert()
1167 fi_drop = fa->fa_info; in fib_table_insert()
1168 new_fa->fa_tos = fa->fa_tos; in fib_table_insert()
1171 state = fa->fa_state; in fib_table_insert()
1173 new_fa->fa_slen = fa->fa_slen; in fib_table_insert()
1188 hlist_replace_rcu(&fa->fa_list, &new_fa->fa_list); in fib_table_insert()
1190 alias_free_mem_rcu(fa); in fib_table_insert()
1210 fa = fa_first; in fib_table_insert()
1238 err = fib_insert_alias(t, tp, l, new_fa, fa, key); in fib_table_insert()
1278 struct fib_alias *fa; in fib_table_lookup() local
1395 hlist_for_each_entry_rcu(fa, &n->leaf, fa_list) { in fib_table_lookup()
1396 struct fib_info *fi = fa->fa_info; in fib_table_lookup()
1399 if ((index >= (1ul << fa->fa_slen)) && in fib_table_lookup()
1400 ((BITS_PER_LONG > KEYLENGTH) || (fa->fa_slen != KEYLENGTH))) in fib_table_lookup()
1402 if (fa->fa_tos && fa->fa_tos != flp->flowi4_tos) in fib_table_lookup()
1406 if (fa->fa_info->fib_scope < flp->flowi4_scope) in fib_table_lookup()
1408 fib_alias_accessed(fa); in fib_table_lookup()
1409 err = fib_props[fa->fa_type].error; in fib_table_lookup()
1438 res->prefixlen = KEYLENGTH - fa->fa_slen; in fib_table_lookup()
1440 res->type = fa->fa_type; in fib_table_lookup()
1465 struct fib_alias *fa = hlist_entry(pprev, typeof(*fa), fa_list.next); in fib_remove_alias() local
1485 l->slen = fa->fa_slen; in fib_remove_alias()
1493 struct fib_alias *fa, *fa_to_delete; in fib_table_delete() local
1512 fa = fib_find_alias(&l->leaf, slen, tos, 0, tb->tb_id); in fib_table_delete()
1513 if (!fa) in fib_table_delete()
1519 hlist_for_each_entry_from(fa, fa_list) { in fib_table_delete()
1520 struct fib_info *fi = fa->fa_info; in fib_table_delete()
1522 if ((fa->fa_slen != slen) || in fib_table_delete()
1523 (fa->tb_id != tb->tb_id) || in fib_table_delete()
1524 (fa->fa_tos != tos)) in fib_table_delete()
1527 if ((!cfg->fc_type || fa->fa_type == cfg->fc_type) && in fib_table_delete()
1529 fa->fa_info->fib_scope == cfg->fc_scope) && in fib_table_delete()
1535 fa_to_delete = fa; in fib_table_delete()
1626 struct fib_alias *fa; in fib_trie_free() local
1663 hlist_for_each_entry_safe(fa, tmp, &n->leaf, fa_list) { in fib_trie_free()
1664 hlist_del_rcu(&fa->fa_list); in fib_trie_free()
1665 alias_free_mem_rcu(fa); in fib_trie_free()
1683 struct fib_alias *fa; in fib_trie_unmerge() local
1699 hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { in fib_trie_unmerge()
1702 if (local_tb->tb_id != fa->tb_id) in fib_trie_unmerge()
1710 memcpy(new_fa, fa, sizeof(*fa)); in fib_trie_unmerge()
1741 struct fib_alias *fa; in fib_table_flush_external() local
1775 hlist_for_each_entry_safe(fa, tmp, &n->leaf, fa_list) { in fib_table_flush_external()
1776 struct fib_info *fi = fa->fa_info; in fib_table_flush_external()
1781 if (tb->tb_id != fa->tb_id) { in fib_table_flush_external()
1782 hlist_del_rcu(&fa->fa_list); in fib_table_flush_external()
1783 alias_free_mem_rcu(fa); in fib_table_flush_external()
1788 slen = fa->fa_slen; in fib_table_flush_external()
1793 switchdev_fib_ipv4_del(n->key, KEYLENGTH - fa->fa_slen, in fib_table_flush_external()
1794 fi, fa->fa_tos, fa->fa_type, in fib_table_flush_external()
1815 struct fib_alias *fa; in fib_table_flush() local
1850 hlist_for_each_entry_safe(fa, tmp, &n->leaf, fa_list) { in fib_table_flush()
1851 struct fib_info *fi = fa->fa_info; in fib_table_flush()
1854 slen = fa->fa_slen; in fib_table_flush()
1858 switchdev_fib_ipv4_del(n->key, KEYLENGTH - fa->fa_slen, in fib_table_flush()
1859 fi, fa->fa_tos, fa->fa_type, in fib_table_flush()
1861 hlist_del_rcu(&fa->fa_list); in fib_table_flush()
1862 fib_release_info(fa->fa_info); in fib_table_flush()
1863 alias_free_mem_rcu(fa); in fib_table_flush()
1901 struct fib_alias *fa; in fn_trie_dump_leaf() local
1908 hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { in fn_trie_dump_leaf()
1914 if (tb->tb_id != fa->tb_id) { in fn_trie_dump_leaf()
1923 fa->fa_type, in fn_trie_dump_leaf()
1925 KEYLENGTH - fa->fa_slen, in fn_trie_dump_leaf()
1926 fa->fa_tos, in fn_trie_dump_leaf()
1927 fa->fa_info, NLM_F_MULTI) < 0) { in fn_trie_dump_leaf()
2108 struct fib_alias *fa; in trie_collect_stats() local
2115 hlist_for_each_entry_rcu(fa, &n->leaf, fa_list) in trie_collect_stats()
2400 struct fib_alias *fa; in fib_trie_seq_show() local
2405 hlist_for_each_entry_rcu(fa, &n->leaf, fa_list) { in fib_trie_seq_show()
2410 KEYLENGTH - fa->fa_slen, in fib_trie_seq_show()
2412 fa->fa_info->fib_scope), in fib_trie_seq_show()
2414 fa->fa_type)); in fib_trie_seq_show()
2415 if (fa->fa_tos) in fib_trie_seq_show()
2416 seq_printf(seq, " tos=%d", fa->fa_tos); in fib_trie_seq_show()
2572 struct fib_alias *fa; in fib_route_seq_show() local
2585 hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { in fib_route_seq_show()
2586 const struct fib_info *fi = fa->fa_info; in fib_route_seq_show()
2587 __be32 mask = inet_make_mask(KEYLENGTH - fa->fa_slen); in fib_route_seq_show()
2588 unsigned int flags = fib_flag_trans(fa->fa_type, mask, fi); in fib_route_seq_show()
2590 if ((fa->fa_type == RTN_BROADCAST) || in fib_route_seq_show()
2591 (fa->fa_type == RTN_MULTICAST)) in fib_route_seq_show()
2594 if (fa->tb_id != tb->tb_id) in fib_route_seq_show()