#include <net/tcp.h>
#include <net/strparser.h>
#include <net/xfrm.h>
#include <net/esp.h>
#include <net/espintcp.h>
#include <linux/skmsg.h>
#include <net/inet_common.h>
#include <trace/events/sock.h>
#if IS_ENABLED(CONFIG_IPV6)
#include <net/ipv6_stubs.h>
#endif
#include <net/hotdata.h>
static void handle_nonesp(struct espintcp_ctx *ctx, struct sk_buff *skb,
struct sock *sk)
{ … }
static void handle_esp(struct sk_buff *skb, struct sock *sk)
{ … }
static void espintcp_rcv(struct strparser *strp, struct sk_buff *skb)
{ … }
static int espintcp_parse(struct strparser *strp, struct sk_buff *skb)
{ … }
static int espintcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
int flags, int *addr_len)
{ … }
int espintcp_queue_out(struct sock *sk, struct sk_buff *skb)
{ … }
EXPORT_SYMBOL_GPL(…);
#define MAX_ESPINTCP_MSG …
static int espintcp_sendskb_locked(struct sock *sk, struct espintcp_msg *emsg,
int flags)
{ … }
static int espintcp_sendskmsg_locked(struct sock *sk,
struct espintcp_msg *emsg, int flags)
{ … }
static int espintcp_push_msgs(struct sock *sk, int flags)
{ … }
int espintcp_push_skb(struct sock *sk, struct sk_buff *skb)
{ … }
EXPORT_SYMBOL_GPL(…);
static int espintcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
{ … }
static struct proto espintcp_prot __ro_after_init;
static struct proto_ops espintcp_ops __ro_after_init;
static struct proto espintcp6_prot;
static struct proto_ops espintcp6_ops;
static DEFINE_MUTEX(tcpv6_prot_mutex);
static void espintcp_data_ready(struct sock *sk)
{ … }
static void espintcp_tx_work(struct work_struct *work)
{ … }
static void espintcp_write_space(struct sock *sk)
{ … }
static void espintcp_destruct(struct sock *sk)
{ … }
bool tcp_is_ulp_esp(struct sock *sk)
{ … }
EXPORT_SYMBOL_GPL(…);
static void build_protos(struct proto *espintcp_prot,
struct proto_ops *espintcp_ops,
const struct proto *orig_prot,
const struct proto_ops *orig_ops);
static int espintcp_init_sk(struct sock *sk)
{ … }
static void espintcp_release(struct sock *sk)
{ … }
static void espintcp_close(struct sock *sk, long timeout)
{ … }
static __poll_t espintcp_poll(struct file *file, struct socket *sock,
poll_table *wait)
{ … }
static void build_protos(struct proto *espintcp_prot,
struct proto_ops *espintcp_ops,
const struct proto *orig_prot,
const struct proto_ops *orig_ops)
{ … }
static struct tcp_ulp_ops espintcp_ulp __read_mostly = …;
void __init espintcp_init(void)
{ … }