def add_ip_block(self, ipblock: ip_network): """ Add a block of IP addresses to the free IP list IP blocks should not overlap. Args: ipblock (ipaddress.ip_network): ip network to add e.g. ipaddress.ip_network("10.0.0.0/24") Raises: OverlappedIPBlocksError: if the given IP block overlaps with existing ones """ for blk in self._assigned_ip_blocks: if ipblock.overlaps(blk): logging.error("Overlapped IP block: %s", ipblock) raise OverlappedIPBlocksError(ipblock) self._assigned_ip_blocks.add(ipblock) # TODO(oramadan) t23793559 HACK reserve the GW address for # gtp_br0 iface and test VM num_reserved_addresses = 11 for ip in ipblock.hosts(): state = IPState.RESERVED if num_reserved_addresses > 0 \ else IPState.FREE ip_desc = IPDesc(ip=ip, state=state, ip_block=ipblock, sid=None) self._ip_state_map.add_ip_to_state(ip, ip_desc, state) if num_reserved_addresses > 0: num_reserved_addresses -= 1
def add_ip_block(self, ipblock: ip_network): """ Adds IP block to the assigned IP block of the IPv6 allocator Args: ipblock: ipv6 ip_network object Returns: """ if self._assigned_ip_block and ipblock.overlaps( self._assigned_ip_block, ): raise OverlappedIPBlocksError(ipblock) if ipblock.prefixlen > self._ipv6_prefixlen: log_error_and_raise(InvalidIPv6NetworkError, "IPv6 block exceeds maximum allowed prefix length") # For now only one IPv6 network is supported self._assigned_ip_block = ipblock self._store.assigned_ip_blocks.add(ipblock)
def add_ip_block(self, ipblock: ip_network): """ Adds IP block to the assigned IP block of the IPv6 allocator Args: ipblock: ipv6 ip_network object Returns: """ if self._assigned_ip_block and ipblock.overlaps( self._assigned_ip_block, ): raise OverlappedIPBlocksError(ipblock) if ipblock.prefixlen > MAX_IPV6_CONF_PREFIX_LEN: msg = "IPv6 block exceeds maximum allowed prefix length" logging.error(msg) raise InvalidIPv6NetworkError(msg) # For now only one IPv6 network is supported self._assigned_ip_block = ipblock