diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-05-03 15:48:39 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-05-03 16:03:02 +0200 |
commit | 280bee380d98ef725af55463f4fa50246ebb8fc3 (patch) | |
tree | 6e2ee518369017768728adab0b75801e1e047143 | |
parent | version: bump (diff) | |
download | wireguard-freebsd-280bee380d98ef725af55463f4fa50246ebb8fc3.tar.xz wireguard-freebsd-280bee380d98ef725af55463f4fa50246ebb8fc3.zip |
if_wg: put event notifiers in main loop
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r-- | src/if_wg.c | 21 | ||||
-rw-r--r-- | src/wg_noise.c | 3 |
2 files changed, 9 insertions, 15 deletions
diff --git a/src/if_wg.c b/src/if_wg.c index c0fb132..678f1d1 100644 --- a/src/if_wg.c +++ b/src/if_wg.c @@ -1662,7 +1662,6 @@ wg_deliver_out(struct wg_peer *peer) struct wg_packet *pkt; struct mbuf *m; int rc, len; - bool data_sent = false; wg_peer_get_endpoint(peer, &endpoint); @@ -1680,7 +1679,7 @@ wg_deliver_out(struct wg_peer *peer) wg_timers_event_any_authenticated_packet_traversal(peer); wg_timers_event_any_authenticated_packet_sent(peer); if (len > (sizeof(struct wg_pkt_data) + NOISE_AUTHTAG_LEN)) - data_sent = true; + wg_timers_event_data_sent(peer); counter_u64_add(peer->p_tx_bytes, len); } else if (rc == EADDRNOTAVAIL) { wg_peer_clear_src(peer); @@ -1690,16 +1689,13 @@ wg_deliver_out(struct wg_peer *peer) goto error; } wg_packet_free(pkt); + if (noise_keep_key_fresh_send(peer->p_remote)) + wg_timers_event_want_initiation(peer); continue; error: if_inc_counter(sc->sc_ifp, IFCOUNTER_OERRORS, 1); wg_packet_free(pkt); } - - if (data_sent) - wg_timers_event_data_sent(peer); - if (noise_keep_key_fresh_send(peer->p_remote)) - wg_timers_event_want_initiation(peer); } static void @@ -1710,7 +1706,6 @@ wg_deliver_in(struct wg_peer *peer) struct wg_packet *pkt; struct mbuf *m; struct epoch_tracker et; - bool data_recv = false; while ((pkt = wg_queue_dequeue_serial(&peer->p_decrypt_serial)) != NULL) { if (pkt->p_state != WG_PACKET_CRYPTED) @@ -1738,7 +1733,6 @@ wg_deliver_in(struct wg_peer *peer) MPASS(pkt->p_af == AF_INET || pkt->p_af == AF_INET6); pkt->p_mbuf = NULL; - data_recv = true; m->m_pkthdr.rcvif = ifp; @@ -1754,18 +1748,17 @@ wg_deliver_in(struct wg_peer *peer) CURVNET_RESTORE(); NET_EPOCH_EXIT(et); + wg_timers_event_data_received(peer); + done: + if (noise_keep_key_fresh_recv(peer->p_remote)) + wg_timers_event_want_initiation(peer); wg_packet_free(pkt); continue; error: if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); wg_packet_free(pkt); } - - if (data_recv) - wg_timers_event_data_received(peer); - if (noise_keep_key_fresh_recv(peer->p_remote)) - wg_timers_event_want_initiation(peer); } static struct wg_packet * diff --git a/src/wg_noise.c b/src/wg_noise.c index f2c48dd..cb9f525 100644 --- a/src/wg_noise.c +++ b/src/wg_noise.c @@ -434,7 +434,8 @@ noise_remote_index_lookup(struct noise_local *l, uint32_t idx0, bool lookup_keyp } struct noise_remote * -noise_remote_index(struct noise_local *l, uint32_t idx) { +noise_remote_index(struct noise_local *l, uint32_t idx) +{ return noise_remote_index_lookup(l, idx, true); } |