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
}