#include <linux/init.h>
#include <linux/mutex.h>
#include <linux/skbuff.h>
#include <net/icmp.h>
#include <net/ip.h>
#include <net/protocol.h>
#include <net/xfrm.h>
static struct xfrm4_protocol __rcu *esp4_handlers __read_mostly;
static struct xfrm4_protocol __rcu *ah4_handlers __read_mostly;
static struct xfrm4_protocol __rcu *ipcomp4_handlers __read_mostly;
static DEFINE_MUTEX(xfrm4_protocol_mutex);
static inline struct xfrm4_protocol __rcu **proto_handlers(u8 protocol)
{ … }
#define for_each_protocol_rcu(head, handler) … \
static int xfrm4_rcv_cb(struct sk_buff *skb, u8 protocol, int err)
{ … }
int xfrm4_rcv_encap(struct sk_buff *skb, int nexthdr, __be32 spi,
int encap_type)
{ … }
EXPORT_SYMBOL(…);
static int xfrm4_esp_rcv(struct sk_buff *skb)
{ … }
static int xfrm4_esp_err(struct sk_buff *skb, u32 info)
{ … }
static int xfrm4_ah_rcv(struct sk_buff *skb)
{ … }
static int xfrm4_ah_err(struct sk_buff *skb, u32 info)
{ … }
static int xfrm4_ipcomp_rcv(struct sk_buff *skb)
{ … }
static int xfrm4_ipcomp_err(struct sk_buff *skb, u32 info)
{ … }
static const struct net_protocol esp4_protocol = …;
static const struct net_protocol ah4_protocol = …;
static const struct net_protocol ipcomp4_protocol = …;
static const struct xfrm_input_afinfo xfrm4_input_afinfo = …;
static inline const struct net_protocol *netproto(unsigned char protocol)
{ … }
int xfrm4_protocol_register(struct xfrm4_protocol *handler,
unsigned char protocol)
{ … }
EXPORT_SYMBOL(…);
int xfrm4_protocol_deregister(struct xfrm4_protocol *handler,
unsigned char protocol)
{ … }
EXPORT_SYMBOL(…);
void __init xfrm4_protocol_init(void)
{ … }