162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef _WG_TIMERS_H
762306a36Sopenharmony_ci#define _WG_TIMERS_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/ktime.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_cistruct wg_peer;
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_civoid wg_timers_init(struct wg_peer *peer);
1462306a36Sopenharmony_civoid wg_timers_stop(struct wg_peer *peer);
1562306a36Sopenharmony_civoid wg_timers_data_sent(struct wg_peer *peer);
1662306a36Sopenharmony_civoid wg_timers_data_received(struct wg_peer *peer);
1762306a36Sopenharmony_civoid wg_timers_any_authenticated_packet_sent(struct wg_peer *peer);
1862306a36Sopenharmony_civoid wg_timers_any_authenticated_packet_received(struct wg_peer *peer);
1962306a36Sopenharmony_civoid wg_timers_handshake_initiated(struct wg_peer *peer);
2062306a36Sopenharmony_civoid wg_timers_handshake_complete(struct wg_peer *peer);
2162306a36Sopenharmony_civoid wg_timers_session_derived(struct wg_peer *peer);
2262306a36Sopenharmony_civoid wg_timers_any_authenticated_packet_traversal(struct wg_peer *peer);
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cistatic inline bool wg_birthdate_has_expired(u64 birthday_nanoseconds,
2562306a36Sopenharmony_ci					    u64 expiration_seconds)
2662306a36Sopenharmony_ci{
2762306a36Sopenharmony_ci	return (s64)(birthday_nanoseconds + expiration_seconds * NSEC_PER_SEC)
2862306a36Sopenharmony_ci		<= (s64)ktime_get_coarse_boottime_ns();
2962306a36Sopenharmony_ci}
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci#endif /* _WG_TIMERS_H */
32