Перейти к содержимому
Последнее обновление

IPV6_CIDR_TO_RANGE

Описание​

Вычисляет минимальный и максимальный адреса IPv6 для сегмента сети на основе адреса IPv6 и длины префикса CIDR, возвращая структуру, содержащую два адреса IPv6.

Синтаксис​

IPV6_CIDR_TO_RANGE(<ipv6_address>, <cidr_prefix>)

Параметры​

  • <ipv6_address>: адрес типа IPv6 или строка IPv6
  • <cidr_prefix>: длина префикса CIDR (тип SMALLINT, диапазон 0-128)

Возвращаемое значение​

Тип возвращаемого значения: STRUCT<min: IPv6, max: IPv6>

Содержимое возвращаемого значения:

  • Возвращает структуру, содержащую два поля:
    • min: минимальный адрес IPv6 в сегменте сети
    • max: максимальный адрес IPv6 в сегменте сети

Примечания по использованию​

  • Длина префикса CIDR должна находиться в диапазоне 0-128
  • Поддерживаются входные данные типа IPv6 и строкового типа
  • Вычисление выполняется на основе маски сети: для минимального адреса все биты узла устанавливаются в ноль, а для максимального — в единицу
  • Поддерживаются различные сочетания параметров, заданных константами и столбцами

Примеры​

Вычисление диапазона адресов для сегмента сети /64.

SELECT ipv6_cidr_to_range(to_ipv6('2001:db8::1'), 64) as `range`;
+---------------------------------------------------------------+
| range |
+---------------------------------------------------------------+
| {"min": "2001:db8::", "max": "2001:db8::ffff:ffff:ffff:ffff"} |
+---------------------------------------------------------------+

Вычисление диапазона адресов для сегмента сети /48.

SELECT ipv6_cidr_to_range(to_ipv6('2001:db8:1::1'), 48) as `range`;
+---------------------------------------------------------------------+
| range |
+---------------------------------------------------------------------+
| {"min": "2001:db8:1::", "max": "2001:db8:1:ffff:ffff:ffff:ffff:ffff"} |
+---------------------------------------------------------------------+

Доступ к отдельным полям структуры.

SELECT 
ipv6_cidr_to_range(to_ipv6('2001:db8::1'), 64).min as min_ip,
ipv6_cidr_to_range(to_ipv6('2001:db8::1'), 64).max as max_ip;
+------------+-------------------------------+
| min_ip | max_ip |
+------------+-------------------------------+
| 2001:db8:: | 2001:db8::ffff:ffff:ffff:ffff |
+------------+-------------------------------+

Выход длины префикса CIDR за допустимый диапазон вызывает исключение.

SELECT ipv6_cidr_to_range(to_ipv6('2001:db8::1'), 129);
ERROR 1105 (HY000): errCode = 2, detailMessage = (...)[INVALID_ARGUMENT]Illegal cidr value '129'

Ключевые слова​

IPV6_CIDR_TO_RANGE