if_wg: put event notifiers in main loop

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld 2021-05-03 15:48:39 +02:00
parent 1a515a5df1
commit 280bee380d
2 changed files with 9 additions and 15 deletions

View File

@ -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 *

View File

@ -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);
}