示例#1
0
文件: ipaddr.py 项目: Benocs/core
    def getLoopbackNet_per_net(sessionid, netid, ipversion):
        Loopback.cfg_sanitation_checks(ipversion=ipversion)

        loopback_net = 'ipv%d_loopback_net' % ipversion
        loopback_net_per_netid = 'ipv%d_loopback_net_per_netid' % ipversion

        if ipversion == 4:
            ipprefix_cls = IPv4Prefix
        elif ipversion == 6:
            ipprefix_cls = IPv6Prefix
        else:
            raise ValueError('IP version is neither 4 nor 6: %s' % str(ipversion))

        # local means per netid (e.g., AS)
        try:
            local_prefixlen = int(CONFIGS['ipaddrs'][loopback_net_per_netid])
        except ValueError:
            raise ValueError('Could not parse %s from ipaddrs.conf' % loopback_net_per_netid)

        global_loopback_prefix = Loopback.getLoopbackNet(ipversion)
        global_prefixbase, global_prefixlen = str(global_loopback_prefix).split('/')

        subnet_id = NetIDSubnetMap.register_netid(sessionid, netid, ipversion)

        baseprefix = ipprefix_cls('%s/%d' % (global_prefixbase, local_prefixlen))
        target_network_baseaddr = baseprefix.minaddr() + ((subnet_id) * (baseprefix.numaddr() + 2))
        target_network_prefix = ipprefix_cls('%s/%d' % (target_network_baseaddr, local_prefixlen))
        return target_network_prefix
示例#2
0
 def clear_session(cls, session):
     NetIDSubnetMap.clear_map(session.sessionid)