#include <linux/err.h>
#include <linux/kernel.h>
#include <linux/netdevice.h>
#include <net/addrconf.h>
#include <net/dst.h>
#include <net/xfrm.h>
#include <net/ip.h>
#include <net/ipv6.h>
#include <net/ip6_route.h>
#include <net/l3mdev.h>
static struct dst_entry *xfrm6_dst_lookup(struct net *net, int tos, int oif,
const xfrm_address_t *saddr,
const xfrm_address_t *daddr,
u32 mark)
{ … }
static int xfrm6_get_saddr(struct net *net, int oif,
xfrm_address_t *saddr, xfrm_address_t *daddr,
u32 mark)
{ … }
static int xfrm6_fill_dst(struct xfrm_dst *xdst, struct net_device *dev,
const struct flowi *fl)
{ … }
static void xfrm6_update_pmtu(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb, u32 mtu,
bool confirm_neigh)
{ … }
static void xfrm6_redirect(struct dst_entry *dst, struct sock *sk,
struct sk_buff *skb)
{ … }
static void xfrm6_dst_destroy(struct dst_entry *dst)
{ … }
static void xfrm6_dst_ifdown(struct dst_entry *dst, struct net_device *dev)
{ … }
static struct dst_ops xfrm6_dst_ops_template = …;
static const struct xfrm_policy_afinfo xfrm6_policy_afinfo = …;
static int __init xfrm6_policy_init(void)
{ … }
static void xfrm6_policy_fini(void)
{ … }
#ifdef CONFIG_SYSCTL
static struct ctl_table xfrm6_policy_table[] = …;
static int __net_init xfrm6_net_sysctl_init(struct net *net)
{ … }
static void __net_exit xfrm6_net_sysctl_exit(struct net *net)
{ … }
#else
static inline int xfrm6_net_sysctl_init(struct net *net)
{
return 0;
}
static inline void xfrm6_net_sysctl_exit(struct net *net)
{
}
#endif
static int __net_init xfrm6_net_init(struct net *net)
{ … }
static void __net_exit xfrm6_net_exit(struct net *net)
{ … }
static struct pernet_operations xfrm6_net_ops = …;
int __init xfrm6_init(void)
{ … }
void xfrm6_fini(void)
{ … }