source: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netapp/resolver.h@ 337

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

ASP3版ECNLを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 11.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/*
38 * ホスト名←→IP アドレス変換
39 */
40
41#ifndef RESOLVER_H
42#define RESOLVER_H
43
44#include <netapp/dns.h>
45
46/*
47 * コンパイル時コンフィギュレーションの指定
48 */
49
50/* ポート番号 */
51
52#define RSLV_CFG_DNS_PORTNO 53
53
54/*
55 * タイムアウト値
56 */
57
58#define TMO_DNS_UDP_SND ULONG_C(1*1000*1000) /* [us]、DNS サーバへの UDP 送信タイムアウト */
59#define TMO_DNS_UDP_RCV ULONG_C(5*1000*1000) /* [us]、DNS サーバからの UDP 受信タイムアウト */
60#define NUM_DNS_UDP_RETRY 1 /* リトライ回数 */
61
62/*
63 * ドメイン名
64 */
65
66
67#if !defined(RSLV_CFG_DNS_DOMAIN_NAME_STR)
68#define RSLV_CFG_DNS_DOMAIN_NAME_STR ""
69#endif
70
71/*
72 * DNS サーバーの IPアドレス
73 */
74
75#if !defined(IPV6_ADDR_DNS_INIT)
76#define IPV6_ADDR_DNS_INIT IPV6_ADDR_UNSPECIFIED_INIT
77#endif
78
79#if !defined(IPV4_ADDR_DNS)
80#define IPV4_ADDR_DNS IPV4_ADDRANY
81#endif
82
83/*
84 * 送受信バッファ数
85 */
86
87#define NUM_MPF_RSLV_SRBUF 1
88
89/*
90 * プログラムで使用する情報の定義
91 */
92
93/*
94 * プログラムで使用する DNS ヘッダ
95 *
96 * 注意: メンバはホストバイトオーダー
97 *
98 * 0 7 8 15
99 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
100 * | ID |
101 * +--+-----------+--+--+--+--+--------+-----------+
102 * |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
103 * +--+--------+--+--+--+--+--+--------+-----------+
104 * | QDCOUNT |
105 * +-----------------------------------------------+
106 * | ANCOUNT |
107 * +-----------------------------------------------+
108 * | NSCOUNT |
109 * +-----------------------------------------------+
110 * | ARCOUNT |
111 * +-----------------------------------------------+
112 */
113
114typedef struct rslv_dns_hdr {
115 uint16_t id; /* ID */
116 uint16_t code; /* QR: 1
117 Opcode: 4
118 AA: 1
119 TC: 1
120 RD: 1
121 RA: 1
122 Z: 3
123 RCODE: 4
124 */
125 uint16_t qdcount; /* question section */
126 uint16_t ancount; /* answer section */
127 uint16_t nscount; /* authority section */
128 uint16_t arcount; /* additional section */
129 } __attribute__((packed))T_RSLV_DNS_HDR;
130
131/*
132 * DNS message data
133 *
134 * 注意: メンバはホストバイトオーダー
135 */
136
137typedef struct rslv_dns_msg {
138 T_RSLV_DNS_HDR dns_hdr; /* DNS heder */
139 uint_t qd_offset; /* offset of question section */
140 uint_t an_offset; /* offset of answer section */
141 uint_t ns_offset; /* offset of authority records section */
142 uint_t ar_offset; /* offset of additional records section */
143 } __attribute__((packed))T_RSLV_DNS_MSG;
144
145/*
146 * RR (Resouce Record) 形式
147 *
148 * 0 7 8 15
149 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
150 * | . |
151 * +----------------- . -----------------+
152 * | NAME |
153 * +----------------- . -----------------+
154 * | . |
155 * +-----------------------------------------------+
156 * | TYPE |
157 * +-----------------------------------------------+
158 * | CLASS |
159 * +-----------------------------------------------+
160 * | TTL |
161 * | |
162 * +-----------------------------------------------+
163 * | RDLENGTH |
164 * +-----------------------------------------------+
165 * | . |
166 * +----------------- . -----------------+
167 * | RDATA |
168 * +----------------- . -----------------+
169 * | . |
170 * +-----------------------------------------------+
171 *
172 * 注意: offset の原点は DNS message の先頭
173 * メンバはホストバイトオーダー
174 */
175
176typedef struct rslv_rr {
177 uint16_t type; /* TYPE */
178 uint16_t class; /* CLASS */
179 uint32_t ttl; /* TTL */
180 uint16_t rdlength; /* RDATA length */
181 uint_t rdata_offset; /* offset of RDATA */
182 } __attribute__((packed))T_RSLV_RR;
183
184/*
185 * Question section 形式
186 *
187 * 0 7 8 15
188 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
189 * | . |
190 * +----------------- . -----------------+
191 * | QNAME |
192 * +----------------- . -----------------+
193 * | . |
194 * +-----------------------------------------------+
195 * | QTYPE |
196 * +-----------------------------------------------+
197 * | QCLASS |
198 * +-----------------------------------------------+
199 *
200 * 注意: メンバはホストバイトオーダー
201 */
202
203typedef struct rslv_qd {
204 uint16_t type; /* TYPE */
205 uint16_t class; /* CLASS */
206 } __attribute__((packed))T_RSLV_QD;
207
208/*
209 * SOA RDATA 形式
210 *
211 * 0 7 8 15
212 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
213 * | . |
214 * +----------------- . -----------------+
215 * | MNAME |
216 * +----------------- . -----------------+
217 * | . |
218 * +-----------------------------------------------+
219 * | . |
220 * +----------------- . -----------------+
221 * | RNAME |
222 * +----------------- . -----------------+
223 * | . |
224 * +-----------------------------------------------+
225 * | SERIAL |
226 * | |
227 * +-----------------------------------------------+
228 * | REFRESH |
229 * | |
230 * +-----------------------------------------------+
231 * | RETRY |
232 * | |
233 * +-----------------------------------------------+
234 * | EXPIRE |
235 * | |
236 * +-----------------------------------------------+
237 * | MINIMUM |
238 * | |
239 * +-----------------------------------------------+
240 *
241 * 注意: offset の原点は DNS message の先頭
242 * メンバはホストバイトオーダー
243 */
244
245typedef struct rslv_soa {
246 uint32_t serial; /* SERIAL */
247 uint32_t refresh; /* REFRESH */
248 uint32_t retry; /* RETRY */
249 uint32_t expire; /* EXPIRE */
250 uint32_t minimum; /* MINIMUM */
251 } __attribute__((packed))T_RSLV_SOA;
252
253/*
254 * dns_lookup_host の flags の定義
255 *
256 * 注意:
257 * dns.h で定義されている DNS_OPCODE と重ならないこと。
258 * #define DNS_OPCODE_MASK 0x7800U
259 */
260
261#define DNS_LUP_FLAGS_NAME_IPV4 0x0004U
262#define DNS_LUP_FLAGS_NAME_IPV6 0x0006U
263#define DNS_LUP_FLAGS_NAME_HOST 0x0010U
264#define DNS_LUP_FLAGS_NAME_FQDN 0x0011U
265#define DNS_LUP_FLAGS_NAME_MASK 0x001fU
266
267#define DNS_LUP_OPCODE_FORWARD DNS_OPCODE_FORWARD
268#define DNS_LUP_OPCODE_REVERSE DNS_OPCODE_REVERSE
269#define DNS_LUP_OPCODE_STATUS DNS_OPCODE_STATUS
270#define DNS_LUP_OPCODE_MASK DNS_OPCODE_MASK
271
272#define DNS_LUP_FLAGS_PROTO_IPV4 0x0040U
273#define DNS_LUP_FLAGS_PROTO_IPV6 0x0080U
274#define DNS_LUP_FLAGS_PROTO_MASK 0x00c0U
275
276#define DNS_LUP_FLAGS_QTYPE_A 0x0100U
277#define DNS_LUP_FLAGS_QTYPE_AAAA 0x0200U
278#define DNS_LUP_FLAGS_QTYPE_PTR 0x0400U
279#define DNS_LUP_FLAGS_QTYPE_MASK 0x0700U
280
281#define DNS_LUP_FLAGS_MSG 0x0020U
282
283/*
284 * ネットワークエラーコード
285 */
286
287#define EV_RSLV_ESIZE (-100) /* DNSメッセージの名前長異常 */
288#define EV_RSLV_UNEXPCT (-101) /* 予期しないDNSメッセージ */
289
290/*
291 * 関数
292 */
293
294extern ER_UINT dns_lookup_host (uint16_t flags, char *hostname, uint8_t *msg, uint_t msg_len, T_RSLV_DNS_MSG *rslv);
295extern ER dns_host_addr (uint16_t flags, char *hostname, T_IN_ADDR *addr);
296extern ER_UINT dns_analyze_qd (T_RSLV_QD *qd, uint_t offset, uint8_t *msg, uint_t length);
297extern ER_UINT dns_analyze_rr (T_RSLV_RR *rr, uint_t offset, uint8_t *msg, uint_t length);
298extern ER_UINT dns_analyze_soa (T_RSLV_SOA *soa, uint_t offset, uint8_t *msg, uint_t length);
299
300/*
301 * 注意: dns_in6_set_dname、dns_in4_set_dname、
302 * dns_in6_set_addr、 dns_in4_set_addr で、
303 * new に NULL を指定すると、初期値に戻す。
304 */
305
306extern const uint8_t *dns_in6_set_dname (const uint8_t *new, uint_t len);
307extern const uint8_t *dns_in6_get_dname (void);
308extern const uint8_t *dns_in4_set_dname (const uint8_t *new, uint_t len);
309extern const uint8_t *dns_in4_get_dname (void);
310extern T_IN6_ADDR *dns_in6_set_addr (T_IN6_ADDR *new);
311extern T_IN6_ADDR *dns_in6_get_addr (T_IN6_ADDR *dst);
312extern T_IN4_ADDR *dns_in4_set_addr (T_IN4_ADDR *new);
313extern T_IN4_ADDR *dns_in4_get_addr (T_IN4_ADDR *dst);
314
315#endif /* of #ifndef RESOLVER_H */
Note: See TracBrowser for help on using the repository browser.