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 17 struct ovpn_priv; 18 struct 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 */ 30 struct 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 45 struct ovpn_socket *ovpn_socket_new(struct socket *sock, 46 struct ovpn_peer *peer); 47 void ovpn_socket_release(struct ovpn_peer *peer); 48 49 #endif /* _NET_OVPN_SOCK_H_ */ 50