#define pr_fmt(fmt) …
#include <crypto/hash.h>
#include <crypto/utils.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <net/ip.h>
#include <net/ah.h>
#include <linux/crypto.h>
#include <linux/pfkeyv2.h>
#include <linux/string.h>
#include <linux/scatterlist.h>
#include <net/ip6_route.h>
#include <net/icmp.h>
#include <net/ipv6.h>
#include <net/protocol.h>
#include <net/xfrm.h>
#define IPV6HDR_BASELEN …
struct tmp_ext { … };
struct ah_skb_cb { … };
#define AH_SKB_CB(__skb) …
static void *ah_alloc_tmp(struct crypto_ahash *ahash, int nfrags,
unsigned int size)
{ … }
static inline struct tmp_ext *ah_tmp_ext(void *base)
{ … }
static inline u8 *ah_tmp_auth(u8 *tmp, unsigned int offset)
{ … }
static inline u8 *ah_tmp_icv(void *tmp, unsigned int offset)
{ … }
static inline struct ahash_request *ah_tmp_req(struct crypto_ahash *ahash,
u8 *icv)
{ … }
static inline struct scatterlist *ah_req_sg(struct crypto_ahash *ahash,
struct ahash_request *req)
{ … }
static bool zero_out_mutable_opts(struct ipv6_opt_hdr *opthdr)
{ … }
#if IS_ENABLED(CONFIG_IPV6_MIP6)
static void ipv6_rearrange_destopt(struct ipv6hdr *iph, struct ipv6_opt_hdr *destopt)
{ … }
#else
static void ipv6_rearrange_destopt(struct ipv6hdr *iph, struct ipv6_opt_hdr *destopt) {}
#endif
static void ipv6_rearrange_rthdr(struct ipv6hdr *iph, struct ipv6_rt_hdr *rthdr)
{ … }
static int ipv6_clear_mutable_options(struct ipv6hdr *iph, int len, int dir)
{ … }
static void ah6_output_done(void *data, int err)
{ … }
static int ah6_output(struct xfrm_state *x, struct sk_buff *skb)
{ … }
static void ah6_input_done(void *data, int err)
{ … }
static int ah6_input(struct xfrm_state *x, struct sk_buff *skb)
{ … }
static int ah6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
u8 type, u8 code, int offset, __be32 info)
{ … }
static int ah6_init_state(struct xfrm_state *x, struct netlink_ext_ack *extack)
{ … }
static void ah6_destroy(struct xfrm_state *x)
{ … }
static int ah6_rcv_cb(struct sk_buff *skb, int err)
{ … }
static const struct xfrm_type ah6_type = …;
static struct xfrm6_protocol ah6_protocol = …;
static int __init ah6_init(void)
{ … }
static void __exit ah6_fini(void)
{ … }
module_init(…) …;
module_exit(ah6_fini);
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_ALIAS_XFRM_TYPE(…);