Функции и операторы для сетевых адресов
Типы cidr и inet, предназначенные для сетевых IP-адресов, поддерживают обычные операторы сравнения, приведенные в таблице Операторы сравнения, а также специальные операторы и функции, приведенные в Таблице 38 и Таблице 39.
Любое значение типа cidr можно привести к типу inet неявно, поэтому операторы и функции, показанные ниже для типа inet, также работают со значениями типа cidr. (Там, где для inet cidr показаны разные функции, причина этого в том, что в данном случае их поведение с этими двумя типами различается.) Кроме того, разрешено приведение значения типа inet к типу cidr. При этому все биты справа от сетевой маски молча обнуляются, чтобы создать допустимое значение типа cidr.
Таблица 38. Операторы для IP-адресов
Оператор |
||
---|---|---|
Описание Пример(ы) |
||
inet << inet → boolean | ||
Первая подсеть строго содержится во второй? Этот и следующие четыре оператора проверяют вхождение одной подсети в другую. Они рассматривают только сетевые части двух заданных адресов (игнорируя все биты справа от сетевой маски) и определяют, идентична ли одна сеть другой или является ее подсетью.inet '192.168.1.5' << inet '192.168.1/24' → t inet '192.168.0.5' << inet '192.168.1/24' → f inet '192.168.1/24' << inet '192.168.1/24' → f |
||
inet <<= inet → boolean | ||
Первая подсеть содержится во второй или равна ей?inet '192.168.1/24' <<= inet '192.168.1/24' → t |
||
inet >> inet → boolean | ||
Первая подсеть строго содержит вторую?inet '192.168.1/24' >> inet '192.168.1.5' → t |
||
inet >>= inet → boolean | ||
Первая подсеть содержит вторую или равна ей?inet '192.168.1/24' >>= inet '192.168.1/24' → t |
||
inet && inet → boolean | ||
Одна из двух подсетей содержит другую или равна ей?inet '192.168.1/24' && inet '192.168.1.80/28' → t inet '192.168.1/24' && inet '192.168.2.0/28' → f |
||
~ inet → inet | ||
Вычисляет результат побитового НЕ.~ inet '192.168.1.6' → 63.87.254.249 |
||
inet & inet → inet | ||
Вычисляет результат побитового И.inet '192.168.1.6' & inet '0.0.0.255' → 0.0.0.6 |
||
inet | inet → inet | ||
Вычисляет результат побитового ИЛИ.inet '192.168.1.6' | inet '0.0.0.255' → 192.168.1.255 |
||
inet + bigint → inet | ||
Добавляет смещение к адресу.inet '192.168.1.6' + 25 → 192.168.1.31 |
||
bigint + inet → inet | ||
Добавляет смещение к адресу.200 + inet '::ffff:fff0:1' → ::ffff:255.240.0.201 |
||
inet - bigint → inet | ||
Вычитает смещение из адреса.inet '192.168.1.43' - 36 → 192.168.1.7 |
||
inet - inet → bigint | ||
Вычисляет разность двух адресов.inet '192.168.1.43' - inet '192.168.1.19' → 24 |
Таблица 39. Функции для IP-адресов
Функция |
||
---|---|---|
Описание Пример(ы) |
||
abbrev ( inet ) → text | ||
Создает сокращенный формат отображения адреса в виде текста. (Результат получается тот же, что и у функции вывода inet; «сокращенным» он является только в сравнении с результатом явного приведения к типу text, которое по историческим причинам никогда не будет убирать часть с сетевой маской.)abbrev(inet '10.1.0.0/32') → 10.1.0.0 |
||
abbrev ( cidr ) → text | ||
Создает сокращенный формат отображения адреса в виде текста. (Это сокращение заключается в отбрасывании полностью нулевых октетов справа от сетевой маски; другие примеры см. в таблице Примеры вводимых значений типа cidr.)abbrev(cidr '10.1.0.0/16') → 10.1/16 |
||
broadcast ( inet ) → inet | ||
Вычисляет широковещательный адрес для сети в заданном адресе.broadcast(inet '192.168.1.5/24') → 192.168.1.255/24 |
||
family ( inet ) → integer | ||
Возвращает семейство адреса: 4 для адресов IPv4, 6 для адресов IPv6.family(inet '::1') → 6 |
||
host ( inet ) → text | ||
Возвращает IP-адрес в виде текста, игнорируя сетевую маску.host(inet '192.168.1.0/24') → 192.168.1.0 |
||
hostmask ( inet ) → inet | ||
Вычисляет маску хоста для сети в заданном адресе.hostmask(inet '192.168.23.20/30') → 0.0.0.3 |
||
inet_merge ( inet, inet ) → cidr | ||
Вычисляет наименьшую сеть, содержащую обе заданные сети.inet_merge(inet '192.168.1.5/24', inet '192.168.2.5/24') → 192.168.0.0/22 |
||
inet_same_family ( inet, inet ) → boolean | ||
Проверяет, принадлежат ли адреса одному семейству IP.inet_same_family(inet '192.168.1.5/24', inet '::1') → f |
||
masklen ( inet ) → integer | ||
Возвращает длину сетевой маски в битах.masklen(inet '192.168.1.5/24') → 24 |
||
netmask ( inet ) → inet | ||
Вычисляет сетевую маску для сети в заданном адресе.netmask(inet '192.168.1.5/24') → 255.255.255.0 |
||
network ( inet ) → cidr | ||
Возвращает сетевую часть адреса, обнуляя все биты справа от сетевой маски. (Это равнозначно приведению значения к типу cidr.)network(inet '192.168.1.5/24') → 192.168.1.0/24 |
||
set_masklen ( inet, integer ) → inet | ||
Задает длину сетевой маски для значения типа inet. Адресная часть при этом не меняется.set_masklen(inet '192.168.1.5/24', 16) → 192.168.1.5/16 |
||
set_masklen ( cidr, integer ) → cidr | ||
Задает длину сетевой маски для значения cidr. Биты адреса справа от новой сетевой маски при этом устанавливаются в ноль.set_masklen(cidr '192.168.1.0/24', 16) → 192.168.0.0/16 |
||
text ( inet ) → text | ||
Возвращает несокращенный IP-адрес и длину сетевой маски в виде текста. (Такой же результат получается при явном приведении к типу text.)text(inet '192.168.1.5') → 192.168.1.5/32 |
Совет
Функции abbrev, host и text предназначены в основном для отображения IP-адресов в альтернативных форматах.
Типы для MAC-адресов, macaddr и macaddr8, поддерживают обычные операторы
сравнения, приведенные в таблице Операторы сравнения, а также специальные функции,
приведенные в Таблице 40. Кроме того, они поддерживают побитовые логические
операторы ~
, &
и |
(НЕ, И и ИЛИ), показанные выше для IP-адресов.
Таблица 40. Функции для MAC-адресов
Функция |
||
---|---|---|
Описание Пример(ы) |
||
trunc ( macaddr ) → macaddr | ||
Устанавливает в ноль 3 последних байта адреса. Оставшийся префикс можно сопоставить с конкретным производителем (используя информацию, отсутствующую в QHB).trunc(macaddr '12:34:56:78:90:ab') → 12:34:56:00:00:00 |
||
trunc ( macaddr8 ) → macaddr8 | ||
Устанавливает в ноль 5 последних байта адреса. Оставшийся префикс можно сопоставить с конкретным производителем (используя информацию, отсутствующую в QHB).trunc(macaddr8 '12:34:56:78:90:ab:cd:ef') → 12:34:56:00:00:00:00:00 |
||
macaddr8_set7bit ( macaddr8 ) → macaddr8 | ||
Устанавливает единицу в 7-м бите адреса, создавая так называемый модифицированный идентификатор EUI-64 для включения в адрес IPv6.macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef') → 02:34:56:ff:fe:ab:cd:ef |