Функции и операторы для сетевых адресов
Типы 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' → tinet '192.168.0.5' << inet '192.168.1/24' → finet '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' → tinet '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 | ||