diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2022-01-25 19:55:54 +0100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2022-01-26 16:30:59 +0100 |
commit | 1776de0140fb663777d4590fbb849c1d0a0c7885 (patch) | |
tree | 397ae4d1a18f823bb253135027574fb9527a6b7b /netlink.c | |
parent | daf8d057cebf4b304c11b10cd6e6c98e19710630 (diff) | |
download | passt-1776de0140fb663777d4590fbb849c1d0a0c7885.tar passt-1776de0140fb663777d4590fbb849c1d0a0c7885.tar.gz passt-1776de0140fb663777d4590fbb849c1d0a0c7885.tar.bz2 passt-1776de0140fb663777d4590fbb849c1d0a0c7885.tar.lz passt-1776de0140fb663777d4590fbb849c1d0a0c7885.tar.xz passt-1776de0140fb663777d4590fbb849c1d0a0c7885.tar.zst passt-1776de0140fb663777d4590fbb849c1d0a0c7885.zip |
tcp, netlink, HAS{BYTES_ACKED,MIN_RTT,GETRANDOM} and NETLINK_GET_STRICT_CHK
tcpi_bytes_acked and tcpi_min_rtt are only available on recent
kernel versions: provide fall-back paths (incurring some grade of
performance penalty).
Support for getrandom() was introduced in Linux 3.17 and glibc 2.25:
provide an alternate mechanism for that as well, reading from
/dev/random.
Also check if NETLINK_GET_STRICT_CHK is defined before using it:
it's not strictly needed, we'll filter out irrelevant results from
netlink anyway.
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'netlink.c')
-rw-r--r-- | netlink.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -46,7 +46,10 @@ static int nl_seq; static int nl_sock_init_do(void *arg) { struct sockaddr_nl addr = { .nl_family = AF_NETLINK, }; - int *s = &nl_sock, v = 1; + int *s = &nl_sock; +#ifdef NETLINK_GET_STRICT_CHK + int y = 1; +#endif ns: if (((*s) = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE)) < 0 || @@ -56,7 +59,9 @@ ns: if (*s == -1 || !arg || s == &nl_sock_ns) return 0; - setsockopt(*s, SOL_NETLINK, NETLINK_GET_STRICT_CHK, &v, sizeof(v)); +#ifdef NETLINK_GET_STRICT_CHK + setsockopt(*s, SOL_NETLINK, NETLINK_GET_STRICT_CHK, &y, sizeof(y)); +#endif ns_enter((struct ctx *)arg); s = &nl_sock_ns; |