netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v16 00/26] Introducing OpenVPN Data Channel Offload
@ 2024-12-19  1:41 Antonio Quartulli
  2024-12-19  1:41 ` [PATCH net-next v16 01/26] net: introduce OpenVPN Data Channel Offload (ovpn) Antonio Quartulli
                   ` (25 more replies)
  0 siblings, 26 replies; 37+ messages in thread
From: Antonio Quartulli @ 2024-12-19  1:41 UTC (permalink / raw)
  To: netdev, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Donald Hunter,
	Antonio Quartulli, Shuah Khan, sd, ryazanov.s.a, Andrew Lunn
  Cc: Simon Horman, linux-kernel, linux-kselftest, Xiao Liang,
	steffen.klassert, antony.antony, Will Deacon, Peter Zijlstra,
	Boqun Feng, Mark Rutland, Andrew Morton, willemdebruijn.kernel,
	David Ahern, Andrew Lunn, Shuah Khan

Notable changes since v15:
* added IPV6 hack in Kconfig
* switched doc '|' operator to '>-' in yaml netlink spec
* added ovpn-mode doc to rt_link.yaml
* implemented rtnl_link_ops.fill_info
* removed ovpn_socket_detach() function because UDP and TCP detachment
  is now happening in different moments
* reworked ovpn_socket lifetime:
** introduced ovpn_socket_release() that depending on transport proto
   will take the right step towards releasing the socket (check large
   comment on top of function for greater details)
** extended comments on various ovpn_socket* functions to ensure socket
   lifecycle is clear
** implemented kref_put_lock() to allow UDP sockets to be detached while
   holding socket lock
** acquired socket lock in ovpn_socket_new() to avoid race with detach
   (point above)
** socket is now released upon peer removal (not upon peer free!)
* added convenient define OVPN_AAD_SIZE
* renamed AUTH_TAG_SIZE to OVPN_AUTH_TAG_SIZE
* s/dev_core_stats_rx_dropped_inc/dev_core_stats_tx_dropped_inc where
  needed
* fixed some typos
* moved tcp_close() call outside of rcu_read_lock area
* moved ovpn_socket creation from ovpn_nl_peer_modify() to
  ovpn_nl_peer_new_doit() to make smatch happy (ovpn_socket_new() may
  have been called under spinlock, but it may sleep)
* added support for MSG_NOSIGNAL flag in TCP calls (required extending
  the skb API)
* improved TCP proto/ops customization (required exporting
  inet6_stream_ops)
* changed kselftest tool (ovpn-cli.c) to pass MSG_NOSIGNAL to TCP
  send/recv calls.

The ovpn_socket lifecycle changes above address the race conditions
previously reported by Sabrina.

Hopefully all though nuts have been cracked at this point.

Please note that some patches were already reviewed by Andre Lunn,
Donald Hunter and Shuah Khan. They have retained the Reviewed-by tag
since no major code modification has happened since the review.

The latest code can also be found at:

https://github.com/OpenVPN/linux-kernel-ovpn

Thanks a lot!
Best Regards,

Antonio Quartulli
OpenVPN Inc.

---
Antonio Quartulli (26):
      net: introduce OpenVPN Data Channel Offload (ovpn)
      ovpn: add basic netlink support
      ovpn: add basic interface creation/destruction/management routines
      ovpn: keep carrier always on for MP interfaces
      ovpn: introduce the ovpn_peer object
      kref/refcount: implement kref_put_sock()
      ovpn: introduce the ovpn_socket object
      ovpn: implement basic TX path (UDP)
      ovpn: implement basic RX path (UDP)
      ovpn: implement packet processing
      ovpn: store tunnel and transport statistics
      ipv6: export inet6_stream_ops via EXPORT_SYMBOL_GPL
      ovpn: implement TCP transport
      skb: implement skb_send_sock_locked_with_flags()
      ovpn: add support for MSG_NOSIGNAL in tcp_sendmsg
      ovpn: implement multi-peer support
      ovpn: implement peer lookup logic
      ovpn: implement keepalive mechanism
      ovpn: add support for updating local UDP endpoint
      ovpn: add support for peer floating
      ovpn: implement peer add/get/dump/delete via netlink
      ovpn: implement key add/get/del/swap via netlink
      ovpn: kill key and notify userspace in case of IV exhaustion
      ovpn: notify userspace when a peer is deleted
      ovpn: add basic ethtool support
      testing/selftests: add test tool and scripts for ovpn module

 Documentation/netlink/specs/ovpn.yaml              |  372 +++
 Documentation/netlink/specs/rt_link.yaml           |   16 +
 MAINTAINERS                                        |   11 +
 drivers/net/Kconfig                                |   15 +
 drivers/net/Makefile                               |    1 +
 drivers/net/ovpn/Makefile                          |   22 +
 drivers/net/ovpn/bind.c                            |   55 +
 drivers/net/ovpn/bind.h                            |  101 +
 drivers/net/ovpn/crypto.c                          |  211 ++
 drivers/net/ovpn/crypto.h                          |  145 ++
 drivers/net/ovpn/crypto_aead.c                     |  382 ++++
 drivers/net/ovpn/crypto_aead.h                     |   33 +
 drivers/net/ovpn/io.c                              |  446 ++++
 drivers/net/ovpn/io.h                              |   34 +
 drivers/net/ovpn/main.c                            |  350 +++
 drivers/net/ovpn/main.h                            |   14 +
 drivers/net/ovpn/netlink-gen.c                     |  213 ++
 drivers/net/ovpn/netlink-gen.h                     |   41 +
 drivers/net/ovpn/netlink.c                         | 1178 ++++++++++
 drivers/net/ovpn/netlink.h                         |   18 +
 drivers/net/ovpn/ovpnstruct.h                      |   57 +
 drivers/net/ovpn/peer.c                            | 1256 +++++++++++
 drivers/net/ovpn/peer.h                            |  159 ++
 drivers/net/ovpn/pktid.c                           |  129 ++
 drivers/net/ovpn/pktid.h                           |   87 +
 drivers/net/ovpn/proto.h                           |  118 +
 drivers/net/ovpn/skb.h                             |   60 +
 drivers/net/ovpn/socket.c                          |  237 ++
 drivers/net/ovpn/socket.h                          |   45 +
 drivers/net/ovpn/stats.c                           |   21 +
 drivers/net/ovpn/stats.h                           |   47 +
 drivers/net/ovpn/tcp.c                             |  567 +++++
 drivers/net/ovpn/tcp.h                             |   33 +
 drivers/net/ovpn/udp.c                             |  392 ++++
 drivers/net/ovpn/udp.h                             |   23 +
 include/linux/kref.h                               |   11 +
 include/linux/refcount.h                           |    3 +
 include/linux/skbuff.h                             |    2 +
 include/uapi/linux/if_link.h                       |   15 +
 include/uapi/linux/ovpn.h                          |  111 +
 include/uapi/linux/udp.h                           |    1 +
 lib/refcount.c                                     |   32 +
 net/core/skbuff.c                                  |   18 +-
 net/ipv6/af_inet6.c                                |    1 +
 tools/testing/selftests/Makefile                   |    1 +
 tools/testing/selftests/net/ovpn/.gitignore        |    2 +
 tools/testing/selftests/net/ovpn/Makefile          |   17 +
 tools/testing/selftests/net/ovpn/config            |   10 +
 tools/testing/selftests/net/ovpn/data64.key        |    5 +
 tools/testing/selftests/net/ovpn/ovpn-cli.c        | 2366 ++++++++++++++++++++
 tools/testing/selftests/net/ovpn/tcp_peers.txt     |    5 +
 .../testing/selftests/net/ovpn/test-chachapoly.sh  |    9 +
 tools/testing/selftests/net/ovpn/test-float.sh     |    9 +
 tools/testing/selftests/net/ovpn/test-tcp.sh       |    9 +
 tools/testing/selftests/net/ovpn/test.sh           |  182 ++
 tools/testing/selftests/net/ovpn/udp_peers.txt     |    5 +
 56 files changed, 9698 insertions(+), 5 deletions(-)
---
base-commit: 4b252f2dab2ebb654eebbb2aee980ab8373b2295
change-id: 20241002-b4-ovpn-eeee35c694a2

Best regards,
-- 
Antonio Quartulli <antonio@openvpn.net>


^ permalink raw reply	[flat|nested] 37+ messages in thread

end of thread, other threads:[~2025-01-09 11:29 UTC | newest]

Thread overview: 37+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-19  1:41 [PATCH net-next v16 00/26] Introducing OpenVPN Data Channel Offload Antonio Quartulli
2024-12-19  1:41 ` [PATCH net-next v16 01/26] net: introduce OpenVPN Data Channel Offload (ovpn) Antonio Quartulli
2024-12-19  1:41 ` [PATCH net-next v16 02/26] ovpn: add basic netlink support Antonio Quartulli
2024-12-20 11:00   ` Donald Hunter
2024-12-19  1:41 ` [PATCH net-next v16 03/26] ovpn: add basic interface creation/destruction/management routines Antonio Quartulli
2024-12-20 11:06   ` Donald Hunter
2024-12-19  1:41 ` [PATCH net-next v16 04/26] ovpn: keep carrier always on for MP interfaces Antonio Quartulli
2024-12-19  1:41 ` [PATCH net-next v16 05/26] ovpn: introduce the ovpn_peer object Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 06/26] kref/refcount: implement kref_put_sock() Antonio Quartulli
2024-12-19 17:20   ` Will Deacon
2024-12-31  7:31     ` Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 07/26] ovpn: introduce the ovpn_socket object Antonio Quartulli
2025-01-03 17:00   ` Sabrina Dubroca
2025-01-05 23:27     ` Antonio Quartulli
2025-01-08 10:55       ` Antonio Quartulli
2025-01-09 11:28       ` Sabrina Dubroca
2024-12-19  1:42 ` [PATCH net-next v16 08/26] ovpn: implement basic TX path (UDP) Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 09/26] ovpn: implement basic RX " Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 10/26] ovpn: implement packet processing Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 11/26] ovpn: store tunnel and transport statistics Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 12/26] ipv6: export inet6_stream_ops via EXPORT_SYMBOL_GPL Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 13/26] ovpn: implement TCP transport Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 14/26] skb: implement skb_send_sock_locked_with_flags() Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 15/26] ovpn: add support for MSG_NOSIGNAL in tcp_sendmsg Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 16/26] ovpn: implement multi-peer support Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 17/26] ovpn: implement peer lookup logic Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 18/26] ovpn: implement keepalive mechanism Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 19/26] ovpn: add support for updating local UDP endpoint Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 20/26] ovpn: add support for peer floating Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 21/26] ovpn: implement peer add/get/dump/delete via netlink Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 22/26] ovpn: implement key add/get/del/swap " Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 23/26] ovpn: kill key and notify userspace in case of IV exhaustion Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 24/26] ovpn: notify userspace when a peer is deleted Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 25/26] ovpn: add basic ethtool support Antonio Quartulli
2024-12-19  1:42 ` [PATCH net-next v16 26/26] testing/selftests: add test tool and scripts for ovpn module Antonio Quartulli
2024-12-20  4:02   ` Jakub Kicinski
2024-12-31  7:42     ` Antonio Quartulli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).