1// Code generated by "go run types_generate.go"; DO NOT EDIT.
2
3package dns
4
5import (
6	"encoding/base64"
7	"net"
8)
9
10// TypeToRR is a map of constructors for each RR type.
11var TypeToRR = map[uint16]func() RR{
12	TypeA:          func() RR { return new(A) },
13	TypeAAAA:       func() RR { return new(AAAA) },
14	TypeAFSDB:      func() RR { return new(AFSDB) },
15	TypeANY:        func() RR { return new(ANY) },
16	TypeAPL:        func() RR { return new(APL) },
17	TypeAVC:        func() RR { return new(AVC) },
18	TypeCAA:        func() RR { return new(CAA) },
19	TypeCDNSKEY:    func() RR { return new(CDNSKEY) },
20	TypeCDS:        func() RR { return new(CDS) },
21	TypeCERT:       func() RR { return new(CERT) },
22	TypeCNAME:      func() RR { return new(CNAME) },
23	TypeCSYNC:      func() RR { return new(CSYNC) },
24	TypeDHCID:      func() RR { return new(DHCID) },
25	TypeDLV:        func() RR { return new(DLV) },
26	TypeDNAME:      func() RR { return new(DNAME) },
27	TypeDNSKEY:     func() RR { return new(DNSKEY) },
28	TypeDS:         func() RR { return new(DS) },
29	TypeEID:        func() RR { return new(EID) },
30	TypeEUI48:      func() RR { return new(EUI48) },
31	TypeEUI64:      func() RR { return new(EUI64) },
32	TypeGID:        func() RR { return new(GID) },
33	TypeGPOS:       func() RR { return new(GPOS) },
34	TypeHINFO:      func() RR { return new(HINFO) },
35	TypeHIP:        func() RR { return new(HIP) },
36	TypeHTTPS:      func() RR { return new(HTTPS) },
37	TypeKEY:        func() RR { return new(KEY) },
38	TypeKX:         func() RR { return new(KX) },
39	TypeL32:        func() RR { return new(L32) },
40	TypeL64:        func() RR { return new(L64) },
41	TypeLOC:        func() RR { return new(LOC) },
42	TypeLP:         func() RR { return new(LP) },
43	TypeMB:         func() RR { return new(MB) },
44	TypeMD:         func() RR { return new(MD) },
45	TypeMF:         func() RR { return new(MF) },
46	TypeMG:         func() RR { return new(MG) },
47	TypeMINFO:      func() RR { return new(MINFO) },
48	TypeMR:         func() RR { return new(MR) },
49	TypeMX:         func() RR { return new(MX) },
50	TypeNAPTR:      func() RR { return new(NAPTR) },
51	TypeNID:        func() RR { return new(NID) },
52	TypeNIMLOC:     func() RR { return new(NIMLOC) },
53	TypeNINFO:      func() RR { return new(NINFO) },
54	TypeNS:         func() RR { return new(NS) },
55	TypeNSAPPTR:    func() RR { return new(NSAPPTR) },
56	TypeNSEC:       func() RR { return new(NSEC) },
57	TypeNSEC3:      func() RR { return new(NSEC3) },
58	TypeNSEC3PARAM: func() RR { return new(NSEC3PARAM) },
59	TypeNULL:       func() RR { return new(NULL) },
60	TypeOPENPGPKEY: func() RR { return new(OPENPGPKEY) },
61	TypeOPT:        func() RR { return new(OPT) },
62	TypePTR:        func() RR { return new(PTR) },
63	TypePX:         func() RR { return new(PX) },
64	TypeRKEY:       func() RR { return new(RKEY) },
65	TypeRP:         func() RR { return new(RP) },
66	TypeRRSIG:      func() RR { return new(RRSIG) },
67	TypeRT:         func() RR { return new(RT) },
68	TypeSIG:        func() RR { return new(SIG) },
69	TypeSMIMEA:     func() RR { return new(SMIMEA) },
70	TypeSOA:        func() RR { return new(SOA) },
71	TypeSPF:        func() RR { return new(SPF) },
72	TypeSRV:        func() RR { return new(SRV) },
73	TypeSSHFP:      func() RR { return new(SSHFP) },
74	TypeSVCB:       func() RR { return new(SVCB) },
75	TypeTA:         func() RR { return new(TA) },
76	TypeTALINK:     func() RR { return new(TALINK) },
77	TypeTKEY:       func() RR { return new(TKEY) },
78	TypeTLSA:       func() RR { return new(TLSA) },
79	TypeTSIG:       func() RR { return new(TSIG) },
80	TypeTXT:        func() RR { return new(TXT) },
81	TypeUID:        func() RR { return new(UID) },
82	TypeUINFO:      func() RR { return new(UINFO) },
83	TypeURI:        func() RR { return new(URI) },
84	TypeX25:        func() RR { return new(X25) },
85}
86
87// TypeToString is a map of strings for each RR type.
88var TypeToString = map[uint16]string{
89	TypeA:          "A",
90	TypeAAAA:       "AAAA",
91	TypeAFSDB:      "AFSDB",
92	TypeANY:        "ANY",
93	TypeAPL:        "APL",
94	TypeATMA:       "ATMA",
95	TypeAVC:        "AVC",
96	TypeAXFR:       "AXFR",
97	TypeCAA:        "CAA",
98	TypeCDNSKEY:    "CDNSKEY",
99	TypeCDS:        "CDS",
100	TypeCERT:       "CERT",
101	TypeCNAME:      "CNAME",
102	TypeCSYNC:      "CSYNC",
103	TypeDHCID:      "DHCID",
104	TypeDLV:        "DLV",
105	TypeDNAME:      "DNAME",
106	TypeDNSKEY:     "DNSKEY",
107	TypeDS:         "DS",
108	TypeEID:        "EID",
109	TypeEUI48:      "EUI48",
110	TypeEUI64:      "EUI64",
111	TypeGID:        "GID",
112	TypeGPOS:       "GPOS",
113	TypeHINFO:      "HINFO",
114	TypeHIP:        "HIP",
115	TypeHTTPS:      "HTTPS",
116	TypeISDN:       "ISDN",
117	TypeIXFR:       "IXFR",
118	TypeKEY:        "KEY",
119	TypeKX:         "KX",
120	TypeL32:        "L32",
121	TypeL64:        "L64",
122	TypeLOC:        "LOC",
123	TypeLP:         "LP",
124	TypeMAILA:      "MAILA",
125	TypeMAILB:      "MAILB",
126	TypeMB:         "MB",
127	TypeMD:         "MD",
128	TypeMF:         "MF",
129	TypeMG:         "MG",
130	TypeMINFO:      "MINFO",
131	TypeMR:         "MR",
132	TypeMX:         "MX",
133	TypeNAPTR:      "NAPTR",
134	TypeNID:        "NID",
135	TypeNIMLOC:     "NIMLOC",
136	TypeNINFO:      "NINFO",
137	TypeNS:         "NS",
138	TypeNSEC:       "NSEC",
139	TypeNSEC3:      "NSEC3",
140	TypeNSEC3PARAM: "NSEC3PARAM",
141	TypeNULL:       "NULL",
142	TypeNXT:        "NXT",
143	TypeNone:       "None",
144	TypeOPENPGPKEY: "OPENPGPKEY",
145	TypeOPT:        "OPT",
146	TypePTR:        "PTR",
147	TypePX:         "PX",
148	TypeRKEY:       "RKEY",
149	TypeRP:         "RP",
150	TypeRRSIG:      "RRSIG",
151	TypeRT:         "RT",
152	TypeReserved:   "Reserved",
153	TypeSIG:        "SIG",
154	TypeSMIMEA:     "SMIMEA",
155	TypeSOA:        "SOA",
156	TypeSPF:        "SPF",
157	TypeSRV:        "SRV",
158	TypeSSHFP:      "SSHFP",
159	TypeSVCB:       "SVCB",
160	TypeTA:         "TA",
161	TypeTALINK:     "TALINK",
162	TypeTKEY:       "TKEY",
163	TypeTLSA:       "TLSA",
164	TypeTSIG:       "TSIG",
165	TypeTXT:        "TXT",
166	TypeUID:        "UID",
167	TypeUINFO:      "UINFO",
168	TypeUNSPEC:     "UNSPEC",
169	TypeURI:        "URI",
170	TypeX25:        "X25",
171	TypeNSAPPTR:    "NSAP-PTR",
172}
173
174func (rr *A) Header() *RR_Header          { return &rr.Hdr }
175func (rr *AAAA) Header() *RR_Header       { return &rr.Hdr }
176func (rr *AFSDB) Header() *RR_Header      { return &rr.Hdr }
177func (rr *ANY) Header() *RR_Header        { return &rr.Hdr }
178func (rr *APL) Header() *RR_Header        { return &rr.Hdr }
179func (rr *AVC) Header() *RR_Header        { return &rr.Hdr }
180func (rr *CAA) Header() *RR_Header        { return &rr.Hdr }
181func (rr *CDNSKEY) Header() *RR_Header    { return &rr.Hdr }
182func (rr *CDS) Header() *RR_Header        { return &rr.Hdr }
183func (rr *CERT) Header() *RR_Header       { return &rr.Hdr }
184func (rr *CNAME) Header() *RR_Header      { return &rr.Hdr }
185func (rr *CSYNC) Header() *RR_Header      { return &rr.Hdr }
186func (rr *DHCID) Header() *RR_Header      { return &rr.Hdr }
187func (rr *DLV) Header() *RR_Header        { return &rr.Hdr }
188func (rr *DNAME) Header() *RR_Header      { return &rr.Hdr }
189func (rr *DNSKEY) Header() *RR_Header     { return &rr.Hdr }
190func (rr *DS) Header() *RR_Header         { return &rr.Hdr }
191func (rr *EID) Header() *RR_Header        { return &rr.Hdr }
192func (rr *EUI48) Header() *RR_Header      { return &rr.Hdr }
193func (rr *EUI64) Header() *RR_Header      { return &rr.Hdr }
194func (rr *GID) Header() *RR_Header        { return &rr.Hdr }
195func (rr *GPOS) Header() *RR_Header       { return &rr.Hdr }
196func (rr *HINFO) Header() *RR_Header      { return &rr.Hdr }
197func (rr *HIP) Header() *RR_Header        { return &rr.Hdr }
198func (rr *HTTPS) Header() *RR_Header      { return &rr.Hdr }
199func (rr *KEY) Header() *RR_Header        { return &rr.Hdr }
200func (rr *KX) Header() *RR_Header         { return &rr.Hdr }
201func (rr *L32) Header() *RR_Header        { return &rr.Hdr }
202func (rr *L64) Header() *RR_Header        { return &rr.Hdr }
203func (rr *LOC) Header() *RR_Header        { return &rr.Hdr }
204func (rr *LP) Header() *RR_Header         { return &rr.Hdr }
205func (rr *MB) Header() *RR_Header         { return &rr.Hdr }
206func (rr *MD) Header() *RR_Header         { return &rr.Hdr }
207func (rr *MF) Header() *RR_Header         { return &rr.Hdr }
208func (rr *MG) Header() *RR_Header         { return &rr.Hdr }
209func (rr *MINFO) Header() *RR_Header      { return &rr.Hdr }
210func (rr *MR) Header() *RR_Header         { return &rr.Hdr }
211func (rr *MX) Header() *RR_Header         { return &rr.Hdr }
212func (rr *NAPTR) Header() *RR_Header      { return &rr.Hdr }
213func (rr *NID) Header() *RR_Header        { return &rr.Hdr }
214func (rr *NIMLOC) Header() *RR_Header     { return &rr.Hdr }
215func (rr *NINFO) Header() *RR_Header      { return &rr.Hdr }
216func (rr *NS) Header() *RR_Header         { return &rr.Hdr }
217func (rr *NSAPPTR) Header() *RR_Header    { return &rr.Hdr }
218func (rr *NSEC) Header() *RR_Header       { return &rr.Hdr }
219func (rr *NSEC3) Header() *RR_Header      { return &rr.Hdr }
220func (rr *NSEC3PARAM) Header() *RR_Header { return &rr.Hdr }
221func (rr *NULL) Header() *RR_Header       { return &rr.Hdr }
222func (rr *OPENPGPKEY) Header() *RR_Header { return &rr.Hdr }
223func (rr *OPT) Header() *RR_Header        { return &rr.Hdr }
224func (rr *PTR) Header() *RR_Header        { return &rr.Hdr }
225func (rr *PX) Header() *RR_Header         { return &rr.Hdr }
226func (rr *RFC3597) Header() *RR_Header    { return &rr.Hdr }
227func (rr *RKEY) Header() *RR_Header       { return &rr.Hdr }
228func (rr *RP) Header() *RR_Header         { return &rr.Hdr }
229func (rr *RRSIG) Header() *RR_Header      { return &rr.Hdr }
230func (rr *RT) Header() *RR_Header         { return &rr.Hdr }
231func (rr *SIG) Header() *RR_Header        { return &rr.Hdr }
232func (rr *SMIMEA) Header() *RR_Header     { return &rr.Hdr }
233func (rr *SOA) Header() *RR_Header        { return &rr.Hdr }
234func (rr *SPF) Header() *RR_Header        { return &rr.Hdr }
235func (rr *SRV) Header() *RR_Header        { return &rr.Hdr }
236func (rr *SSHFP) Header() *RR_Header      { return &rr.Hdr }
237func (rr *SVCB) Header() *RR_Header       { return &rr.Hdr }
238func (rr *TA) Header() *RR_Header         { return &rr.Hdr }
239func (rr *TALINK) Header() *RR_Header     { return &rr.Hdr }
240func (rr *TKEY) Header() *RR_Header       { return &rr.Hdr }
241func (rr *TLSA) Header() *RR_Header       { return &rr.Hdr }
242func (rr *TSIG) Header() *RR_Header       { return &rr.Hdr }
243func (rr *TXT) Header() *RR_Header        { return &rr.Hdr }
244func (rr *UID) Header() *RR_Header        { return &rr.Hdr }
245func (rr *UINFO) Header() *RR_Header      { return &rr.Hdr }
246func (rr *URI) Header() *RR_Header        { return &rr.Hdr }
247func (rr *X25) Header() *RR_Header        { return &rr.Hdr }
248
249// len() functions
250func (rr *A) len(off int, compression map[string]struct{}) int {
251	l := rr.Hdr.len(off, compression)
252	if len(rr.A) != 0 {
253		l += net.IPv4len
254	}
255	return l
256}
257func (rr *AAAA) len(off int, compression map[string]struct{}) int {
258	l := rr.Hdr.len(off, compression)
259	if len(rr.AAAA) != 0 {
260		l += net.IPv6len
261	}
262	return l
263}
264func (rr *AFSDB) len(off int, compression map[string]struct{}) int {
265	l := rr.Hdr.len(off, compression)
266	l += 2 // Subtype
267	l += domainNameLen(rr.Hostname, off+l, compression, false)
268	return l
269}
270func (rr *ANY) len(off int, compression map[string]struct{}) int {
271	l := rr.Hdr.len(off, compression)
272	return l
273}
274func (rr *APL) len(off int, compression map[string]struct{}) int {
275	l := rr.Hdr.len(off, compression)
276	for _, x := range rr.Prefixes {
277		l += x.len()
278	}
279	return l
280}
281func (rr *AVC) len(off int, compression map[string]struct{}) int {
282	l := rr.Hdr.len(off, compression)
283	for _, x := range rr.Txt {
284		l += len(x) + 1
285	}
286	return l
287}
288func (rr *CAA) len(off int, compression map[string]struct{}) int {
289	l := rr.Hdr.len(off, compression)
290	l++ // Flag
291	l += len(rr.Tag) + 1
292	l += len(rr.Value)
293	return l
294}
295func (rr *CERT) len(off int, compression map[string]struct{}) int {
296	l := rr.Hdr.len(off, compression)
297	l += 2 // Type
298	l += 2 // KeyTag
299	l++    // Algorithm
300	l += base64.StdEncoding.DecodedLen(len(rr.Certificate))
301	return l
302}
303func (rr *CNAME) len(off int, compression map[string]struct{}) int {
304	l := rr.Hdr.len(off, compression)
305	l += domainNameLen(rr.Target, off+l, compression, true)
306	return l
307}
308func (rr *DHCID) len(off int, compression map[string]struct{}) int {
309	l := rr.Hdr.len(off, compression)
310	l += base64.StdEncoding.DecodedLen(len(rr.Digest))
311	return l
312}
313func (rr *DNAME) len(off int, compression map[string]struct{}) int {
314	l := rr.Hdr.len(off, compression)
315	l += domainNameLen(rr.Target, off+l, compression, false)
316	return l
317}
318func (rr *DNSKEY) len(off int, compression map[string]struct{}) int {
319	l := rr.Hdr.len(off, compression)
320	l += 2 // Flags
321	l++    // Protocol
322	l++    // Algorithm
323	l += base64.StdEncoding.DecodedLen(len(rr.PublicKey))
324	return l
325}
326func (rr *DS) len(off int, compression map[string]struct{}) int {
327	l := rr.Hdr.len(off, compression)
328	l += 2 // KeyTag
329	l++    // Algorithm
330	l++    // DigestType
331	l += len(rr.Digest) / 2
332	return l
333}
334func (rr *EID) len(off int, compression map[string]struct{}) int {
335	l := rr.Hdr.len(off, compression)
336	l += len(rr.Endpoint) / 2
337	return l
338}
339func (rr *EUI48) len(off int, compression map[string]struct{}) int {
340	l := rr.Hdr.len(off, compression)
341	l += 6 // Address
342	return l
343}
344func (rr *EUI64) len(off int, compression map[string]struct{}) int {
345	l := rr.Hdr.len(off, compression)
346	l += 8 // Address
347	return l
348}
349func (rr *GID) len(off int, compression map[string]struct{}) int {
350	l := rr.Hdr.len(off, compression)
351	l += 4 // Gid
352	return l
353}
354func (rr *GPOS) len(off int, compression map[string]struct{}) int {
355	l := rr.Hdr.len(off, compression)
356	l += len(rr.Longitude) + 1
357	l += len(rr.Latitude) + 1
358	l += len(rr.Altitude) + 1
359	return l
360}
361func (rr *HINFO) len(off int, compression map[string]struct{}) int {
362	l := rr.Hdr.len(off, compression)
363	l += len(rr.Cpu) + 1
364	l += len(rr.Os) + 1
365	return l
366}
367func (rr *HIP) len(off int, compression map[string]struct{}) int {
368	l := rr.Hdr.len(off, compression)
369	l++    // HitLength
370	l++    // PublicKeyAlgorithm
371	l += 2 // PublicKeyLength
372	l += len(rr.Hit) / 2
373	l += base64.StdEncoding.DecodedLen(len(rr.PublicKey))
374	for _, x := range rr.RendezvousServers {
375		l += domainNameLen(x, off+l, compression, false)
376	}
377	return l
378}
379func (rr *KX) len(off int, compression map[string]struct{}) int {
380	l := rr.Hdr.len(off, compression)
381	l += 2 // Preference
382	l += domainNameLen(rr.Exchanger, off+l, compression, false)
383	return l
384}
385func (rr *L32) len(off int, compression map[string]struct{}) int {
386	l := rr.Hdr.len(off, compression)
387	l += 2 // Preference
388	if len(rr.Locator32) != 0 {
389		l += net.IPv4len
390	}
391	return l
392}
393func (rr *L64) len(off int, compression map[string]struct{}) int {
394	l := rr.Hdr.len(off, compression)
395	l += 2 // Preference
396	l += 8 // Locator64
397	return l
398}
399func (rr *LOC) len(off int, compression map[string]struct{}) int {
400	l := rr.Hdr.len(off, compression)
401	l++    // Version
402	l++    // Size
403	l++    // HorizPre
404	l++    // VertPre
405	l += 4 // Latitude
406	l += 4 // Longitude
407	l += 4 // Altitude
408	return l
409}
410func (rr *LP) len(off int, compression map[string]struct{}) int {
411	l := rr.Hdr.len(off, compression)
412	l += 2 // Preference
413	l += domainNameLen(rr.Fqdn, off+l, compression, false)
414	return l
415}
416func (rr *MB) len(off int, compression map[string]struct{}) int {
417	l := rr.Hdr.len(off, compression)
418	l += domainNameLen(rr.Mb, off+l, compression, true)
419	return l
420}
421func (rr *MD) len(off int, compression map[string]struct{}) int {
422	l := rr.Hdr.len(off, compression)
423	l += domainNameLen(rr.Md, off+l, compression, true)
424	return l
425}
426func (rr *MF) len(off int, compression map[string]struct{}) int {
427	l := rr.Hdr.len(off, compression)
428	l += domainNameLen(rr.Mf, off+l, compression, true)
429	return l
430}
431func (rr *MG) len(off int, compression map[string]struct{}) int {
432	l := rr.Hdr.len(off, compression)
433	l += domainNameLen(rr.Mg, off+l, compression, true)
434	return l
435}
436func (rr *MINFO) len(off int, compression map[string]struct{}) int {
437	l := rr.Hdr.len(off, compression)
438	l += domainNameLen(rr.Rmail, off+l, compression, true)
439	l += domainNameLen(rr.Email, off+l, compression, true)
440	return l
441}
442func (rr *MR) len(off int, compression map[string]struct{}) int {
443	l := rr.Hdr.len(off, compression)
444	l += domainNameLen(rr.Mr, off+l, compression, true)
445	return l
446}
447func (rr *MX) len(off int, compression map[string]struct{}) int {
448	l := rr.Hdr.len(off, compression)
449	l += 2 // Preference
450	l += domainNameLen(rr.Mx, off+l, compression, true)
451	return l
452}
453func (rr *NAPTR) len(off int, compression map[string]struct{}) int {
454	l := rr.Hdr.len(off, compression)
455	l += 2 // Order
456	l += 2 // Preference
457	l += len(rr.Flags) + 1
458	l += len(rr.Service) + 1
459	l += len(rr.Regexp) + 1
460	l += domainNameLen(rr.Replacement, off+l, compression, false)
461	return l
462}
463func (rr *NID) len(off int, compression map[string]struct{}) int {
464	l := rr.Hdr.len(off, compression)
465	l += 2 // Preference
466	l += 8 // NodeID
467	return l
468}
469func (rr *NIMLOC) len(off int, compression map[string]struct{}) int {
470	l := rr.Hdr.len(off, compression)
471	l += len(rr.Locator) / 2
472	return l
473}
474func (rr *NINFO) len(off int, compression map[string]struct{}) int {
475	l := rr.Hdr.len(off, compression)
476	for _, x := range rr.ZSData {
477		l += len(x) + 1
478	}
479	return l
480}
481func (rr *NS) len(off int, compression map[string]struct{}) int {
482	l := rr.Hdr.len(off, compression)
483	l += domainNameLen(rr.Ns, off+l, compression, true)
484	return l
485}
486func (rr *NSAPPTR) len(off int, compression map[string]struct{}) int {
487	l := rr.Hdr.len(off, compression)
488	l += domainNameLen(rr.Ptr, off+l, compression, false)
489	return l
490}
491func (rr *NSEC3PARAM) len(off int, compression map[string]struct{}) int {
492	l := rr.Hdr.len(off, compression)
493	l++    // Hash
494	l++    // Flags
495	l += 2 // Iterations
496	l++    // SaltLength
497	l += len(rr.Salt) / 2
498	return l
499}
500func (rr *NULL) len(off int, compression map[string]struct{}) int {
501	l := rr.Hdr.len(off, compression)
502	l += len(rr.Data)
503	return l
504}
505func (rr *OPENPGPKEY) len(off int, compression map[string]struct{}) int {
506	l := rr.Hdr.len(off, compression)
507	l += base64.StdEncoding.DecodedLen(len(rr.PublicKey))
508	return l
509}
510func (rr *PTR) len(off int, compression map[string]struct{}) int {
511	l := rr.Hdr.len(off, compression)
512	l += domainNameLen(rr.Ptr, off+l, compression, true)
513	return l
514}
515func (rr *PX) len(off int, compression map[string]struct{}) int {
516	l := rr.Hdr.len(off, compression)
517	l += 2 // Preference
518	l += domainNameLen(rr.Map822, off+l, compression, false)
519	l += domainNameLen(rr.Mapx400, off+l, compression, false)
520	return l
521}
522func (rr *RFC3597) len(off int, compression map[string]struct{}) int {
523	l := rr.Hdr.len(off, compression)
524	l += len(rr.Rdata) / 2
525	return l
526}
527func (rr *RKEY) len(off int, compression map[string]struct{}) int {
528	l := rr.Hdr.len(off, compression)
529	l += 2 // Flags
530	l++    // Protocol
531	l++    // Algorithm
532	l += base64.StdEncoding.DecodedLen(len(rr.PublicKey))
533	return l
534}
535func (rr *RP) len(off int, compression map[string]struct{}) int {
536	l := rr.Hdr.len(off, compression)
537	l += domainNameLen(rr.Mbox, off+l, compression, false)
538	l += domainNameLen(rr.Txt, off+l, compression, false)
539	return l
540}
541func (rr *RRSIG) len(off int, compression map[string]struct{}) int {
542	l := rr.Hdr.len(off, compression)
543	l += 2 // TypeCovered
544	l++    // Algorithm
545	l++    // Labels
546	l += 4 // OrigTtl
547	l += 4 // Expiration
548	l += 4 // Inception
549	l += 2 // KeyTag
550	l += domainNameLen(rr.SignerName, off+l, compression, false)
551	l += base64.StdEncoding.DecodedLen(len(rr.Signature))
552	return l
553}
554func (rr *RT) len(off int, compression map[string]struct{}) int {
555	l := rr.Hdr.len(off, compression)
556	l += 2 // Preference
557	l += domainNameLen(rr.Host, off+l, compression, false)
558	return l
559}
560func (rr *SMIMEA) len(off int, compression map[string]struct{}) int {
561	l := rr.Hdr.len(off, compression)
562	l++ // Usage
563	l++ // Selector
564	l++ // MatchingType
565	l += len(rr.Certificate) / 2
566	return l
567}
568func (rr *SOA) len(off int, compression map[string]struct{}) int {
569	l := rr.Hdr.len(off, compression)
570	l += domainNameLen(rr.Ns, off+l, compression, true)
571	l += domainNameLen(rr.Mbox, off+l, compression, true)
572	l += 4 // Serial
573	l += 4 // Refresh
574	l += 4 // Retry
575	l += 4 // Expire
576	l += 4 // Minttl
577	return l
578}
579func (rr *SPF) len(off int, compression map[string]struct{}) int {
580	l := rr.Hdr.len(off, compression)
581	for _, x := range rr.Txt {
582		l += len(x) + 1
583	}
584	return l
585}
586func (rr *SRV) len(off int, compression map[string]struct{}) int {
587	l := rr.Hdr.len(off, compression)
588	l += 2 // Priority
589	l += 2 // Weight
590	l += 2 // Port
591	l += domainNameLen(rr.Target, off+l, compression, false)
592	return l
593}
594func (rr *SSHFP) len(off int, compression map[string]struct{}) int {
595	l := rr.Hdr.len(off, compression)
596	l++ // Algorithm
597	l++ // Type
598	l += len(rr.FingerPrint) / 2
599	return l
600}
601func (rr *SVCB) len(off int, compression map[string]struct{}) int {
602	l := rr.Hdr.len(off, compression)
603	l += 2 // Priority
604	l += domainNameLen(rr.Target, off+l, compression, false)
605	for _, x := range rr.Value {
606		l += 4 + int(x.len())
607	}
608	return l
609}
610func (rr *TA) len(off int, compression map[string]struct{}) int {
611	l := rr.Hdr.len(off, compression)
612	l += 2 // KeyTag
613	l++    // Algorithm
614	l++    // DigestType
615	l += len(rr.Digest) / 2
616	return l
617}
618func (rr *TALINK) len(off int, compression map[string]struct{}) int {
619	l := rr.Hdr.len(off, compression)
620	l += domainNameLen(rr.PreviousName, off+l, compression, false)
621	l += domainNameLen(rr.NextName, off+l, compression, false)
622	return l
623}
624func (rr *TKEY) len(off int, compression map[string]struct{}) int {
625	l := rr.Hdr.len(off, compression)
626	l += domainNameLen(rr.Algorithm, off+l, compression, false)
627	l += 4 // Inception
628	l += 4 // Expiration
629	l += 2 // Mode
630	l += 2 // Error
631	l += 2 // KeySize
632	l += len(rr.Key) / 2
633	l += 2 // OtherLen
634	l += len(rr.OtherData) / 2
635	return l
636}
637func (rr *TLSA) len(off int, compression map[string]struct{}) int {
638	l := rr.Hdr.len(off, compression)
639	l++ // Usage
640	l++ // Selector
641	l++ // MatchingType
642	l += len(rr.Certificate) / 2
643	return l
644}
645func (rr *TSIG) len(off int, compression map[string]struct{}) int {
646	l := rr.Hdr.len(off, compression)
647	l += domainNameLen(rr.Algorithm, off+l, compression, false)
648	l += 6 // TimeSigned
649	l += 2 // Fudge
650	l += 2 // MACSize
651	l += len(rr.MAC) / 2
652	l += 2 // OrigId
653	l += 2 // Error
654	l += 2 // OtherLen
655	l += len(rr.OtherData) / 2
656	return l
657}
658func (rr *TXT) len(off int, compression map[string]struct{}) int {
659	l := rr.Hdr.len(off, compression)
660	for _, x := range rr.Txt {
661		l += len(x) + 1
662	}
663	return l
664}
665func (rr *UID) len(off int, compression map[string]struct{}) int {
666	l := rr.Hdr.len(off, compression)
667	l += 4 // Uid
668	return l
669}
670func (rr *UINFO) len(off int, compression map[string]struct{}) int {
671	l := rr.Hdr.len(off, compression)
672	l += len(rr.Uinfo) + 1
673	return l
674}
675func (rr *URI) len(off int, compression map[string]struct{}) int {
676	l := rr.Hdr.len(off, compression)
677	l += 2 // Priority
678	l += 2 // Weight
679	l += len(rr.Target)
680	return l
681}
682func (rr *X25) len(off int, compression map[string]struct{}) int {
683	l := rr.Hdr.len(off, compression)
684	l += len(rr.PSDNAddress) + 1
685	return l
686}
687
688// copy() functions
689func (rr *A) copy() RR {
690	return &A{rr.Hdr, copyIP(rr.A)}
691}
692func (rr *AAAA) copy() RR {
693	return &AAAA{rr.Hdr, copyIP(rr.AAAA)}
694}
695func (rr *AFSDB) copy() RR {
696	return &AFSDB{rr.Hdr, rr.Subtype, rr.Hostname}
697}
698func (rr *ANY) copy() RR {
699	return &ANY{rr.Hdr}
700}
701func (rr *APL) copy() RR {
702	Prefixes := make([]APLPrefix, len(rr.Prefixes))
703	for i, e := range rr.Prefixes {
704		Prefixes[i] = e.copy()
705	}
706	return &APL{rr.Hdr, Prefixes}
707}
708func (rr *AVC) copy() RR {
709	Txt := make([]string, len(rr.Txt))
710	copy(Txt, rr.Txt)
711	return &AVC{rr.Hdr, Txt}
712}
713func (rr *CAA) copy() RR {
714	return &CAA{rr.Hdr, rr.Flag, rr.Tag, rr.Value}
715}
716func (rr *CDNSKEY) copy() RR {
717	return &CDNSKEY{*rr.DNSKEY.copy().(*DNSKEY)}
718}
719func (rr *CDS) copy() RR {
720	return &CDS{*rr.DS.copy().(*DS)}
721}
722func (rr *CERT) copy() RR {
723	return &CERT{rr.Hdr, rr.Type, rr.KeyTag, rr.Algorithm, rr.Certificate}
724}
725func (rr *CNAME) copy() RR {
726	return &CNAME{rr.Hdr, rr.Target}
727}
728func (rr *CSYNC) copy() RR {
729	TypeBitMap := make([]uint16, len(rr.TypeBitMap))
730	copy(TypeBitMap, rr.TypeBitMap)
731	return &CSYNC{rr.Hdr, rr.Serial, rr.Flags, TypeBitMap}
732}
733func (rr *DHCID) copy() RR {
734	return &DHCID{rr.Hdr, rr.Digest}
735}
736func (rr *DLV) copy() RR {
737	return &DLV{*rr.DS.copy().(*DS)}
738}
739func (rr *DNAME) copy() RR {
740	return &DNAME{rr.Hdr, rr.Target}
741}
742func (rr *DNSKEY) copy() RR {
743	return &DNSKEY{rr.Hdr, rr.Flags, rr.Protocol, rr.Algorithm, rr.PublicKey}
744}
745func (rr *DS) copy() RR {
746	return &DS{rr.Hdr, rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest}
747}
748func (rr *EID) copy() RR {
749	return &EID{rr.Hdr, rr.Endpoint}
750}
751func (rr *EUI48) copy() RR {
752	return &EUI48{rr.Hdr, rr.Address}
753}
754func (rr *EUI64) copy() RR {
755	return &EUI64{rr.Hdr, rr.Address}
756}
757func (rr *GID) copy() RR {
758	return &GID{rr.Hdr, rr.Gid}
759}
760func (rr *GPOS) copy() RR {
761	return &GPOS{rr.Hdr, rr.Longitude, rr.Latitude, rr.Altitude}
762}
763func (rr *HINFO) copy() RR {
764	return &HINFO{rr.Hdr, rr.Cpu, rr.Os}
765}
766func (rr *HIP) copy() RR {
767	RendezvousServers := make([]string, len(rr.RendezvousServers))
768	copy(RendezvousServers, rr.RendezvousServers)
769	return &HIP{rr.Hdr, rr.HitLength, rr.PublicKeyAlgorithm, rr.PublicKeyLength, rr.Hit, rr.PublicKey, RendezvousServers}
770}
771func (rr *HTTPS) copy() RR {
772	return &HTTPS{*rr.SVCB.copy().(*SVCB)}
773}
774func (rr *KEY) copy() RR {
775	return &KEY{*rr.DNSKEY.copy().(*DNSKEY)}
776}
777func (rr *KX) copy() RR {
778	return &KX{rr.Hdr, rr.Preference, rr.Exchanger}
779}
780func (rr *L32) copy() RR {
781	return &L32{rr.Hdr, rr.Preference, copyIP(rr.Locator32)}
782}
783func (rr *L64) copy() RR {
784	return &L64{rr.Hdr, rr.Preference, rr.Locator64}
785}
786func (rr *LOC) copy() RR {
787	return &LOC{rr.Hdr, rr.Version, rr.Size, rr.HorizPre, rr.VertPre, rr.Latitude, rr.Longitude, rr.Altitude}
788}
789func (rr *LP) copy() RR {
790	return &LP{rr.Hdr, rr.Preference, rr.Fqdn}
791}
792func (rr *MB) copy() RR {
793	return &MB{rr.Hdr, rr.Mb}
794}
795func (rr *MD) copy() RR {
796	return &MD{rr.Hdr, rr.Md}
797}
798func (rr *MF) copy() RR {
799	return &MF{rr.Hdr, rr.Mf}
800}
801func (rr *MG) copy() RR {
802	return &MG{rr.Hdr, rr.Mg}
803}
804func (rr *MINFO) copy() RR {
805	return &MINFO{rr.Hdr, rr.Rmail, rr.Email}
806}
807func (rr *MR) copy() RR {
808	return &MR{rr.Hdr, rr.Mr}
809}
810func (rr *MX) copy() RR {
811	return &MX{rr.Hdr, rr.Preference, rr.Mx}
812}
813func (rr *NAPTR) copy() RR {
814	return &NAPTR{rr.Hdr, rr.Order, rr.Preference, rr.Flags, rr.Service, rr.Regexp, rr.Replacement}
815}
816func (rr *NID) copy() RR {
817	return &NID{rr.Hdr, rr.Preference, rr.NodeID}
818}
819func (rr *NIMLOC) copy() RR {
820	return &NIMLOC{rr.Hdr, rr.Locator}
821}
822func (rr *NINFO) copy() RR {
823	ZSData := make([]string, len(rr.ZSData))
824	copy(ZSData, rr.ZSData)
825	return &NINFO{rr.Hdr, ZSData}
826}
827func (rr *NS) copy() RR {
828	return &NS{rr.Hdr, rr.Ns}
829}
830func (rr *NSAPPTR) copy() RR {
831	return &NSAPPTR{rr.Hdr, rr.Ptr}
832}
833func (rr *NSEC) copy() RR {
834	TypeBitMap := make([]uint16, len(rr.TypeBitMap))
835	copy(TypeBitMap, rr.TypeBitMap)
836	return &NSEC{rr.Hdr, rr.NextDomain, TypeBitMap}
837}
838func (rr *NSEC3) copy() RR {
839	TypeBitMap := make([]uint16, len(rr.TypeBitMap))
840	copy(TypeBitMap, rr.TypeBitMap)
841	return &NSEC3{rr.Hdr, rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt, rr.HashLength, rr.NextDomain, TypeBitMap}
842}
843func (rr *NSEC3PARAM) copy() RR {
844	return &NSEC3PARAM{rr.Hdr, rr.Hash, rr.Flags, rr.Iterations, rr.SaltLength, rr.Salt}
845}
846func (rr *NULL) copy() RR {
847	return &NULL{rr.Hdr, rr.Data}
848}
849func (rr *OPENPGPKEY) copy() RR {
850	return &OPENPGPKEY{rr.Hdr, rr.PublicKey}
851}
852func (rr *OPT) copy() RR {
853	Option := make([]EDNS0, len(rr.Option))
854	for i, e := range rr.Option {
855		Option[i] = e.copy()
856	}
857	return &OPT{rr.Hdr, Option}
858}
859func (rr *PTR) copy() RR {
860	return &PTR{rr.Hdr, rr.Ptr}
861}
862func (rr *PX) copy() RR {
863	return &PX{rr.Hdr, rr.Preference, rr.Map822, rr.Mapx400}
864}
865func (rr *RFC3597) copy() RR {
866	return &RFC3597{rr.Hdr, rr.Rdata}
867}
868func (rr *RKEY) copy() RR {
869	return &RKEY{rr.Hdr, rr.Flags, rr.Protocol, rr.Algorithm, rr.PublicKey}
870}
871func (rr *RP) copy() RR {
872	return &RP{rr.Hdr, rr.Mbox, rr.Txt}
873}
874func (rr *RRSIG) copy() RR {
875	return &RRSIG{rr.Hdr, rr.TypeCovered, rr.Algorithm, rr.Labels, rr.OrigTtl, rr.Expiration, rr.Inception, rr.KeyTag, rr.SignerName, rr.Signature}
876}
877func (rr *RT) copy() RR {
878	return &RT{rr.Hdr, rr.Preference, rr.Host}
879}
880func (rr *SIG) copy() RR {
881	return &SIG{*rr.RRSIG.copy().(*RRSIG)}
882}
883func (rr *SMIMEA) copy() RR {
884	return &SMIMEA{rr.Hdr, rr.Usage, rr.Selector, rr.MatchingType, rr.Certificate}
885}
886func (rr *SOA) copy() RR {
887	return &SOA{rr.Hdr, rr.Ns, rr.Mbox, rr.Serial, rr.Refresh, rr.Retry, rr.Expire, rr.Minttl}
888}
889func (rr *SPF) copy() RR {
890	Txt := make([]string, len(rr.Txt))
891	copy(Txt, rr.Txt)
892	return &SPF{rr.Hdr, Txt}
893}
894func (rr *SRV) copy() RR {
895	return &SRV{rr.Hdr, rr.Priority, rr.Weight, rr.Port, rr.Target}
896}
897func (rr *SSHFP) copy() RR {
898	return &SSHFP{rr.Hdr, rr.Algorithm, rr.Type, rr.FingerPrint}
899}
900func (rr *SVCB) copy() RR {
901	Value := make([]SVCBKeyValue, len(rr.Value))
902	for i, e := range rr.Value {
903		Value[i] = e.copy()
904	}
905	return &SVCB{rr.Hdr, rr.Priority, rr.Target, Value}
906}
907func (rr *TA) copy() RR {
908	return &TA{rr.Hdr, rr.KeyTag, rr.Algorithm, rr.DigestType, rr.Digest}
909}
910func (rr *TALINK) copy() RR {
911	return &TALINK{rr.Hdr, rr.PreviousName, rr.NextName}
912}
913func (rr *TKEY) copy() RR {
914	return &TKEY{rr.Hdr, rr.Algorithm, rr.Inception, rr.Expiration, rr.Mode, rr.Error, rr.KeySize, rr.Key, rr.OtherLen, rr.OtherData}
915}
916func (rr *TLSA) copy() RR {
917	return &TLSA{rr.Hdr, rr.Usage, rr.Selector, rr.MatchingType, rr.Certificate}
918}
919func (rr *TSIG) copy() RR {
920	return &TSIG{rr.Hdr, rr.Algorithm, rr.TimeSigned, rr.Fudge, rr.MACSize, rr.MAC, rr.OrigId, rr.Error, rr.OtherLen, rr.OtherData}
921}
922func (rr *TXT) copy() RR {
923	Txt := make([]string, len(rr.Txt))
924	copy(Txt, rr.Txt)
925	return &TXT{rr.Hdr, Txt}
926}
927func (rr *UID) copy() RR {
928	return &UID{rr.Hdr, rr.Uid}
929}
930func (rr *UINFO) copy() RR {
931	return &UINFO{rr.Hdr, rr.Uinfo}
932}
933func (rr *URI) copy() RR {
934	return &URI{rr.Hdr, rr.Priority, rr.Weight, rr.Target}
935}
936func (rr *X25) copy() RR {
937	return &X25{rr.Hdr, rr.PSDNAddress}
938}
939