Browse Source

get consolidated ingress update

Abhishek Kondur 2 years ago
parent
commit
841a61a0b2
2 changed files with 20 additions and 19 deletions
  1. 17 15
      logic/peers.go
  2. 3 4
      models/mqtt.go

+ 17 - 15
logic/peers.go

@@ -304,6 +304,11 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) {
 		PeerIDs:       make(models.HostPeerMap),
 		PeerIDs:       make(models.HostPeerMap),
 		ServerVersion: servercfg.GetVersion(),
 		ServerVersion: servercfg.GetVersion(),
 		ServerAddrs:   []models.ServerAddr{},
 		ServerAddrs:   []models.ServerAddr{},
+		IngressInfo: models.IngressInfo{
+			IngressGwAddr: make(map[string]net.IPNet),
+			ExtPeers:      make(map[string]wgtypes.PeerConfig),
+			Peers:         make(map[string][]wgtypes.PeerConfig),
+		},
 	}
 	}
 	logger.Log(1, "peer update for host ", host.ID.String())
 	logger.Log(1, "peer update for host ", host.ID.String())
 	peerIndexMap := make(map[string]int)
 	peerIndexMap := make(map[string]int)
@@ -324,18 +329,7 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) {
 			log.Println("no network nodes")
 			log.Println("no network nodes")
 			return models.HostPeerUpdate{}, err
 			return models.HostPeerUpdate{}, err
 		}
 		}
-		var ingressInfo models.IngressInfo
-		if node.IsIngressGateway {
-			ingressInfo = models.IngressInfo{
-				Network: node.Network,
-				IngressGwAddr: net.IPNet{
-					IP:   net.ParseIP(node.PrimaryAddress()),
-					Mask: net.CIDRMask(32, 32),
-				},
-				ExtPeers: make(map[string]wgtypes.PeerConfig),
-				Peers:    make(map[string]wgtypes.PeerConfig),
-			}
-		}
+
 		for _, peer := range currentPeers {
 		for _, peer := range currentPeers {
 			if peer.ID == node.ID {
 			if peer.ID == node.ID {
 				logger.Log(2, "peer update, skipping self")
 				logger.Log(2, "peer update, skipping self")
@@ -398,7 +392,12 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) {
 			}
 			}
 			peerConfig.AllowedIPs = allowedips
 			peerConfig.AllowedIPs = allowedips
 			if node.IsIngressGateway {
 			if node.IsIngressGateway {
-				ingressInfo.Peers[peerConfig.PublicKey.String()] = peerConfig
+				if peers, ok := hostPeerUpdate.IngressInfo.Peers[peerHost.PublicKey.String()]; ok {
+					peers = append(peers, peerConfig)
+					hostPeerUpdate.IngressInfo.Peers[peerHost.PublicKey.String()] = peers
+				} else {
+					hostPeerUpdate.IngressInfo.Peers[peerHost.PublicKey.String()] = []wgtypes.PeerConfig{peerConfig}
+				}
 			}
 			}
 			if _, ok := hostPeerUpdate.PeerIDs[peerHost.PublicKey.String()]; !ok {
 			if _, ok := hostPeerUpdate.PeerIDs[peerHost.PublicKey.String()]; !ok {
 				hostPeerUpdate.PeerIDs[peerHost.PublicKey.String()] = make(map[string]models.IDandAddr)
 				hostPeerUpdate.PeerIDs[peerHost.PublicKey.String()] = make(map[string]models.IDandAddr)
@@ -427,10 +426,13 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) {
 			extPeers, extPeerIDAndAddrs, err := getExtPeers(&node)
 			extPeers, extPeerIDAndAddrs, err := getExtPeers(&node)
 			if err == nil {
 			if err == nil {
 				hostPeerUpdate.Peers = append(hostPeerUpdate.Peers, extPeers...)
 				hostPeerUpdate.Peers = append(hostPeerUpdate.Peers, extPeers...)
+				hostPeerUpdate.IngressInfo.IngressGwAddr[node.Network] = net.IPNet{
+					IP:   net.ParseIP(node.PrimaryAddress()),
+					Mask: net.CIDRMask(32, 32),
+				}
 				for _, extPeer := range extPeers {
 				for _, extPeer := range extPeers {
-					ingressInfo.ExtPeers[extPeer.PublicKey.String()] = extPeer
+					hostPeerUpdate.IngressInfo.ExtPeers[extPeer.PublicKey.String()] = extPeer
 				}
 				}
-				hostPeerUpdate.IngressInfo = append(hostPeerUpdate.IngressInfo, ingressInfo)
 				for _, extPeerIdAndAddr := range extPeerIDAndAddrs {
 				for _, extPeerIdAndAddr := range extPeerIDAndAddrs {
 					hostPeerUpdate.PeerIDs[extPeerIdAndAddr.ID] = make(map[string]models.IDandAddr)
 					hostPeerUpdate.PeerIDs[extPeerIdAndAddr.ID] = make(map[string]models.IDandAddr)
 					hostPeerUpdate.PeerIDs[extPeerIdAndAddr.ID][extPeerIdAndAddr.ID] = models.IDandAddr{
 					hostPeerUpdate.PeerIDs[extPeerIdAndAddr.ID][extPeerIdAndAddr.ID] = models.IDandAddr{

+ 3 - 4
models/mqtt.go

@@ -27,14 +27,13 @@ type HostPeerUpdate struct {
 	Peers         []wgtypes.PeerConfig             `json:"peers" bson:"peers" yaml:"peers"`
 	Peers         []wgtypes.PeerConfig             `json:"peers" bson:"peers" yaml:"peers"`
 	PeerIDs       HostPeerMap                      `json:"peerids" bson:"peerids" yaml:"peerids"`
 	PeerIDs       HostPeerMap                      `json:"peerids" bson:"peerids" yaml:"peerids"`
 	ProxyUpdate   proxy_models.ProxyManagerPayload `json:"proxy_update" bson:"proxy_update" yaml:"proxy_update"`
 	ProxyUpdate   proxy_models.ProxyManagerPayload `json:"proxy_update" bson:"proxy_update" yaml:"proxy_update"`
-	IngressInfo   []IngressInfo                    `json:"ingress_info" bson:"ext_peers" yaml:"ext_peers"`
+	IngressInfo   IngressInfo                      `json:"ingress_info" bson:"ext_peers" yaml:"ext_peers"`
 }
 }
 
 
 type IngressInfo struct {
 type IngressInfo struct {
-	Network       string
-	IngressGwAddr net.IPNet
+	IngressGwAddr map[string]net.IPNet
 	ExtPeers      map[string]wgtypes.PeerConfig
 	ExtPeers      map[string]wgtypes.PeerConfig
-	Peers         map[string]wgtypes.PeerConfig
+	Peers         map[string][]wgtypes.PeerConfig
 }
 }
 
 
 // NetworkInfo - struct for network info
 // NetworkInfo - struct for network info