return;
}
+ if ((h_new ? h_new : h_old)->indirect)
+ return;
+
if (h_new)
ret = wg_peer_update(net, h_new, h_old ? WG_PEER_UPDATE : WG_PEER_CREATE);
else
&ipaddr, ipaddr_len,
&subnet, subnet_len,
&endpoint_buf, endpoint ? strlen(endpoint) + 1 : 0,
- &gateway_buf, gateway ? strlen(endpoint) + 1 : 0);
+ &gateway_buf, gateway ? strlen(gateway) + 1 : 0);
host->node.key = strcpy(name_buf, name);
peer = &host->peer;
}
avl_for_each_element(&net->hosts, host, node) {
if (host == local)
continue;
+ host->peer.indirect = false;
if (host->gateway && strcmp(host->gateway, local_name) != 0)
- continue;
+ host->peer.indirect = true;
if (local->gateway && strcmp(local->gateway, network_host_name(host)) != 0)
- continue;
+ host->peer.indirect = true;
vlist_add(&net->peers, &host->peer.node, host->peer.key);
}
wg_peer_refresh(net);
vlist_for_each_element(&net->peers, peer, node) {
- if (peer->state.connected)
+ if (peer->state.connected || peer->indirect)
continue;
ep = network_peer_next_endpoint(peer);