转:http://blog.csdn.net/nerdx/article/details/12842811
-
-
-
1.1 enum rt_class_t
-
{
-
RT_TABLE_UNSPEC=0,
-
RT_TABLE_DEFAULT=253,
-
RT_TABLE_MAIN=254,
-
RT_TABLE_LOCAL=255,
-
__RT_TABLE_MAX
-
};
-
#define RT_TABLE_MAX (__RT_TABLE_MAX - 1)
-
struct fib_table *fib_tables[RT_TABLE_MAX+1];
-
-
-
-
-
-
1.2
-
#define ip_fib_local_table (fib_tables[RT_TABLE_LOCAL])
-
#define ip_fib_main_table (fib_tables[RT_TABLE_MAIN])
-
-
-
-
-
-
-
-
-
-
1.2 void __init ip_fib_init(void)
-
{
-
#ifndef CONFIG_IP_MULTIPLE_TABLES
-
ip_fib_local_table = fib_hash_init(RT_TABLE_LOCAL);
-
ip_fib_main_table = fib_hash_init(RT_TABLE_MAIN);
-
#else
-
fib_rules_init();
-
#endif
-
register_netdevice_notifier(&fib_netdev_notifier);
-
register_inetaddr_notifier(&fib_inetaddr_notifier);
-
}
-
-
-
-
-
-
-
-
1.3 struct fib_table * __init fib_hash_init(int id)
-
{
-
struct fib_table *tb;
-
-
if (fn_hash_kmem == NULL)
-
fn_hash_kmem = kmem_cache_create("ip_fib_hash",
-
sizeof(struct fib_node),
-
0, SLAB_HWCACHE_ALIGN,
-
NULL, NULL);
-
-
if (fn_alias_kmem == NULL)
-
fn_alias_kmem = kmem_cache_create("ip_fib_alias",
-
sizeof(struct fib_alias),
-
0, SLAB_HWCACHE_ALIGN,
-
NULL, NULL);
-
-
tb = kmalloc(sizeof(struct fib_table) + sizeof(struct fn_hash),
-
GFP_KERNEL);
-
if (tb == NULL)
-
return NULL;
-
-
tb->tb_id = id;
-
-
tb->tb_lookup = fn_hash_lookup;
-
tb->tb_insert = fn_hash_insert;
-
tb->tb_delete = fn_hash_delete;
-
tb->tb_flush = fn_hash_flush;
-
tb->tb_select_default = fn_hash_select_default;
-
tb->tb_dump = fn_hash_dump;
-
-
memset(tb->tb_data, 0, sizeof(struct fn_hash));
-
return tb;
-
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
阅读(745) | 评论(0) | 转发(0) |