Dns.PacketThe DNS packet.
Encoding and decoding from binary. Definition of types for multiple DNS operations.
module Flag : sig ... endmodule Header : sig ... endA DNS header
module Question : sig ... endA DNS Question - the first section of a DNS packet
module Answer : sig ... endA DNS answer, consisting of the answer and authority sections.
module Axfr : sig ... endA DNS zone transfer.
module Ixfr : sig ... endIncremental DNS zone transfer.
module Update : sig ... endDNS update packets.
equal_request a b is true if the request a is the same as b, false otherwise.
val pp_request : request Fmt.tpp_request ppf r pretty-prints the request r on ppf.
type reply = [ | `Answer of Answer.t| `Notify_ack| `Axfr_reply of Axfr.t| `Axfr_partial_reply of
[ `First of Soa.t | `Mid | `Last of Soa.t ] * Name_rr_map.t| `Ixfr_reply of Ixfr.t| `Update_ack| `Rcode_error of Rcode.t * Opcode.t * Answer.t option ]The type of a DNS reply: depending on opcode, rr_typ, and rcode.
equal_reply a b is true if the reply a is the same as b, false otherwise.
val pp_reply : reply Fmt.tpp_reply ppf r pretty-prints the reply r on ppf.
equal_data a b is true if a and b are the same, false otherwise.
val pp_data : data Fmt.tpp_data ppf data pretty-prints data on ppf.
type t = private {header : Header.t;question : Question.t;data : data;additional : Name_rr_map.t;edns : Edns.t option;tsig : ([ `raw ] Domain_name.t * Tsig.t * int) option;}The type of a DNS packet: its header, question, data, additional section, and optional EDNS and TSIG records.
val create :
?max_size:int ->
?additional:Name_rr_map.t ->
?edns:Edns.t ->
?tsig:([ `raw ] Domain_name.t * Tsig.t * int) ->
Header.t ->
Question.t ->
data ->
tcreate ~max_size ~additional ~edns ~tsig hdr q data is a DNS packet.
val minimum_ttl : data -> int32minimum_ttl data returns the minimum TTL of data.
val pp : t Fmt.tpp ppf t pretty-prints the DNS packet t on ppf.
val pp_header : t Fmt.tpp_header ppf t pretty-prints the header of the DNS packet on ppf.
type err = [ | `Bad_edns_version of int| `Leftover of int * string| `Malformed of int * string| `Not_implemented of int * string| `Notify_ack_answer_count of int| `Notify_answer_count of int| `Partial| `Query_answer_count of int| `Rcode_cant_change of Rcode.t| `Rcode_error_cant_noerror of Rcode.t| `Request_rcode of Rcode.t| `Truncated_request| `Update_ack_answer_count of int ]The type of decode errors.
val pp_err : err Fmt.tpp_err ppf err pretty-prints the decode error err on ppf.
decode cs decode the binary data cs to a DNS packet t or an error.
type mismatch = [ | `Not_a_reply of request| `Id_mismatch of int * int| `Operation_mismatch of request * reply| `Question_mismatch of Question.t * Question.t| `Expected_request ]The type of request / reply mismatches.
val pp_mismatch : mismatch Fmt.tpp_mismatch ppf m pretty-prints the mismatch m on ppf.
reply_matches_request ~request reply validates that the reply match the request, and returns either Ok data or an Error. The following basic checks are performed:
request and reply equal?request operation match the reply operation?question and the question of response equal?size_edns max_size edns protocol query computes the size of the reply packet, and optionally an EDNS record.
encode ~max_size protocol t allocates a buffer and encodes the DNS packet t into it. If the maximum size (depending on max_size and protocol) is reached, the truncation flag is set. The last component of the result is the maximum size.
encode_axfr_reply ~max_size tsig_size protocol t axfr encodes the axfr into a list of buffers to be sent out (each with at least tsig_size space for a tsig signature. The second component of the result is the maximum size (dependent on max_size and protocol).
val raw_error : string -> Rcode.t -> string optionraw_error cs rcode is an error reply with rcode to cs, or None if cs is already a reply.