Module Dns_cache

DNS cache - a least recently used cache of DNS responses

This data structure allows to insert and retrieve entries into a least recently used data structure. An `Entry weights the cardinality of the resource record map, all other entries have a weight of 1.

The time to live is preserved, and when it is exceeded the entry is no longer returned.

type rank =
  1. | ZoneFile
  2. | ZoneTransfer
  3. | AuthoritativeAnswer of bool
  4. | AuthoritativeAuthority of bool
  5. | ZoneGlue
  6. | NonAuthoritativeAnswer
  7. | Additional

The variant of the rank in the cache.

val pp_rank : rank Fmt.t

pp_rank ppf rank pretty-prints the rank on ppf.

val compare_rank : rank -> rank -> int

compare_rank a b compares the ranks a with b.

type t

The type of a DNS cache.

val empty : int -> t

empty maximum_size is an empty DNS cache with the maximum size as capacity.

val size : t -> int

size cache is the number of bindings currently in the cache.

val capacity : t -> int

capacity cache is the used weight.

val pp : t Fmt.t

pp ppf t pretty prints the cache t on ppf.

type 'a entry = [
  1. | `Entry of 'a
  2. | `No_data of [ `raw ] Domain_name.t * Dns.Soa.t
  3. | `No_domain of [ `raw ] Domain_name.t * Dns.Soa.t
  4. | `Serv_fail of [ `raw ] Domain_name.t * Dns.Soa.t
]

The polymorphic variant of an entry: a resource record, or no data, no domain, or a server failure.

val pp_entry : 'a Dns.Rr_map.key -> 'a entry Fmt.t

pp_entry ppf entry pretty-prints entry on ppf.

val get : t -> int64 -> [ `raw ] Domain_name.t -> 'a Dns.Rr_map.key -> t * ('a entry * rank, [ `Cache_miss | `Cache_drop ]) Stdlib.result

get cache timestamp type name retrieves the query type, name from the cache using timestamp. If the time to live is exceeded, a `Cache_drop is returned. If there is no entry in the cache, a `Cache_miss is returned.

val get_or_cname : t -> int64 -> [ `raw ] Domain_name.t -> 'a Dns.Rr_map.key -> t * ([ 'a entry | `Alias of int32 * [ `raw ] Domain_name.t ] * rank, [ `Cache_miss | `Cache_drop ]) Stdlib.result

get_or_cname cache timestamp type name is the same as get, but if a `Cache_miss is encountered, a lookup for an alias (CNAME) is done.

val get_any : t -> int64 -> [ `raw ] Domain_name.t -> t * ([ `Entries of Dns.Rr_map.t | `No_domain of [ `raw ] Domain_name.t * Dns.Soa.t ] * rank, [ `Cache_miss | `Cache_drop ]) Stdlib.result

get_any cache timestamp name retrieves all resource records for name in cache.

val get_nsec3 : t -> int64 -> [ `raw ] Domain_name.t -> t * (([ `raw ] Domain_name.t * Dns.Nsec3.t) list, [ `Cache_miss | `Cache_drop ]) Stdlib.result

get_nsec3 cache timestamp name retrieves all nsec3 resource records for the zone name.

val set : t -> int64 -> [ `raw ] Domain_name.t -> 'a Dns.Rr_map.key -> rank -> 'a entry -> t

set cache timestamp type name rank value attempts to insert type, name, value into the cache using the timestamp and rank. If an entry already exists with a higher rank, the cache is unchanged.