+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2022 Felix Fietkau <nbd@nbd.name>
+ */
#include "unetd.h"
static const struct wg_ops *wg_get_ops(struct network *net)
net->wg.ops->cleanup(net);
}
+static void
+wg_peer_set_connected(struct network *net, struct network_peer *peer, bool val)
+{
+ if (peer->state.connected == val)
+ return;
+
+ peer->state.connected = val;
+ network_services_peer_update(net, peer);
+}
+
struct network_peer *wg_peer_update_start(struct network *net, const uint8_t *key)
{
struct network_peer *peer;
peer->state.handshake = false;
peer->state.idle++;
if (peer->state.idle >= 2 * net->net_config.keepalive)
- peer->state.connected = false;
+ wg_peer_set_connected(net, peer, false);
if (peer->state.idle > net->net_config.keepalive)
network_pex_event(net, peer, PEX_EV_PING);
peer->state.last_handshake = sec;
sec = now - sec;
if (sec <= net->net_config.keepalive) {
- peer->state.connected = true;
if (peer->state.idle > sec)
peer->state.idle = sec;
+ wg_peer_set_connected(net, peer, true);
}
}
peer->state.rx_bytes = bytes;
if (diff > 0) {
peer->state.idle = 0;
- peer->state.connected = true;
+ wg_peer_set_connected(net, peer, true);
}
}