wg_peer
wg_data_grow(sizeof(*wg_peer));
wg_peer = &wg_interface->i_peers[0]; /* first peer */
wg_peer = (struct wg_peer_io *)wg_aip; /* end of last peer */
wg_aip = &wg_peer->p_aips[0];
if (b64_pton(peerkey, wg_peer->p_public, WG_KEY_SIZE) != WG_KEY_SIZE)
wg_peer->p_flags |= WG_PEER_HAS_PUBLIC;
wg_peer->p_flags |= WG_PEER_REMOVE;
if (wg_peer == NULL)
wg_peer->p_flags |= WG_PEER_REPLACE_AIPS;
wg_peer->p_aips_count++;
if (wg_peer == NULL)
if (b64_pton(psk, wg_peer->p_psk, WG_KEY_SIZE) != WG_KEY_SIZE)
wg_peer->p_flags |= WG_PEER_HAS_PSK;
if (wg_peer == NULL)
memset(wg_peer->p_psk, 0, sizeof(wg_peer->p_psk));
wg_peer->p_flags |= WG_PEER_HAS_PSK;
if (wg_peer == NULL)
wg_peer->p_pka = (uint16_t)strtonum(pka, 0, 43200, &errmsg);
wg_peer->p_flags |= WG_PEER_HAS_PKA;
if (wg_peer == NULL)
wg_peer->p_pka = 0;
wg_peer->p_flags |= WG_PEER_HAS_PKA;
if (wg_peer == NULL)
memcpy(&wg_peer->p_sa, ai->ai_addr, ai->ai_addrlen);
wg_peer->p_flags |= WG_PEER_HAS_ENDPOINT;
if (wg_peer == NULL)
strlcpy(wg_peer->p_description, desc, sizeof(wg_peer->p_description));
wg_peer->p_flags |= WG_PEER_SET_DESCRIPTION;
if (wg_peer == NULL)
memset(wg_peer->p_description, 0, sizeof(wg_peer->p_description));
wg_peer->p_flags |= WG_PEER_SET_DESCRIPTION;
wg_peer = &wg_interface->i_peers[0];
b64_ntop(wg_peer->p_public, WG_KEY_SIZE,
printf("\t\tid: %" PRIu64 "\n", wg_peer->p_id);
if (wg_peer->p_description[0] != '\0')
printf("\t\twgdescr: %s\n", wg_peer->p_description);
if (wg_peer->p_flags & WG_PEER_HAS_PSK) {
b64_ntop(wg_peer->p_psk, WG_KEY_SIZE,
if ((wg_peer->p_flags & WG_PEER_HAS_PKA) && wg_peer->p_pka > 0)
printf("\t\twgpka: %u (seconds)\n", wg_peer->p_pka);
if (wg_peer->p_flags & WG_PEER_HAS_ENDPOINT) {
if (getnameinfo(&wg_peer->p_sa, wg_peer->p_sa.sa_len,
wg_peer->p_txbytes, wg_peer->p_rxbytes);
if (wg_peer->p_last_handshake.tv_sec != 0) {
now.tv_sec - wg_peer->p_last_handshake.tv_sec);
for (j = 0; j < wg_peer->p_aips_count; j++) {
wg_aip = &wg_peer->p_aips[j];
wg_aip = &wg_peer->p_aips[wg_peer->p_aips_count];
wg_peer = (struct wg_peer_io *)wg_aip;
static struct wg_peer_io *wg_peer;
peer_offset = (char *)wg_peer - (char *)wg_interface;
if (wg_peer != NULL)
wg_peer = (void *)((char *)wg_interface + peer_offset);
static void wg_timers_run_send_initiation(struct wg_peer *, bool);
wg_timers_enable(struct wg_peer *peer)
wg_timers_disable(struct wg_peer *peer)
wg_timers_set_persistent_keepalive(struct wg_peer *peer, uint16_t interval)
wg_timers_get_persistent_keepalive(struct wg_peer *peer, uint16_t *interval)
wg_timers_get_last_handshake(struct wg_peer *peer, struct timespec *time)
wg_timers_event_data_sent(struct wg_peer *peer)
wg_timers_event_data_received(struct wg_peer *peer)
wg_timers_event_any_authenticated_packet_sent(struct wg_peer *peer)
wg_timers_event_any_authenticated_packet_received(struct wg_peer *peer)
wg_timers_event_any_authenticated_packet_traversal(struct wg_peer *peer)
wg_timers_event_handshake_initiated(struct wg_peer *peer)
wg_timers_event_handshake_complete(struct wg_peer *peer)
wg_timers_event_session_derived(struct wg_peer *peer)
wg_timers_event_want_initiation(struct wg_peer *peer)
wg_timers_run_send_initiation(struct wg_peer *peer, bool is_retry)
struct wg_peer *peer = _peer;
struct wg_peer *peer = _peer;
struct wg_peer *peer = _peer;
struct wg_peer *peer = _peer;
struct wg_peer *peer = _peer;
wg_peer_send_buf(struct wg_peer *peer, const void *buf, size_t len)
wg_send_initiation(struct wg_peer *peer)
wg_send_response(struct wg_peer *peer)
wg_send_keepalive(struct wg_peer *peer)
struct wg_peer *peer;
struct wg_peer *peer;
struct wg_peer *peer, *allowed_peer;
struct wg_peer *a_peer;
struct wg_peer *peer = arg;
struct wg_peer *peer = arg;
struct wg_peer *peer;
wg_peer_send_staged(struct wg_peer *peer)
TAILQ_ENTRY(wg_peer) p_entry;
struct wg_peer *peer = NULL;
struct wg_peer *peer;
struct wg_peer *peer;
struct wg_peer *peer;
struct wg_peer *peer;
struct wg_peer *peer;
TAILQ_HEAD(, wg_peer) sc_peers;
static void wg_timers_enable(struct wg_peer *);
static void wg_timers_disable(struct wg_peer *);
static int wg_aip_add(struct wg_softc *, struct wg_peer *, sa_family_t,
static struct wg_peer *
static void wg_aip_remove_all(struct wg_softc *, struct wg_peer *);
static void wg_send_initiation(struct wg_peer *);
static void wg_send_response(struct wg_peer *);
static void wg_send_keepalive(struct wg_peer *);
static void wg_peer_send_staged(struct wg_peer *);
static struct wg_peer *
struct wg_peer *peer;
wg_peer_destroy(struct wg_peer *peer)
struct wg_peer *peer, *tpeer;
wg_peer_set_sockaddr(struct wg_peer *peer, const struct sockaddr *remote)
wg_peer_get_sockaddr(struct wg_peer *peer, struct sockaddr *remote)
wg_peer_set_endpoint(struct wg_peer *peer, const struct wg_endpoint *e)
wg_peer_get_endpoint(struct wg_peer *peer, struct wg_endpoint *e)
wg_aip_add(struct wg_softc *sc, struct wg_peer *peer, sa_family_t af,
static struct wg_peer *
struct wg_peer *peer;
wg_aip_remove_all(struct wg_softc *sc, struct wg_peer *peer)
struct wg_peer **peers, *peer;
static struct wg_peer *
struct wg_peer *a = NULL, *b = NULL, *c = NULL, *d = NULL;
struct wg_peer *e = NULL, *f = NULL, *g = NULL, *h = NULL;
struct wg_peer *peer;