xref: /freebsd/contrib/unbound/dnstap/dnstap.proto (revision b7c0c8c18e0f12bc22e251fbcabad719b364a38a)
1ff825849SDag-Erling Smørgrav// dnstap: flexible, structured event replication format for DNS software
2ff825849SDag-Erling Smørgrav//
3ff825849SDag-Erling Smørgrav// This file contains the protobuf schemas for the "dnstap" structured event
4ff825849SDag-Erling Smørgrav// replication format for DNS software.
5ff825849SDag-Erling Smørgrav
6ff825849SDag-Erling Smørgrav// Written in 2013-2014 by Farsight Security, Inc.
7ff825849SDag-Erling Smørgrav//
8ff825849SDag-Erling Smørgrav// To the extent possible under law, the author(s) have dedicated all
9ff825849SDag-Erling Smørgrav// copyright and related and neighboring rights to this file to the public
10ff825849SDag-Erling Smørgrav// domain worldwide. This file is distributed without any warranty.
11ff825849SDag-Erling Smørgrav//
12ff825849SDag-Erling Smørgrav// You should have received a copy of the CC0 Public Domain Dedication along
13ff825849SDag-Erling Smørgrav// with this file. If not, see:
14ff825849SDag-Erling Smørgrav//
15ff825849SDag-Erling Smørgrav// <http://creativecommons.org/publicdomain/zero/1.0/>.
16ff825849SDag-Erling Smørgrav
17*b7c0c8c1SCy Schubertsyntax = "proto2";
18ff825849SDag-Erling Smørgravpackage dnstap;
19ff825849SDag-Erling Smørgrav
20ff825849SDag-Erling Smørgrav// "Dnstap": this is the top-level dnstap type, which is a "union" type that
21ff825849SDag-Erling Smørgrav// contains other kinds of dnstap payloads, although currently only one type
22ff825849SDag-Erling Smørgrav// of dnstap payload is defined.
23ff825849SDag-Erling Smørgrav// See: https://developers.google.com/protocol-buffers/docs/techniques#union
24ff825849SDag-Erling Smørgravmessage Dnstap {
25ff825849SDag-Erling Smørgrav    // DNS server identity.
26ff825849SDag-Erling Smørgrav    // If enabled, this is the identity string of the DNS server which generated
27ff825849SDag-Erling Smørgrav    // this message. Typically this would be the same string as returned by an
28ff825849SDag-Erling Smørgrav    // "NSID" (RFC 5001) query.
29ff825849SDag-Erling Smørgrav    optional bytes      identity = 1;
30ff825849SDag-Erling Smørgrav
31ff825849SDag-Erling Smørgrav    // DNS server version.
32ff825849SDag-Erling Smørgrav    // If enabled, this is the version string of the DNS server which generated
33ff825849SDag-Erling Smørgrav    // this message. Typically this would be the same string as returned by a
34ff825849SDag-Erling Smørgrav    // "version.bind" query.
35ff825849SDag-Erling Smørgrav    optional bytes      version = 2;
36ff825849SDag-Erling Smørgrav
37ff825849SDag-Erling Smørgrav    // Extra data for this payload.
38ff825849SDag-Erling Smørgrav    // This field can be used for adding an arbitrary byte-string annotation to
39ff825849SDag-Erling Smørgrav    // the payload. No encoding or interpretation is applied or enforced.
40ff825849SDag-Erling Smørgrav    optional bytes      extra = 3;
41ff825849SDag-Erling Smørgrav
42ff825849SDag-Erling Smørgrav    // Identifies which field below is filled in.
43ff825849SDag-Erling Smørgrav    enum Type {
44ff825849SDag-Erling Smørgrav        MESSAGE = 1;
45ff825849SDag-Erling Smørgrav    }
46ff825849SDag-Erling Smørgrav    required Type       type = 15;
47ff825849SDag-Erling Smørgrav
48ff825849SDag-Erling Smørgrav    // One of the following will be filled in.
49ff825849SDag-Erling Smørgrav    optional Message    message = 14;
50ff825849SDag-Erling Smørgrav}
51ff825849SDag-Erling Smørgrav
52ff825849SDag-Erling Smørgrav// SocketFamily: the network protocol family of a socket. This specifies how
53ff825849SDag-Erling Smørgrav// to interpret "network address" fields.
54ff825849SDag-Erling Smørgravenum SocketFamily {
55ff825849SDag-Erling Smørgrav    INET = 1;   // IPv4 (RFC 791)
56ff825849SDag-Erling Smørgrav    INET6 = 2;  // IPv6 (RFC 2460)
57ff825849SDag-Erling Smørgrav}
58ff825849SDag-Erling Smørgrav
59*b7c0c8c1SCy Schubert// SocketProtocol: the protocol used to transport a DNS message.
60ff825849SDag-Erling Smørgravenum SocketProtocol {
61*b7c0c8c1SCy Schubert    UDP = 1;         // DNS over UDP transport (RFC 1035 section 4.2.1)
62*b7c0c8c1SCy Schubert    TCP = 2;         // DNS over TCP transport (RFC 1035 section 4.2.2)
63*b7c0c8c1SCy Schubert    DOT = 3;         // DNS over TLS (RFC 7858)
64*b7c0c8c1SCy Schubert    DOH = 4;         // DNS over HTTPS (RFC 8484)
65*b7c0c8c1SCy Schubert    DNSCryptUDP = 5; // DNSCrypt over UDP (https://dnscrypt.info/protocol)
66*b7c0c8c1SCy Schubert    DNSCryptTCP = 6; // DNSCrypt over TCP (https://dnscrypt.info/protocol)
67*b7c0c8c1SCy Schubert    DOQ = 7;         // DNS over QUIC (RFC 9250)
68*b7c0c8c1SCy Schubert}
69*b7c0c8c1SCy Schubert
70*b7c0c8c1SCy Schubert// Policy: information about any name server operator policy
71*b7c0c8c1SCy Schubert// applied to the processing of a DNS message.
72*b7c0c8c1SCy Schubertmessage Policy {
73*b7c0c8c1SCy Schubert
74*b7c0c8c1SCy Schubert    // Match: what aspect of the message or message exchange
75*b7c0c8c1SCy Schubert    // triggered the application of the Policy.
76*b7c0c8c1SCy Schubert    enum Match {
77*b7c0c8c1SCy Schubert        QNAME = 1;       // Name in question section of query
78*b7c0c8c1SCy Schubert        CLIENT_IP = 2;   // Client IP address
79*b7c0c8c1SCy Schubert        RESPONSE_IP = 3; // Address in A/AAAA RRSet
80*b7c0c8c1SCy Schubert        NS_NAME = 4;     // Authoritative name server, by name
81*b7c0c8c1SCy Schubert        NS_IP = 5;       // Authoritative name server, by IP address
82*b7c0c8c1SCy Schubert    }
83*b7c0c8c1SCy Schubert
84*b7c0c8c1SCy Schubert    // The Action taken to implement the Policy.
85*b7c0c8c1SCy Schubert    enum Action {
86*b7c0c8c1SCy Schubert        NXDOMAIN = 1;   // Respond with NXDOMAIN
87*b7c0c8c1SCy Schubert        NODATA = 2;     // Respond with empty answer section
88*b7c0c8c1SCy Schubert        PASS = 3;       // Do not alter the response (passthrough)
89*b7c0c8c1SCy Schubert        DROP = 4;       // Do not respond.
90*b7c0c8c1SCy Schubert        TRUNCATE = 5;   // Truncate UDP response, forcing TCP retry
91*b7c0c8c1SCy Schubert        LOCAL_DATA = 6; // Respond with local data from policy
92*b7c0c8c1SCy Schubert    }
93*b7c0c8c1SCy Schubert
94*b7c0c8c1SCy Schubert    // type: the type of policy applied, e.g. "RPZ" for a
95*b7c0c8c1SCy Schubert    // policy from a Response Policy Zone.
96*b7c0c8c1SCy Schubert    optional string type = 1;
97*b7c0c8c1SCy Schubert
98*b7c0c8c1SCy Schubert    // rule: the rule matched by the message.
99*b7c0c8c1SCy Schubert    //
100*b7c0c8c1SCy Schubert    // In a RPZ context, this is the owner name of the rule in
101*b7c0c8c1SCy Schubert    // the Reponse Policy Zone in wire format.
102*b7c0c8c1SCy Schubert    optional bytes rule = 2;
103*b7c0c8c1SCy Schubert
104*b7c0c8c1SCy Schubert    // action: the policy action taken in response to the
105*b7c0c8c1SCy Schubert    // rule match.
106*b7c0c8c1SCy Schubert    optional Action action = 3;
107*b7c0c8c1SCy Schubert
108*b7c0c8c1SCy Schubert    // match: the feature of the message exchange which matched the rule.
109*b7c0c8c1SCy Schubert    optional Match match = 4;
110*b7c0c8c1SCy Schubert
111*b7c0c8c1SCy Schubert    // The matched value. Format depends on the matched feature .
112*b7c0c8c1SCy Schubert    optional bytes value = 5;
113ff825849SDag-Erling Smørgrav}
114ff825849SDag-Erling Smørgrav
115ff825849SDag-Erling Smørgrav// Message: a wire-format (RFC 1035 section 4) DNS message and associated
116ff825849SDag-Erling Smørgrav// metadata. Applications generating "Message" payloads should follow
117ff825849SDag-Erling Smørgrav// certain requirements based on the MessageType, see below.
118ff825849SDag-Erling Smørgravmessage Message {
119ff825849SDag-Erling Smørgrav
120ff825849SDag-Erling Smørgrav    // There are eight types of "Message" defined that correspond to the
121ff825849SDag-Erling Smørgrav    // four arrows in the following diagram, slightly modified from RFC 1035
122ff825849SDag-Erling Smørgrav    // section 2:
123ff825849SDag-Erling Smørgrav
124ff825849SDag-Erling Smørgrav    //    +---------+               +----------+           +--------+
125ff825849SDag-Erling Smørgrav    //    |         |     query     |          |   query   |        |
126ff825849SDag-Erling Smørgrav    //    | Stub    |-SQ--------CQ->| Recursive|-RQ----AQ->| Auth.  |
127ff825849SDag-Erling Smørgrav    //    | Resolver|               | Server   |           | Name   |
128ff825849SDag-Erling Smørgrav    //    |         |<-SR--------CR-|          |<-RR----AR-| Server |
129ff825849SDag-Erling Smørgrav    //    +---------+    response   |          |  response |        |
130ff825849SDag-Erling Smørgrav    //                              +----------+           +--------+
131ff825849SDag-Erling Smørgrav
132ff825849SDag-Erling Smørgrav    // Each arrow has two Type values each, one for each "end" of each arrow,
133ff825849SDag-Erling Smørgrav    // because these are considered to be distinct events. Each end of each
134ff825849SDag-Erling Smørgrav    // arrow on the diagram above has been marked with a two-letter Type
135ff825849SDag-Erling Smørgrav    // mnemonic. Clockwise from upper left, these mnemonic values are:
136ff825849SDag-Erling Smørgrav    //
137ff825849SDag-Erling Smørgrav    //   SQ:        STUB_QUERY
138ff825849SDag-Erling Smørgrav    //   CQ:      CLIENT_QUERY
139ff825849SDag-Erling Smørgrav    //   RQ:    RESOLVER_QUERY
140ff825849SDag-Erling Smørgrav    //   AQ:        AUTH_QUERY
141ff825849SDag-Erling Smørgrav    //   AR:        AUTH_RESPONSE
142ff825849SDag-Erling Smørgrav    //   RR:    RESOLVER_RESPONSE
143ff825849SDag-Erling Smørgrav    //   CR:      CLIENT_RESPONSE
144ff825849SDag-Erling Smørgrav    //   SR:        STUB_RESPONSE
145ff825849SDag-Erling Smørgrav
146ff825849SDag-Erling Smørgrav    // Two additional types of "Message" have been defined for the
147ff825849SDag-Erling Smørgrav    // "forwarding" case where an upstream DNS server is responsible for
148ff825849SDag-Erling Smørgrav    // further recursion. These are not shown on the diagram above, but have
149ff825849SDag-Erling Smørgrav    // the following mnemonic values:
150ff825849SDag-Erling Smørgrav
151ff825849SDag-Erling Smørgrav    //   FQ:   FORWARDER_QUERY
152ff825849SDag-Erling Smørgrav    //   FR:   FORWARDER_RESPONSE
153ff825849SDag-Erling Smørgrav
154ff825849SDag-Erling Smørgrav    // The "Message" Type values are defined below.
155ff825849SDag-Erling Smørgrav
156ff825849SDag-Erling Smørgrav    enum Type {
157ff825849SDag-Erling Smørgrav        // AUTH_QUERY is a DNS query message received from a resolver by an
15805ab2901SDag-Erling Smørgrav        // authoritative name server, from the perspective of the authoritative
159ff825849SDag-Erling Smørgrav        // name server.
160ff825849SDag-Erling Smørgrav        AUTH_QUERY = 1;
161ff825849SDag-Erling Smørgrav
162ff825849SDag-Erling Smørgrav        // AUTH_RESPONSE is a DNS response message sent from an authoritative
163ff825849SDag-Erling Smørgrav        // name server to a resolver, from the perspective of the authoritative
164ff825849SDag-Erling Smørgrav        // name server.
165ff825849SDag-Erling Smørgrav        AUTH_RESPONSE = 2;
166ff825849SDag-Erling Smørgrav
167ff825849SDag-Erling Smørgrav        // RESOLVER_QUERY is a DNS query message sent from a resolver to an
168ff825849SDag-Erling Smørgrav        // authoritative name server, from the perspective of the resolver.
169ff825849SDag-Erling Smørgrav        // Resolvers typically clear the RD (recursion desired) bit when
170ff825849SDag-Erling Smørgrav        // sending queries.
171ff825849SDag-Erling Smørgrav        RESOLVER_QUERY = 3;
172ff825849SDag-Erling Smørgrav
173ff825849SDag-Erling Smørgrav        // RESOLVER_RESPONSE is a DNS response message received from an
174ff825849SDag-Erling Smørgrav        // authoritative name server by a resolver, from the perspective of
175ff825849SDag-Erling Smørgrav        // the resolver.
176ff825849SDag-Erling Smørgrav        RESOLVER_RESPONSE = 4;
177ff825849SDag-Erling Smørgrav
178ff825849SDag-Erling Smørgrav        // CLIENT_QUERY is a DNS query message sent from a client to a DNS
179ff825849SDag-Erling Smørgrav        // server which is expected to perform further recursion, from the
180ff825849SDag-Erling Smørgrav        // perspective of the DNS server. The client may be a stub resolver or
181ff825849SDag-Erling Smørgrav        // forwarder or some other type of software which typically sets the RD
182ff825849SDag-Erling Smørgrav        // (recursion desired) bit when querying the DNS server. The DNS server
183ff825849SDag-Erling Smørgrav        // may be a simple forwarding proxy or it may be a full recursive
184ff825849SDag-Erling Smørgrav        // resolver.
185ff825849SDag-Erling Smørgrav        CLIENT_QUERY = 5;
186ff825849SDag-Erling Smørgrav
187ff825849SDag-Erling Smørgrav        // CLIENT_RESPONSE is a DNS response message sent from a DNS server to
188ff825849SDag-Erling Smørgrav        // a client, from the perspective of the DNS server. The DNS server
189ff825849SDag-Erling Smørgrav        // typically sets the RA (recursion available) bit when responding.
190ff825849SDag-Erling Smørgrav        CLIENT_RESPONSE = 6;
191ff825849SDag-Erling Smørgrav
192ff825849SDag-Erling Smørgrav        // FORWARDER_QUERY is a DNS query message sent from a downstream DNS
193ff825849SDag-Erling Smørgrav        // server to an upstream DNS server which is expected to perform
194ff825849SDag-Erling Smørgrav        // further recursion, from the perspective of the downstream DNS
195ff825849SDag-Erling Smørgrav        // server.
196ff825849SDag-Erling Smørgrav        FORWARDER_QUERY = 7;
197ff825849SDag-Erling Smørgrav
198ff825849SDag-Erling Smørgrav        // FORWARDER_RESPONSE is a DNS response message sent from an upstream
199ff825849SDag-Erling Smørgrav        // DNS server performing recursion to a downstream DNS server, from the
200ff825849SDag-Erling Smørgrav        // perspective of the downstream DNS server.
201ff825849SDag-Erling Smørgrav        FORWARDER_RESPONSE = 8;
202ff825849SDag-Erling Smørgrav
203ff825849SDag-Erling Smørgrav        // STUB_QUERY is a DNS query message sent from a stub resolver to a DNS
204ff825849SDag-Erling Smørgrav        // server, from the perspective of the stub resolver.
205ff825849SDag-Erling Smørgrav        STUB_QUERY = 9;
206ff825849SDag-Erling Smørgrav
207ff825849SDag-Erling Smørgrav        // STUB_RESPONSE is a DNS response message sent from a DNS server to a
208ff825849SDag-Erling Smørgrav        // stub resolver, from the perspective of the stub resolver.
209ff825849SDag-Erling Smørgrav        STUB_RESPONSE = 10;
210*b7c0c8c1SCy Schubert
211*b7c0c8c1SCy Schubert        // TOOL_QUERY is a DNS query message sent from a DNS software tool to a
212*b7c0c8c1SCy Schubert        // DNS server, from the perspective of the tool.
213*b7c0c8c1SCy Schubert        TOOL_QUERY = 11;
214*b7c0c8c1SCy Schubert
215*b7c0c8c1SCy Schubert        // TOOL_RESPONSE is a DNS response message received by a DNS software
216*b7c0c8c1SCy Schubert        // tool from a DNS server, from the perspective of the tool.
217*b7c0c8c1SCy Schubert        TOOL_RESPONSE = 12;
218*b7c0c8c1SCy Schubert
219*b7c0c8c1SCy Schubert        // UPDATE_QUERY is a Dynamic DNS Update request (RFC 2136) received
220*b7c0c8c1SCy Schubert        // by an authoritative name server, from the perspective of the
221*b7c0c8c1SCy Schubert        // authoritative name server.
222*b7c0c8c1SCy Schubert        UPDATE_QUERY = 13;
223*b7c0c8c1SCy Schubert
224*b7c0c8c1SCy Schubert        // UPDATE_RESPONSE is a Dynamic DNS Update response (RFC 2136) sent
225*b7c0c8c1SCy Schubert        // from an authoritative name server, from the perspective of the
226*b7c0c8c1SCy Schubert        // authoritative name server.
227*b7c0c8c1SCy Schubert        UPDATE_RESPONSE = 14;
228ff825849SDag-Erling Smørgrav    }
229ff825849SDag-Erling Smørgrav
230ff825849SDag-Erling Smørgrav    // One of the Type values described above.
231ff825849SDag-Erling Smørgrav    required Type               type = 1;
232ff825849SDag-Erling Smørgrav
233ff825849SDag-Erling Smørgrav    // One of the SocketFamily values described above.
234ff825849SDag-Erling Smørgrav    optional SocketFamily       socket_family = 2;
235ff825849SDag-Erling Smørgrav
236ff825849SDag-Erling Smørgrav    // One of the SocketProtocol values described above.
237ff825849SDag-Erling Smørgrav    optional SocketProtocol     socket_protocol = 3;
238ff825849SDag-Erling Smørgrav
239ff825849SDag-Erling Smørgrav    // The network address of the message initiator.
240ff825849SDag-Erling Smørgrav    // For SocketFamily INET, this field is 4 octets (IPv4 address).
241ff825849SDag-Erling Smørgrav    // For SocketFamily INET6, this field is 16 octets (IPv6 address).
242ff825849SDag-Erling Smørgrav    optional bytes              query_address = 4;
243ff825849SDag-Erling Smørgrav
244ff825849SDag-Erling Smørgrav    // The network address of the message responder.
245ff825849SDag-Erling Smørgrav    // For SocketFamily INET, this field is 4 octets (IPv4 address).
246ff825849SDag-Erling Smørgrav    // For SocketFamily INET6, this field is 16 octets (IPv6 address).
247ff825849SDag-Erling Smørgrav    optional bytes              response_address = 5;
248ff825849SDag-Erling Smørgrav
249ff825849SDag-Erling Smørgrav    // The transport port of the message initiator.
250ff825849SDag-Erling Smørgrav    // This is a 16-bit UDP or TCP port number, depending on SocketProtocol.
251ff825849SDag-Erling Smørgrav    optional uint32             query_port = 6;
252ff825849SDag-Erling Smørgrav
253ff825849SDag-Erling Smørgrav    // The transport port of the message responder.
254ff825849SDag-Erling Smørgrav    // This is a 16-bit UDP or TCP port number, depending on SocketProtocol.
255ff825849SDag-Erling Smørgrav    optional uint32             response_port = 7;
256ff825849SDag-Erling Smørgrav
257ff825849SDag-Erling Smørgrav    // The time at which the DNS query message was sent or received, depending
258ff825849SDag-Erling Smørgrav    // on whether this is an AUTH_QUERY, RESOLVER_QUERY, or CLIENT_QUERY.
259ff825849SDag-Erling Smørgrav    // This is the number of seconds since the UNIX epoch.
260ff825849SDag-Erling Smørgrav    optional uint64             query_time_sec = 8;
261ff825849SDag-Erling Smørgrav
262ff825849SDag-Erling Smørgrav    // The time at which the DNS query message was sent or received.
263ff825849SDag-Erling Smørgrav    // This is the seconds fraction, expressed as a count of nanoseconds.
264ff825849SDag-Erling Smørgrav    optional fixed32            query_time_nsec = 9;
265ff825849SDag-Erling Smørgrav
266ff825849SDag-Erling Smørgrav    // The initiator's original wire-format DNS query message, verbatim.
267ff825849SDag-Erling Smørgrav    optional bytes              query_message = 10;
268ff825849SDag-Erling Smørgrav
269ff825849SDag-Erling Smørgrav    // The "zone" or "bailiwick" pertaining to the DNS query message.
270ff825849SDag-Erling Smørgrav    // This is a wire-format DNS domain name.
271ff825849SDag-Erling Smørgrav    optional bytes              query_zone = 11;
272ff825849SDag-Erling Smørgrav
273ff825849SDag-Erling Smørgrav    // The time at which the DNS response message was sent or received,
274ff825849SDag-Erling Smørgrav    // depending on whether this is an AUTH_RESPONSE, RESOLVER_RESPONSE, or
275ff825849SDag-Erling Smørgrav    // CLIENT_RESPONSE.
276ff825849SDag-Erling Smørgrav    // This is the number of seconds since the UNIX epoch.
277ff825849SDag-Erling Smørgrav    optional uint64             response_time_sec = 12;
278ff825849SDag-Erling Smørgrav
279ff825849SDag-Erling Smørgrav    // The time at which the DNS response message was sent or received.
280ff825849SDag-Erling Smørgrav    // This is the seconds fraction, expressed as a count of nanoseconds.
281ff825849SDag-Erling Smørgrav    optional fixed32            response_time_nsec = 13;
282ff825849SDag-Erling Smørgrav
283ff825849SDag-Erling Smørgrav    // The responder's original wire-format DNS response message, verbatim.
284ff825849SDag-Erling Smørgrav    optional bytes              response_message = 14;
285*b7c0c8c1SCy Schubert
286*b7c0c8c1SCy Schubert    // Operator policy applied to the processing of this message, if any.
287*b7c0c8c1SCy Schubert    optional Policy             policy = 15;
288ff825849SDag-Erling Smørgrav}
289ff825849SDag-Erling Smørgrav
290ff825849SDag-Erling Smørgrav// All fields except for 'type' in the Message schema are optional.
291ff825849SDag-Erling Smørgrav// It is recommended that at least the following fields be filled in for
292ff825849SDag-Erling Smørgrav// particular types of Messages.
293ff825849SDag-Erling Smørgrav
294ff825849SDag-Erling Smørgrav// AUTH_QUERY:
295ff825849SDag-Erling Smørgrav//      socket_family, socket_protocol
296ff825849SDag-Erling Smørgrav//      query_address, query_port
297ff825849SDag-Erling Smørgrav//      query_message
298ff825849SDag-Erling Smørgrav//      query_time_sec, query_time_nsec
299ff825849SDag-Erling Smørgrav
300ff825849SDag-Erling Smørgrav// AUTH_RESPONSE:
301ff825849SDag-Erling Smørgrav//      socket_family, socket_protocol
302ff825849SDag-Erling Smørgrav//      query_address, query_port
303ff825849SDag-Erling Smørgrav//      query_time_sec, query_time_nsec
304ff825849SDag-Erling Smørgrav//      response_message
305ff825849SDag-Erling Smørgrav//      response_time_sec, response_time_nsec
306ff825849SDag-Erling Smørgrav
307ff825849SDag-Erling Smørgrav// RESOLVER_QUERY:
308ff825849SDag-Erling Smørgrav//      socket_family, socket_protocol
309ff825849SDag-Erling Smørgrav//      query_message
310ff825849SDag-Erling Smørgrav//      query_time_sec, query_time_nsec
311ff825849SDag-Erling Smørgrav//      query_zone
312ff825849SDag-Erling Smørgrav//      response_address, response_port
313ff825849SDag-Erling Smørgrav
314ff825849SDag-Erling Smørgrav// RESOLVER_RESPONSE:
315ff825849SDag-Erling Smørgrav//      socket_family, socket_protocol
316ff825849SDag-Erling Smørgrav//      query_time_sec, query_time_nsec
317ff825849SDag-Erling Smørgrav//      query_zone
318ff825849SDag-Erling Smørgrav//      response_address, response_port
319ff825849SDag-Erling Smørgrav//      response_message
320ff825849SDag-Erling Smørgrav//      response_time_sec, response_time_nsec
321ff825849SDag-Erling Smørgrav
322ff825849SDag-Erling Smørgrav// CLIENT_QUERY:
323ff825849SDag-Erling Smørgrav//      socket_family, socket_protocol
324ff825849SDag-Erling Smørgrav//      query_message
325ff825849SDag-Erling Smørgrav//      query_time_sec, query_time_nsec
326ff825849SDag-Erling Smørgrav
327ff825849SDag-Erling Smørgrav// CLIENT_RESPONSE:
328ff825849SDag-Erling Smørgrav//      socket_family, socket_protocol
329ff825849SDag-Erling Smørgrav//      query_time_sec, query_time_nsec
330ff825849SDag-Erling Smørgrav//      response_message
331ff825849SDag-Erling Smørgrav//      response_time_sec, response_time_nsec
332