Browse Source

fetch node ids in the tag, add inet gw info clients

abhishek9686 4 months ago
parent
commit
208fdd4bbc
3 changed files with 55 additions and 0 deletions
  1. 29 0
      logic/egress.go
  2. 24 0
      logic/nodes.go
  3. 2 0
      logic/peers.go

+ 29 - 0
logic/egress.go

@@ -39,6 +39,29 @@ func ValidateEgressReq(e *models.Egress) bool {
 	return true
 }
 
+func GetInetClientsFromAclPolicies(node *models.Node) (inetClientIDs []string) {
+	acls, _ := ListAclsByNetwork(models.NetworkID(node.Network))
+	for _, acl := range acls {
+		dstVal := convAclTagToValueMap(acl.Dst)
+		for _, dstI := range acl.Dst {
+			if _, ok := dstVal[node.ID.String()]; !ok {
+				continue
+			}
+			if dstI.ID == models.EgressRange && dstI.Value == "*" {
+				for _, srcI := range acl.Src {
+					if srcI.ID == models.NodeID {
+						inetClientIDs = append(inetClientIDs, srcI.Value)
+					}
+					if srcI.ID == models.NodeTagID {
+						inetClientIDs = append(inetClientIDs, GetNodeIDsWithTag(models.TagID(srcI.Value))...)
+					}
+				}
+			}
+		}
+	}
+	return
+}
+
 func GetNodeEgressInfo(targetNode *models.Node) {
 	eli, _ := (&models.Egress{Network: targetNode.Network}).ListByNetwork()
 	req := models.EgressGatewayRequest{
@@ -47,6 +70,12 @@ func GetNodeEgressInfo(targetNode *models.Node) {
 	}
 	for _, e := range eli {
 		if metric, ok := e.Nodes[targetNode.ID.String()]; ok {
+			if e.IsInetGw {
+				targetNode.IsInternetGateway = true
+				targetNode.InetNodeReq = models.InetNodeReq{
+					InetNodeClientIDs: GetInetClientsFromAclPolicies(targetNode),
+				}
+			}
 			m64, err := metric.(json.Number).Int64()
 			if err != nil {
 				m64 = 256

+ 24 - 0
logic/nodes.go

@@ -949,6 +949,30 @@ func AddTagMapWithStaticNodesWithUsers(netID models.NetworkID,
 	return tagNodesMap
 }
 
+func GetNodeIDsWithTag(tagID models.TagID) (ids []string) {
+
+	tag, err := GetTag(tagID)
+	if err != nil {
+		return
+	}
+	nodes, _ := GetNetworkNodes(tag.Network.String())
+	for _, nodeI := range nodes {
+		if nodeI.Tags == nil {
+			continue
+		}
+		if nodeI.Mutex != nil {
+			nodeI.Mutex.Lock()
+		}
+		if _, ok := nodeI.Tags[tagID]; ok {
+			ids = append(ids, nodeI.ID.String())
+		}
+		if nodeI.Mutex != nil {
+			nodeI.Mutex.Unlock()
+		}
+	}
+	return
+}
+
 func GetNodesWithTag(tagID models.TagID) map[string]models.Node {
 	nMap := make(map[string]models.Node)
 	tag, err := GetTag(tagID)

+ 2 - 0
logic/peers.go

@@ -198,6 +198,8 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
 			continue
 		}
 		GetNodeEgressInfo(&node)
+		// set inet Info
+
 		hostPeerUpdate = SetDefaultGw(node, hostPeerUpdate)
 		if !hostPeerUpdate.IsInternetGw {
 			hostPeerUpdate.IsInternetGw = IsInternetGw(node)