Lines Matching refs:fa

79 				   int dst_len, struct fib_alias *fa)  in call_fib_entry_notifier()  argument
84 .fi = fa->fa_info, in call_fib_entry_notifier()
85 .tos = fa->fa_tos, 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 .tos = fa->fa_tos, 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()
355 static struct key_vector *leaf_new(t_key key, struct fib_alias *fa) in leaf_new() argument
369 l->slen = fa->fa_slen; in leaf_new()
373 hlist_add_head(&fa->fa_list, &l->leaf); in leaf_new()
985 struct fib_alias *fa; in fib_find_alias() local
990 hlist_for_each_entry(fa, fah, fa_list) { in fib_find_alias()
991 if (fa->fa_slen < slen) in fib_find_alias()
993 if (fa->fa_slen != slen) in fib_find_alias()
995 if (fa->tb_id > tb_id) in fib_find_alias()
997 if (fa->tb_id != tb_id) in fib_find_alias()
999 if (fa->fa_tos > tos) in fib_find_alias()
1001 if (fa->fa_info->fib_priority >= prio || fa->fa_tos < tos) in fib_find_alias()
1002 return fa; in fib_find_alias()
1069 struct fib_alias *fa, t_key key) in fib_insert_alias() argument
1074 if (fa) { in fib_insert_alias()
1075 hlist_add_before_rcu(&new->fa_list, &fa->fa_list); in fib_insert_alias()
1085 fa = last; in fib_insert_alias()
1088 if (fa) in fib_insert_alias()
1089 hlist_add_behind_rcu(&new->fa_list, &fa->fa_list); in fib_insert_alias()
1125 struct fib_alias *fa, *new_fa; in fib_table_insert() local
1149 fa = l ? fib_find_alias(&l->leaf, slen, tos, fi->fib_priority, in fib_table_insert()
1161 if (fa && fa->fa_tos == tos && in fib_table_insert()
1162 fa->fa_info->fib_priority == fi->fib_priority) { in fib_table_insert()
1177 fa_first = fa; in fib_table_insert()
1178 hlist_for_each_entry_from(fa, fa_list) { in fib_table_insert()
1179 if ((fa->fa_slen != slen) || in fib_table_insert()
1180 (fa->tb_id != tb->tb_id) || in fib_table_insert()
1181 (fa->fa_tos != tos)) in fib_table_insert()
1183 if (fa->fa_info->fib_priority != fi->fib_priority) in fib_table_insert()
1185 if (fa->fa_type == cfg->fc_type && in fib_table_insert()
1186 fa->fa_info == fi) { in fib_table_insert()
1187 fa_match = fa; in fib_table_insert()
1197 fa = fa_first; in fib_table_insert()
1199 if (fa == fa_match) in fib_table_insert()
1208 fi_drop = fa->fa_info; in fib_table_insert()
1209 new_fa->fa_tos = fa->fa_tos; in fib_table_insert()
1212 state = fa->fa_state; in fib_table_insert()
1214 new_fa->fa_slen = fa->fa_slen; in fib_table_insert()
1228 hlist_replace_rcu(&fa->fa_list, &new_fa->fa_list); in fib_table_insert()
1230 alias_free_mem_rcu(fa); in fib_table_insert()
1249 fa = fa_first; in fib_table_insert()
1275 err = fib_insert_alias(t, tp, l, new_fa, fa, key); in fib_table_insert()
1321 struct fib_alias *fa; in fib_table_lookup() local
1441 hlist_for_each_entry_rcu(fa, &n->leaf, fa_list) { in fib_table_lookup()
1442 struct fib_info *fi = fa->fa_info; in fib_table_lookup()
1445 if ((BITS_PER_LONG > KEYLENGTH) || (fa->fa_slen < KEYLENGTH)) { in fib_table_lookup()
1446 if (index >= (1ul << fa->fa_slen)) in fib_table_lookup()
1449 if (fa->fa_tos && fa->fa_tos != flp->flowi4_tos) in fib_table_lookup()
1453 if (fa->fa_info->fib_scope < flp->flowi4_scope) in fib_table_lookup()
1455 fib_alias_accessed(fa); in fib_table_lookup()
1456 err = fib_props[fa->fa_type].error; in fib_table_lookup()
1492 res->prefixlen = KEYLENGTH - fa->fa_slen; in fib_table_lookup()
1495 res->type = fa->fa_type; in fib_table_lookup()
1520 struct fib_alias *fa = hlist_entry(pprev, typeof(*fa), fa_list.next); in fib_remove_alias() local
1542 l->slen = fa->fa_slen; in fib_remove_alias()
1543 node_pull_suffix(tp, fa->fa_slen); in fib_remove_alias()
1551 struct fib_alias *fa, *fa_to_delete; in fib_table_delete() local
1567 fa = fib_find_alias(&l->leaf, slen, tos, 0, tb->tb_id); in fib_table_delete()
1568 if (!fa) in fib_table_delete()
1574 hlist_for_each_entry_from(fa, fa_list) { in fib_table_delete()
1575 struct fib_info *fi = fa->fa_info; in fib_table_delete()
1577 if ((fa->fa_slen != slen) || in fib_table_delete()
1578 (fa->tb_id != tb->tb_id) || in fib_table_delete()
1579 (fa->fa_tos != tos)) in fib_table_delete()
1582 if ((!cfg->fc_type || fa->fa_type == cfg->fc_type) && in fib_table_delete()
1584 fa->fa_info->fib_scope == cfg->fc_scope) && in fib_table_delete()
1591 fa_to_delete = fa; in fib_table_delete()
1681 struct fib_alias *fa; in fib_trie_free() local
1718 hlist_for_each_entry_safe(fa, tmp, &n->leaf, fa_list) { in fib_trie_free()
1719 hlist_del_rcu(&fa->fa_list); in fib_trie_free()
1720 alias_free_mem_rcu(fa); in fib_trie_free()
1738 struct fib_alias *fa; in fib_trie_unmerge() local
1754 hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { in fib_trie_unmerge()
1757 if (local_tb->tb_id != fa->tb_id) in fib_trie_unmerge()
1765 memcpy(new_fa, fa, sizeof(*fa)); in fib_trie_unmerge()
1798 struct fib_alias *fa; in fib_table_flush_external() local
1836 hlist_for_each_entry_safe(fa, tmp, &n->leaf, fa_list) { in fib_table_flush_external()
1840 if (tb->tb_id != fa->tb_id) { in fib_table_flush_external()
1841 hlist_del_rcu(&fa->fa_list); in fib_table_flush_external()
1842 alias_free_mem_rcu(fa); in fib_table_flush_external()
1847 slen = fa->fa_slen; in fib_table_flush_external()
1867 struct fib_alias *fa; in fib_table_flush() local
1906 hlist_for_each_entry_safe(fa, tmp, &n->leaf, fa_list) { in fib_table_flush()
1907 struct fib_info *fi = fa->fa_info; in fib_table_flush()
1909 if (!fi || tb->tb_id != fa->tb_id || in fib_table_flush()
1911 !fib_props[fa->fa_type].error)) { in fib_table_flush()
1912 slen = fa->fa_slen; in fib_table_flush()
1919 if (!flush_all && fib_props[fa->fa_type].error) { in fib_table_flush()
1920 slen = fa->fa_slen; in fib_table_flush()
1926 KEYLENGTH - fa->fa_slen, fa, in fib_table_flush()
1928 hlist_del_rcu(&fa->fa_list); in fib_table_flush()
1929 fib_release_info(fa->fa_info); in fib_table_flush()
1930 alias_free_mem_rcu(fa); in fib_table_flush()
1954 struct fib_alias *fa; in __fib_info_notify_update() local
1983 hlist_for_each_entry(fa, &n->leaf, fa_list) { in __fib_info_notify_update()
1984 struct fib_info *fi = fa->fa_info; in __fib_info_notify_update()
1986 if (!fi || !fi->nh_updated || fa->tb_id != tb->tb_id) in __fib_info_notify_update()
1989 rtmsg_fib(RTM_NEWROUTE, htonl(n->key), fa, in __fib_info_notify_update()
1990 KEYLENGTH - fa->fa_slen, tb->tb_id, in __fib_info_notify_update()
1999 KEYLENGTH - fa->fa_slen, fa, in __fib_info_notify_update()
2021 struct fib_alias *fa; in fib_leaf_notify() local
2023 hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { in fib_leaf_notify()
2024 struct fib_info *fi = fa->fa_info; in fib_leaf_notify()
2032 if (tb->tb_id != fa->tb_id) in fib_leaf_notify()
2036 KEYLENGTH - fa->fa_slen, fa); in fib_leaf_notify()
2094 struct fib_alias *fa; in fn_trie_dump_leaf() local
2105 hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { in fn_trie_dump_leaf()
2106 struct fib_info *fi = fa->fa_info; in fn_trie_dump_leaf()
2113 if (tb->tb_id != fa->tb_id) in fn_trie_dump_leaf()
2117 if (filter->rt_type && fa->fa_type != filter->rt_type) in fn_trie_dump_leaf()
2135 tb->tb_id, fa->fa_type, in fn_trie_dump_leaf()
2137 KEYLENGTH - fa->fa_slen, in fn_trie_dump_leaf()
2138 fa->fa_tos, fi, flags); in fn_trie_dump_leaf()
2339 struct fib_alias *fa; in trie_collect_stats() local
2346 hlist_for_each_entry_rcu(fa, &n->leaf, fa_list) in trie_collect_stats()
2618 struct fib_alias *fa; in fib_trie_seq_show() local
2623 hlist_for_each_entry_rcu(fa, &n->leaf, fa_list) { in fib_trie_seq_show()
2628 KEYLENGTH - fa->fa_slen, in fib_trie_seq_show()
2630 fa->fa_info->fib_scope), in fib_trie_seq_show()
2632 fa->fa_type)); in fib_trie_seq_show()
2633 if (fa->fa_tos) in fib_trie_seq_show()
2634 seq_printf(seq, " tos=%d", fa->fa_tos); in fib_trie_seq_show()
2773 struct fib_alias *fa; in fib_route_seq_show() local
2786 hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) { in fib_route_seq_show()
2787 struct fib_info *fi = fa->fa_info; in fib_route_seq_show()
2788 __be32 mask = inet_make_mask(KEYLENGTH - fa->fa_slen); in fib_route_seq_show()
2789 unsigned int flags = fib_flag_trans(fa->fa_type, mask, fi); in fib_route_seq_show()
2791 if ((fa->fa_type == RTN_BROADCAST) || in fib_route_seq_show()
2792 (fa->fa_type == RTN_MULTICAST)) in fib_route_seq_show()
2795 if (fa->tb_id != tb->tb_id) in fib_route_seq_show()