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