/* * INET An implementation of the TCP/IP protocol suite for the LINUX * operating system. INET is implemented using the BSD Socket * interface as the means of communication with the user level. * * IPv4 Forwarding Information Base: semantics. * * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. */#include<asm/uaccess.h>#include<linux/bitops.h>#include<linux/types.h>#include<linux/kernel.h>#include<linux/jiffies.h>#include<linux/mm.h>#include<linux/string.h>#include<linux/socket.h>#include<linux/sockios.h>#include<linux/errno.h>#include<linux/in.h>#include<linux/inet.h>#include<linux/inetdevice.h>#include<linux/netdevice.h>#include<linux/if_arp.h>#include<linux/proc_fs.h>#include<linux/skbuff.h>#include<linux/init.h>#include<linux/slab.h>#include<net/arp.h>#include<net/ip.h>#include<net/protocol.h>#include<net/route.h>#include<net/tcp.h>#include<net/sock.h>#include<net/ip_fib.h>#include<net/netlink.h>#include<net/nexthop.h>#include<net/lwtunnel.h>#include"fib_lookup.h"staticDEFINE_SPINLOCK(fib_info_lock);staticstructhlist_head*fib_info_hash;staticstructhlist_head*fib_info_laddrhash;staticunsignedintfib_info_hash_size;staticunsignedintfib_info_cnt;#define DEVINDEX_HASHBITS 8#define DEVINDEX_HASHSIZE (1U << DEVINDEX_HASHBITS)staticstructhlist_headfib_i