Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 19baf839 authored by Robert Olsson's avatar Robert Olsson Committed by David S. Miller
Browse files

[IPV4]: Add LC-Trie FIB lookup algorithm.

parent 18b504e2
Loading
Loading
Loading
Loading
+26 −0
Original line number Original line Diff line number Diff line
#
#
# 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
+3 −1
Original line number Original line Diff line number Diff line
@@ -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
+12 −0
Original line number Original line Diff line number Diff line
@@ -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();

net/ipv4/fib_trie.c

0 → 100644
+2454 −0

File added.

Preview size limit exceeded, changes collapsed.