source: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/netinet6/nd6.h@ 364

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

TINETとSocket APIなどを更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 10.9 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 * (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/*
70 * ネットワークインタフェース構造体(T_IFNET)のフラグ
71 */
72
73#define ND6_IFF_IFDISABLED UINT_C(0x01) /* インタフェースを無効にする。*/
74
75/*
76 * 近隣キャッシュ
77 */
78
79typedef struct t_llinfo_nd6 {
80 T_IN6_ADDR addr;
81 T_NET_BUF *hold;
82 TMO tmout;
83 SYSTIM expire; /* [us] 有効時間が切れる時刻 */
84 T_IF_ADDR ifaddr;
85 uint8_t state;
86 uint8_t asked;
87 uint8_t flags;
88 } T_LLINFO_ND6;
89
90/* 近隣キャッシュの状態 */
91
92#define ND6_LLINFO_FREE 0 /* 未使用 */
93#define ND6_LLINFO_NO_STATE 1 /* 状態未定義 */
94#define ND6_LLINFO_INCOMPLETE 2 /* 未解決 */
95#define ND6_LLINFO_REACHABLE 3 /* 到達可能 */
96#define ND6_LLINFO_STALE 4 /* 到達可能性は未確認 */
97#define ND6_LLINFO_DELAY 5 /* 到達可能性の確認待機 */
98#define ND6_LLINFO_PROBE 6 /* 到達可能性を確認中 */
99
100#define ND6_IS_LLINFO_PROBREACH(n) ((n)->state > ND6_LLINFO_INCOMPLETE)
101
102/* 近隣キャッシュの制御ビット */
103
104#define ND6_LLIF_ROUTER UINT_C(0x80) /* ルータ */
105#define ND6_LLIF_ASKED UINT_C(0x40) /* 通知済み */
106#define ND6_LLIF_STATE_MASK UINT_C(0x07) /* 状態マスク */
107
108/* 近隣探索キャッシュ、有効時間の定義 */
109
110#define ND6_SLOW_TMO ((60*60*1000)/NET_TIMER_HZ)
111 /* 1 [時間] */
112 /* 近隣探索キャッシュ更新タイムアウト */
113
114#define ND6_MAX_DAD_TRY 15 /* 重複アドレス検出の再送回数 */
115#define ND6_MAX_MCAST_QUERY 3 /* マルチキャストアドレス要請の再送回数 */
116#define ND6_MAX_UCAST_QUERY 3 /* ユニキャストアドレス要請の再送回数 */
117
118#define ND6_GCOLLECTION_TIME (60*60*24*SYSTIM_HZ)
119 /* ゴミ拾い周期、1 日 */
120#define ND6_DELAY_TIME (5*SYSTIM_HZ) /* 確認待機遅延 */
121#define ND6_FIRST_DAD_DELAY_TIME (1*SYSTIM_HZ) /* 最初の重複アドレス検出送信遅延 */
122#define ND6_DAD_DELAY_TIME (5*SYSTIM_HZ/10)
123 /* 重複アドレス検出送信遅延 */
124
125/* 近隣探索用タイマの設定 */
126
127#define ND6_TIMER_TMO ((SYSTIM_HZ/NET_TIMER_CYCLE)/5) /* 0.2[s] 間隔 */
128
129/*
130 * 到達可能状態の有効時間
131 */
132
133#define ND6_DEF_REACHABLE_TIME (30*SYSTIM_HZ) /* 到達可能状態の有効時間の既定値 */
134#define ND6_MAX_REACHABLE_TIME (60*60*SYSTIM_HZ)
135 /* 到達可能状態の有効時間の既定値 */
136#define ND6_RECALC_REACHTM_INTERVAL (60*60*2*SYSTIM_HZ)
137 /* 到達可能状態の有効時間再計算間隔 */
138
139#define ND6_MIN_REACHTM_RAND_FACTOR 512 /* 最小乱数補正値、1,024 * 0.5 */
140
141#if 1 /* タイマーの起動間隔を考慮し、規定より短く設定 */
142#define ND6_MAX_REACHTM_RAND_FACTOR 1484 /* 最小乱数補正値、1,024 * 1.45 */
143#else
144#define ND6_MAX_REACHTM_RAND_FACTOR 1536 /* 最小乱数補正値、1,024 * 1.5 */
145#endif
146
147/* 到達可能状態の有効時間の計算マクロ */
148
149#define ND6_CALC_REACH_TIME(b) \
150 ((ND6_MIN_REACHTM_RAND_FACTOR * ((uint32_t)(b) >> 10)) + \
151 (net_rand() & ((ND6_MAX_REACHTM_RAND_FACTOR - ND6_MIN_REACHTM_RAND_FACTOR) * ((uint32_t)(b) >> 10))))
152
153/*
154 * 近隣探索の送信間隔
155 */
156
157#define ND6_DEF_RETRANS_TIME (1*SYSTIM_HZ)
158
159/*
160 * ルータ通知により変更されることがある値
161 */
162
163#if NUM_ND6_DEF_RTR_ENTRY > 0
164
165/* ルータ通知を受信する場合は、通知された値 */
166
167#define ND6_REACHABLE_TIME nd6_reachable_time
168#define ND6_RETRANS_TIME nd6_retrans_time
169
170#else /* #if NUM_ND6_DEF_RTR_ENTRY > 0 */
171
172/* ルータ通知を受信しない場合の値は既定値 */
173
174#define ND6_REACHABLE_TIME ND6_DEF_REACHABLE_TIME
175#define ND6_RETRANS_TIME ND6_DEF_RETRANS_TIME
176
177#endif /* #if NUM_ND6_DEF_RTR_ENTRY > 0 */
178
179/*
180 * ディフォルトルータ・リスト
181 */
182
183typedef struct t_def_router {
184 T_IN6_ADDR addr;
185 SYSTIM expire; /* [us] 有効時間が切れる時刻 */
186 uint32_t lifetime; /* [us] 有効時間 */
187 uint16_t plistmap; /* プレフィックスマップ */
188 uint8_t flags; /* ルータ通知のフラグ */
189 uint8_t state;
190 } T_DEF_ROUTER;
191
192/* ディフォルトルータ・リストの状態 */
193
194#define ND6_DEF_RTR_BUSY 0xff /* 使用中 */
195
196/* プレフィックスのインデックス */
197
198#define ND6_PREFIX_IX_INVALID 0xff
199
200/*
201 * プレフィックス・リスト
202 */
203
204typedef struct t_nd6_prefix {
205 T_IN6_ADDR prefix; /* プレフィックス */
206 uint32_t expire; /* [s] 有効時間が切れる時刻 */
207 uint32_t preferred; /* [s] 推奨有効時間が切れる時刻 */
208 uint32_t vltime; /* [s] 有効時間 */
209 uint32_t pltime; /* [s] 推奨有効時間 */
210 uint16_t routermap; /* ルータマップ */
211 uint8_t flags; /* フラグ */
212 uint8_t prefix_len; /* プレフィックス長 */
213 } T_ND6_PREFIX;
214
215/* フラグ */
216
217#define ND6_PREFIX_FLAG_ONLINK UINT_C(0x80) /* オンリンクプレフィックス */
218#define ND6_PREFIX_FLAG_AUTO UINT_C(0x40) /* ステートレス・アドレス自動設定*/
219
220#define ND6_PREFIX_STATE_BUSY UINT_C(0x01) /* 使用中 */
221#define ND6_PREFIX_STATE_ONLINK UINT_C(0x02) /* オンリンク状態 */
222#define ND6_PREFIX_STATE_DETACHED UINT_C(0x04) /* 非使用状態 */
223
224/*
225 * 変数
226 */
227
228extern SYSTIM nd6_base_reachable_time;
229extern SYSTIM nd6_reachable_time;
230extern SYSTIM nd6_recalc_reachtm_interval;
231extern SYSTIM nd6_retrans_time;
232
233/*
234 * 関数
235 */
236
237extern void nd6_ifattach (T_IFNET *ifp);
238extern void nd6_ns_output (T_IFNET *ifp, const T_IN6_ADDR *daddr,
239 const T_IN6_ADDR *taddr, T_LLINFO_ND6 *ln, bool_t dad);
240extern void nd6_na_output (T_IFNET *ifp, const T_IN6_ADDR *daddr,
241 const T_IN6_ADDR *taddr, uint32_t flags, bool_t tlladdr);
242extern void nd6_dad_start (T_IFNET *ifp, T_IN6_IFADDR *ia, int_t *tick);
243extern ER nd6_output (T_IFNET *ifp, T_NET_BUF *output,
244 const T_IN6_ADDR *dst, T_LLINFO_ND6 *ln, TMO tmout);
245extern void nd6_na_input (T_NET_BUF *input, uint_t off);
246extern void nd6_ns_input (T_NET_BUF *input, uint_t off);
247extern void nd6_ra_input (T_NET_BUF *input, uint_t off);
248extern ER nd6_storelladdr (T_IF_ADDR *out, const T_IN6_ADDR *dst, T_IF_ADDR *ifa);
249extern ER nd6_options (uint8_t *opt, void *nh, uint_t len);
250extern T_LLINFO_ND6 *nd6_lookup (const T_IN6_ADDR *addr, bool_t create);
251extern ER nd6_output_hold (T_IFNET *ifp, T_LLINFO_ND6 *ln);
252extern T_LLINFO_ND6 *nd6_cache_lladdr (T_IFNET *ifp, const T_IN6_ADDR *from,
253 T_IF_ADDR *lladdr, uint8_t type, uint8_t code);
254extern void nd6_defrtrlist_timer (void);
255extern void nd6_prelist_timer (void);
256extern void nd6_rtrsol_ctl (void);
257extern const T_IN6_ADDR *nd6_router_lookup (void);
258extern T_DEF_ROUTER *nd6_defrtrlist_lookup (const T_IN6_ADDR *src);
259extern void nd6_defrtrlist_del (T_DEF_ROUTER *dr);
260extern void nd6_timer (void);
261extern const T_DEF_ROUTER *nd6_get_drl (uint_t *count);
262extern const T_ND6_PREFIX *nd6_get_prl (void);
263extern const T_LLINFO_ND6 *nd6_get_cache (void);
264extern ER nd6_prefix_onlink (T_ND6_PREFIX *pr);
265extern ER nd6_prefix_offlink (T_ND6_PREFIX *pr);
266extern T_ND6_PREFIX *nd6_onlink_prefix_lookup (const T_IN6_ADDR *dst);
267
268#endif /* of #ifndef _ND6_H_ */
Note: See TracBrowser for help on using the repository browser.