9.12. Функции и операторы сетевых адресов#

9.12. Функции и операторы сетевых адресов

9.12. Функции и операторы сетевых адресов #

Сетевые адреса IP-сети, типы cidr и inet, поддерживают обычные операторы сравнения, показанные в Таблица 9.1 а также специализированные операторы и функции, показанные в Таблица 9.39 и Таблица 9.40.

Любое значение cidr может быть неявно приведено к типу inet; поэтому операторы и функции, показанные ниже для работы с типом inet, также работают с значениями типа cidr. (Если существуют отдельные функции для типов inet и cidr, это означает, что поведение должно быть разным для двух случаев). Также разрешено приведение значения типа inet к типу cidr. При этом все биты справа от маски сети автоматически обнуляются, чтобы создать допустимое значение типа cidr.

Таблица 9.39. Операторы IP-адресов

Оператор

Описание

Пример(ы)

inet << inetboolean

Сеть строго содержится в сети? Этот оператор, а также следующие четыре, проверяют включение подсети. Они рассматривают только сетевые части двух адресов (игнорируя любые биты справа от маски сети) и определяют, является ли одна сеть идентичной или подсетью другой.

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 <<= inetboolean

Содержится ли подсеть в подсети или равна ей?

inet '192.168.1/24' <<= inet '192.168.1/24't

inet >> inetboolean

Содержит ли подсеть строго подсеть?

inet '192.168.1/24' >> inet '192.168.1.5't

inet >>= inetboolean

Содержит ли подсеть или равна подсети?

inet '192.168.1/24' >>= inet '192.168.1/24't

inet && inetboolean

Содержит ли одна подсеть другую или они равны?

inet '192.168.1/24' && inet '192.168.1.80/28't

inet '192.168.1/24' && inet '192.168.2.0/28'f

~ inetinet

Вычисляет побитовое отрицание.

~ inet '192.168.1.6'63.87.254.249

inet & inetinet

Вычисляет побитовое И.

inet '192.168.1.6' & inet '0.0.0.255'0.0.0.6

inet | inetinet

Вычисляет побитовое ИЛИ.

inet '192.168.1.6' | inet '0.0.0.255'192.168.1.255

inet + bigintinet

Добавляет смещение к адресу.

inet '192.168.1.6' + 25192.168.1.31

bigint + inetinet

Добавляет смещение к адресу.

200 + inet '::ffff:fff0:1'::ffff:255.240.0.201

inet - bigintinet

Вычитает смещение из адреса.

inet '192.168.1.43' - 36192.168.1.7

inet - inetbigint

Вычисляет разницу между двумя адресами.

inet '192.168.1.43' - inet '192.168.1.19'24

inet '::1' - inet '::ffff:1'-4294901760


Таблица 9.40. Функции IP-адреса

Функция

Описание

Пример(ы)

abbrev ( inet ) → text

Создает сокращенный формат отображения в виде текста. (Результат такой же, как и функция вывода inet, он сокращенный только по сравнению с результатом явного приведения к типу text, который по историческим причинам никогда не подавляет часть сетевой маски).

abbrev(inet '10.1.0.0/32')10.1.0.0

abbrev ( cidr ) → text

Создает сокращенный формат отображения в виде текста. (Сокращение состоит в удалении октетов, содержащих только нули, справа от маски подсети; дополнительные примеры приведены в Таблица 8.22).

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, поддерживают обычные операторы сравнения, показанные в Таблица 9.1 а также специализированные функции, показанные в Таблица 9.41. Кроме того, они поддерживают побитовые логические операторы ~, & и | (НЕ, И и ИЛИ), как показано выше для IP-адресов.

Таблица 9.41. Функции MAC-адреса

Функция

Описание

Пример(ы)

trunc ( macaddr ) → macaddr

Устанавливает последние 3 байта адреса в ноль. Оставшаяся часть префикса может быть связана с определенным производителем (с использованием данных, не включенных в Tantor SE-1C).

trunc(macaddr '12:34:56:78:90:ab')12:34:56:00:00:00

trunc ( macaddr8 ) → macaddr8

Устанавливает последние 5 байтов адреса в ноль. Оставшаяся часть может быть связана с конкретным производителем (с использованием данных, не включенных в Tantor SE-1C).

trunc(macaddr8 '12:34:56:78:90:ab:cd:ef')12:34:56:00:00:00:00:00

macaddr8_set7bit ( macaddr8 ) → macaddr8

Устанавливает седьмой бит адреса в единицу, создавая так называемый измененный EUI-64 для включения в адрес IPv6.

macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef')02:34:56:ff:fe:ab:cd:ef