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
def clear_session(cls, session): NetIDSubnetMap.clear_map(session.sessionid)