source: EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/in6_var.h@ 270

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

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 12.9 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 * 上記著作権者
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: in6_var.h 270 2017-02-09 04:03:47Z coas-nagasima $
44 */
45
46/* $FreeBSD: src/sys/netinet6/in6_var.h,v 1.3.2.2 2001/07/03 11:01:52 ume Exp $ */
47/* $KAME: in6_var.h,v 1.56 2001/03/29 05:34:31 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) 1985, 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 * @(#)in_var.h 8.1 (Berkeley) 6/10/93
111 */
112
113#ifndef _IN6_VAR_H_
114#define _IN6_VAR_H_
115
116#ifdef SUPPORT_INET6
117
118/*
119 * アドレス有効時間構造体
120 */
121
122typedef struct in6_addr_lifetime {
123
124 /*
125 * expire と perferred は、システムが起動してからの経過時間
126 */
127 uint32_t expire; /* 有効時間が切れる時刻 [s] */
128 uint32_t preferred; /* 推奨有効時間が切れる時刻 [s] */
129
130 /*
131 * vltime と pltime は、追加/変更してからの相対時間
132 */
133 uint32_t vltime; /* 有効時間 [ms] */
134 uint32_t pltime; /* 推奨有効時間 [ms] */
135 } __attribute__((packed, aligned(2)))T_IN6_ADDR_LIFETIME;
136
137/*
138 * インタフェースアドレス構造体
139 */
140
141typedef struct t_in6_ifaddr {
142 T_IN6_ADDR addr; /* IPv6 アドレス */
143 T_IN6_ADDR_LIFETIME lifetime; /* 有効時間 */
144 uint8_t flags; /* フラグ */
145 uint8_t prefix_len; /* プレフィックス長 */
146 uint8_t router_index; /* ルータインデックス */
147 uint8_t prefix_index; /* プレフィックスインデックス */
148 uint8_t na_icount; /* 重複アドレス検出 (DAD) 通知のå…
149¥åŠ›å›žæ•° */
150 uint8_t ns_icount; /* 重複アドレス検出 (DAD) 要請のå…
151¥åŠ›å›žæ•° */
152 uint8_t ns_ocount; /* 重複アドレス検出 (DAD) 要請の出力回数 */
153 } __attribute__((packed, aligned(2)))T_IN6_IFADDR;
154
155/*
156 * アドレス状æ…
157‹ãƒ•ãƒ©ã‚°
158 */
159
160#define IN6_IFF_ANYCAST UINT_C(0x01) /* エニーキャスト */
161#define IN6_IFF_DEFINED UINT_C(0x02) /* 定義済み */
162#define IN6_IFF_TENTATIVE UINT_C(0x04) /* 重複検出中 */
163#define IN6_IFF_DUPLICATED UINT_C(0x08) /* 重複を検出した */
164#define IN6_IFF_DEPRECATED UINT_C(0x10) /* 非推奨 */
165#define IN6_IFF_NODAD UINT_C(0x20) /* 重複検出不要 */
166#define IN6_IFF_AUTOCONF UINT_C(0x40) /* 自動設定された */
167#define IN6_IFF_DETACHED UINT_C(0x80) /* 非使用 */
168
169/*
170 * アドレスの有効性チェック
171 */
172
173#define IFA6_IS_READY(a) (((a)->flags & IN6_IFF_DEFINED) != 0 && \
174 ((a)->flags & (IN6_IFF_TENTATIVE|IN6_IFF_DUPLICATED|IN6_IFF_DETACHED)) == 0)
175#define IFA6_IS_NOTREADY(a) (((a)->flags & IN6_IFF_DEFINED) == 0 || \
176 ((a)->flags & (IN6_IFF_TENTATIVE|IN6_IFF_DUPLICATED|IN6_IFF_DETACHED)) != 0)
177
178#define IFA6_IS_DEPRECATED(a,n) \
179 ((a)->lifetime.preferred != 0 && (int32_t)((a)->lifetime.preferred - ((n / SYSTIM_HZ))) < 0)
180
181#define IFA6_IS_INVALID(a,n) \
182 ((a)->lifetime.expire != 0 && (int32_t)((a)->lifetime.expire - ((n / SYSTIM_HZ))) < 0)
183
184/*
185 * ルータのインデックス
186 */
187
188#define IN6_RTR_IX_UNREACH 0xff
189
190/*
191 * 制限値
192 */
193
194#define IP6_HDR_NEST_LIMIT 50 /* IPv6 ヘッダのネスト制限値 */
195
196/*
197 * アドレス情
198å ±é…
199åˆ—のインデックス
200 */
201
202#define IPV6_IFADDR_IX_LINKLOCAL 0
203#define IPV6_IFADDR_IX_INVALID 0xff
204
205/*
206 * IPv6 マルチキャストアドレスé…
207åˆ—のインデックス
208 */
209
210#define IPV6_MADDR_IX_SOL_NODE 0 /* 要請マルチキャスト・アドレス */
211#define IPV6_MADDR_IX_LL_ALL_NODE 1 /* å…
212¨ãƒŽãƒ¼ãƒ‰ãƒ»ãƒªãƒ³ã‚¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒ»ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ */
213#define IPV6_MADDR_IX_EXTRA 2
214
215#define MAX_IN6_MADDR_CNT MAX_IF_MADDR_CNT
216 /* IPv6 マルチキャストアドレスé…
217åˆ—の最大サイズ */
218
219/*
220 * ルーティングの制御
221 */
222
223/* ルーティング表エントリ構造体 */
224
225typedef struct t_in6_rtentry {
226 T_IN6_ADDR target; /* 目標ネットワークアドレス */
227 T_IN6_ADDR gateway; /* ゲートウェイの IP アドレス */
228 uint32_t expire; /* 有効時間が切れる時刻 [s] */
229 uint8_t flags; /* フラグ */
230 uint8_t prefix_len; /* プレフィックス長 */
231 } __attribute__((packed, aligned(2)))T_IN6_RTENTRY;
232
233/*
234 * ホストキャッシュ
235 */
236
237/* ホストキャッシュ構造体 */
238
239typedef struct t_in6_hostcache_entry {
240 T_IN6_ADDR dst; /* 目標ネットワークアドレス */
241 uint32_t expire; /* 有効時間が切れる時刻 [s] */
242 uint32_t mtu; /* Path MTU */
243 } __attribute__((packed, aligned(2)))T_IN6_HOSTCACHE_ENTRY;
244
245#define IN6_HOSTCACHE_EXPIRE (60*60*SYSTIM_HZ) /* 有効時間 */
246#define IN6_HOSTCACHE_PRUNE (5*60*SYSTIM_HZ) /* 更新間隔 */
247#define IN6_HOSTCACHE_INCREASE (10*60*SYSTIM_HZ) /* 増加する場合の保護時間 */
248
249#define IN6_IS_HOSTCACHE_FREE(e) IN6_IS_ADDR_UNSPECIFIED(&((e)->dst))
250#define IN6_IS_HOSTCACHE_BUSY(e) (!IN6_IS_HOSTCACHE_FREE(e))
251
252/*
253 * IPv4 と IPv6 をコンパイル時に選択するためのマクロ
254 */
255
256#define IN_SET_HEADER(nbuf,len,dst,src,next,hlim) \
257 in6_set_header(nbuf,len,dst,src,next,hlim)
258#define IN_GET_DATAGRAM(nbuf,len,maxlen,dst,src,next,hlim,nbatr,tmout) \
259 in6_get_datagram(nbuf,len,maxlen,dst,src,next,hlim,nbatr,tmout)
260#define IN_CKSUM(nbuf,proto,off,len) in6_cksum(nbuf,proto,off,len)
261#define IN_IS_DSTADDR_ACCEPT(myaddr,dstaddr) \
262 in6_is_dstaddr_accept(myaddr,dstaddr)
263#define IN_IFAWITHIFP(ifp,dst) in6_ifawithifp(ifp,dst)
264#define T_IN_IFADDR T_IN6_IFADDR
265#define T_IN_RTENTRY T_IN6_RTENTRY
266
267/*
268 * 前方参ç…
269§
270 */
271
272#ifndef T_IFNET_DEFINED
273
274typedef struct t_ifnet T_IFNET;
275
276#define T_IFNET_DEFINED
277
278#endif /* of #ifndef T_IFNET_DEFINED */
279
280/*
281 * 変数
282 */
283
284extern uint32_t linkmtu;
285
286/*
287 * 関数
288 */
289
290extern void in6_ifainit (void);
291extern int_t in6_addr2maix (T_IN6_ADDR *addr);
292extern ER in6_update_ifa (T_IFNET *ifp, T_IN6_IFADDR *ia, T_IN6_ADDR *addr,
293 uint_t prefix_len, uint32_t vltime, uint32_t pltime,
294 int_t router_index, int_t prefix_index, uint_t flags);
295extern ER in6_set_header (T_NET_BUF *nbuf, uint_t len,
296 T_IN6_ADDR *dstaddr, T_IN6_ADDR *srcaddr,
297 uint8_t next, uint8_t hlim);
298extern ER in6_get_datagram (T_NET_BUF **nbuf, uint_t len, uint_t maxlen,
299 T_IN6_ADDR *dstaddr, T_IN6_ADDR *srcaddr,
300 uint8_t next, uint8_t hlim, ATR nbatr, TMO tmout);
301extern uint16_t in6_cksum (T_NET_BUF *nbuf, uint8_t proto, uint_t off, uint_t len);
302extern T_IN6_IFADDR *in6ifa_ifpwithix (T_IFNET *ifp, int_t ix);
303extern T_IN6_IFADDR *in6ifa_ifpwithrtrix (T_IFNET *ifp, int_t rtr_ix);
304extern T_IN6_IFADDR *in6_ifawithifp (T_IFNET *ifp, T_IN6_ADDR *dst);
305extern void ip6_input (T_NET_BUF *input);
306extern T_IN6_IFADDR *in6_lookup_ifaddr (T_IFNET *ifp, T_IN6_ADDR *addr);
307extern bool_t in6_lookup_multi (T_IFNET *ifp, T_IN6_ADDR *maddr);
308extern bool_t in6_is_dstaddr_accept (T_IN6_ADDR *myaddr, T_IN6_ADDR *dstaddr);
309extern T_IN6_ADDR *in6_rtalloc (T_IFNET *ifp, T_IN6_ADDR *dst);
310extern int_t in6_if2idlen (T_IFNET *ifp);
311extern int_t in6_addr2ifaix (T_IN6_ADDR *addr);
312extern void in6_plen2pmask (T_IN6_ADDR *mask, uint_t prefix_len);
313extern bool_t in6_are_prefix_equal (T_IN6_ADDR *addr, T_IN6_ADDR *prefix,
314 uint_t prefix_len);
315extern void in6_ifaddr_timer (T_IFNET *ifp);
316extern T_IN6_RTENTRY *in6_gateway_lookup (T_IN6_ADDR *src);
317extern void in6_rtredirect (T_IN6_ADDR *gateway, T_IN6_ADDR *target,
318 uint_t prefix_len, uint8_t flags, uint32_t tmo);
319extern void in6_init (void);
320extern void in6_if_up (T_IFNET *ifp);
321extern void in6_hostcache_update (T_IN6_ADDR *dst, uint32_t mtu);
322extern uint32_t in6_hostcache_getmtu (T_IN6_ADDR *dst);
323extern uint_t in6_addrscope (T_IN6_ADDR *addr);
324extern const T_NET_BUF**ip6_get_frag_queue (void);
325
326#endif /* of #ifdef SUPPORT_INET6 */
327
328#endif /* of #ifndef _IN6_VAR_H_ */
Note: See TracBrowser for help on using the repository browser.