# 9.12. 網路位址函式及運算子

Table 9.36shows the operators available for the`cidr`and`inet`types. The operators`<<`,`<<=`,`>>`,`>>=`, and`&&`test for subnet inclusion. They consider only the network parts of the two addresses (ignoring any host part) and determine whether one network is identical to or a subnet of the other.

**Table 9.36. **`cidr`and`inet`Operators

OperatorDescriptionExample

`<`

is less than

`inet '192.168.1.5' < inet '192.168.1.6'`

`<=`

is less than or equal

`inet '192.168.1.5' <= inet '192.168.1.5'`

`=`

equals

`inet '192.168.1.5' = inet '192.168.1.5'`

`>=`

is greater or equal

`inet '192.168.1.5' >= inet '192.168.1.5'`

`>`

is greater than

`inet '192.168.1.5' > inet '192.168.1.4'`

`<>`

is not equal

`inet '192.168.1.5' <> inet '192.168.1.4'`

`<<`

is contained by

`inet '192.168.1.5' << inet '192.168.1/24'`

`<<=`

is contained by or equals

`inet '192.168.1/24' <<= inet '192.168.1/24'`

`>>`

contains

`inet '192.168.1/24' >> inet '192.168.1.5'`

`>>=`

contains or equals

`inet '192.168.1/24' >>= inet '192.168.1/24'`

`&&`

contains or is contained by

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

`~`

bitwise NOT

`~ inet '192.168.1.6'`

`&`

bitwise AND

`inet '192.168.1.6' & inet '0.0.0.255'`

`

`

bitwise OR

`inet '192.168.1.6'

inet '0.0.0.255'`

`+`

`inet '192.168.1.6' + 25`

`-`

subtraction

`inet '192.168.1.43' - 36`

`-`

subtraction

`inet '192.168.1.43' - inet '192.168.1.19'`

Table 9.37shows the functions available for use with the`cidr`and`inet`types. The`abbrev`,`host`, and`text`functions are primarily intended to offer alternative display formats.

**Table 9.37. **`cidr`and`inet`Functions

FunctionReturn TypeDescriptionExampleResult

`abbrev(inet`)

`text`

abbreviated display format as text

`abbrev(inet '10.1.0.0/16')`

`10.1.0.0/16`

`abbrev(cidr`)

`text`

abbreviated display format as text

`abbrev(cidr '10.1.0.0/16')`

`10.1/16`

`broadcast(inet`)

`inet`

`broadcast('192.168.1.5/24')`

`192.168.1.255/24`

`family(inet`)

`int`

extract family of address;`4`for IPv4,`6`for IPv6

`family('::1')`

`6`

`host(inet`)

`text`

`host('192.168.1.5/24')`

`192.168.1.5`

`hostmask(inet`)

`inet`

`hostmask('192.168.23.20/30')`

`0.0.0.3`

`masklen(inet`)

`int`

`masklen('192.168.1.5/24')`

`24`

`netmask(inet`)

`inet`

`netmask('192.168.1.5/24')`

`255.255.255.0`

`network(inet`)

`cidr`

`network('192.168.1.5/24')`

`192.168.1.0/24`

`set_masklen(inet`,`int`)

`inet`

set netmask length for`inet`value

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

`192.168.1.5/16`

`set_masklen(cidr`,`int`)

`cidr`

set netmask length for`cidr`value

`set_masklen('192.168.1.0/24'::cidr, 16)`

`192.168.0.0/16`

`text(inet`)

`text`

`text(inet '192.168.1.5')`

`192.168.1.5/32`

`inet_same_family(inet`,`inet`)

`boolean`

are the addresses from the same family?

`inet_same_family('192.168.1.5/24', '::1')`

`false`

`inet_merge(inet`,`inet`)

`cidr`

the smallest network which includes both of the given networks

`inet_merge('192.168.1.5/24', '192.168.2.5/24')`

`192.168.0.0/22`

Any`cidr`value can be cast to`inet`implicitly or explicitly; therefore, the functions shown above as operating on`inet`also work on`cidr`values. (Where there are separate functions for`inet`and`cidr`, it is because the behavior should be different for the two cases.) Also, it is permitted to cast an`inet`value to`cidr`. When this is done, any bits to the right of the netmask are silently zeroed to create a valid`cidr`value. In addition, you can cast a text value to`inet`or`cidr`using normal casting syntax: for example,`inet(expression`)or`colname`::cidr.

Table 9.38shows the functions available for use with the`macaddr`type. The function`trunc(macaddr`)returns a MAC address with the last 3 bytes set to zero. This can be used to associate the remaining prefix with a manufacturer.

**Table 9.38. **`macaddr`Functions

FunctionReturn TypeDescriptionExampleResult

`trunc(macaddr`)

`macaddr`

set last 3 bytes to zero

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

`12:34:56:00:00:00`

The`macaddr`type also supports the standard relational operators (`>`,`<=`, etc.) for lexicographical ordering, and the bitwise arithmetic operators (`~`,`&`and`|`) for NOT, AND and OR.

Table 9.39shows the functions available for use with the`macaddr8`type. The function`trunc(macaddr8`)returns a MAC address with the last 5 bytes set to zero. This can be used to associate the remaining prefix with a manufacturer.

**Table 9.39. **`macaddr8`Functions

FunctionReturn TypeDescriptionExampleResult

`trunc(macaddr8`)

`macaddr8`

set last 5 bytes to zero

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

`12:34:56:00:00:00:00:00`

`macaddr8_set7bit(macaddr8`)

`macaddr8`

set 7th bit to one, also known as modified EUI-64, for inclusion in an IPv6 address

`macaddr8_set7bit(macaddr8 '00:34:56:ab:cd:ef')`

`02:34:56:ff:fe:ab:cd:ef`

The`macaddr8`type also supports the standard relational operators (`>`,`<=`, etc.) for ordering, and the bitwise arithmetic operators (`~`,`&`and`|`) for NOT, AND and OR.

Last updated