source: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/resolver.h@ 388

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

Azure IoT Hub Device C SDK を使ったサンプルの追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
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 * 上記著作権者
8は,以下の (1)~(4) の条件か,Free Software Foundation
9 * によってå…
10¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
11 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
12 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
13å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
14 * 利用と呼ぶ)することを無償で許諾する.
15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * スコード中に含まれていること.
18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19 * 用できる形で再é…
20å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
21å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
22 * 者
23マニュアルなど)に,上記の著作権表示,この利用条件および下記
24 * の無保証規定を掲載すること.
25 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
26 * 用できない形で再é…
27å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
28 * と.
29 * (a) 再é…
30å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
31マニュアルなど)に,上記の著
32 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
33 * (b) 再é…
34å¸ƒã®å½¢æ…
35‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
36 * 報告すること.
37 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
38 * 害からも,上記著作権者
39およびTOPPERSプロジェクトをå…
40è²¬ã™ã‚‹ã“と.
41 *
42 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
43お
44 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
45 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
46 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
47 *
48 * @(#) $Id: resolver.h 388 2019-05-22 11:25:18Z coas-nagasima $
49 */
50
51/*
52 * ホスト名←→IP アドレス変換
53 */
54
55#ifndef RESOLVER_H
56#define RESOLVER_H
57
58#include <netapp/dns.h>
59
60/*
61 * コンパイル時コンフィギュレーションの指定
62 */
63
64/* ポート番号 */
65
66#define RSLV_CFG_DNS_PORTNO 53
67
68/*
69 * タイムアウト値
70 */
71
72#define TMO_DNS_UDP_SND ULONG_C(1*1000*1000) /* [us]、DNS サーバへの UDP 送信タイムアウト */
73#define TMO_DNS_UDP_RCV ULONG_C(5*1000*1000) /* [us]、DNS サーバからの UDP 受信タイムアウト */
74#define NUM_DNS_UDP_RETRY 1 /* リトライ回数 */
75
76/*
77 * ドメイン名
78 */
79
80
81#if !defined(RSLV_CFG_DNS_DOMAIN_NAME_STR)
82#define RSLV_CFG_DNS_DOMAIN_NAME_STR ""
83#endif
84
85/*
86 * DNS サーバーの IPアドレス
87 */
88
89#if !defined(IPV6_ADDR_DNS_INIT)
90#define IPV6_ADDR_DNS_INIT IPV6_ADDR_UNSPECIFIED_INIT
91#endif
92
93#if !defined(IPV4_ADDR_DNS)
94#define IPV4_ADDR_DNS IPV4_ADDRANY
95#endif
96
97/*
98 * 送受信バッファ数
99 */
100
101#define NUM_MPF_RSLV_SRBUF 1
102
103/*
104 * プログラムで使用する情
105報の定義
106 */
107
108/*
109 * プログラムで使用する DNS ヘッダ
110 *
111 * 注意: メンバはホストバイトオーダー
112 *
113 * 0 7 8 15
114 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
115 * | ID |
116 * +--+-----------+--+--+--+--+--------+-----------+
117 * |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
118 * +--+--------+--+--+--+--+--+--------+-----------+
119 * | QDCOUNT |
120 * +-----------------------------------------------+
121 * | ANCOUNT |
122 * +-----------------------------------------------+
123 * | NSCOUNT |
124 * +-----------------------------------------------+
125 * | ARCOUNT |
126 * +-----------------------------------------------+
127 */
128
129typedef struct rslv_dns_hdr {
130 uint16_t id; /* ID */
131 uint16_t code; /* QR: 1
132 Opcode: 4
133 AA: 1
134 TC: 1
135 RD: 1
136 RA: 1
137 Z: 3
138 RCODE: 4
139 */
140 uint16_t qdcount; /* question section */
141 uint16_t ancount; /* answer section */
142 uint16_t nscount; /* authority section */
143 uint16_t arcount; /* additional section */
144 } __attribute__((packed))T_RSLV_DNS_HDR;
145
146/*
147 * DNS message data
148 *
149 * 注意: メンバはホストバイトオーダー
150 */
151
152typedef struct rslv_dns_msg {
153 T_RSLV_DNS_HDR dns_hdr; /* DNS heder */
154 uint_t qd_offset; /* offset of question section */
155 uint_t an_offset; /* offset of answer section */
156 uint_t ns_offset; /* offset of authority records section */
157 uint_t ar_offset; /* offset of additional records section */
158 } __attribute__((packed))T_RSLV_DNS_MSG;
159
160/*
161 * RR (Resouce Record) 形式
162 *
163 * 0 7 8 15
164 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
165 * | . |
166 * +----------------- . -----------------+
167 * | NAME |
168 * +----------------- . -----------------+
169 * | . |
170 * +-----------------------------------------------+
171 * | TYPE |
172 * +-----------------------------------------------+
173 * | CLASS |
174 * +-----------------------------------------------+
175 * | TTL |
176 * | |
177 * +-----------------------------------------------+
178 * | RDLENGTH |
179 * +-----------------------------------------------+
180 * | . |
181 * +----------------- . -----------------+
182 * | RDATA |
183 * +----------------- . -----------------+
184 * | . |
185 * +-----------------------------------------------+
186 *
187 * 注意: offset の原点は DNS message のå…
188ˆé ­
189 * メンバはホストバイトオーダー
190 */
191
192typedef struct rslv_rr {
193 uint16_t type; /* TYPE */
194 uint16_t class; /* CLASS */
195 uint32_t ttl; /* TTL */
196 uint16_t rdlength; /* RDATA length */
197 uint_t rdata_offset; /* offset of RDATA */
198 } __attribute__((packed))T_RSLV_RR;
199
200/*
201 * Question section 形式
202 *
203 * 0 7 8 15
204 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
205 * | . |
206 * +----------------- . -----------------+
207 * | QNAME |
208 * +----------------- . -----------------+
209 * | . |
210 * +-----------------------------------------------+
211 * | QTYPE |
212 * +-----------------------------------------------+
213 * | QCLASS |
214 * +-----------------------------------------------+
215 *
216 * 注意: メンバはホストバイトオーダー
217 */
218
219typedef struct rslv_qd {
220 uint16_t type; /* TYPE */
221 uint16_t class; /* CLASS */
222 } __attribute__((packed))T_RSLV_QD;
223
224/*
225 * SOA RDATA 形式
226 *
227 * 0 7 8 15
228 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
229 * | . |
230 * +----------------- . -----------------+
231 * | MNAME |
232 * +----------------- . -----------------+
233 * | . |
234 * +-----------------------------------------------+
235 * | . |
236 * +----------------- . -----------------+
237 * | RNAME |
238 * +----------------- . -----------------+
239 * | . |
240 * +-----------------------------------------------+
241 * | SERIAL |
242 * | |
243 * +-----------------------------------------------+
244 * | REFRESH |
245 * | |
246 * +-----------------------------------------------+
247 * | RETRY |
248 * | |
249 * +-----------------------------------------------+
250 * | EXPIRE |
251 * | |
252 * +-----------------------------------------------+
253 * | MINIMUM |
254 * | |
255 * +-----------------------------------------------+
256 *
257 * 注意: offset の原点は DNS message のå…
258ˆé ­
259 * メンバはホストバイトオーダー
260 */
261
262typedef struct rslv_soa {
263 uint32_t serial; /* SERIAL */
264 uint32_t refresh; /* REFRESH */
265 uint32_t retry; /* RETRY */
266 uint32_t expire; /* EXPIRE */
267 uint32_t minimum; /* MINIMUM */
268 } __attribute__((packed))T_RSLV_SOA;
269
270/*
271 * dns_lookup_host の flags の定義
272 *
273 * 注意:
274 * dns.h で定義されている DNS_OPCODE と重ならないこと。
275 * #define DNS_OPCODE_MASK 0x7800U
276 */
277
278#define DNS_LUP_FLAGS_NAME_IPV4 0x0004U
279#define DNS_LUP_FLAGS_NAME_IPV6 0x0006U
280#define DNS_LUP_FLAGS_NAME_HOST 0x0010U
281#define DNS_LUP_FLAGS_NAME_FQDN 0x0011U
282#define DNS_LUP_FLAGS_NAME_MASK 0x001fU
283
284#define DNS_LUP_OPCODE_FORWARD DNS_OPCODE_FORWARD
285#define DNS_LUP_OPCODE_REVERSE DNS_OPCODE_REVERSE
286#define DNS_LUP_OPCODE_STATUS DNS_OPCODE_STATUS
287#define DNS_LUP_OPCODE_MASK DNS_OPCODE_MASK
288
289#define DNS_LUP_FLAGS_PROTO_IPV4 0x0040U
290#define DNS_LUP_FLAGS_PROTO_IPV6 0x0080U
291#define DNS_LUP_FLAGS_PROTO_MASK 0x00c0U
292
293#define DNS_LUP_FLAGS_QTYPE_A 0x0100U
294#define DNS_LUP_FLAGS_QTYPE_AAAA 0x0200U
295#define DNS_LUP_FLAGS_QTYPE_PTR 0x0400U
296#define DNS_LUP_FLAGS_QTYPE_MASK 0x0700U
297
298#define DNS_LUP_FLAGS_MSG 0x0020U
299
300/*
301 * ネットワークエラーコード
302 */
303
304#define EV_RSLV_ESIZE (-100) /* DNSメッセージの名前長異常 */
305#define EV_RSLV_UNEXPCT (-101) /* 予期しないDNSメッセージ */
306
307/*
308 * 関数
309 */
310
311extern ER_UINT dns_lookup_host (uint16_t flags, char *hostname, uint8_t *msg, uint_t msg_len, T_RSLV_DNS_MSG *rslv);
312extern ER dns_host_addr (uint16_t flags, char *hostname, T_IN_ADDR *addr);
313extern ER_UINT dns_analyze_qd (T_RSLV_QD *qd, uint_t offset, uint8_t *msg, uint_t length);
314extern ER_UINT dns_analyze_rr (T_RSLV_RR *rr, uint_t offset, uint8_t *msg, uint_t length);
315extern ER_UINT dns_analyze_soa (T_RSLV_SOA *soa, uint_t offset, uint8_t *msg, uint_t length);
316
317/*
318 * 注意: dns_in6_set_dname、dns_in4_set_dname、
319 * dns_in6_set_addr、 dns_in4_set_addr で、
320 * new に NULL を指定すると、初期値に戻す。
321 */
322
323extern const uint8_t *dns_in6_set_dname (const uint8_t *new, uint_t len);
324extern const uint8_t *dns_in6_get_dname (void);
325extern const uint8_t *dns_in4_set_dname (const uint8_t *new, uint_t len);
326extern const uint8_t *dns_in4_get_dname (void);
327extern T_IN6_ADDR *dns_in6_set_addr (T_IN6_ADDR *new);
328extern T_IN6_ADDR *dns_in6_get_addr (T_IN6_ADDR *dst);
329extern T_IN4_ADDR *dns_in4_set_addr (T_IN4_ADDR *new);
330extern T_IN4_ADDR *dns_in4_get_addr (T_IN4_ADDR *dst);
331
332#endif /* of #ifndef RESOLVER_H */
Note: See TracBrowser for help on using the repository browser.