Forráskód Böngészése

fix inet node func

abhishek9686 4 hónapja
szülő
commit
5b0430d71c
4 módosított fájl, 31 hozzáadás és 21 törlés
  1. 0 7
      controllers/node.go
  2. 16 12
      logic/egress.go
  3. 15 1
      logic/gateway.go
  4. 0 1
      logic/peers.go

+ 0 - 7
controllers/node.go

@@ -638,13 +638,6 @@ func updateNode(w http.ResponseWriter, r *http.Request) {
 		)
 		return
 	}
-	if newNode.IsInternetGateway != currentNode.IsInternetGateway {
-		if newNode.IsInternetGateway {
-			logic.SetInternetGw(newNode, models.InetNodeReq{})
-		} else {
-			logic.UnsetInternetGw(newNode)
-		}
-	}
 	relayUpdate := logic.RelayUpdates(&currentNode, newNode)
 	if relayUpdate && newNode.IsRelay {
 		err = logic.ValidateRelay(models.RelayRequest{

+ 16 - 12
logic/egress.go

@@ -3,6 +3,7 @@ package logic
 import (
 	"context"
 	"encoding/json"
+	"maps"
 	"net"
 
 	"github.com/gravitl/netmaker/db"
@@ -42,19 +43,17 @@ func ValidateEgressReq(e *schema.Egress) bool {
 	return true
 }
 
-func GetInetClientsFromAclPolicies(node *models.Node) (inetClientIDs []string) {
-	acls, _ := ListAclsByNetwork(models.NetworkID(node.Network))
+func GetInetClientsFromAclPolicies(eID string) (inetClientIDs []string) {
+	e := schema.Egress{ID: eID}
+	err := e.Get(db.WithContext(context.TODO()))
+	if err != nil {
+		return
+	}
+	acls, _ := ListAclsByNetwork(models.NetworkID(e.Network))
 	for _, acl := range acls {
 		for _, dstI := range acl.Dst {
 			if dstI.ID == models.EgressID {
-				e := schema.Egress{
-					ID: dstI.Value,
-				}
-				err := e.Get(db.WithContext(context.TODO()))
-				if err != nil {
-					continue
-				}
-				if _, ok := e.Nodes[node.ID.String()]; !ok {
+				if dstI.Value != eID {
 					continue
 				}
 				for _, srcI := range acl.Src {
@@ -72,8 +71,13 @@ func GetInetClientsFromAclPolicies(node *models.Node) (inetClientIDs []string) {
 }
 
 func IsNodeUsingInternetGw(node *models.Node) {
+	nodeTags := maps.Clone(node.Tags)
+	nodeTags[models.TagID(node.ID.String())] = struct{}{}
 	acls, _ := ListAclsByNetwork(models.NetworkID(node.Network))
 	for _, acl := range acls {
+		if !acl.Enabled {
+			continue
+		}
 		srcVal := convAclTagToValueMap(acl.Src)
 		for _, dstI := range acl.Dst {
 			if dstI.ID == models.EgressID {
@@ -89,7 +93,7 @@ func IsNodeUsingInternetGw(node *models.Node) {
 							return
 						}
 					}
-					for tagID := range node.Tags {
+					for tagID := range nodeTags {
 						if _, ok := srcVal[tagID.String()]; ok {
 							for nodeID := range e.Nodes {
 								node.InternetGwID = nodeID
@@ -114,7 +118,7 @@ func GetNodeEgressInfo(targetNode *models.Node) {
 			if e.IsInetGw {
 				targetNode.IsInternetGateway = true
 				targetNode.InetNodeReq = models.InetNodeReq{
-					InetNodeClientIDs: GetInetClientsFromAclPolicies(targetNode),
+					InetNodeClientIDs: GetInetClientsFromAclPolicies(e.ID),
 				}
 			}
 			m64, err := metric.(json.Number).Int64()

+ 15 - 1
logic/gateway.go

@@ -1,6 +1,7 @@
 package logic
 
 import (
+	"context"
 	"errors"
 	"fmt"
 	"slices"
@@ -8,14 +9,27 @@ import (
 	"time"
 
 	"github.com/gravitl/netmaker/database"
+	"github.com/gravitl/netmaker/db"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/models"
+	"github.com/gravitl/netmaker/schema"
 	"github.com/gravitl/netmaker/servercfg"
 )
 
 // IsInternetGw - checks if node is acting as internet gw
 func IsInternetGw(node models.Node) bool {
-	return node.IsInternetGateway
+	e := schema.Egress{
+		Network: node.Network,
+	}
+	egList, _ := e.ListByNetwork(db.WithContext(context.TODO()))
+	for _, egI := range egList {
+		if egI.IsInetGw {
+			if _, ok := egI.Nodes[node.ID.String()]; ok {
+				return true
+			}
+		}
+	}
+	return false
 }
 
 // GetInternetGateways - gets all the nodes that are internet gateways

+ 0 - 1
logic/peers.go

@@ -497,7 +497,6 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
 				},
 			}
 		}
-
 	}
 	// == post peer calculations ==
 	// indicate removal if no allowed IPs were calculated