Browse Source

add ingress model to host peer update

Abhishek Kondur 2 years ago
parent
commit
56d26b5ea0
2 changed files with 30 additions and 3 deletions
  1. 20 2
      logic/peers.go
  2. 10 1
      models/mqtt.go

+ 20 - 2
logic/peers.go

@@ -315,6 +315,7 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) {
 		if !node.Connected || node.Action == models.NODE_DELETE || node.PendingDelete {
 		if !node.Connected || node.Action == models.NODE_DELETE || node.PendingDelete {
 			continue
 			continue
 		}
 		}
+
 		hostPeerUpdate.Network[node.Network] = models.NetworkInfo{
 		hostPeerUpdate.Network[node.Network] = models.NetworkInfo{
 			DNS: getPeerDNS(node.Network),
 			DNS: getPeerDNS(node.Network),
 		}
 		}
@@ -323,6 +324,18 @@ 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")
@@ -384,7 +397,9 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) {
 				allowedips = append(allowedips, getEgressIPs(&node, &peer)...)
 				allowedips = append(allowedips, getEgressIPs(&node, &peer)...)
 			}
 			}
 			peerConfig.AllowedIPs = allowedips
 			peerConfig.AllowedIPs = allowedips
-
+			if node.IsIngressGateway {
+				ingressInfo.Peers[peerConfig.PublicKey.String()] = 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)
 				hostPeerUpdate.Peers = append(hostPeerUpdate.Peers, peerConfig)
 				hostPeerUpdate.Peers = append(hostPeerUpdate.Peers, peerConfig)
@@ -412,7 +427,10 @@ 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.ExtPeers = extPeers
+				for _, extPeer := range extPeers {
+					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{

+ 10 - 1
models/mqtt.go

@@ -1,6 +1,8 @@
 package models
 package models
 
 
 import (
 import (
+	"net"
+
 	proxy_models "github.com/gravitl/netclient/nmproxy/models"
 	proxy_models "github.com/gravitl/netclient/nmproxy/models"
 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
 )
 )
@@ -25,7 +27,14 @@ 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"`
-	ExtPeers      []wgtypes.PeerConfig             `json:"ext_peers" bson:"ext_peers" yaml:"ext_peers"`
+	IngressInfo   []IngressInfo                    `json:"ingress_info" bson:"ext_peers" yaml:"ext_peers"`
+}
+
+type IngressInfo struct {
+	Network       string
+	IngressGwAddr net.IPNet
+	ExtPeers      map[string]wgtypes.PeerConfig
+	Peers         map[string]wgtypes.PeerConfig
 }
 }
 
 
 // NetworkInfo - struct for network info
 // NetworkInfo - struct for network info