source: asp3_tinet_ecnl_arm/trunk/asp3_dcre/tinet/net/net_buf.h@ 352

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

arm向けASP3版ECNLを追加

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