func()

in npm/pkg/dataplane/debug/converter.go [259:319]


func (c *Converter) pbRuleList(ipTable *NPMIPtable.Table) (map[*pb.RuleResponse]struct{}, error) {
	allRulesInNPMChains := make(map[*pb.RuleResponse]struct{}, 0)

	// iterate through all chains in the filter table
	for _, v := range ipTable.Chains {
		if c.isAzureNPMChain(v.Name) {

			// can skip this chain in V2 since it's an accept
			if c.EnableV2NPM && (strings.HasPrefix(v.Name, "AZURE-NPM-INGRESS-ALLOW-MARK") || (strings.HasPrefix(v.Name, "AZURE-NPM-ACCEPT"))) {
				continue
			}

			rulesFromChain, err := c.getRulesFromChain(v)
			if err != nil {
				return nil, fmt.Errorf("error occurred during getting protobuf rule list : %w", err)
			}
			/*
				if strings.HasPrefix("AZURE-NPM-EGRESS") {
					for i := range rulesFromChain {
						rulesFromChain[i].SrcList =
					}
				}
			*/
			for _, rule := range rulesFromChain {
				allRulesInNPMChains[rule] = struct{}{}
			}
		}
	}

	if c.EnableV2NPM {
		parentRules := make([]*pb.RuleResponse, 0)
		for childRule := range allRulesInNPMChains {

			// if rule is a string-int, we need to find the parent jump
			// to add the src for egress and dst for ingress
			if strings.HasPrefix(childRule.Chain, EgressChainPrefix) {
				for parentRule := range allRulesInNPMChains {
					if strings.HasPrefix(parentRule.Chain, EgressChain) && parentRule.JumpTo == childRule.Chain {
						childRule.SrcList = append(childRule.SrcList, parentRule.SrcList...)
						childRule.Comment = parentRule.Comment
						parentRules = append(parentRules, parentRule)
					}
				}
			}
			if strings.HasPrefix(childRule.Chain, IngressChainPrefix) {
				for parentRule := range allRulesInNPMChains {
					if strings.HasPrefix(parentRule.Chain, IngressChain) && parentRule.JumpTo == childRule.Chain {
						childRule.DstList = append(childRule.DstList, parentRule.DstList...)
						childRule.Comment = parentRule.Comment
						parentRules = append(parentRules, parentRule)
					}
				}
			}
		}
		for _, parentRule := range parentRules {
			delete(allRulesInNPMChains, parentRule)
		}
	}

	return allRulesInNPMChains, nil
}