add ingress model to host peer update

This commit is contained in:
Abhishek Kondur 2023-01-31 10:21:10 +04:00
parent f2d8cf4fb6
commit 56d26b5ea0
2 changed files with 30 additions and 3 deletions

View file

@ -315,6 +315,7 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) {
if !node.Connected || node.Action == models.NODE_DELETE || node.PendingDelete {
continue
}
hostPeerUpdate.Network[node.Network] = models.NetworkInfo{
DNS: getPeerDNS(node.Network),
}
@ -323,6 +324,18 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) {
log.Println("no network nodes")
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 {
if peer.ID == node.ID {
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)...)
}
peerConfig.AllowedIPs = allowedips
if node.IsIngressGateway {
ingressInfo.Peers[peerConfig.PublicKey.String()] = peerConfig
}
if _, ok := hostPeerUpdate.PeerIDs[peerHost.PublicKey.String()]; !ok {
hostPeerUpdate.PeerIDs[peerHost.PublicKey.String()] = make(map[string]models.IDandAddr)
hostPeerUpdate.Peers = append(hostPeerUpdate.Peers, peerConfig)
@ -412,7 +427,10 @@ func GetPeerUpdateForHost(host *models.Host) (models.HostPeerUpdate, error) {
extPeers, extPeerIDAndAddrs, err := getExtPeers(&node)
if err == nil {
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 {
hostPeerUpdate.PeerIDs[extPeerIdAndAddr.ID] = make(map[string]models.IDandAddr)
hostPeerUpdate.PeerIDs[extPeerIdAndAddr.ID][extPeerIdAndAddr.ID] = models.IDandAddr{

View file

@ -1,6 +1,8 @@
package models
import (
"net"
proxy_models "github.com/gravitl/netclient/nmproxy/models"
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
)
@ -25,7 +27,14 @@ type HostPeerUpdate struct {
Peers []wgtypes.PeerConfig `json:"peers" bson:"peers" yaml:"peers"`
PeerIDs HostPeerMap `json:"peerids" bson:"peerids" yaml:"peerids"`
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