source: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/icmp6.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: 19.8 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 * (a) 再é…
29å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
30マニュアルなど)に,上記の著
31 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
32 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
33 * 害からも,上記著作権者
34およびTOPPERSプロジェクトをå…
35è²¬ã™ã‚‹ã“と.
36 *
37 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
38お
39 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
40 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
41 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
42 *
43 * @(#) $Id: icmp6.h 388 2019-05-22 11:25:18Z coas-nagasima $
44 */
45
46/* $FreeBSD: src/sys/netinet/icmp6.h,v 1.2.2.3 2001/07/06 05:36:35 sumikawa Exp $ */
47/* $KAME: icmp6.h,v 1.46 2001/04/27 15:09:48 itojun Exp $ */
48
49/*
50 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
51 * All rights reserved.
52 *
53 * Redistribution and use in source and binary forms, with or without
54 * modification, are permitted provided that the following conditions
55 * are met:
56 * 1. Redistributions of source code must retain the above copyright
57 * notice, this list of conditions and the following disclaimer.
58 * 2. Redistributions in binary form must reproduce the above copyright
59 * notice, this list of conditions and the following disclaimer in the
60 * documentation and/or other materials provided with the distribution.
61 * 3. Neither the name of the project nor the names of its contributors
62 * may be used to endorse or promote products derived from this software
63 * without specific prior written permission.
64 *
65 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
66 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
67 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
68 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
69 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
70 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
71 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
72 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
73 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
74 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
75 * SUCH DAMAGE.
76 */
77
78/*
79 * Copyright (c) 1982, 1986, 1993
80 * The Regents of the University of California. All rights reserved.
81 *
82 * Redistribution and use in source and binary forms, with or without
83 * modification, are permitted provided that the following conditions
84 * are met:
85 * 1. Redistributions of source code must retain the above copyright
86 * notice, this list of conditions and the following disclaimer.
87 * 2. Redistributions in binary form must reproduce the above copyright
88 * notice, this list of conditions and the following disclaimer in the
89 * documentation and/or other materials provided with the distribution.
90 * 3. All advertising materials mentioning features or use of this software
91 * must display the following acknowledgement:
92 * This product includes software developed by the University of
93 * California, Berkeley and its contributors.
94 * 4. Neither the name of the University nor the names of its contributors
95 * may be used to endorse or promote products derived from this software
96 * without specific prior written permission.
97 *
98 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
99 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
100 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
101 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
102 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
103 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
104 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
105 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
106 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
107 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
108 * SUCH DAMAGE.
109 *
110 * @(#)ip_icmp.h 8.1 (Berkeley) 6/10/93
111 */
112
113#ifndef _IP_ICMP6_H_
114#define _IP_ICMP6_H_
115
116/*
117 * ICMPv6 ヘッダ
118 */
119
120typedef struct t_icmp6_hdr {
121 uint8_t type; /* メッセージの型 */
122 uint8_t code; /* サブ型 */
123 uint16_t sum; /* チェックサム */
124 union {
125 uint32_t data32;
126 uint16_t data16[2];
127 uint8_t data8[4];
128 } data;
129 } __attribute__((packed, aligned(2))) T_ICMP6_HDR;
130
131#define icmp6_data32 data.data32
132#define icmp6_data16 data.data16
133#define icmp6_data8 data.data8
134#define icmp6_pptr data.data32 /* パラメータ異常 */
135#define icmp6_mtu data.data32 /* パラメータ異常 */
136#define icmp6_id data.data16[0] /* エコー要求と応答 */
137#define icmp6_seq data.data16[1] /* エコー要求と応答 */
138
139#define ICMP6_HDR_SIZE (sizeof(T_ICMP6_HDR))
140#define IF_IP6_ICMP6_HDR_OFFSET (IF_IP6_HDR_SIZE)
141
142#define GET_ICMP6_HDR(nbuf,ihoff) ((T_ICMP6_HDR*)((uint8_t*)((nbuf)->buf) + ihoff))
143#define GET_ICMP6_SDU(nbuf,ihoff) ((uint8_t*)((nbuf)->buf) + ihoff + ICMP6_HDR_SIZE)
144
145#define GET_IP6_ICMP6_HDR_SIZE(nbuf) (GET_IP6_HDR_SIZE(nbuf) + ICMP6_HDR_SIZE)
146#define GET_IF_IP6_ICMP6_HDR_SIZE(nbuf) (IF_HDR_SIZE + GET_IP6_ICMP6_HDR_SIZE(nbuf))
147
148/*
149 * ICMP6 タイプ
150 */
151
152#define ICMP6_DST_UNREACH UINT_C(1) /* 宛å…
153ˆåˆ°é”不可能 */
154#define ICMP6_PACKET_TOO_BIG UINT_C(2) /* パケットが大きすぎる。 */
155#define ICMP6_TIME_EXCEEDED UINT_C(3) /* TTL を超
156過した。 */
157#define ICMP6_PARAM_PROB UINT_C(4) /* IPv6 ヘッダが不正。 */
158
159#define ICMP6_ECHO_REQUEST UINT_C(128) /* エコー要求 */
160#define ICMP6_ECHO_REPLY UINT_C(129) /* エコー応答 */
161
162#define ICMP6_MEMBERSHIP_QUERY UINT_C(130) /* グループメンバç…
163§ä¼š */
164#define ICMP6_MEMBERSHIP_REPORT UINT_C(131) /* グループメンバ報告 */
165#define ICMP6_MEMBERSHIP_REDUCTION UINT_C(132) /* グループメンバ終了 */
166
167#define MLD_LISTENER_QUERY UINT_C(130) /* マルチキャスト受信者
168ç…
169§ä¼š */
170#define MLD_LISTENER_REPORT UINT_C(131) /* マルチキャスト受信者
171報告 */
172#define MLD_LISTENER_DONE UINT_C(132) /* マルチキャスト受信者
173終了 */
174
175#define ND_ROUTER_SOLICIT UINT_C(133) /* ルータ要請 */
176#define ND_ROUTER_ADVERT UINT_C(134) /* ルータ通知 */
177#define ND_NEIGHBOR_SOLICIT UINT_C(135) /* 近隣要請 */
178#define ND_NEIGHBOR_ADVERT UINT_C(136) /* 近隣通知 */
179#define ND_REDIRECT UINT_C(137) /* 向け直し */
180
181#define ICMP6_ROUTER_RENUMBERING UINT_C(138) /* ルータ番号再設定 */
182
183#define ICMP6_WRU_REQUEST UINT_C(139) /* 要求ノード探索 */
184#define ICMP6_WRU_REPLY UINT_C(140) /* 応答ノード探索 */
185
186#define ICMP6_FQDN_QUERY UINT_C(139) /* FQDN ç…
187§ä¼š */
188#define ICMP6_FQDN_REPLY UINT_C(140) /* FQDN 応答 */
189
190#define ICMP6_NI_QUERY UINT_C(139) /* ノード情
191å ±ç…
192§ä¼š */
193#define ICMP6_NI_REPLY UINT_C(140) /* ノード情
194報応答 */
195
196#define ICMP6_MAX_TYPE UINT_C(203) /* ICMP6 タイプの最大値 */
197
198/*
199 * ICMP6 コード
200 */
201
202/* 宛å…
203ˆåˆ°é”不可能 */
204
205#define ICMP6_DST_UNREACH_NOROUTE UINT_C(0) /* 到達ルートなし。 */
206#define ICMP6_DST_UNREACH_ADMIN UINT_C(1) /* 管理者
207により無効化中。 */
208#define ICMP6_DST_UNREACH_NOTEIGHBOR UINT_C(2) /* 近隣者
209ではなくなった。 */
210#define ICMP6_DST_UNREACH_BEYOND_SCOPE UINT_C(2) /* スコープを超
211えている。 */
212#define ICMP6_DST_UNREACH_ADDR UINT_C(3) /* 宛å…
213ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã«åˆ°é”不可能。 */
214#define ICMP6_DST_UNREACH_NOPORT UINT_C(4) /* 宛å…
215ˆãƒãƒ¼ãƒˆã«åˆ°é”不可能。 */
216
217/* TTL 超
218過 */
219
220#define ICMP6_TIME_EXCEED_TRANSIT UINT_C(0) /* 転送時に TTL==0 になった。 */
221#define ICMP6_TIME_EXCEED_REASSEMBLY UINT_C(1) /* IP 再構成でタイムアウトした。*/
222
223/* ヘッダ不正 */
224
225#define ICMP6_PARAMPROB_HEADER UINT_C(0) /* ヘッダに不正があった。 */
226#define ICMP6_PARAMPROB_NEXT_HEADER UINT_C(1) /* 次ヘッダが認識できない。 */
227#define ICMP6_PARAMPROB_OPTION UINT_C(2) /* オプションが認識できない。 */
228
229/* 内
230部使用 */
231#define ND_REDIRECT_ONLINK UINT_C(0) /* オンリンクへの向け直し */
232#define ND_REDIRECT_ROUTER UINT_C(1) /* ルータへの向け直し */
233
234/*
235 * 制限値
236 */
237
238 /* ICMPv6 の最大ペイロード長 */
239#define ICMPV6_PAYLOAD_MAXLEN (IPV6_MMTU - (IP6_HDR_SIZE + ICMP6_HDR_SIZE))
240
241/*
242 * 近隣要請
243 */
244
245typedef struct t_neighbor_solicit_hdr {
246 T_ICMP6_HDR hdr;
247 T_IN6_ADDR target;
248 /* この後にオプションが続く */
249 } T_NEIGHBOR_SOLICIT_HDR;
250
251#define NEIGHBOR_SOLICIT_HDR_SIZE (sizeof(T_NEIGHBOR_SOLICIT_HDR))
252#define IF_IP6_NEIGHBOR_SOLICIT_HDR_OFFSET \
253 (IF_IP6_HDR_SIZE)
254
255#define GET_NEIGHBOR_SOLICIT_HDR(nbuf,nhoff) \
256 ((T_NEIGHBOR_SOLICIT_HDR*)((uint8_t*)((nbuf)->buf) + nhoff))
257#define GET_NEIGHBOR_SOLICIT_SDU(nbuf,nhoff) \
258 ((uint8_t*)((nbuf)->buf) + nhoff + NEIGHBOR_SOLICIT_HDR_SIZE)
259
260#define GET_IP6_NEIGHBOR_SOLICIT_HDR_SIZE(nbuf) \
261 (GET_IP6_HDR_SIZE(nbuf) + NEIGHBOR_SOLICIT_HDR_SIZE)
262#define GET_IF_IP6_NEIGHBOR_SOLICIT_HDR_SIZE(nbuf) \
263 (GET_IP6_NEIGHBOR_SOLICIT_HDR_SIZE(nbuf) + IF_HDR_SIZE)
264
265/*
266 * 近隣通知
267 */
268
269typedef struct t_neighbor_advert_hdr {
270 T_ICMP6_HDR hdr;
271 T_IN6_ADDR target;
272 /* この後にオプションが続く */
273 } __attribute__((packed, aligned(2))) T_NEIGHBOR_ADVERT_HDR;
274
275/* ICMP6 ヘッダのデータ部の定義 */
276
277#define nd_na_flags_reserved hdr.data.data32
278
279#define NEIGHBOR_ADVERT_HDR_SIZE (sizeof(T_NEIGHBOR_ADVERT_HDR))
280#define IP6_NEIGHBOR_ADVERT_HDR_SIZE (IP6_HDR_SIZE + NEIGHBOR_ADVERT_HDR_SIZE)
281#define IF_IP6_NEIGHBOR_ADVERT_HDR_SIZE \
282 (IF_IP6_HDR_SIZE + NEIGHBOR_ADVERT_HDR_SIZE)
283#define IF_IP6_NEIGHBOR_ADVERT_HDR_OFFSET \
284 (IF_IP6_HDR_SIZE)
285
286#define GET_NEIGHBOR_ADVERT_HDR(nbuf,nhoff) \
287 ((T_NEIGHBOR_ADVERT_HDR*)((uint8_t*)((nbuf)->buf) + nhoff))
288#define GET_NEIGHBOR_ADVERT_SDU(nbuf,nhoff) \
289 ((uint8_t*)((nbuf)->buf) + nhoff + NEIGHBOR_ADVERT_HDR_SIZE)
290
291#define GET_IP6_NEIGHBOR_ADVERT_HDR_SIZE(nbuf) \
292 (GET_IP6_HDR_SIZE(nbuf) + NEIGHBOR_ADVERT_HDR_SIZE)
293#define GET_IF_IP6_NEIGHBOR_ADVERT_HDR_SIZE(nbuf) \
294 (GET_IP6_NEIGHBOR_ADVERT_HDR_SIZE(nbuf) + IF_HDR_SIZE)
295
296/*
297 * 近隣通知フラグ、nd_na_flags_reserved (hdr.data32) に設定する。
298 */
299
300#if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN
301
302#define ND_NA_FLG_OVERRIDE ULONG_C(0x20000000) /* 近隣キャッシュ上書き */
303#define ND_NA_FLG_SOLICITED ULONG_C(0x40000000) /* 近隣要請への応答 */
304#define ND_NA_FLG_ROUTER ULONG_C(0x80000000) /* ルータ通知 */
305
306#elif _NET_CFG_BYTE_ORDER == _NET_CFG_LITTLE_ENDIAN
307
308#define ND_NA_FLG_OVERRIDE ULONG_C(0x00000020) /* 近隣キャッシュ上書き */
309#define ND_NA_FLG_SOLICITED ULONG_C(0x00000040) /* 近隣要請への応答 */
310#define ND_NA_FLG_ROUTER ULONG_C(0x00000080) /* ルータ通知 */
311
312#endif /* #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN */
313
314/*
315 * ルータ通知
316 *
317 * RFC4291: IP Version 6 Addressing Architecture
318 * RFC4941: Privacy Extensions for Stateless Address Autoconfiguration in IPv6
319 * RFC6106: IPv6 Router Advertisement Options for DNS Configuration
320 */
321
322typedef struct t_router_advert_hdr {
323 T_ICMP6_HDR hdr;
324 uint32_t reachable; /* [us] 到達可能時間 */
325 uint32_t retransmit; /* [us] 近隣要請送信間隔 */
326 /* この後にオプションが続く */
327 } __attribute__((packed, aligned(2))) T_ROUTER_ADVERT_HDR;
328
329/* ICMP6 ヘッダのデータ部の定義 */
330
331#define nd_ra_current_hoplimit hdr.data.data8[0]
332#define nd_ra_flags hdr.data.data8[1]
333#define nd_ra_router_lifetime hdr.data.data16[1] /* [s] ルータ有効時間 */
334
335#define ROUTER_ADVERT_HDR_SIZE (sizeof(T_ROUTER_ADVERT_HDR))
336#define IP6_ROUTER_ADVERT_HDR_SIZE (IP6_HDR_SIZE + ROUTER_ADVERT_HDR_SIZE)
337#define IF_IP6_ROUTER_ADVERT_HDR_SIZE (IF_IP6_HDR_SIZE + ROUTER_ADVERT_HDR_SIZE)
338#define IF_IP6_ROUTER_ADVERT_HDR_OFFSET (IF_IP6_HDR_SIZE)
339
340#define GET_ROUTER_ADVERT_HDR(nbuf,nhoff) \
341 ((T_ROUTER_ADVERT_HDR*)((uint8_t*)((nbuf)->buf) + nhoff))
342#define GET_ROUTER_ADVERT_SDU(nbuf,nhoff) \
343 ((uint8_t*)((nbuf)->buf) + nhoff + ROUTER_ADVERT_HDR_SIZE)
344
345#define GET_IP6_ROUTER_ADVERT_HDR_SIZE(nbuf) \
346 (GET_IP6_HDR_SIZE(nbuf) + ROUTER_ADVERT_HDR_SIZE)
347#define GET_IF_IP6_ROUTER_ADVERT_HDR_SIZE(nbuf) \
348 (GET_IP6_ROUTER_ADVERT_HDR_SIZE(nbuf) + IF_HDR_SIZE)
349
350/*
351 * ルータ通知ヘッダのフラグ
352 */
353
354#define ND_RA_FLAG_MANAGED UINT_C(0x80)
355#define ND_RA_FLAG_OTHER UINT_C(0x40)
356#define ND_RA_FLAG_HA UINT_C(0x20)
357
358/*
359 * M: RA以外の方法で自動的にアドレスを設定することを許可する。
360 * O: RA以外の方法で自動的にアドレス以外の情
361報を設定することをを許可する。
362 *
363 * M O
364 * ON ON アドレスとそれ以外の情
365報をDHCPv6で設定する(statefull)
366 * ON OFF アドレスはDHCPv6で設定するが、それ以外は手動で設定する。
367 * OFF ON アドレスは RA で設定するが、それ以外の情
368報をDHCPv6で設定する(stateless)
369 * OFF OFF DHCPv6 は使用しない。
370 */
371
372/*
373 * ルータ要請
374 */
375
376typedef struct t_router_solicit_hdr {
377 T_ICMP6_HDR hdr;
378 } __attribute__((packed, aligned(2))) T_ROUTER_SOLICIT_HDR;
379
380/* ICMP6 ヘッダのデータ部の定義 */
381
382#define nd_rs_reserved hdr.data.data32
383
384#define ROUTER_SOLICIT_HDR_SIZE (sizeof(T_ROUTER_SOLICIT_HDR))
385#define IP6_ROUTER_SOLICIT_HDR_SIZE (IP6_HDR_SIZE + ROUTER_SOLICIT_HDR_SIZE)
386#define IF_IP6_ROUTER_SOLICIT_HDR_SIZE (IF_IP6_HDR_SIZE + ROUTER_SOLICIT_HDR_SIZE)
387#define IF_IP6_ROUTER_SOLICIT_HDR_OFFSET \
388 (IF_IP6_HDR_SIZE)
389
390#define GET_ROUTER_SOLICIT_HDR(nbuf,nhoff) \
391 ((T_ROUTER_SOLICIT_HDR*)((uint8_t*)((nbuf)->buf) + nhoff))
392#define GET_ROUTER_SOLICIT_SDU(nbuf,nhoff) \
393 ((uint8_t*)((nbuf)->buf) + nhoff + ROUTER_SOLICIT_HDR_SIZE)
394
395#define GET_IP6_ROUTER_SOLICIT_HDR_SIZE(nbuf) \
396 (GET_IP6_HDR_SIZE(nbuf) + ROUTER_SOLICIT_HDR_SIZE)
397#define GET_IF_IP6_ROUTER_SOLICIT_HDR_SIZE(nbuf) \
398 (GET_IP6_ROUTER_SOLICIT_HDR_SIZE(nbuf) + IF_HDR_SIZE)
399
400/*
401 * 近隣探索オプション
402 */
403
404/* 近隣探索ヘッダ */
405
406typedef struct t_neighbor_hdr {
407 T_ICMP6_HDR hdr;
408 T_IN6_ADDR target;
409 } __attribute__((packed, aligned(2))) T_NEIGHBOR_HDR;
410
411/* 近隣探索オプションヘッダ */
412
413typedef struct t_nd_opt_hdr {
414 uint8_t type; /* オプションタイプ */
415 uint8_t len; /* オプション長、単位は 8 バイト */
416 } __attribute__((packed, aligned(2))) T_ND_OPT_HDR;
417
418#define ND_OPT_HDR_SIZE (sizeof(T_ND_OPT_HDR))
419
420#define ND_OPT_SOURCE_LINKADDR UINT_C(1) /* 送信å…
421ˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ */
422#define ND_OPT_TARGET_LINKADDR UINT_C(2) /* 対象ネットワークインタフェースのアドレス */
423#define ND_OPT_PREFIX_INFORMATION UINT_C(3) /* プレフィックス情
424å ± */
425#define ND_OPT_REDIRECTED_HEADER UINT_C(4) /* リダイレクト・ヘッダ */
426#define ND_OPT_MTU UINT_C(5) /* MTU */
427
428#define ND_OPT_PREFIX_INFO_COUNT UINT_C(6) /* プレフィックス情
429報の個数 */
430#define ND_OPT_OFF_ARRAY_SIZE UINT_C(7) /* ND オプションのオフセットを記録するé…
431åˆ—サイズ*/
432
433#define ND_OPT_OFF_ARRAY_IX(t) ((t)-1) /* オフセットé…
434åˆ—のインデックス */
435
436/* プレフィックスオプション */
437
438typedef struct t_nd_opt_prefix_info {
439 uint8_t type; /* 近隣探索オプションタイプ = 3 */
440 uint8_t len; /* オプション長 = 8×4=32 */
441 uint8_t prefix_len; /* プレフィックス長 */
442 uint8_t flags; /* フラグ */
443 uint32_t valid; /* [s] 有効時間 */
444 uint32_t preferred; /* [s] 推奨有効時間 */
445 uint32_t reserved;
446 T_IN6_ADDR prefix; /* プレフィックス */
447 } __attribute__((packed, aligned(2))) T_ND_OPT_PREFIX_INFO;
448
449#define ND_OPT_PI_FLAG_ONLINK UINT_C(0x80) /* オンリンクプレフィックス */
450#define ND_OPT_PI_FLAG_AUTO UINT_C(0x40) /* ステートレス・アドレス自動設定*/
451
452/* MTU オプションヘッダ */
453
454typedef struct t_nd_opt_mtu_hdr {
455 uint8_t type; /* オプションタイプ */
456 uint8_t len; /* オプション長、単位は 8 バイト*/
457 uint16_t reserved;
458 uint32_t mtu; /* MTU */
459 } __attribute__((packed, aligned(2))) T_ND_OPT_MTU_HDR;
460
461/*
462 * 向け直し
463 */
464
465typedef struct t_nd_redirect_hdr {
466 T_ICMP6_HDR hdr;
467 T_IN6_ADDR target; /* ルータのアドレス */
468 T_IN6_ADDR dst; /* 向け直しの終点アドレス */
469 /* この後にオプションが続く */
470 } __attribute__((packed, aligned(2))) T_ND_REDIRECT_HDR;
471
472#define ND_REDIRECT_HDR_SIZE (sizeof(T_ND_REDIRECT_HDR))
473
474#ifdef SUPPORT_MIB
475
476/*
477 * SNMP の 管理情
478報ベース (MIB)
479 */
480
481typedef struct t_icmp6_ifstat {
482 uint32_t ipv6IfIcmpInMsgs;
483 uint32_t ipv6IfIcmpInErrors;
484 uint32_t ipv6IfIcmpInDestUnreachs;
485/* uint32_t ipv6IfIcmpInAdminProhibs;*/
486 uint32_t ipv6IfIcmpInTimeExcds;
487 uint32_t ipv6IfIcmpInParmProblems;
488 uint32_t ipv6IfIcmpInPktTooBigs;
489 uint32_t ipv6IfIcmpInEchos;
490 uint32_t ipv6IfIcmpInEchoReplies;
491/* uint32_t ipv6IfIcmpInRouterSolicits;*/
492 uint32_t ipv6IfIcmpInRouterAdvertisements;
493 uint32_t ipv6IfIcmpInNeighborSolicits;
494 uint32_t ipv6IfIcmpInNeighborAdvertisements;
495 uint32_t ipv6IfIcmpInRedirects;
496/* uint32_t ipv6IfIcmpInGroupMembQueries;*/
497/* uint32_t ipv6IfIcmpInGroupMembResponses;*/
498/* uint32_t ipv6IfIcmpInGroupMembReductions;*/
499 uint32_t ipv6IfIcmpOutMsgs;
500 uint32_t ipv6IfIcmpOutErrors;
501 uint32_t ipv6IfIcmpOutDestUnreachs;
502/* uint32_t ipv6IfIcmpOutAdminProhibs;*/
503/* uint32_t ipv6IfIcmpOutTimeExcds;*/
504 uint32_t ipv6IfIcmpOutParmProblems;
505 uint32_t ipv6IfIcmpOutPktTooBigs;
506 uint32_t ipv6IfIcmpOutEchos;
507 uint32_t ipv6IfIcmpOutEchoReplies;
508 uint32_t ipv6IfIcmpOutRouterSolicits;
509/* uint32_t ipv6IfIcmpOutRouterAdvertisements;*/
510 uint32_t ipv6IfIcmpOutNeighborSolicits;
511 uint32_t ipv6IfIcmpOutNeighborAdvertisements;
512/* uint32_t ipv6IfIcmpOutRedirects;*/
513/* uint32_t ipv6IfIcmpOutGroupMembQueries;*/
514/* uint32_t ipv6IfIcmpOutGroupMembResponses;*/
515/* uint32_t ipv6IfIcmpOutGroupMembReductions;*/
516} T_ICMP6_IFSTAT;
517
518extern T_ICMP6_IFSTAT icmp6_ifstat;
519
520#endif /* of #ifdef SUPPORT_MIB */
521
522/*
523 * 関数
524 */
525
526extern uint_t icmp6_input (T_NET_BUF **inputp, uint_t *offp, uint_t *nextp);
527extern void icmp6_error (T_NET_BUF *input, uint8_t type, uint8_t code, uint32_t param);
528
529#ifdef ICMP_CFG_CALLBACK_ECHO_REPLY
530
531extern void icmp6_echo_reply (T_NET_BUF *input, uint_t ihoff);
532
533#endif /* of #ifdef ICMP_CFG_CALLBACK_ECHO_REPLY */
534
535#endif /* of #ifndef _IP_ICMP6_H_ */
Note: See TracBrowser for help on using the repository browser.