sig
  type -'a t
  type opaque = [ `AF_INET ]
  type category =
      Unspecified
    | Unicast
    | Multicast
    | Experimental
    | Broadcast
  type unspecified = [ `AF_INET | `X ]
  type unicast = [ `AF_INET | `U ]
  type multicast = [ `AF_INET | `M ]
  type experimental = [ `AF_INET | `E ]
  type broadcast = [ `AF_INET | `B ]
  val category : Cf_ip4_addr.opaque Cf_ip4_addr.t -> Cf_ip4_addr.category
  val is_unicast :
    [> Cf_ip4_addr.opaque ] Cf_ip4_addr.t ->
    Cf_ip4_addr.unicast Cf_ip4_addr.t
  val is_multicast :
    [> Cf_ip4_addr.opaque ] Cf_ip4_addr.t ->
    Cf_ip4_addr.multicast Cf_ip4_addr.t
  val is_experimental :
    [> Cf_ip4_addr.opaque ] Cf_ip4_addr.t ->
    Cf_ip4_addr.experimental Cf_ip4_addr.t
  type unicast_realm = U_loopback | U_link | U_private | U_global
  val unicast_realm :
    [> Cf_ip4_addr.unicast ] Cf_ip4_addr.t -> Cf_ip4_addr.unicast_realm
  type multicast_realm = M_link | M_global
  val multicast_realm :
    [> Cf_ip4_addr.multicast ] Cf_ip4_addr.t -> Cf_ip4_addr.multicast_realm
  val any : Cf_ip4_addr.unspecified Cf_ip4_addr.t
  val broadcast : Cf_ip4_addr.broadcast Cf_ip4_addr.t
  val loopback : Cf_ip4_addr.unicast Cf_ip4_addr.t
  val empty_group : Cf_ip4_addr.multicast Cf_ip4_addr.t
  val all_hosts_group : Cf_ip4_addr.multicast Cf_ip4_addr.t
  val all_routers_group : Cf_ip4_addr.multicast Cf_ip4_addr.t
  val equal :
    ([> Cf_ip4_addr.opaque ] as 'a) Cf_ip4_addr.t -> 'Cf_ip4_addr.t -> bool
  val compare :
    ([> Cf_ip4_addr.opaque ] as 'a) Cf_ip4_addr.t -> 'Cf_ip4_addr.t -> int
  val pton : string -> Cf_ip4_addr.opaque Cf_ip4_addr.t option
  val ntop : [> Cf_ip4_addr.opaque ] Cf_ip4_addr.t -> string
  type 'a network_t constraint 'a = [> Cf_ip4_addr.opaque ]
  val net_create :
    ?subnet:int ->
    ([> Cf_ip4_addr.opaque ] as 'a) Cf_ip4_addr.t -> 'Cf_ip4_addr.network_t
  val net_number :
    ([> Cf_ip4_addr.opaque ] as 'a) Cf_ip4_addr.network_t -> 'Cf_ip4_addr.t
  val net_broadcast :
    ([> Cf_ip4_addr.opaque ] as 'a) Cf_ip4_addr.network_t -> 'Cf_ip4_addr.t
  val net_prefix : [> Cf_ip4_addr.opaque ] Cf_ip4_addr.network_t -> int
  val net_member :
    ([> Cf_ip4_addr.opaque ] as 'a) Cf_ip4_addr.network_t ->
    'Cf_ip4_addr.t -> bool
  val net_mask : [> Cf_ip4_addr.opaque ] Cf_ip4_addr.network_t -> string
  val net_increasing :
    ([> Cf_ip4_addr.opaque ] as 'a) Cf_ip4_addr.network_t ->
    'Cf_ip4_addr.t Cf_seq.t
  val net_decreasing :
    ([> Cf_ip4_addr.opaque ] as 'a) Cf_ip4_addr.network_t ->
    'Cf_ip4_addr.t Cf_seq.t
end