aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4
diff options
context:
space:
mode:
authorDenis V. Lunev <den@openvz.org>2008-01-10 06:23:38 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 18:01:26 -0500
commit93456b6d7753def8760b423ac6b986eb9d5a4a95 (patch)
tree840a84aa88dda5a99834af4b6c9ac6cf75c90b98 /net/ipv4
parent7b1a74fdbb9ec38a9780620fae25519fde4b21ee (diff)
[IPV4]: Unify access to the routing tables.
Replace the direct pointers to local and main tables with calls to fib_get_table() with appropriate argument. This doesn't introduce additional dereferences, but makes the access to fib tables uniform in any (CONFIG_IP_MULTIPLE_TABLES) case. Acked-by: Benjamin Thery <benjamin.thery@bull.net> Acked-by: Daniel Lezcano <dlezcano@fr.ibm.com> Signed-off-by: Denis V. Lunev <den@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4')
-rw-r--r--net/ipv4/fib_frontend.c29
1 files changed, 12 insertions, 17 deletions
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index 0484cae02736..9ff1e6669ef2 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -50,39 +50,34 @@
50#define FFprint(a...) printk(KERN_DEBUG a) 50#define FFprint(a...) printk(KERN_DEBUG a)
51 51
52static struct sock *fibnl; 52static struct sock *fibnl;
53struct hlist_head fib_table_hash[FIB_TABLE_HASHSZ];
53 54
54#ifndef CONFIG_IP_MULTIPLE_TABLES 55#ifndef CONFIG_IP_MULTIPLE_TABLES
55 56
56struct fib_table *ip_fib_local_table;
57struct fib_table *ip_fib_main_table;
58
59#define FIB_TABLE_HASHSZ 1
60static struct hlist_head fib_table_hash[FIB_TABLE_HASHSZ];
61
62static int __net_init fib4_rules_init(struct net *net) 57static int __net_init fib4_rules_init(struct net *net)
63{ 58{
64 ip_fib_local_table = fib_hash_init(RT_TABLE_LOCAL); 59 struct fib_table *local_table, *main_table;
65 if (ip_fib_local_table == NULL) 60
61 local_table = fib_hash_init(RT_TABLE_LOCAL);
62 if (local_table == NULL)
66 return -ENOMEM; 63 return -ENOMEM;
67 64
68 ip_fib_main_table = fib_hash_init(RT_TABLE_MAIN); 65 main_table = fib_hash_init(RT_TABLE_MAIN);
69 if (ip_fib_main_table == NULL) 66 if (main_table == NULL)
70 goto fail; 67 goto fail;
71 68
72 hlist_add_head_rcu(&ip_fib_local_table->tb_hlist, &fib_table_hash[0]); 69 hlist_add_head_rcu(&local_table->tb_hlist,
73 hlist_add_head_rcu(&ip_fib_main_table->tb_hlist, &fib_table_hash[0]); 70 &fib_table_hash[TABLE_LOCAL_INDEX]);
71 hlist_add_head_rcu(&main_table->tb_hlist,
72 &fib_table_hash[TABLE_MAIN_INDEX]);
74 return 0; 73 return 0;
75 74
76fail: 75fail:
77 kfree(ip_fib_local_table); 76 kfree(local_table);
78 ip_fib_local_table = NULL;
79 return -ENOMEM; 77 return -ENOMEM;
80} 78}
81#else 79#else
82 80
83#define FIB_TABLE_HASHSZ 256
84static struct hlist_head fib_table_hash[FIB_TABLE_HASHSZ];
85
86struct fib_table *fib_new_table(u32 id) 81struct fib_table *fib_new_table(u32 id)
87{ 82{
88 struct fib_table *tb; 83 struct fib_table *tb;