package core

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

A representation of CIDR netmasks (e.g. "192.168.0.0/24") and functions to match if a given address is inside the range or not. Only IPv4 addresses are supported. Values are always normalized so the base address is the lowest IP address in the range, so for example to_string (of_string "192.168.1.101/24") = "192.168.1.0/24".

type t
include Ppx_sexp_conv_lib.Sexpable.S with type t := t
include Core_kernel.Bin_prot.Binable.S with type t := t

of_string Generates a Cidr.t based on a string like "10.0.0.0/8". Addresses are not expanded, i.e. "10/8" is invalid.

include Core_kernel.Identifiable.S with type t := t
include Bin_prot.Binable.S with type t := t
include Bin_prot.Binable.S_only_functions with type t := t
val bin_size_t : t Bin_prot.Size.sizer
val bin_write_t : t Bin_prot.Write.writer
val bin_read_t : t Bin_prot.Read.reader
val __bin_read_t__ : (int -> t) Bin_prot.Read.reader

This function only needs implementation if t exposed to be a polymorphic variant. Despite what the type reads, this does *not* produce a function after reading; instead it takes the constructor tag (int) before reading and reads the rest of the variant t afterwards.

val bin_shape_t : Bin_prot.Shape.t
val bin_writer_t : t Bin_prot.Type_class.writer
val bin_reader_t : t Bin_prot.Type_class.reader
include Ppx_sexp_conv_lib.Sexpable.S with type t := t
val t_of_sexp : Sexplib0.Sexp.t -> t
include Core_kernel.Identifiable.S_common with type t := t
val sexp_of_t : t -> Ppx_sexp_conv_lib.Sexp.t
include Base.Stringable.S with type t := t
val of_string : string -> t
val to_string : t -> string
include Base.Pretty_printer.S with type t := t
val pp : Base.Formatter.t -> t -> unit
include Core_kernel.Comparable.S_binable with type t := t
include Base.Comparable.S with type t := t
include Base.Comparisons.S with type t := t
include Base.Comparisons.Infix with type t := t
val (>=) : t -> t -> bool
val (<=) : t -> t -> bool
val (=) : t -> t -> bool
val (>) : t -> t -> bool
val (<) : t -> t -> bool
val (<>) : t -> t -> bool
val equal : t -> t -> bool
val compare : t -> t -> int

compare t1 t2 returns 0 if t1 is equal to t2, a negative integer if t1 is less than t2, and a positive integer if t1 is greater than t2.

val min : t -> t -> t
val max : t -> t -> t
val ascending : t -> t -> int

ascending is identical to compare. descending x y = ascending y x. These are intended to be mnemonic when used like List.sort ~compare:ascending and List.sort ~cmp:descending, since they cause the list to be sorted in ascending or descending order, respectively.

val descending : t -> t -> int
val between : t -> low:t -> high:t -> bool

between t ~low ~high means low <= t <= high

val clamp_exn : t -> min:t -> max:t -> t

clamp_exn t ~min ~max returns t', the closest value to t such that between t' ~low:min ~high:max is true.

Raises if not (min <= max).

val clamp : t -> min:t -> max:t -> t Base.Or_error.t
include Base.Comparator.S with type t := t
type comparator_witness
val validate_lbound : min:t Base.Maybe_bound.t -> t Base.Validate.check
val validate_ubound : max:t Base.Maybe_bound.t -> t Base.Validate.check
val validate_bound : min:t Base.Maybe_bound.t -> max:t Base.Maybe_bound.t -> t Base.Validate.check
include Core_kernel.Hashable.S_binable with type t := t
val hash_fold_t : Base.Hash.state -> t -> Base.Hash.state
val hash : t -> Base.Hash.hash_value
val hashable : t Base.Hashable.t
include Core_kernel.Invariant.S with type t := t
val invariant : t -> unit
val create : base_address:Inet_addr.t -> bits:int -> t
val base_address : t -> Inet_addr.t

Accessors.

  • base_address 192.168.0.0/24 = 192.168.0.0
  • bits 192.168.0.0/24 = 24.
val bits : t -> int
val all_matching_addresses : t -> Inet_addr.t Core_kernel.Sequence.t

Generate a sequence of all addresses in the block.

val broadcast_address : t -> Inet_addr.t

Compute the broadcast address associated with the subnet (the top IP in the range). NB: The computed broadcast address may not be useful for small (/31 and /32) ranges.

val multicast : t

IPv4 multicast address can be represented by the CIDR prefix 224.0.0.0/4, (i.e. addresses from 224.0.0.0 to 239.255.255.255, inclusive)

val does_match : t -> Inet_addr.t -> bool

Is the given address inside the given Cidr.t? Note that the broadcast and network addresses are considered valid so does_match 10.0.0.0/8 10.0.0.0 is true.

val netmask_of_bits : t -> Inet_addr.t

Return the netmask corresponding to the number of network bits in the CIDR. For example, the netmask for a CIDR with 24 network bits (e.g. 1.2.3.0/24) is 255.255.255.0.

val is_subset : t -> of_:t -> bool

is_subset t1 ~of:t2 is true iff the set of IP addresses specified by t1 is a subset of those specified by t2.

If is_subset t1 ~of_:t2, then does_match t1 x implies does_match t2 x.

If does_match t1 x and does_match t2 x, then either is_subset t1 ~of_:t2 or is_subset t2 ~of_:t1 (or both).

module Stable : sig ... end
OCaml

Innovation. Community. Security.