A minimal nickname for Bigarray character buffers
Packet.{parse,marshal} now don't expose Cstruct and parse no longer takes a names map
oasis regen and whitespace
CHANGES
Add a wire format processor first-class module
Add `PROCESSOR` first-class modules to `Dns_server` for contextual protocol extensions
Add Query.response_of_answer and Query.answer_of_response
Require query packet into Dns_server.PROCESSOR's context with query_of_context projection
CHANGES
Move Dns_resolver.build_query to Query.create
Add first-class `RESOLVER` modules to `Dns_resolver` for contextual protocol extensions
Move Dns_resolver.get_id into Dns_resolver.DNSProtocol and pseudo-pseudorandomize
Actually randomize get_id
Dns_resolver.DNSProtocol's context is the query's pseudorandom ID
Give resolver modules control of timeout exceptions and support parallel requests
CHANGES
Separate PROCESSOR and PROTOCOL; fix buffer length bug in Dns_resolver
Separate protocol signatures and vanilla implementations

The means of IO for client resolvers and server processors is immaterial to the behavior of the protocol.
oasis regen
Transition LWT resolver/server to use Dns.Protocol