at master 1.3 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* OpenVPN data channel offload 3 * 4 * Copyright (C) 2020-2025 OpenVPN, Inc. 5 * 6 * Author: James Yonan <james@openvpn.net> 7 * Antonio Quartulli <antonio@openvpn.net> 8 */ 9 10#ifndef _NET_OVPN_SOCK_H_ 11#define _NET_OVPN_SOCK_H_ 12 13#include <linux/net.h> 14#include <linux/kref.h> 15#include <net/sock.h> 16 17struct ovpn_priv; 18struct ovpn_peer; 19 20/** 21 * struct ovpn_socket - a kernel socket referenced in the ovpn code 22 * @ovpn: ovpn instance owning this socket (UDP only) 23 * @dev_tracker: reference tracker for associated dev (UDP only) 24 * @peer: unique peer transmitting over this socket (TCP only) 25 * @sk: the low level sock object 26 * @refcount: amount of contexts currently referencing this object 27 * @work: member used to schedule release routine (it may block) 28 * @tcp_tx_work: work for deferring outgoing packet processing (TCP only) 29 */ 30struct ovpn_socket { 31 union { 32 struct { 33 struct ovpn_priv *ovpn; 34 netdevice_tracker dev_tracker; 35 }; 36 struct ovpn_peer *peer; 37 }; 38 39 struct sock *sk; 40 struct kref refcount; 41 struct work_struct work; 42 struct work_struct tcp_tx_work; 43}; 44 45struct ovpn_socket *ovpn_socket_new(struct socket *sock, 46 struct ovpn_peer *peer); 47void ovpn_socket_release(struct ovpn_peer *peer); 48 49#endif /* _NET_OVPN_SOCK_H_ */