source: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tinet/net/net_buf.h@ 337

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

ASP3版ECNLを追加

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