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