aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-05-03 15:48:39 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2021-05-03 16:03:02 +0200
commit280bee380d98ef725af55463f4fa50246ebb8fc3 (patch)
tree6e2ee518369017768728adab0b75801e1e047143 /src
parentversion: bump (diff)
downloadwireguard-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>
Diffstat (limited to 'src')
-rw-r--r--src/if_wg.c21
-rw-r--r--src/wg_noise.c3
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);
}