source: EcnlProtoTool/trunk/asp3_dcre/tinet/net/net_buf.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: 7.4 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: net_buf.h 270 2017-02-09 04:03:47Z coas-nagasima $
44 */
45
46#ifndef _NET_BUF_H_
47#define _NET_BUF_H_
48
49/*
50 * ネットワークバッファ
51 *
52 * 4 オクテットでアラインする必
53要のあるプロセッサを考æ…
54®ã—て、
55 * IF ヘッダサイズが 4 オクテット境界でないの場合、
56 * IP ヘッダ以降を 4 オクテット境界に調整する。
57 */
58
59#ifndef CPU_NET_ALIGN
60#error "CPU_NET_ALIGN expected."
61#endif
62
63/*
64 * テンプレート
65 */
66
67struct t_net_buf {
68 uint16_t len; /* データの長さ */
69 uint8_t idix; /* mpfid のインデックス */
70 uint8_t flags; /* フラグ */
71#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
72 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
73#endif
74#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
75 uint8_t halign[4 - IF_HDR_ALIGN];
76#endif
77 uint8_t buf[4]; /* バッファ本体 */
78 };
79
80#ifndef T_NET_BUF_DEFINED
81
82typedef struct t_net_buf T_NET_BUF;
83
84#define T_NET_BUF_DEFINED
85
86#endif /* of #ifndef T_NET_BUF_DEFINED */
87/*
88 * 64 オクテット
89 */
90
91typedef struct t_net_buf_64 {
92 uint16_t len; /* データの長さ */
93 uint8_t idix; /* mpfid のインデックス */
94 uint8_t flags; /* フラグ */
95#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
96 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
97#endif
98#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
99 uint8_t halign[4 - IF_HDR_ALIGN];
100#endif
101 uint8_t buf[64]; /* バッファ本体 */
102 } T_NET_BUF_64;
103
104/*
105 * 128 オクテット
106 */
107
108typedef struct t_net_buf_128 {
109 uint16_t len; /* データの長さ */
110 uint8_t idix; /* mpfid のインデックス */
111 uint8_t flags; /* フラグ */
112#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
113 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
114#endif
115#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
116 uint8_t halign[4 - IF_HDR_ALIGN];
117#endif
118 uint8_t buf[128]; /* バッファ本体 */
119 } T_NET_BUF_128;
120
121/*
122 * 256 オクテット
123 */
124
125typedef struct t_net_buf_256 {
126 uint16_t len; /* データの長さ */
127 uint8_t idix; /* mpfid のインデックス */
128 uint8_t flags; /* フラグ */
129#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
130 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
131#endif
132#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
133 uint8_t halign[4 - IF_HDR_ALIGN];
134#endif
135 uint8_t buf[256]; /* バッファ本体 */
136 } T_NET_BUF_256;
137
138/*
139 * 512 オクテット
140 */
141
142typedef struct t_net_buf_512 {
143 uint16_t len; /* データの長さ */
144 uint8_t idix; /* mpfid のインデックス */
145 uint8_t flags; /* フラグ */
146#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
147 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
148#endif
149#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
150 uint8_t halign[4 - IF_HDR_ALIGN];
151#endif
152 uint8_t buf[512];/* バッファ本体 */
153 } T_NET_BUF_512;
154
155/*
156 * 1024 オクテット
157 */
158
159typedef struct t_net_buf_1024 {
160 uint16_t len; /* データの長さ */
161 uint8_t idix; /* mpfid のインデックス */
162 uint8_t flags; /* フラグ */
163#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
164 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
165#endif
166#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
167 uint8_t halign[4 - IF_HDR_ALIGN];
168#endif
169 uint8_t buf[1024]; /* バッファ本体 */
170 } T_NET_BUF_1024;
171
172/*
173 * ネットワークインタフェースの最大 PDU サイズ
174 */
175
176typedef struct t_net_buf_if_pdu {
177 uint16_t len; /* データの長さ */
178 uint8_t idix; /* mpfid のインデックス */
179 uint8_t flags; /* フラグ */
180#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
181 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
182#endif
183#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
184 uint8_t halign[4 - IF_HDR_ALIGN];
185#endif
186 uint8_t buf[IF_PDU_SIZE];
187 /* バッファ本体 */
188#if defined(IF_PDU_HDR_PADDING)
189 uint8_t padding[IF_PDU_HDR_PADDING];
190#endif /* ヘッダの余分 */
191 } T_NET_BUF_IF_PDU;
192
193/*
194 * ネットワークバッファ表
195 */
196
197typedef struct t_net_buf_entry {
198
199 uint16_t index;
200 uint_t size;
201
202#if NET_COUNT_ENABLE & PROTO_FLG_NET_BUF
203
204 ulong_t prepares;
205 ulong_t requests;
206 ulong_t allocs;
207 ulong_t errors;
208
209#endif /* of #if NET_COUNT_ENABLE & PROTO_FLG_NET_BUF */
210
211 } T_NET_BUF_ENTRY;
212
213/*
214 * ネットワークバッファ・フラグ
215 */
216
217/*
218 * ネットワークインタフェース出力後にネットワークバッファを開放しない。
219 * 注意: 出力後にこのフラグはクリアされる。
220 */
221#define NB_FLG_NOREL_IFOUT UINT_C(0x80)
222
223/*
224 * ESP 用フラグ
225 */
226#define NB_FLG_DECRYPED UINT_C(0x40)
227
228/*
229 * ネットワークバッファ獲得属性
230 */
231
232/* 探索属性 */
233
234#define NBA_SEARCH_ASCENT UINT_C(0x1000) /* 大きなサイズの方向に探索する。 */
235#define NBA_SEARCH_DESCENT UINT_C(0x2000) /* 小さなサイズの方向に探索する。 */
236#define NBA_RESERVE_TCP UINT_C(0x4000) /* TCP 用にネットワークバッファを予約する。*/
237#define NBA_ID_MASK UINT_C(0x0fff) /* 通信端点 ID を渡す場合のマスク値 */
238
239/*
240 * 関数シミュレーションマクロ
241 */
242
243#define get_net_buf(b,l) tget_net_buf((b),(l),TMO_FEVR)
244
245/*
246 * 関数
247 */
248
249extern ER tget_net_buf_ex (T_NET_BUF **blk, uint_t minlen, uint_t maxlen, ATR nbatr, TMO tmout);
250extern ER tget_net_buf (T_NET_BUF **blk, uint_t len, TMO tmout);
251extern ER rel_net_buf (T_NET_BUF *blk);
252extern ER rus_net_buf (T_NET_BUF *blk);
253extern ER_UINT net_buf_siz (T_NET_BUF *blk);
254extern uint_t net_buf_max_siz (void);
255extern const T_NET_BUF_ENTRY *nbuf_get_tbl (void);
256extern uint_t nbuf_get_tbl_size (void);
257
258#endif /* of #ifndef _NET_BUF_H_ */
Note: See TracBrowser for help on using the repository browser.