Lines Matching refs:fa
270 struct fib_alias *fa = container_of(head, struct fib_alias, rcu); in __alias_free_mem() local
271 kmem_cache_free(fn_alias_kmem, fa); in __alias_free_mem()
274 static inline void alias_free_mem_rcu(struct fib_alias *fa) in alias_free_mem_rcu() argument
276 call_rcu(&fa->rcu, __alias_free_mem); in alias_free_mem_rcu()
325 static struct key_vector *leaf_new(t_key key, struct fib_alias *fa) in leaf_new() argument
337 l->slen = fa->fa_slen; in leaf_new()
341 hlist_add_head(&fa->fa_list, &l->leaf); in leaf_new()
960 struct fib_alias *fa; in fib_find_alias() local
965 hlist_for_each_entry(fa, fah, fa_list) { in fib_find_alias()
966 if (fa->fa_slen < slen) in fib_find_alias()
968 if (fa->fa_slen != slen) in fib_find_alias()
970 if (fa->tb_id > tb_id) in fib_find_alias()
972 if (fa->tb_id != tb_id) in fib_find_alias()
974 if (fa->fa_tos > tos) in fib_find_alias()
976 if (fa->fa_info->fib_priority >= prio || fa->fa_tos < tos) in fib_find_alias()
977 return fa; in fib_find_alias()
1040 struct fib_alias *fa, t_key key) in fib_insert_alias() argument
1045 if (fa) { in fib_insert_alias()
1046 hlist_add_before_rcu(&new->fa_list, &fa->fa_list); in fib_insert_alias()
1056 fa = last; in fib_insert_alias()
1059 if (fa) in fib_insert_alias()
1060 hlist_add_behind_rcu(&new->fa_list, &fa->fa_list); in fib_insert_alias()
1078 struct fib_alias *fa, *new_fa; in fib_table_insert() local
1104 fa = l ? fib_find_alias(&l->leaf, slen, tos, fi->fib_priority, in fib_table_insert()
1116 if (fa && fa->fa_tos == tos && in fib_table_insert()
1117 fa->fa_info->fib_priority == fi->fib_priority) { in fib_table_insert()
1130 fa_first = fa; in fib_table_insert()
1131 hlist_for_each_entry_from(fa, fa_list) { in fib_table_insert()
1132 if ((fa->fa_slen != slen) || in fib_table_insert()
1133 (fa->tb_id != tb->tb_id) || in fib_table_insert()
1134 (fa->fa_tos != tos)) in fib_table_insert()
1136 if (fa->fa_info->fib_priority != fi->fib_priority) in fib_table_insert()
1138 if (fa->fa_type == cfg->fc_type && in fib_table_insert()
1139 fa->fa_info == fi) { in fib_table_insert()
1140 fa_match = fa; in fib_table_insert()
1149 fa = fa_first; in fib_table_insert()
1151 if (fa == fa_match) in fib_table_insert()
1160 fi_drop = fa->fa_info; in fib_table_insert()
1161 new_fa->fa_tos = fa->fa_tos; in fib_table_insert()
1164 state = fa->fa_state; in fib_table_insert()
1166 new_fa->fa_slen = fa->fa_slen; in fib_table_insert()
1180 hlist_replace_rcu(&fa->fa_list, &new_fa->fa_list); in fib_table_insert()
1182 alias_free_mem_rcu(fa); in fib_table_insert()
1200 fa = fa_first; in fib_table_insert()
1229 err = fib_insert_alias(t, tp, l, new_fa, fa, key); in fib_table_insert()
1269 struct fib_alias *fa; in fib_table_lookup() local
1384 hlist_for_each_entry_rcu(fa, &n->leaf, fa_list) { in fib_table_lookup()
1385 struct fib_info *fi = fa->fa_info; in fib_table_lookup()
1388 if ((index >= (1ul << fa->fa_slen)) && in fib_table_lookup()
1389 ((BITS_PER_LONG > KEYLENGTH) || (fa->fa_slen != KEYLENGTH))) in fib_table_lookup()
1391 if (fa->fa_tos && fa->fa_tos != flp->flowi4_tos) in fib_table_lookup()
1395 if (fa->fa_info->fib_scope < flp->flowi4_scope) in fib_table_lookup()
1397 fib_alias_accessed(fa); in fib_table_lookup()
1398 err = fib_props[fa->fa_type].error; in fib_table_lookup()
1418 res->prefixlen = KEYLENGTH - fa->fa_slen; in fib_table_lookup()
1420 res->type = fa->fa_type; in fib_table_lookup()
1443 struct fib_alias *fa = hlist_entry(pprev, typeof(*fa), fa_list.next); in fib_remove_alias() local
1463 l->slen = fa->fa_slen; in fib_remove_alias()
1471 struct fib_alias *fa, *fa_to_delete; in fib_table_delete() local
1490 fa = fib_find_alias(&l->leaf, slen, tos, 0, tb->tb_id); in fib_table_delete()
1491 if (!fa) in fib_table_delete()
1497 hlist_for_each_entry_from(fa, fa_list) { in fib_table_delete()
1498 struct fib_info *fi = fa->fa_info; in fib_table_delete()
1500 if ((fa->fa_slen != slen) || in fib_table_delete()
1501 (fa->tb_id != tb->tb_id) || in fib_table_delete()
1502 (fa->fa_tos != tos)) in fib_table_delete()
1505 if ((!cfg->fc_type || fa->fa_type == cfg->fc_type) && in fib_table_delete()
1507 fa->fa_info->fib_scope == cfg->fc_scope) && in fib_table_delete()
1513 fa_to_delete = fa; in fib_table_delete()
1604 struct fib_alias *fa; in fib_trie_free() local
1641 hlist_for_each_entry_safe(fa, tmp, &n->leaf, fa_list) { in fib_trie_free()
1642 hlist_del_rcu(&fa->fa_list); in fib_trie_free()
1643 alias_free_mem_rcu(fa); in fib_trie_free()
1661 struct fib_alias *fa; in fib_trie_unmerge() local
1677 hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { in fib_trie_unmerge()
1680 if (local_tb->tb_id != fa->tb_id) in fib_trie_unmerge()
1688 memcpy(new_fa, fa, sizeof(*fa)); in fib_trie_unmerge()
1719 struct fib_alias *fa; in fib_table_flush_external() local
1753 hlist_for_each_entry_safe(fa, tmp, &n->leaf, fa_list) { in fib_table_flush_external()
1754 struct fib_info *fi = fa->fa_info; in fib_table_flush_external()
1759 if (tb->tb_id != fa->tb_id) { in fib_table_flush_external()
1760 hlist_del_rcu(&fa->fa_list); in fib_table_flush_external()
1761 alias_free_mem_rcu(fa); in fib_table_flush_external()
1766 slen = fa->fa_slen; in fib_table_flush_external()
1772 KEYLENGTH - fa->fa_slen, in fib_table_flush_external()
1773 fi, fa->fa_tos, in fib_table_flush_external()
1774 fa->fa_type, tb->tb_id); in fib_table_flush_external()
1794 struct fib_alias *fa; in fib_table_flush() local
1829 hlist_for_each_entry_safe(fa, tmp, &n->leaf, fa_list) { in fib_table_flush()
1830 struct fib_info *fi = fa->fa_info; in fib_table_flush()
1833 slen = fa->fa_slen; in fib_table_flush()
1838 KEYLENGTH - fa->fa_slen, in fib_table_flush()
1839 fi, fa->fa_tos, in fib_table_flush()
1840 fa->fa_type, tb->tb_id); in fib_table_flush()
1841 hlist_del_rcu(&fa->fa_list); in fib_table_flush()
1842 fib_release_info(fa->fa_info); in fib_table_flush()
1843 alias_free_mem_rcu(fa); in fib_table_flush()
1881 struct fib_alias *fa; in fn_trie_dump_leaf() local
1888 hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { in fn_trie_dump_leaf()
1894 if (tb->tb_id != fa->tb_id) { in fn_trie_dump_leaf()
1903 fa->fa_type, in fn_trie_dump_leaf()
1905 KEYLENGTH - fa->fa_slen, in fn_trie_dump_leaf()
1906 fa->fa_tos, in fn_trie_dump_leaf()
1907 fa->fa_info, NLM_F_MULTI) < 0) { in fn_trie_dump_leaf()
2088 struct fib_alias *fa; in trie_collect_stats() local
2095 hlist_for_each_entry_rcu(fa, &n->leaf, fa_list) in trie_collect_stats()
2380 struct fib_alias *fa; in fib_trie_seq_show() local
2385 hlist_for_each_entry_rcu(fa, &n->leaf, fa_list) { in fib_trie_seq_show()
2390 KEYLENGTH - fa->fa_slen, in fib_trie_seq_show()
2392 fa->fa_info->fib_scope), in fib_trie_seq_show()
2394 fa->fa_type)); in fib_trie_seq_show()
2395 if (fa->fa_tos) in fib_trie_seq_show()
2396 seq_printf(seq, " tos=%d", fa->fa_tos); in fib_trie_seq_show()
2552 struct fib_alias *fa; in fib_route_seq_show() local
2565 hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { in fib_route_seq_show()
2566 const struct fib_info *fi = fa->fa_info; in fib_route_seq_show()
2567 __be32 mask = inet_make_mask(KEYLENGTH - fa->fa_slen); in fib_route_seq_show()
2568 unsigned int flags = fib_flag_trans(fa->fa_type, mask, fi); in fib_route_seq_show()
2570 if ((fa->fa_type == RTN_BROADCAST) || in fib_route_seq_show()
2571 (fa->fa_type == RTN_MULTICAST)) in fib_route_seq_show()
2574 if (fa->tb_id != tb->tb_id) in fib_route_seq_show()