diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2024-11-08 13:53:28 +1100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2024-11-08 08:26:15 +0100 |
commit | d64f25724399fbb4ba9d36eda7e17984a4c6c91c (patch) | |
tree | 080066a942830eb79b9abbb8fd4d4b7d213a3360 | |
parent | b84cd05098275a7625223141d019f8af5a17323b (diff) | |
download | passt-d64f25724399fbb4ba9d36eda7e17984a4c6c91c.tar passt-d64f25724399fbb4ba9d36eda7e17984a4c6c91c.tar.gz passt-d64f25724399fbb4ba9d36eda7e17984a4c6c91c.tar.bz2 passt-d64f25724399fbb4ba9d36eda7e17984a4c6c91c.tar.lz passt-d64f25724399fbb4ba9d36eda7e17984a4c6c91c.tar.xz passt-d64f25724399fbb4ba9d36eda7e17984a4c6c91c.tar.zst passt-d64f25724399fbb4ba9d36eda7e17984a4c6c91c.zip |
linux_dep: Move close_range() conditional handling to linux_dep.h
util.h has some #ifdefs and weak definitions to handle compatibility with
various kernel versions. Move this to linux_dep.h which handles several
other similar cases.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r-- | linux_dep.h | 20 | ||||
-rw-r--r-- | util.c | 1 | ||||
-rw-r--r-- | util.h | 19 |
3 files changed, 21 insertions, 19 deletions
diff --git a/linux_dep.h b/linux_dep.h index eae9c3c..3a41e42 100644 --- a/linux_dep.h +++ b/linux_dep.h @@ -125,4 +125,24 @@ struct tcp_info_linux { #define FALLOC_FL_COLLAPSE_RANGE 0x08 #endif +#include <linux/close_range.h> + +#ifdef CLOSE_RANGE_UNSHARE /* Linux kernel >= 5.9 */ +/* glibc < 2.34 and musl as of 1.2.5 need these */ +#ifndef SYS_close_range +#define SYS_close_range 436 +#endif +__attribute__ ((weak)) +/* cppcheck-suppress funcArgNamesDifferent */ +int close_range(unsigned int first, unsigned int last, int flags) { + return syscall(SYS_close_range, first, last, flags); +} +#else +/* No reasonable fallback option */ +/* cppcheck-suppress funcArgNamesDifferent */ +int close_range(unsigned int first, unsigned int last, int flags) { + return 0; +} +#endif + #endif /* LINUX_DEP_H */ @@ -28,6 +28,7 @@ #include <linux/errqueue.h> #include <getopt.h> +#include "linux_dep.h" #include "util.h" #include "iov.h" #include "passt.h" @@ -17,7 +17,6 @@ #include <arpa/inet.h> #include <unistd.h> #include <sys/syscall.h> -#include <linux/close_range.h> #include "log.h" @@ -171,24 +170,6 @@ int do_clone(int (*fn)(void *), char *stack_area, size_t stack_size, int flags, struct ctx; -#ifdef CLOSE_RANGE_UNSHARE /* Linux kernel >= 5.9 */ -/* glibc < 2.34 and musl as of 1.2.5 need these */ -#ifndef SYS_close_range -#define SYS_close_range 436 -#endif -__attribute__ ((weak)) -/* cppcheck-suppress funcArgNamesDifferent */ -int close_range(unsigned int first, unsigned int last, int flags) { - return syscall(SYS_close_range, first, last, flags); -} -#else -/* No reasonable fallback option */ -/* cppcheck-suppress funcArgNamesDifferent */ -int close_range(unsigned int first, unsigned int last, int flags) { - return 0; -} -#endif - int sock_l4_sa(const struct ctx *c, enum epoll_type type, const void *sa, socklen_t sl, const char *ifname, bool v6only, uint32_t data); |