|
@@ -135,6 +135,61 @@ func GetPeerUpdateForHost(ctx context.Context, network string, host *models.Host
|
|
|
if !node.Connected || node.PendingDelete || node.Action == models.NODE_DELETE {
|
|
|
continue
|
|
|
}
|
|
|
+ if host.OS == models.OS_Types.IoT {
|
|
|
+ hostPeerUpdate.NodeAddrs = append(hostPeerUpdate.NodeAddrs, node.PrimaryAddressIPNet())
|
|
|
+ if node.IsRelayed {
|
|
|
+ relayNode, err := GetNodeByID(node.RelayedBy)
|
|
|
+ if err != nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ relayHost, err := GetHost(relayNode.HostID.String())
|
|
|
+ if err != nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ relayPeer := wgtypes.PeerConfig{
|
|
|
+ PublicKey: relayHost.PublicKey,
|
|
|
+ PersistentKeepaliveInterval: &relayNode.PersistentKeepalive,
|
|
|
+ ReplaceAllowedIPs: true,
|
|
|
+ AllowedIPs: GetAllowedIPs(&node, &relayNode, nil),
|
|
|
+ }
|
|
|
+ uselocal := false
|
|
|
+ if host.EndpointIP.String() == relayHost.EndpointIP.String() {
|
|
|
+ // peer is on same network
|
|
|
+ // set to localaddress
|
|
|
+ uselocal = true
|
|
|
+ if node.LocalAddress.IP == nil {
|
|
|
+ // use public endpint
|
|
|
+ uselocal = false
|
|
|
+ }
|
|
|
+ if node.LocalAddress.String() == relayNode.LocalAddress.String() {
|
|
|
+ uselocal = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ relayPeer.Endpoint = &net.UDPAddr{
|
|
|
+ IP: relayHost.EndpointIP,
|
|
|
+ Port: getPeerWgListenPort(relayHost),
|
|
|
+ }
|
|
|
+
|
|
|
+ if uselocal {
|
|
|
+ relayPeer.Endpoint.IP = relayNode.LocalAddress.IP
|
|
|
+ relayPeer.Endpoint.Port = relayHost.ListenPort
|
|
|
+ }
|
|
|
+
|
|
|
+ hostPeerUpdate.Peers = append(hostPeerUpdate.Peers, relayPeer)
|
|
|
+ } else if deletedNode != nil && deletedNode.IsRelay {
|
|
|
+ relayHost, err := GetHost(deletedNode.HostID.String())
|
|
|
+ if err != nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ relayPeer := wgtypes.PeerConfig{
|
|
|
+ PublicKey: relayHost.PublicKey,
|
|
|
+ Remove: true,
|
|
|
+ }
|
|
|
+ hostPeerUpdate.Peers = append(hostPeerUpdate.Peers, relayPeer)
|
|
|
+ }
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
currentPeers := GetNetworkNodesMemory(allNodes, node.Network)
|
|
|
var nodePeerMap map[string]models.PeerRouteInfo
|
|
|
if node.IsIngressGateway || node.IsEgressGateway {
|