xref: /linux/drivers/net/ovpn/socket.h (revision 2c7e4a2663a1ab5a740c59c31991579b6b865a26)
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