#include <linux/netdevice.h>
#include <net/fib_rules.h>
#include <net/l3mdev.h>
static DEFINE_SPINLOCK(l3mdev_lock);
struct l3mdev_handler { … };
static struct l3mdev_handler l3mdev_handlers[L3MDEV_TYPE_MAX + 1];
static int l3mdev_check_type(enum l3mdev_type l3type)
{ … }
int l3mdev_table_lookup_register(enum l3mdev_type l3type,
lookup_by_table_id_t fn)
{ … }
EXPORT_SYMBOL_GPL(…);
void l3mdev_table_lookup_unregister(enum l3mdev_type l3type,
lookup_by_table_id_t fn)
{ … }
EXPORT_SYMBOL_GPL(…);
int l3mdev_ifindex_lookup_by_table_id(enum l3mdev_type l3type,
struct net *net, u32 table_id)
{ … }
EXPORT_SYMBOL_GPL(…);
int l3mdev_master_ifindex_rcu(const struct net_device *dev)
{ … }
EXPORT_SYMBOL_GPL(…);
int l3mdev_master_upper_ifindex_by_index_rcu(struct net *net, int ifindex)
{ … }
EXPORT_SYMBOL_GPL(…);
u32 l3mdev_fib_table_rcu(const struct net_device *dev)
{ … }
EXPORT_SYMBOL_GPL(…);
u32 l3mdev_fib_table_by_index(struct net *net, int ifindex)
{ … }
EXPORT_SYMBOL_GPL(…);
struct dst_entry *l3mdev_link_scope_lookup(struct net *net,
struct flowi6 *fl6)
{ … }
EXPORT_SYMBOL_GPL(…);
int l3mdev_fib_rule_match(struct net *net, struct flowi *fl,
struct fib_lookup_arg *arg)
{ … }
void l3mdev_update_flow(struct net *net, struct flowi *fl)
{ … }
EXPORT_SYMBOL_GPL(…);