1 /*
2  * Copyright (c) 2018-2021, OARC, Inc.
3  * All rights reserved.
4  *
5  * This file is part of dnsjit.
6  *
7  * dnsjit is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * dnsjit is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with dnsjit.  If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 #include <dnsjit/core/log.h>
22 #include <dnsjit/core/object.h>
23 
24 #ifndef __dnsjit_core_object_dns_h
25 #define __dnsjit_core_object_dns_h
26 
27 #include <netinet/in.h>
28 #include <sys/types.h>
29 
30 #include <dnsjit/core/object/dns.hh>
31 
32 #define CORE_OBJECT_DNS_INIT(prev)                          \
33     {                                                       \
34         CORE_OBJECT_INIT(CORE_OBJECT_DNS, prev)             \
35         ,                                                   \
36             0, 0, 0, 0, 0,                                  \
37             0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
38             0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
39     }
40 
41 /*
42  * 2016-12-09 https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml
43  */
44 
45 #define CORE_OBJECT_DNS_CLASS_IN 1
46 #define CORE_OBJECT_DNS_CLASS_CH 3
47 #define CORE_OBJECT_DNS_CLASS_HS 4
48 #define CORE_OBJECT_DNS_CLASS_NONE 254
49 #define CORE_OBJECT_DNS_CLASS_ANY 255
50 
51 #define CORE_OBJECT_DNS_TYPE_A 1
52 #define CORE_OBJECT_DNS_TYPE_NS 2
53 #define CORE_OBJECT_DNS_TYPE_MD 3
54 #define CORE_OBJECT_DNS_TYPE_MF 4
55 #define CORE_OBJECT_DNS_TYPE_CNAME 5
56 #define CORE_OBJECT_DNS_TYPE_SOA 6
57 #define CORE_OBJECT_DNS_TYPE_MB 7
58 #define CORE_OBJECT_DNS_TYPE_MG 8
59 #define CORE_OBJECT_DNS_TYPE_MR 9
60 #define CORE_OBJECT_DNS_TYPE_NULL 10
61 #define CORE_OBJECT_DNS_TYPE_WKS 11
62 #define CORE_OBJECT_DNS_TYPE_PTR 12
63 #define CORE_OBJECT_DNS_TYPE_HINFO 13
64 #define CORE_OBJECT_DNS_TYPE_MINFO 14
65 #define CORE_OBJECT_DNS_TYPE_MX 15
66 #define CORE_OBJECT_DNS_TYPE_TXT 16
67 #define CORE_OBJECT_DNS_TYPE_RP 17
68 #define CORE_OBJECT_DNS_TYPE_AFSDB 18
69 #define CORE_OBJECT_DNS_TYPE_X25 19
70 #define CORE_OBJECT_DNS_TYPE_ISDN 20
71 #define CORE_OBJECT_DNS_TYPE_RT 21
72 #define CORE_OBJECT_DNS_TYPE_NSAP 22
73 #define CORE_OBJECT_DNS_TYPE_NSAP_PTR 23
74 #define CORE_OBJECT_DNS_TYPE_SIG 24
75 #define CORE_OBJECT_DNS_TYPE_KEY 25
76 #define CORE_OBJECT_DNS_TYPE_PX 26
77 #define CORE_OBJECT_DNS_TYPE_GPOS 27
78 #define CORE_OBJECT_DNS_TYPE_AAAA 28
79 #define CORE_OBJECT_DNS_TYPE_LOC 29
80 #define CORE_OBJECT_DNS_TYPE_NXT 30
81 #define CORE_OBJECT_DNS_TYPE_EID 31
82 #define CORE_OBJECT_DNS_TYPE_NIMLOC 32
83 #define CORE_OBJECT_DNS_TYPE_SRV 33
84 #define CORE_OBJECT_DNS_TYPE_ATMA 34
85 #define CORE_OBJECT_DNS_TYPE_NAPTR 35
86 #define CORE_OBJECT_DNS_TYPE_KX 36
87 #define CORE_OBJECT_DNS_TYPE_CERT 37
88 #define CORE_OBJECT_DNS_TYPE_A6 38
89 #define CORE_OBJECT_DNS_TYPE_DNAME 39
90 #define CORE_OBJECT_DNS_TYPE_SINK 40
91 #define CORE_OBJECT_DNS_TYPE_OPT 41
92 #define CORE_OBJECT_DNS_TYPE_APL 42
93 #define CORE_OBJECT_DNS_TYPE_DS 43
94 #define CORE_OBJECT_DNS_TYPE_SSHFP 44
95 #define CORE_OBJECT_DNS_TYPE_IPSECKEY 45
96 #define CORE_OBJECT_DNS_TYPE_RRSIG 46
97 #define CORE_OBJECT_DNS_TYPE_NSEC 47
98 #define CORE_OBJECT_DNS_TYPE_DNSKEY 48
99 #define CORE_OBJECT_DNS_TYPE_DHCID 49
100 #define CORE_OBJECT_DNS_TYPE_NSEC3 50
101 #define CORE_OBJECT_DNS_TYPE_NSEC3PARAM 51
102 #define CORE_OBJECT_DNS_TYPE_TLSA 52
103 #define CORE_OBJECT_DNS_TYPE_SMIMEA 53
104 #define CORE_OBJECT_DNS_TYPE_HIP 55
105 #define CORE_OBJECT_DNS_TYPE_NINFO 56
106 #define CORE_OBJECT_DNS_TYPE_RKEY 57
107 #define CORE_OBJECT_DNS_TYPE_TALINK 58
108 #define CORE_OBJECT_DNS_TYPE_CDS 59
109 #define CORE_OBJECT_DNS_TYPE_CDNSKEY 60
110 #define CORE_OBJECT_DNS_TYPE_OPENPGPKEY 61
111 #define CORE_OBJECT_DNS_TYPE_CSYNC 62
112 #define CORE_OBJECT_DNS_TYPE_SPF 99
113 #define CORE_OBJECT_DNS_TYPE_UINFO 100
114 #define CORE_OBJECT_DNS_TYPE_UID 101
115 #define CORE_OBJECT_DNS_TYPE_GID 102
116 #define CORE_OBJECT_DNS_TYPE_UNSPEC 103
117 #define CORE_OBJECT_DNS_TYPE_NID 104
118 #define CORE_OBJECT_DNS_TYPE_L32 105
119 #define CORE_OBJECT_DNS_TYPE_L64 106
120 #define CORE_OBJECT_DNS_TYPE_LP 107
121 #define CORE_OBJECT_DNS_TYPE_EUI48 108
122 #define CORE_OBJECT_DNS_TYPE_EUI64 109
123 #define CORE_OBJECT_DNS_TYPE_TKEY 249
124 #define CORE_OBJECT_DNS_TYPE_TSIG 250
125 #define CORE_OBJECT_DNS_TYPE_IXFR 251
126 #define CORE_OBJECT_DNS_TYPE_AXFR 252
127 #define CORE_OBJECT_DNS_TYPE_MAILB 253
128 #define CORE_OBJECT_DNS_TYPE_MAILA 254
129 #define CORE_OBJECT_DNS_TYPE_ANY 255
130 #define CORE_OBJECT_DNS_TYPE_URI 256
131 #define CORE_OBJECT_DNS_TYPE_CAA 257
132 #define CORE_OBJECT_DNS_TYPE_AVC 258
133 #define CORE_OBJECT_DNS_TYPE_TA 32768
134 #define CORE_OBJECT_DNS_TYPE_DLV 32769
135 
136 #define CORE_OBJECT_DNS_OPCODE_QUERY 0
137 #define CORE_OBJECT_DNS_OPCODE_IQUERY 1
138 #define CORE_OBJECT_DNS_OPCODE_STATUS 2
139 #define CORE_OBJECT_DNS_OPCODE_NOTIFY 4
140 #define CORE_OBJECT_DNS_OPCODE_UPDATE 5
141 
142 #define CORE_OBJECT_DNS_RCODE_NOERROR 0
143 #define CORE_OBJECT_DNS_RCODE_FORMERR 1
144 #define CORE_OBJECT_DNS_RCODE_SERVFAIL 2
145 #define CORE_OBJECT_DNS_RCODE_NXDOMAIN 3
146 #define CORE_OBJECT_DNS_RCODE_NOTIMP 4
147 #define CORE_OBJECT_DNS_RCODE_REFUSED 5
148 #define CORE_OBJECT_DNS_RCODE_YXDOMAIN 6
149 #define CORE_OBJECT_DNS_RCODE_YXRRSET 7
150 #define CORE_OBJECT_DNS_RCODE_NXRRSET 8
151 #define CORE_OBJECT_DNS_RCODE_NOTAUTH 9
152 #define CORE_OBJECT_DNS_RCODE_NOTZONE 10
153 #define CORE_OBJECT_DNS_RCODE_BADVERS 16
154 #define CORE_OBJECT_DNS_RCODE_BADSIG 16
155 #define CORE_OBJECT_DNS_RCODE_BADKEY 17
156 #define CORE_OBJECT_DNS_RCODE_BADTIME 18
157 #define CORE_OBJECT_DNS_RCODE_BADMODE 19
158 #define CORE_OBJECT_DNS_RCODE_BADNAME 20
159 #define CORE_OBJECT_DNS_RCODE_BADALG 21
160 #define CORE_OBJECT_DNS_RCODE_BADTRUNC 22
161 #define CORE_OBJECT_DNS_RCODE_BADCOOKIE 23
162 
163 #define CORE_OBJECT_DNS_AFSDB_SUBTYPE_AFS3LOCSRV 1
164 #define CORE_OBJECT_DNS_AFSDB_SUBTYPE_DCENCA_ROOT 2
165 
166 #define CORE_OBJECT_DNS_DHCID_TYPE_1OCTET 0
167 #define CORE_OBJECT_DNS_DHCID_TYPE_DATAOCTET 1
168 #define CORE_OBJECT_DNS_DHCID_TYPE_CLIENT_DUID 2
169 
170 #define CORE_OBJECT_DNS_EDNS0_OPT_LLQ 1
171 #define CORE_OBJECT_DNS_EDNS0_OPT_UL 2
172 #define CORE_OBJECT_DNS_EDNS0_OPT_NSID 3
173 #define CORE_OBJECT_DNS_EDNS0_OPT_DAU 5
174 #define CORE_OBJECT_DNS_EDNS0_OPT_DHU 6
175 #define CORE_OBJECT_DNS_EDNS0_OPT_N3U 7
176 #define CORE_OBJECT_DNS_EDNS0_OPT_CLIENT_SUBNET 8
177 #define CORE_OBJECT_DNS_EDNS0_OPT_EXPIRE 9
178 #define CORE_OBJECT_DNS_EDNS0_OPT_COOKIE 10
179 #define CORE_OBJECT_DNS_EDNS0_OPT_TCP_KEEPALIVE 11
180 #define CORE_OBJECT_DNS_EDNS0_OPT_PADDING 12
181 #define CORE_OBJECT_DNS_EDNS0_OPT_CHAIN 13
182 #define CORE_OBJECT_DNS_EDNS0_OPT_DEVICEID 26946
183 
184 #endif
185