9.12. Funções e operadores de endereço de rede #

Os tipos de dados de endereço de rede IP cidr e inet, têm suporte para os operadores de comparação usuais descritos na Tabela 9.1, assim como os operadores e funções especializados descritos na Tabela 9.39 e na Tabela 9.40.

Qualquer valor do tipo de dados cidr pode ser convertido para o tipo de dados inet implicitamente; portanto, os operadores e funções descritos abaixo operando no tipo de dados inet também funcionam para valores do tipo de dados cidr. (Onde existem funções separadas para os tipos de dados inet e cidr, é porque o comportamento deve ser diferente para os dois tipos de dados.) Também é permitido converter um valor do tipo de dados inet para um valor do tipo de dados cidr. Quando isto é feito, quaisquer bits à direita da máscara de rede são zerados silenciosamente para criar um valor do tipo de dados cidr válido.

Tabela 9.39. Operadores de endereço IP

Operador

Descrição

Exemplo(s)

inet << inetboolean

A sub-rede está inteiramente contida na sub-rede? Esse operador, e os próximos quatro, testam a inclusão de sub-rede. Estes operadores consideram apenas as partes de rede dos dois endereços fornecidos (ignorando quaisquer bits à direita das máscaras de rede) e determinam se uma rede é idêntica ou é uma sub-rede da outra.

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

A sub-rede está contida ou é igual à sub-rede?

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

inet >> inetboolean

A sub-rede contém inteiramente a sub-rede?

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

inet >>= inetboolean

A sub-rede contém ou é igual à sub-rede?

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

inet && inetboolean

A sub-rede contém ou é igual à outra?

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

Calcula NOT bit a bit.

~ inet '192.168.1.6'63.87.254.249

inet & inetinet

Calcula AND bit a bit.

inet '192.168.1.6' & inet '0.0.0.255'0.0.0.6

inet | inetinet

Calcula OR bit a bit.

inet '192.168.1.6' | inet '0.0.0.255'192.168.1.255

inet + bigintinet

Adiciona deslocamento a um endereço.

inet '192.168.1.6' + 25192.168.1.31

bigint + inetinet

Adiciona deslocamento a um endereço.

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

inet - bigintinet

Subtrai deslocamento de um endereço.

inet '192.168.1.43' - 36192.168.1.7

inet - inetbigint

Calcula a diferença entre dois endereços.

inet '192.168.1.43' - inet '192.168.1.19'24

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


Tabela 9.40. Funções de endereço IP

Função

Descrição

Exemplo(s)

abbrev ( inet ) → text

Cria um formato de exibição abreviado na forma de texto. (O resultado é idêntico ao que a função de saída inet produz; é abreviado apenas em comparação com o resultado de uma conversão explícita para o tipo de dados text que, por motivos históricos, não suprime a parte da máscara de rede.)

abbrev(inet '10.1.0.0/32')10.1.0.0

abbrev ( cidr ) → text

Cria um formato de exibição abreviado na forma de texto. (O encurtamento consiste em remover os octetos com valor zero à direita da máscara de rede; podem ser encontrados mais exemplos na Tabela 8.22.)

abbrev(cidr '10.1.0.0/16')10.1/16

broadcast ( inet ) → inet

Calcula o endereço de difusão (broadcast) para a rede do endereço fornecido.

broadcast(inet '192.168.1.5/24')192.168.1.255/24

family ( inet ) → integer [a]

Retorna a família de endereço: 4 para IPv4, 6 para IPv6.

family(inet '::1')6

host ( inet ) → text

Retorna o endereço IP como texto, ignorando a máscara de rede.

host(inet '192.168.1.0/24')192.168.1.0

hostmask ( inet ) → inet

Calcula a máscara de hospedeiro para a rede do endereço fornecido.

hostmask(inet '192.168.23.20/30')0.0.0.3

inet_merge ( inet, inet ) → cidr

Calcula a menor rede que inclui as duas redes fornecidas.

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

Testa se os endereços pertencem à mesma família de endereços IP.

inet_same_family(inet '192.168.1.5/24', inet '::1')f

masklen ( inet ) → integer

Retorna o comprimento da máscara de rede em bits.

masklen(inet '192.168.1.5/24')24

netmask ( inet ) → inet

Calcula a máscara de rede para a rede do endereço fornecido.

netmask(inet '192.168.1.5/24')255.255.255.0

network ( inet ) → cidr

Retorna a parte de rede do endereço, zerando o que estiver à direita da máscara de rede. (Equivale a converter o valor para o tipo de dados cidr.)

network(inet '192.168.1.5/24')192.168.1.0/24

set_masklen ( inet, integer ) → inet

Define o comprimento da máscara de rede para um valor do tipo de dados inet. A parte do endereço não muda.

set_masklen(inet '192.168.1.5/24', 16)192.168.1.5/16

set_masklen ( cidr, integer ) → cidr

Define o comprimento da máscara de rede para um valor do tipo de dados cidr. Os bits de endereço à direita da nova máscara de rede são definidos como zero.

set_masklen(cidr '192.168.1.0/24', 16)192.168.0.0/16

text ( inet ) → text

Retorna o endereço IP não abreviado e o comprimento da máscara de rede como texto. (O mesmo resultado que uma conversão explícita para o tipo de dados text.)

text(inet '192.168.1.5')192.168.1.5/32

[a] Address families: As famílias de endereços definem diferentes estilos de endereçamento. Todos os hospedeiros em uma determinada família de endereços entendem e usam o mesmo esquema para endereçar as extremidades do soquete. O TCP/IP oferece suporte às famílias de endereços AF_INET e AF_INET6. (N. T.)


Dica

As funções abbrev, host e text destinam-se, principalmente, a oferecer formatos de exibição alternativos para endereços IP.

Os tipos de dados de endereço MAC macaddr e macaddr8 oferecem suporte para os operadores de comparação usuais descritos na Tabela 9.1, assim como para as funções especializadas descritas na Tabela 9.41. Além disso, oferecem suporte aos operadores lógicos bit a bit ~, & e | (NOT, AND e OR), exatamente como mostrado acima para endereços IP.

Tabela 9.41. Funções de endereço MAC

Função

Descrição

Exemplo(s)

trunc ( macaddr ) → macaddr

Define os últimos 3 bytes do endereço como zero. O prefixo restante pode ser associado a um determinado fabricante (usando dados não incluídos no PostgreSQL).

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

trunc ( macaddr8 ) → macaddr8

Define os últimos 5 bytes do endereço como zero. O prefixo restante pode ser associado a um determinado fabricante (usando dados não incluídos no PostgreSQL).

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

macaddr8_set7bit ( macaddr8 ) → macaddr8

Define o 7º bit do endereço como um, criando o que é conhecido como EUI-64 modificado, para inclusão em um endereço IPv6.

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