source: EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/nd6.h@ 321

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

文字コードを設定

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 11.0 KB
Line 
1/*
2 * TINET (TCP/IP Protocol Stack)
3 *
4 * Copyright (C) 2001-2009 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 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
25 *
26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
30 *
31 * @(#) $Id$
32 */
33
34/* $FreeBSD: src/sys/netinet6/nd6.h,v 1.10 2002/04/19 04:46:23 suz Exp $ */
35/* $KAME: nd6.h,v 1.76 2001/12/18 02:10:31 itojun Exp $ */
36
37/*
38 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
39 * All rights reserved.
40 *
41 * Redistribution and use in source and binary forms, with or without
42 * modification, are permitted provided that the following conditions
43 * are met:
44 * 1. Redistributions of source code must retain the above copyright
45 * notice, this list of conditions and the following disclaimer.
46 * 2. Redistributions in binary form must reproduce the above copyright
47 * notice, this list of conditions and the following disclaimer in the
48 * documentation and/or other materials provided with the distribution.
49 * 3. Neither the name of the project nor the names of its contributors
50 * may be used to endorse or promote products derived from this software
51 * without specific prior written permission.
52 *
53 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
54 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
55 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
56 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
57 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
58 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
59 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
60 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
61 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
62 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
63 * SUCH DAMAGE.
64 */
65
66#ifndef _ND6_H_
67#define _ND6_H_
68
69#ifdef SUPPORT_INET6
70
71/*
72 * ネットワークインタフェース構造体(T_IFNET)のフラグ
73 */
74
75#define ND6_IFF_IFDISABLED UINT_C(0x01) /* インタフェースを無効にする。*/
76
77/*
78 * 近隣キャッシュ
79 */
80
81typedef struct t_llinfo_nd6 {
82 T_IN6_ADDR addr;
83 T_NET_BUF *hold;
84 TMO tmout;
85 SYSTIM expire; /* [ms] 有効時間が切れる時刻 */
86 T_IF_ADDR ifaddr;
87 uint8_t state;
88 uint8_t asked;
89 uint8_t flags;
90 } T_LLINFO_ND6;
91
92/* 近隣キャッシュの状態 */
93
94#define ND6_LLINFO_FREE 0 /* 未使用 */
95#define ND6_LLINFO_NO_STATE 1 /* 状態未定義 */
96#define ND6_LLINFO_INCOMPLETE 2 /* 未解決 */
97#define ND6_LLINFO_REACHABLE 3 /* 到達可能 */
98#define ND6_LLINFO_STALE 4 /* 到達可能性は未確認 */
99#define ND6_LLINFO_DELAY 5 /* 到達可能性の確認待機 */
100#define ND6_LLINFO_PROBE 6 /* 到達可能性を確認中 */
101
102#define ND6_IS_LLINFO_PROBREACH(n) ((n)->state > ND6_LLINFO_INCOMPLETE)
103
104/* 近隣キャッシュの制御ビット */
105
106#define ND6_LLIF_ROUTER UINT_C(0x80) /* ルータ */
107#define ND6_LLIF_ASKED UINT_C(0x40) /* 通知済み */
108#define ND6_LLIF_STATE_MASK UINT_C(0x07) /* 状態マスク */
109
110/* 近隣探索キャッシュ、有効時間の定義 */
111
112#define ND6_SLOW_TMO ((60*60*1000)/NET_TIMER_HZ)
113 /* 1 [時間] */
114 /* 近隣探索キャッシュ更新タイムアウト */
115
116#define ND6_MAX_DAD_TRY 15 /* 重複アドレス検出の再送回数 */
117#define ND6_MAX_MCAST_QUERY 3 /* マルチキャストアドレス要請の再送回数 */
118#define ND6_MAX_UCAST_QUERY 3 /* ユニキャストアドレス要請の再送回数 */
119
120#define ND6_INFINITE_LIFETIME 0xffffffff
121
122#define ND6_GCOLLECTION_TIME (60*60*24*SYSTIM_HZ)
123 /* ゴミ拾い周期、1 日 */
124#define ND6_DELAY_TIME (5*SYSTIM_HZ) /* 確認待機遅延 */
125#define ND6_FIRST_DAD_DELAY_TIME (1*SYSTIM_HZ) /* 最初の重複アドレス検出送信遅延 */
126#define ND6_DAD_DELAY_TIME (5*SYSTIM_HZ/10)
127 /* 重複アドレス検出送信遅延 */
128
129/* 近隣探索用タイマの設定 */
130
131#define ND6_TIMER_TMO ((SYSTIM_HZ/NET_TIMER_CYCLE)/5) /* 0.2[s] 間隔 */
132
133/*
134 * 到達可能状態の有効時間
135 */
136
137#define ND6_DEF_REACHABLE_TIME (30*SYSTIM_HZ) /* 到達可能状態の有効時間の既定値 */
138#define ND6_MAX_REACHABLE_TIME (60*60*SYSTIM_HZ)
139 /* 到達可能状態の有効時間の既定値 */
140#define ND6_RECALC_REACHTM_INTERVAL (60*60*2*SYSTIM_HZ)
141 /* 到達可能状態の有効時間再計算間隔 */
142
143#define ND6_MIN_REACHTM_RAND_FACTOR 512 /* 最小乱数補正値、1,024 * 0.5 */
144
145#if 1 /* タイマーの起動間隔を考慮し、規定より短く設定 */
146#define ND6_MAX_REACHTM_RAND_FACTOR 1484 /* 最小乱数補正値、1,024 * 1.45 */
147#else
148#define ND6_MAX_REACHTM_RAND_FACTOR 1536 /* 最小乱数補正値、1,024 * 1.5 */
149#endif
150
151/* 到達可能状態の有効時間の計算マクロ */
152
153#define ND6_CALC_REACH_TIME(b) \
154 ((ND6_MIN_REACHTM_RAND_FACTOR * ((uint32_t)(b) >> 10)) + \
155 (net_rand() & ((ND6_MAX_REACHTM_RAND_FACTOR - ND6_MIN_REACHTM_RAND_FACTOR) * ((uint32_t)(b) >> 10))))
156
157/*
158 * 近隣探索の送信間隔
159 */
160
161#define ND6_DEF_RETRANS_TIME (1*SYSTIM_HZ)
162
163/*
164 * ルータ通知により変更されることがある値
165 */
166
167#if NUM_ND6_DEF_RTR_ENTRY > 0
168
169/* ルータ通知を受信する場合は、通知された値 */
170
171#define ND6_REACHABLE_TIME nd6_reachable_time
172#define ND6_RETRANS_TIME nd6_retrans_time
173
174#else /* #if NUM_ND6_DEF_RTR_ENTRY > 0 */
175
176/* ルータ通知を受信しない場合の値は既定値 */
177
178#define ND6_REACHABLE_TIME ND6_DEF_REACHABLE_TIME
179#define ND6_RETRANS_TIME ND6_DEF_RETRANS_TIME
180
181#endif /* #if NUM_ND6_DEF_RTR_ENTRY > 0 */
182
183/*
184 * ディフォルトルータ・リスト
185 */
186
187typedef struct t_def_router {
188 T_IN6_ADDR addr;
189 SYSTIM expire; /* [ms] 有効時間が切れる時刻 */
190 uint32_t lifetime; /* [ms] 有効時間 */
191 uint16_t plistmap; /* プレフィックスマップ */
192 uint8_t flags; /* ルータ通知のフラグ */
193 uint8_t state;
194 } T_DEF_ROUTER;
195
196/* ディフォルトルータ・リストの状態 */
197
198#define ND6_DEF_RTR_BUSY 0xff /* 使用中 */
199
200/* プレフィックスのインデックス */
201
202#define ND6_PREFIX_IX_INVALID 0xff
203
204/*
205 * プレフィックス・リスト
206 */
207
208typedef struct t_nd6_prefix {
209 T_IN6_ADDR prefix; /* プレフィックス */
210 uint32_t expire; /* [s] 有効時間が切れる時刻 */
211 uint32_t preferred; /* [s] 推奨有効時間が切れる時刻 */
212 uint32_t vltime; /* [s] 有効時間 */
213 uint32_t pltime; /* [s] 推奨有効時間 */
214 uint16_t routermap; /* ルータマップ */
215 uint8_t flags; /* フラグ */
216 uint8_t prefix_len; /* プレフィックス長 */
217 } T_ND6_PREFIX;
218
219/* フラグ */
220
221#define ND6_PREFIX_FLAG_ONLINK UINT_C(0x80) /* オンリンクプレフィックス */
222#define ND6_PREFIX_FLAG_AUTO UINT_C(0x40) /* ステートレス・アドレス自動設定*/
223
224#define ND6_PREFIX_STATE_BUSY UINT_C(0x01) /* 使用中 */
225#define ND6_PREFIX_STATE_ONLINK UINT_C(0x02) /* オンリンク状態 */
226#define ND6_PREFIX_STATE_DETACHED UINT_C(0x04) /* 非使用状態 */
227
228/*
229 * 変数
230 */
231
232extern SYSTIM nd6_base_reachable_time;
233extern SYSTIM nd6_reachable_time;
234extern SYSTIM nd6_recalc_reachtm_interval;
235extern SYSTIM nd6_retrans_time;
236extern uint8_t ip6_defhlim;
237
238/*
239 * 関数
240 */
241
242extern void nd6_ifattach (T_IFNET *ifp);
243extern void nd6_ns_output (T_IFNET *ifp, T_IN6_ADDR *daddr,
244 T_IN6_ADDR *taddr, T_LLINFO_ND6 *ln, bool_t dad);
245extern void nd6_na_output (T_IFNET *ifp, T_IN6_ADDR *daddr,
246 T_IN6_ADDR *taddr, uint32_t flags, bool_t tlladdr);
247extern void nd6_dad_start (T_IFNET *ifp, T_IN6_IFADDR *ia, int_t *tick);
248extern ER nd6_output (T_IFNET *ifp, T_NET_BUF *output,
249 T_IN6_ADDR *dst, T_LLINFO_ND6 *ln, TMO tmout);
250extern void nd6_na_input (T_NET_BUF *input, uint_t off);
251extern void nd6_ns_input (T_NET_BUF *input, uint_t off);
252extern void nd6_ra_input (T_NET_BUF *input, uint_t off);
253extern ER nd6_storelladdr (T_IF_ADDR *out, T_IN6_ADDR *dst, T_IF_ADDR *ifa);
254extern ER nd6_options (uint8_t *opt, void *nh, uint_t len);
255extern T_LLINFO_ND6 *nd6_lookup (T_IN6_ADDR *addr, bool_t create);
256extern ER nd6_output_hold (T_IFNET *ifp, T_LLINFO_ND6 *ln);
257extern T_LLINFO_ND6 *nd6_cache_lladdr (T_IFNET *ifp, T_IN6_ADDR *from,
258 T_IF_ADDR *lladdr, uint8_t type, uint8_t code);
259extern void nd6_defrtrlist_timer (void);
260extern void nd6_prelist_timer (void);
261extern void nd6_rtrsol_ctl (void);
262extern T_IN6_ADDR *nd6_router_lookup (void);
263extern T_DEF_ROUTER *nd6_defrtrlist_lookup (T_IN6_ADDR *src);
264extern void nd6_defrtrlist_del (T_DEF_ROUTER *dr);
265extern void nd6_timer (void);
266extern const T_DEF_ROUTER *nd6_get_drl (uint_t *count);
267extern const T_ND6_PREFIX *nd6_get_prl (void);
268extern const T_LLINFO_ND6 *nd6_get_cache (void);
269extern ER nd6_prefix_onlink (T_ND6_PREFIX *pr);
270extern ER nd6_prefix_offlink (T_ND6_PREFIX *pr);
271extern T_ND6_PREFIX *nd6_onlink_prefix_lookup (T_IN6_ADDR *dst);
272
273#endif /* of #ifdef SUPPORT_INET6 */
274
275#endif /* of #ifndef _ND6_H_ */
Note: See TracBrowser for help on using the repository browser.