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