source: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/dns.h@ 389

Last change on this file since 389 was 389, checked in by coas-nagasima, 5 years ago

ビルドが通るよう更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 9.7 KB
Line 
1/*
2 * TINET (TCP/IP Protocol Stack)
3 *
4 * Copyright (C) 2001-2017 by Dep. of Computer Science and Engineering
5 * Tomakomai National College of Technology, JAPAN
6 *
7 * 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
8 * によって公表されている GNU General Public License の Version 2 に記
9 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
10 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
11 * 利用と呼ぶ)することを無償で許諾する.
12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
14 * スコード中に含まれていること.
15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
16 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
17 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
18 * の無保証規定を掲載すること.
19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
20 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
21 * と.
22 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
23 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
24 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
25 * 報告すること.
26 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
27 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
28 *
29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
31 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
32 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
33 *
34 * @(#) $Id$
35 */
36
37#ifndef DNS_H
38#define DNS_H
39
40/*
41 * DNS メッセージに関する定義
42 *
43 * RFC1034、RFC1035、RFC1886、RFC2136、
44 * RFC2671、RFC2845、RFC2930、RFC3596
45 *
46 * DNS メッセージ
47 *
48 * +---------------------+
49 * | Header |
50 * +---------------------+
51 * | Question | Question section 形式
52 * +---------------------+
53 * | Answer | RR (Resouce Record) 形式
54 * +---------------------+
55 * | Authority | RR (Resouce Record) 形式
56 * +---------------------+
57 * | Additional | RR (Resouce Record) 形式
58 * +---------------------+
59 *
60 * DNS ヘッダ
61 *
62 * 0 7 8 15
63 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
64 * | ID |
65 * +--+-----------+--+--+--+--+--------+-----------+
66 * |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
67 * +--+--------+--+--+--+--+--+--------+-----------+
68 * | QDCOUNT |
69 * +-----------------------------------------------+
70 * | ANCOUNT |
71 * +-----------------------------------------------+
72 * | NSCOUNT |
73 * +-----------------------------------------------+
74 * | ARCOUNT |
75 * +-----------------------------------------------+
76 */
77
78typedef struct dns_hdr {
79 uint16_t id; /* ID */
80 uint16_t code; /* QR: 1
81 Opcode: 4
82 AA: 1
83 TC: 1
84 RD: 1
85 RA: 1
86 Z: 3
87 RCODE: 4
88 */
89 uint16_t qdcount; /* question section */
90 uint16_t ancount; /* answer section */
91 uint16_t nscount; /* authority section */
92 uint16_t arcount; /* additional section */
93 } T_DNS_HDR;
94
95/*
96 * code の定義
97 */
98
99/* QR の定義 */
100
101#define DNS_QR_QUERY 0x0000U
102#define DNS_QR_RESPONSE 0x8000U
103
104/* Opcode の定義 */
105
106#define DNS_OPCODE_MASK 0x7800U
107#define DNS_OPCODE_FORWARD 0x0000U
108#define DNS_OPCODE_REVERSE 0x0800U
109#define DNS_OPCODE_STATUS 0x1000U
110
111/* AA の定義 */
112
113#define DNS_AUTHORITATIVE 0x0400U
114
115/* TC の定義 */
116
117#define DNS_TRUN_CATION 0x0200U
118
119/* RD の定義 */
120
121#define DNS_RECURSION_DESIRED 0x0100U
122
123/* RA の定義 */
124
125#define DNS_RECURSION_AVAILABLE 0x0080U
126
127/* RCODE の定義 */
128
129#define DNS_RCODE_MASK 0x000fU
130#define DNS_RCODE_NO_ERROR 0x0000U
131#define DNS_RCODE_FORMAT_ERROR 0x0001U
132#define DNS_RCODE_SERVER_ERROR 0x0002U
133#define DNS_RCODE_NAME_ERROR 0x0003U
134#define DNS_RCODE_NOT_IMPLEMENT 0x0004U
135#define DNS_RCODE_REFUSED 0x0005U
136
137/*
138 * DNS TYPE の定義
139 */
140
141#define DNS_TYPE_A (uint16_t)1U
142#define DNS_TYPE_NS (uint16_t)2U
143#define DNS_TYPE_CNAME (uint16_t)5U
144#define DNS_TYPE_SOA (uint16_t)6U
145#define DNS_TYPE_PTR (uint16_t)12U
146#define DNS_TYPE_AAAA (uint16_t)28U
147
148/*
149 * DNS CLASS の定義
150 */
151
152#define DNS_CLASS_IN (uint16_t)1U
153
154/*
155 * RR (Resouce Record) 形式
156 *
157 * 0 7 8 15
158 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
159 * | . |
160 * +----------------- . -----------------+
161 * | NAME |
162 * +----------------- . -----------------+
163 * | . |
164 * +-----------------------------------------------+
165 * | TYPE |
166 * +-----------------------------------------------+
167 * | CLASS |
168 * +-----------------------------------------------+
169 * | TTL |
170 * | |
171 * +-----------------------------------------------+
172 * | RDLENGTH |
173 * +-----------------------------------------------+
174 * | . |
175 * +----------------- . -----------------+
176 * | RDATA |
177 * +----------------- . -----------------+
178 * | . |
179 * +-----------------------------------------------+
180 *
181 * 注意: offset の原点は DNS message の先頭
182 */
183
184typedef struct dns_rr {
185 /* NAME */
186 uint16_t type; /* TYPE */
187 uint16_t class; /* CLASS */
188 uint32_t ttl; /* TTL */
189 uint16_t rdlength; /* RDATA length */
190 /* RDATA */
191 } T_DNS_RR;
192
193#define T_DNS_RR_SIZE (sizeof(uint16_t)*3+sizeof(uint32_t))
194
195/*
196 * Question section 形式
197 *
198 * 0 7 8 15
199 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
200 * | . |
201 * +----------------- . -----------------+
202 * | QNAME |
203 * +----------------- . -----------------+
204 * | . |
205 * +-----------------------------------------------+
206 * | QTYPE |
207 * +-----------------------------------------------+
208 * | QCLASS |
209 * +-----------------------------------------------+
210 */
211
212typedef struct dns_qd {
213 /* QNAME */
214 uint16_t type; /* TYPE */
215 uint16_t class; /* CLASS */
216 } T_DNS_QD;
217
218#define T_DNS_QD_SIZE (sizeof(uint16_t)*2)
219
220/*
221 * SOA RDATA 形式
222 *
223 * 0 7 8 15
224 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
225 * | . |
226 * +----------------- . -----------------+
227 * | MNAME |
228 * +----------------- . -----------------+
229 * | . |
230 * +-----------------------------------------------+
231 * | . |
232 * +----------------- . -----------------+
233 * | RNAME |
234 * +----------------- . -----------------+
235 * | . |
236 * +-----------------------------------------------+
237 * | SERIAL |
238 * | |
239 * +-----------------------------------------------+
240 * | REFRESH |
241 * | |
242 * +-----------------------------------------------+
243 * | RETRY |
244 * | |
245 * +-----------------------------------------------+
246 * | EXPIRE |
247 * | |
248 * +-----------------------------------------------+
249 * | MINIMUM |
250 * | |
251 * +-----------------------------------------------+
252 *
253 * 注意: offset の原点は DNS message の先頭
254 */
255
256typedef struct dns_soa {
257 /* MNAME */
258 /* RNAME */
259 uint32_t serial; /* SERIAL */
260 uint32_t refresh; /* REFRESH */
261 uint32_t retry; /* RETRY */
262 uint32_t expire; /* EXPIRE */
263 uint32_t minimum; /* MINIMUM */
264 } T_DNS_SOA;
265
266#define T_DNS_SOA_SIZE (sizeof(uint32_t)*5)
267
268/*
269 * DNS の定数の定義
270 */
271
272#define DNS_LABEL_LENGTH 63
273#define DNS_NAME_LENGTH 255
274#define DNS_UDP_MSG_LENGTH 512
275
276#define DNS_MSG_COMP_MARK 0xc0
277
278#endif /* of #ifndef DNS_H */
Note: See TracBrowser for help on using the repository browser.