Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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