#include "queueing.h"
#include "device.h"
#include "peer.h"
#include "timers.h"
#include "messages.h"
#include "cookie.h"
#include "socket.h"
#include <linux/ip.h>
#include <linux/ipv6.h>
#include <linux/udp.h>
#include <net/ip_tunnels.h>
static void update_rx_stats(struct wg_peer *peer, size_t len)
{ … }
#define SKB_TYPE_LE32(skb) …
static size_t validate_header_len(struct sk_buff *skb)
{ … }
static int prepare_skb_header(struct sk_buff *skb, struct wg_device *wg)
{ … }
static void wg_receive_handshake_packet(struct wg_device *wg,
struct sk_buff *skb)
{ … }
void wg_packet_handshake_receive_worker(struct work_struct *work)
{ … }
static void keep_key_fresh(struct wg_peer *peer)
{ … }
static bool decrypt_packet(struct sk_buff *skb, struct noise_keypair *keypair)
{ … }
static bool counter_validate(struct noise_replay_counter *counter, u64 their_counter)
{ … }
#include "selftest/counter.c"
static void wg_packet_consume_data_done(struct wg_peer *peer,
struct sk_buff *skb,
struct endpoint *endpoint)
{ … }
int wg_packet_rx_poll(struct napi_struct *napi, int budget)
{ … }
void wg_packet_decrypt_worker(struct work_struct *work)
{ … }
static void wg_packet_consume_data(struct wg_device *wg, struct sk_buff *skb)
{ … }
void wg_packet_receive(struct wg_device *wg, struct sk_buff *skb)
{ … }