[IPV4]: Add LC-Trie FIB lookup algorithm.
Signed-off-by: Robert Olsson <Robert.Olsson@data.slu.se> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
18b504e25f
commit
19baf839ff
@@ -1,6 +1,32 @@
|
|||||||
#
|
#
|
||||||
# IP configuration
|
# IP configuration
|
||||||
#
|
#
|
||||||
|
choice
|
||||||
|
prompt "Choose IP: FIB lookup""
|
||||||
|
depends on INET
|
||||||
|
default IP_FIB_HASH
|
||||||
|
|
||||||
|
config IP_FIB_HASH
|
||||||
|
bool "FIB_HASH"
|
||||||
|
---help---
|
||||||
|
Current FIB is very proven and good enough for most users.
|
||||||
|
|
||||||
|
config IP_FIB_TRIE
|
||||||
|
bool "FIB_TRIE"
|
||||||
|
---help---
|
||||||
|
Use new experimental LC-trie as FIB lookup algoritm.
|
||||||
|
This improves lookup performance
|
||||||
|
|
||||||
|
LC-trie is described in:
|
||||||
|
|
||||||
|
IP-address lookup using LC-tries. Stefan Nilsson and Gunnar Karlsson
|
||||||
|
IEEE Journal on Selected Areas in Communications, 17(6):1083-1092, June 1999
|
||||||
|
An experimental study of compression methods for dynamic tries
|
||||||
|
Stefan Nilsson and Matti Tikkanen. Algorithmica, 33(1):19-33, 2002.
|
||||||
|
http://www.nada.kth.se/~snilsson/public/papers/dyntrie2/
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
config IP_MULTICAST
|
config IP_MULTICAST
|
||||||
bool "IP: multicasting"
|
bool "IP: multicasting"
|
||||||
depends on INET
|
depends on INET
|
||||||
|
@@ -7,8 +7,10 @@ obj-y := utils.o route.o inetpeer.o protocol.o \
|
|||||||
ip_output.o ip_sockglue.o \
|
ip_output.o ip_sockglue.o \
|
||||||
tcp.o tcp_input.o tcp_output.o tcp_timer.o tcp_ipv4.o tcp_minisocks.o \
|
tcp.o tcp_input.o tcp_output.o tcp_timer.o tcp_ipv4.o tcp_minisocks.o \
|
||||||
datagram.o raw.o udp.o arp.o icmp.o devinet.o af_inet.o igmp.o \
|
datagram.o raw.o udp.o arp.o icmp.o devinet.o af_inet.o igmp.o \
|
||||||
sysctl_net_ipv4.o fib_frontend.o fib_semantics.o fib_hash.o
|
sysctl_net_ipv4.o fib_frontend.o fib_semantics.o
|
||||||
|
|
||||||
|
obj-$(CONFIG_IP_FIB_HASH) += fib_hash.o
|
||||||
|
obj-$(CONFIG_IP_FIB_TRIE) += fib_trie.o
|
||||||
obj-$(CONFIG_PROC_FS) += proc.o
|
obj-$(CONFIG_PROC_FS) += proc.o
|
||||||
obj-$(CONFIG_IP_MULTIPLE_TABLES) += fib_rules.o
|
obj-$(CONFIG_IP_MULTIPLE_TABLES) += fib_rules.o
|
||||||
obj-$(CONFIG_IP_MROUTE) += ipmr.o
|
obj-$(CONFIG_IP_MROUTE) += ipmr.o
|
||||||
|
@@ -1119,6 +1119,10 @@ module_init(inet_init);
|
|||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_PROC_FS
|
||||||
extern int fib_proc_init(void);
|
extern int fib_proc_init(void);
|
||||||
extern void fib_proc_exit(void);
|
extern void fib_proc_exit(void);
|
||||||
|
#ifdef CONFIG_IP_FIB_TRIE
|
||||||
|
extern int fib_stat_proc_init(void);
|
||||||
|
extern void fib_stat_proc_exit(void);
|
||||||
|
#endif
|
||||||
extern int ip_misc_proc_init(void);
|
extern int ip_misc_proc_init(void);
|
||||||
extern int raw_proc_init(void);
|
extern int raw_proc_init(void);
|
||||||
extern void raw_proc_exit(void);
|
extern void raw_proc_exit(void);
|
||||||
@@ -1139,11 +1143,19 @@ static int __init ipv4_proc_init(void)
|
|||||||
goto out_udp;
|
goto out_udp;
|
||||||
if (fib_proc_init())
|
if (fib_proc_init())
|
||||||
goto out_fib;
|
goto out_fib;
|
||||||
|
#ifdef CONFIG_IP_FIB_TRIE
|
||||||
|
if (fib_stat_proc_init())
|
||||||
|
goto out_fib_stat;
|
||||||
|
#endif
|
||||||
if (ip_misc_proc_init())
|
if (ip_misc_proc_init())
|
||||||
goto out_misc;
|
goto out_misc;
|
||||||
out:
|
out:
|
||||||
return rc;
|
return rc;
|
||||||
out_misc:
|
out_misc:
|
||||||
|
#ifdef CONFIG_IP_FIB_TRIE
|
||||||
|
fib_stat_proc_exit();
|
||||||
|
out_fib_stat:
|
||||||
|
#endif
|
||||||
fib_proc_exit();
|
fib_proc_exit();
|
||||||
out_fib:
|
out_fib:
|
||||||
udp4_proc_exit();
|
udp4_proc_exit();
|
||||||
|
2454
net/ipv4/fib_trie.c
Normal file
2454
net/ipv4/fib_trie.c
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user