#include <linux/errno.h>
#include <linux/module.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <net/dst.h>
#include <net/gso.h>
#include <net/xfrm.h>
#include <linux/notifier.h>
#ifdef CONFIG_XFRM_OFFLOAD
static void __xfrm_transport_prep(struct xfrm_state *x, struct sk_buff *skb,
unsigned int hsize)
{ … }
static void __xfrm_mode_tunnel_prep(struct xfrm_state *x, struct sk_buff *skb,
unsigned int hsize)
{ … }
static void __xfrm_mode_beet_prep(struct xfrm_state *x, struct sk_buff *skb,
unsigned int hsize)
{ … }
static void xfrm_outer_mode_prep(struct xfrm_state *x, struct sk_buff *skb)
{ … }
static inline bool xmit_xfrm_check_overflow(struct sk_buff *skb)
{ … }
struct sk_buff *validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t features, bool *again)
{ … }
EXPORT_SYMBOL_GPL(…);
int xfrm_dev_state_add(struct net *net, struct xfrm_state *x,
struct xfrm_user_offload *xuo,
struct netlink_ext_ack *extack)
{ … }
EXPORT_SYMBOL_GPL(…);
int xfrm_dev_policy_add(struct net *net, struct xfrm_policy *xp,
struct xfrm_user_offload *xuo, u8 dir,
struct netlink_ext_ack *extack)
{ … }
EXPORT_SYMBOL_GPL(…);
bool xfrm_dev_offload_ok(struct sk_buff *skb, struct xfrm_state *x)
{ … }
EXPORT_SYMBOL_GPL(…);
void xfrm_dev_resume(struct sk_buff *skb)
{ … }
EXPORT_SYMBOL_GPL(…);
void xfrm_dev_backlog(struct softnet_data *sd)
{ … }
#endif
static int xfrm_api_check(struct net_device *dev)
{ … }
static int xfrm_dev_down(struct net_device *dev)
{ … }
static int xfrm_dev_event(struct notifier_block *this, unsigned long event, void *ptr)
{ … }
static struct notifier_block xfrm_dev_notifier = …;
void __init xfrm_dev_init(void)
{ … }