Network Address Functions and Operators
  
   The IP network address types, cidr and inet,
   support the usual comparison operators shown in
   
   as well as the specialized operators and functions shown in
    and
   .
  
  
   Any cidr value can be cast to inet implicitly;
   therefore, the operators and functions shown below 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.
  
   
    IP Address Operators
    
     
      
       
        Operator
       
       
        Description
       
       
        Example(s)
       
      
     
     
      
       
        inet << inet
        boolean
       
       
        Is subnet strictly contained by subnet?
        This operator, and the next four, test for subnet inclusion.  They
        consider only the network parts of the two addresses (ignoring any
        bits to the right of the netmasks) and determine whether one network
        is identical to or a subnet of the other.
       
       
        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
       
       
        Is subnet contained by or equal to subnet?
       
       
        inet '192.168.1/24' <<= inet '192.168.1/24'
        t
       
      
      
       
        inet >> inet
        boolean
       
       
        Does subnet strictly contain subnet?
       
       
        inet '192.168.1/24' >> inet '192.168.1.5'
        t
       
      
      
       
        inet >>= inet
        boolean
       
       
        Does subnet contain or equal subnet?
       
       
        inet '192.168.1/24' >>= inet '192.168.1/24'
        t
       
      
      
       
        inet && inet
        boolean
       
       
        Does either subnet contain or equal the other?
       
       
        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
       
       
        Computes bitwise NOT.
       
       
        ~ inet '192.168.1.6'
        63.87.254.249
       
      
      
       
        inet & inet
        inet
       
       
        Computes bitwise AND.
       
       
        inet '192.168.1.6' & inet '0.0.0.255'
        0.0.0.6
       
      
      
       
        inet | inet
        inet
       
       
        Computes bitwise OR.
       
       
        inet '192.168.1.6' | inet '0.0.0.255'
        192.168.1.255
       
      
      
       
        inet + bigint
        inet
       
       
        Adds an offset to an address.
       
       
        inet '192.168.1.6' + 25
        192.168.1.31
       
      
      
       
        bigint + inet
        inet
       
       
        Adds an offset to an address.
       
       
        200 + inet '::ffff:fff0:1'
        ::ffff:255.240.0.201
       
      
      
       
        inet - bigint
        inet
       
       
        Subtracts an offset from an address.
       
       
        inet '192.168.1.43' - 36
        192.168.1.7
       
      
      
       
        inet - inet
        bigint
       
       
        Computes the difference of two addresses.
       
       
        inet '192.168.1.43' - inet '192.168.1.19'
        24
       
       
        inet '::1' - inet '::ffff:1'
        -4294901760
       
      
     
    
   
   
    IP Address Functions
    
     
      
       
        Function
       
       
        Description
       
       
        Example(s)
       
      
     
     
      
       
        
         abbrev
        
        abbrev ( inet )
        text
       
       
        Creates an abbreviated display format as text.
        (The result is the same as the inet output function
        produces; it is abbreviated
 only in comparison to the
        result of an explicit cast to text, which for historical
        reasons will never suppress the netmask part.)
       
       
        abbrev(inet '10.1.0.0/32')
        10.1.0.0
       
      
      
       
        abbrev ( cidr )
        text
       
       
        Creates an abbreviated display format as text.
        (The abbreviation consists of dropping all-zero octets to the right
        of the netmask; more examples are in
        .)
       
       
        abbrev(cidr '10.1.0.0/16')
        10.1/16
       
      
      
       
        
         broadcast
        
        broadcast ( inet )
        inet
       
       
        Computes the broadcast address for the address's network.
       
       
        broadcast(inet '192.168.1.5/24')
        192.168.1.255/24
       
      
      
       
        
         family
        
        family ( inet )
        integer
       
       
        Returns the address's family: 4 for IPv4,
        6 for IPv6.
       
       
        family(inet '::1')
        6
       
      
      
       
        
         host
        
        host ( inet )
        text
       
       
        Returns the IP address as text, ignoring the netmask.
       
       
        host(inet '192.168.1.0/24')
        192.168.1.0
       
      
      
       
        
         hostmask
        
        hostmask ( inet )
        inet
       
       
        Computes the host mask for the address's network.
       
       
        hostmask(inet '192.168.23.20/30')
        0.0.0.3
       
      
      
       
        
         inet_merge
        
        inet_merge ( inet, inet )
        cidr
       
       
        Computes the smallest network that includes both of the given networks.
       
       
        inet_merge(inet '192.168.1.5/24', inet '192.168.2.5/24')
        192.168.0.0/22
       
      
      
       
        
         inet_same_family
        
        inet_same_family ( inet, inet )
        boolean
       
       
        Tests whether the addresses belong to the same IP family.
       
       
        inet_same_family(inet '192.168.1.5/24', inet '::1')
        f
       
      
      
       
        
         masklen
        
        masklen ( inet )
        integer
       
       
        Returns the netmask length in bits.
       
       
        masklen(inet '192.168.1.5/24')
        24
       
      
      
       
        
         netmask
        
        netmask ( inet )
        inet
       
       
        Computes the network mask for the address's network.
       
       
        netmask(inet '192.168.1.5/24')
        255.255.255.0
       
      
      
       
        
         network
        
        network ( inet )
        cidr
       
       
        Returns the network part of the address, zeroing out
        whatever is to the right of the netmask.
        (This is equivalent to casting the value to cidr.)
       
       
        network(inet '192.168.1.5/24')
        192.168.1.0/24
       
      
      
       
        
         set_masklen
        
        set_masklen ( inet, integer )
        inet
       
       
        Sets the netmask length for an inet value.
        The address part does not change.
       
       
        set_masklen(inet '192.168.1.5/24', 16)
        192.168.1.5/16
       
      
      
       
        set_masklen ( cidr, integer )
        cidr
       
       
        Sets the netmask length for a cidr value.
        Address bits to the right of the new netmask are set to zero.
       
       
        set_masklen(cidr '192.168.1.0/24', 16)
        192.168.0.0/16
       
      
      
       
        
         text
        
        text ( inet )
        text
       
       
        Returns the unabbreviated IP address and netmask length as text.
        (This has the same result as an explicit cast to text.)
       
       
        text(inet '192.168.1.5')
        192.168.1.5/32
       
      
     
    
   
  
   
    The abbrev, host,
    and text functions are primarily intended to offer
    alternative display formats for IP addresses.
   
  
  
   The MAC address types, macaddr and macaddr8,
   support the usual comparison operators shown in
   
   as well as the specialized functions shown in
   .
   In addition, they support the bitwise logical operators
   ~, & and |
   (NOT, AND and OR), just as shown above for IP addresses.
  
   
    MAC Address Functions
    
     
      
       
        Function
       
       
        Description
       
       
        Example(s)
       
      
     
     
      
       
        
         trunc
        
        trunc ( macaddr )
        macaddr
       
       
        Sets the last 3 bytes of the address to zero.  The remaining prefix
        can be associated with a particular manufacturer (using data not
        included in PostgreSQL).
       
       
        trunc(macaddr '12:34:56:78:90:ab')
        12:34:56:00:00:00
       
      
      
       
        trunc ( macaddr8 )
        macaddr8
       
       
        Sets the last 5 bytes of the address to zero.  The remaining prefix
        can be associated with a particular manufacturer (using data not
        included in PostgreSQL).
       
       
        trunc(macaddr8 '12:34:56:78:90:ab:cd:ef')
        12:34:56:00:00:00:00:00
       
      
      
       
        
         macaddr8_set7bit
        
        macaddr8_set7bit ( macaddr8 )
        macaddr8
       
       
        Sets the 7th bit of the address to one, creating what is 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