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