source: azure_iot_hub/trunk/asp3_dcre/tinet/net/net_buf.h@ 388

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

Azure IoT Hub Device C SDK を使ったサンプルの追加

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