From a6e4ec487debf11785b3f82a8c821ae9b7356024 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Tue, 22 Jan 2019 13:38:52 +0100 Subject: [PATCH] netlink: use __kernel_timespec for handshake time Signed-off-by: Jason A. Donenfeld --- contrib/embeddable-wg-library/wireguard.h | 8 +++++++- src/containers.h | 8 +++++++- src/ipc.c | 4 ++-- src/show.c | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/contrib/embeddable-wg-library/wireguard.h b/contrib/embeddable-wg-library/wireguard.h index 9ebe47c..e7a1bbf 100644 --- a/contrib/embeddable-wg-library/wireguard.h +++ b/contrib/embeddable-wg-library/wireguard.h @@ -16,6 +16,12 @@ typedef uint8_t wg_key[32]; typedef char wg_key_b64_string[((sizeof(wg_key) + 2) / 3) * 4 + 1]; +/* Cross platform __kernel_timespec */ +struct timespec64 { + int64_t tv_sec; + int64_t tv_nsec; +}; + typedef struct wg_allowedip { uint16_t family; union { @@ -46,7 +52,7 @@ typedef struct wg_peer { struct sockaddr_in6 addr6; } endpoint; - struct timespec last_handshake_time; + struct timespec64 last_handshake_time; uint64_t rx_bytes, tx_bytes; uint16_t persistent_keepalive_interval; diff --git a/src/containers.h b/src/containers.h index 2144052..59a213e 100644 --- a/src/containers.h +++ b/src/containers.h @@ -15,6 +15,12 @@ #include "../uapi/wireguard.h" +/* Cross platform __kernel_timespec */ +struct timespec64 { + int64_t tv_sec; + int64_t tv_nsec; +}; + struct wgallowedip { uint16_t family; union { @@ -45,7 +51,7 @@ struct wgpeer { struct sockaddr_in6 addr6; } endpoint; - struct timespec last_handshake_time; + struct timespec64 last_handshake_time; uint64_t rx_bytes, tx_bytes; uint16_t persistent_keepalive_interval; diff --git a/src/ipc.c b/src/ipc.c index da31eff..7ab3a62 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -420,9 +420,9 @@ static int userspace_get_device(struct wgdevice **out, const char *interface) if (*end || allowedip->family == AF_UNSPEC || (allowedip->family == AF_INET6 && allowedip->cidr > 128) || (allowedip->family == AF_INET && allowedip->cidr > 32)) break; } else if (peer && !strcmp(key, "last_handshake_time_sec")) - peer->last_handshake_time.tv_sec = NUM(0xffffffffffffffffULL); + peer->last_handshake_time.tv_sec = NUM(0x7fffffffffffffffULL); else if (peer && !strcmp(key, "last_handshake_time_nsec")) - peer->last_handshake_time.tv_nsec = NUM(0xffffffffffffffffULL); + peer->last_handshake_time.tv_nsec = NUM(0x7fffffffffffffffULL); else if (peer && !strcmp(key, "rx_bytes")) peer->rx_bytes = NUM(0xffffffffffffffffULL); else if (peer && !strcmp(key, "tx_bytes")) diff --git a/src/show.c b/src/show.c index ba6f115..4cc34ab 100644 --- a/src/show.c +++ b/src/show.c @@ -155,7 +155,7 @@ static size_t pretty_time(char *buf, const size_t len, unsigned long long left) return offset; } -static char *ago(const struct timespec *t) +static char *ago(const struct timespec64 *t) { static char buf[1024]; size_t offset;