def group_nets(nets):
# nets = { src: [dst1, dst2, ...], ...}
revnets = {} # nets reversed: { dst: [src1, src2, ...], ... }
# next iteration
debug("group_nets -- Begin ====================",4)
debug("group_nets -- Before first phase of grouping (nets)",4)
debug(nets,4)
for src in nets:
debug("group_nets -- The source",5)
debug(src,5)
debug("group_nets -- 1F The destination",5)
debug(nets[src],5)
nets[src] = netaddr.cidr_merge(nets[src])
debug("group_nets -- 1F After CIDR-merge",5)
debug(nets[src],5)
if len(nets) == 1:
debug("group_nets -- Only one pair",4)
return {(src,):nets[src]}
for dst in nets[src]:
debug("group_nets -- For the destination",5)
debug(dst,5)
if dst not in revnets:
revnets[dst] = []
if src not in revnets[dst]:
revnets[dst].append(src)
debug("group_nets -- Added the following source",5)
debug(src,5)
debug("group_nets -- Current revnets[dst]",5)
debug(revnets[dst],5)
# grouping
debug("group_nets -- The result of the first phase of grouping (revnets)",4)
debug(revnets,4)
debug("group_nets -- Second phase of grouping",4)
nets = {}
for dst in revnets:
debug("group_nets -- 2F The destination",5)
debug(dst,5)
debug("group_nets -- The corresponfing sources",5)
debug(revnets[dst],5)
revnets[dst] = netaddr.cidr_merge(revnets[dst])
debug("group_nets -- 2F After CIDR-merge",5)
debug(revnets[dst],5)
add_net_pair(tuple(revnets[dst]),dst,nets)
debug("group_nets -- The result of grouping (nets)",4)
debug(nets,4)
debug("group_nets -- End ====================",4)
return nets
评论列表
文章目录