opnsense-src/sys/compat/linux
Gleb Smirnoff 17083b94a9 netlink: use protocol specific receive buffer
Implement Netlink socket receive buffer as a simple TAILQ of nl_buf's,
same part of struct sockbuf that is used for send buffer already.
This shaves a lot of code and a lot of extra processing.  The pcb rids
of the I/O queues as the socket buffer is exactly the queue.  The
message writer is simplified a lot, as we now always deal with linear
buf.  Notion of different buffer types goes away as way as different
kinds of writers.  The only things remaining are: a socket writer and
a group writer.
The impact on the network stack is that we no longer use mbufs, so
a workaround from d187154750 disappears.

Note on message throttling.  Now the taskqueue throttling mechanism
needs to look at both socket buffers protected by their respective
locks and on flags in the pcb that are protected by the pcb lock.
There is definitely some room for optimization, but this changes tries
to preserve as much as possible.

Note on new nl_soreceive().  It emulates soreceive_generic().  It
must undergo further optimization, see large comment put in there.

Note on tests/sys/netlink/test_netlink_message_writer.py. This test
boiled down almost to nothing with mbufs removed.  However, I left
it with minimal functionality (it basically checks that allocating N
bytes we get N bytes) as it is one of not so many examples of ktest
framework that allows to test KPIs with python.

Note on Linux support. It got much simplier: Netlink message writer
loses notion of Linux support lifetime, it is same regardless of
process ABI.  On socket write from Linux process we perform
conversion immediately in nl_receive_message() and on an output
conversion to Linux happens in in nl_send_one(). XXX: both
conversions use M_NOWAIT allocation, which used to be the case
before this change, too.

Reviewed by:		melifaro
Differential Revision:	https://reviews.freebsd.org/D42524
2024-01-02 13:04:01 -08:00
..
check_error.d sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
check_internal_locks.d sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
linux.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux.h linux(4): Update my copyrights, add SPDX tag 2023-08-17 23:54:36 +03:00
linux_common.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_common.h sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
linux_dtrace.h sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
linux_dummy.c linux(4): Update syscalls.master to 6.5 2023-09-25 12:24:58 +03:00
linux_elf.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_elf.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
linux_elf32.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_elf64.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_emul.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_emul.h sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
linux_errno.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_errno.h sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
linux_errno.inc sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
linux_event.c linux(4): Convert flags in timerfd_create 2023-09-05 11:53:02 +03:00
linux_event.h linux(4): Convert flags in timerfd_create 2023-09-05 11:53:02 +03:00
linux_file.c linux(4): Replace linux32_copyinuio by freebsd32_copyinuio 2023-08-20 10:36:32 +03:00
linux_file.h linux(4): Add a write syscall wrapper 2023-08-20 10:36:29 +03:00
linux_fork.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_fork.h linux(4): Update my copyrights, add SPDX tag 2023-08-17 23:54:36 +03:00
linux_futex.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_futex.h sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
linux_getcwd.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_ioctl.c linux: Check for copyout errors in ioctl handlers 2023-12-27 10:13:15 -05:00
linux_ioctl.h linux(4): Add 2 Linux socket ioctl commands 2023-08-17 22:57:16 +03:00
linux_ipc.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_ipc.h sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
linux_ipc64.h linux(4): Fix semid64_ds structure layout 2023-10-04 21:21:12 +03:00
linux_mib.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_mib.h sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
linux_misc.c linux(4): Deorbit linux_nosys 2023-10-03 10:38:03 +03:00
linux_misc.h sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
linux_mmap.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_mmap.h sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
linux_netlink.c netlink: use protocol specific receive buffer 2024-01-02 13:04:01 -08:00
linux_persona.h linux(4): Fix leftovers after 2ff63af9 2023-08-17 23:54:00 +03:00
linux_ptrace.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_rseq.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_siginfo.h sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
linux_signal.c linux(4): On Linux SIGKILL can not be reset to default 2023-09-18 17:53:01 +03:00
linux_signal.h linux(4): Staticize lsiginfo_to_siginfo 2023-09-18 17:52:43 +03:00
linux_socket.c linux/netlink: don't override sopt level 2023-12-26 20:21:58 -08:00
linux_socket.h linux(4): Drop bogus __arm__ condition due to lack of 32-bit arm support 2023-08-17 22:57:17 +03:00
linux_stats.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_sysctl.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_time.c sys: Remove $FreeBSD$: one-line .c pattern 2023-08-16 11:54:36 -06:00
linux_time.h sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
linux_timer.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_uid16.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_util.c linux(4): Follow style(9), don't include both sys/param.h and sys/types.h 2023-08-18 15:58:32 +03:00
linux_util.h sys: Remove $FreeBSD$: one-line .h pattern 2023-08-16 11:54:18 -06:00
linux_vdso.c linux(4): Remove sys/cdefs.h inclusion where it's not needed due to 685dc743 2023-08-18 13:12:02 +03:00
linux_vdso.h linux(4): Remove include of sys/types.h from linux_vdso.h 2023-08-18 15:58:32 +03:00
linux_vdso_gtod.inc linux(4): Fix linker warning about undefined vdso symbols 2023-08-20 00:48:36 +03:00
linux_videodev2_compat.h linux(4): Fix leftovers after 2ff63af9 2023-08-17 23:54:00 +03:00
linux_videodev_compat.h linux(4): Fix leftovers after 2ff63af9 2023-08-17 23:54:00 +03:00
linux_xattr.c linux(4): Return ENOTSUP from listxattr instead of EPERM 2023-09-05 11:52:27 +03:00
stats_timing.d sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00
trace_futexes.d sys: Remove $FreeBSD$: two-line .h pattern 2023-08-16 11:54:11 -06:00