1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #ifndef _WG_TIMERS_H 7*4882a593Smuzhiyun #define _WG_TIMERS_H 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <linux/ktime.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun struct wg_peer; 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun void wg_timers_init(struct wg_peer *peer); 14*4882a593Smuzhiyun void wg_timers_stop(struct wg_peer *peer); 15*4882a593Smuzhiyun void wg_timers_data_sent(struct wg_peer *peer); 16*4882a593Smuzhiyun void wg_timers_data_received(struct wg_peer *peer); 17*4882a593Smuzhiyun void wg_timers_any_authenticated_packet_sent(struct wg_peer *peer); 18*4882a593Smuzhiyun void wg_timers_any_authenticated_packet_received(struct wg_peer *peer); 19*4882a593Smuzhiyun void wg_timers_handshake_initiated(struct wg_peer *peer); 20*4882a593Smuzhiyun void wg_timers_handshake_complete(struct wg_peer *peer); 21*4882a593Smuzhiyun void wg_timers_session_derived(struct wg_peer *peer); 22*4882a593Smuzhiyun void wg_timers_any_authenticated_packet_traversal(struct wg_peer *peer); 23*4882a593Smuzhiyun wg_birthdate_has_expired(u64 birthday_nanoseconds,u64 expiration_seconds)24*4882a593Smuzhiyunstatic inline bool wg_birthdate_has_expired(u64 birthday_nanoseconds, 25*4882a593Smuzhiyun u64 expiration_seconds) 26*4882a593Smuzhiyun { 27*4882a593Smuzhiyun return (s64)(birthday_nanoseconds + expiration_seconds * NSEC_PER_SEC) 28*4882a593Smuzhiyun <= (s64)ktime_get_coarse_boottime_ns(); 29*4882a593Smuzhiyun } 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #endif /* _WG_TIMERS_H */ 32