netlink: use __kernel_timespec for handshake time
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
		
							parent
							
								
									ee88038986
								
							
						
					
					
						commit
						a6e4ec487d
					
				@ -16,6 +16,12 @@
 | 
				
			|||||||
typedef uint8_t wg_key[32];
 | 
					typedef uint8_t wg_key[32];
 | 
				
			||||||
typedef char wg_key_b64_string[((sizeof(wg_key) + 2) / 3) * 4 + 1];
 | 
					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 {
 | 
					typedef struct wg_allowedip {
 | 
				
			||||||
	uint16_t family;
 | 
						uint16_t family;
 | 
				
			||||||
	union {
 | 
						union {
 | 
				
			||||||
@ -46,7 +52,7 @@ typedef struct wg_peer {
 | 
				
			|||||||
		struct sockaddr_in6 addr6;
 | 
							struct sockaddr_in6 addr6;
 | 
				
			||||||
	} endpoint;
 | 
						} endpoint;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct timespec last_handshake_time;
 | 
						struct timespec64 last_handshake_time;
 | 
				
			||||||
	uint64_t rx_bytes, tx_bytes;
 | 
						uint64_t rx_bytes, tx_bytes;
 | 
				
			||||||
	uint16_t persistent_keepalive_interval;
 | 
						uint16_t persistent_keepalive_interval;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -15,6 +15,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "../uapi/wireguard.h"
 | 
					#include "../uapi/wireguard.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Cross platform __kernel_timespec */
 | 
				
			||||||
 | 
					struct timespec64 {
 | 
				
			||||||
 | 
						int64_t tv_sec;
 | 
				
			||||||
 | 
						int64_t tv_nsec;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct wgallowedip {
 | 
					struct wgallowedip {
 | 
				
			||||||
	uint16_t family;
 | 
						uint16_t family;
 | 
				
			||||||
	union {
 | 
						union {
 | 
				
			||||||
@ -45,7 +51,7 @@ struct wgpeer {
 | 
				
			|||||||
		struct sockaddr_in6 addr6;
 | 
							struct sockaddr_in6 addr6;
 | 
				
			||||||
	} endpoint;
 | 
						} endpoint;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct timespec last_handshake_time;
 | 
						struct timespec64 last_handshake_time;
 | 
				
			||||||
	uint64_t rx_bytes, tx_bytes;
 | 
						uint64_t rx_bytes, tx_bytes;
 | 
				
			||||||
	uint16_t persistent_keepalive_interval;
 | 
						uint16_t persistent_keepalive_interval;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -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))
 | 
								if (*end || allowedip->family == AF_UNSPEC || (allowedip->family == AF_INET6 && allowedip->cidr > 128) || (allowedip->family == AF_INET && allowedip->cidr > 32))
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
		} else if (peer && !strcmp(key, "last_handshake_time_sec"))
 | 
							} 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"))
 | 
							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"))
 | 
							else if (peer && !strcmp(key, "rx_bytes"))
 | 
				
			||||||
			peer->rx_bytes = NUM(0xffffffffffffffffULL);
 | 
								peer->rx_bytes = NUM(0xffffffffffffffffULL);
 | 
				
			||||||
		else if (peer && !strcmp(key, "tx_bytes"))
 | 
							else if (peer && !strcmp(key, "tx_bytes"))
 | 
				
			||||||
 | 
				
			|||||||
@ -155,7 +155,7 @@ static size_t pretty_time(char *buf, const size_t len, unsigned long long left)
 | 
				
			|||||||
	return offset;
 | 
						return offset;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static char *ago(const struct timespec *t)
 | 
					static char *ago(const struct timespec64 *t)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static char buf[1024];
 | 
						static char buf[1024];
 | 
				
			||||||
	size_t offset;
 | 
						size_t offset;
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user