source: azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcp_var.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: 34.0 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: tcp_var.h 388 2019-05-22 11:25:18Z coas-nagasima $
44 */
45
46/*
47 * Copyright (c) 1982, 1986, 1993, 1994, 1995
48 * The Regents of the University of California. All rights reserved.
49 *
50 * Redistribution and use in source and binary forms, with or without
51 * modification, are permitted provided that the following conditions
52 * are met:
53 * 1. Redistributions of source code must retain the above copyright
54 * notice, this list of conditions and the following disclaimer.
55 * 2. Redistributions in binary form must reproduce the above copyright
56 * notice, this list of conditions and the following disclaimer in the
57 * documentation and/or other materials provided with the distribution.
58 * 3. All advertising materials mentioning features or use of this software
59 * must display the following acknowledgement:
60 * This product includes software developed by the University of
61 * California, Berkeley and its contributors.
62 * 4. Neither the name of the University nor the names of its contributors
63 * may be used to endorse or promote products derived from this software
64 * without specific prior written permission.
65 *
66 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
67 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
68 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
69 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
70 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
71 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
72 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
73 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
74 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
75 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
76 * SUCH DAMAGE.
77 *
78 * @(#)tcp_var.h 8.4 (Berkeley) 5/24/95
79 * $FreeBSD: src/sys/netinet/tcp_var.h,v 1.49.2.1 1999/08/29 16:29:57 peter Exp $
80 */
81
82#ifndef _TCP_VAR_H_
83#define _TCP_VAR_H_
84
85/*
86 * TCP ヘッダ・ペイロードアクセスマクロ
87 */
88
89#define GET_TCP_HDR(nbuf,thoff) ((T_TCP_HDR*)((uint8_t*)((nbuf)->buf) + thoff))
90#define GET_TCP_OPT(nbuf,thoff) ((uint8_t*)((nbuf)->buf) + thoff + TCP_HDR_SIZE)
91#define GET_TCP_SDU(nbuf,thoff) ((uint8_t*)((nbuf)->buf) + thoff + GET_TCP_HDR_SIZE(nbuf,thoff))
92
93#define GET_TCP_HDR_OFFSET(nbuf) (GET_IF_IP_HDR_SIZE(nbuf))
94
95#define GET_TCP_HDR_SIZE(nbuf,thoff) (TCP_HDR_LEN(GET_TCP_HDR(nbuf,thoff)->doff))
96
97#define GET_IP_TCP_HDR_SIZE(nbuf,thoff) (GET_IP_HDR_SIZE(nbuf) + GET_TCP_HDR_SIZE(nbuf,thoff))
98#define GET_IF_IP_TCP_HDR_SIZE(nbuf,thoff) \
99 (IF_HDR_SIZE + GET_IP_TCP_HDR_SIZE(nbuf,thoff))
100#define IF_IP_TCP_HDR_SIZE(nbuf) (IF_IP_HDR_SIZE(nbuf) + TCP_HDR_SIZE)
101#define IF_IP_TCP_HDR_OFFSET(nbuf) (IF_IP_HDR_SIZE(nbuf))
102#define IF_IP_TCP_NET_HDR_SIZE(addr) (IF_IP_NET_HDR_SIZE(addr) + TCP_HDR_SIZE)
103#define IF_IP_TCP_NET_HDR_OFFSET(addr) (IF_IP_NET_HDR_SIZE(addr))
104
105/*
106 * TINET 1.1 との互換性のための定義
107 */
108
109#if !defined(_IP6_CFG) && defined(_IP4_CFG)
110
111#define IP4_TCP_HDR_SIZE IP_TCP_HDR_SIZE
112#define IF_IP4_TCP_HDR_SIZE IF_IP_TCP_HDR_SIZE
113#define GET_IP4_TCP_HDR_SIZE(nbuf) GET_IP_TCP_HDR_SIZE1(nbuf)
114#define GET_IF_IP4_TCP_HDR_SIZE(nbuf) GET_IF_IP_TCP_HDR_SIZE1(nbuf)
115
116#endif /* of #if !defined(_IP6_CFG) && defined(_IP4_CFG) */
117
118/*
119 * TINET 1.3 との互換性のための定義
120 */
121
122#define TMIN_TCP_CREPID TMIN_TCP_REPID
123#define TNUM_TCP_CREPID TNUM_TCP_REPID
124
125#define TMIN_TCP_CCEPID TMIN_TCP_CEPID
126#define TNUM_TCP_CCEPID TNUM_TCP_CEPID
127
128/*
129 * コールバック関数の定義
130 */
131
132typedef ER (*t_tcp_callback)(ID cepid, FN fncd, void *p_parblk);
133
134/*
135 * TCP で使用する変数の型の定義
136 */
137
138typedef uint32_t T_TCP_SEQ;
139typedef uint16_t T_TCP_SEG;
140typedef uint16_t T_TCP_WND;
141typedef int16_t T_TCP_TIME;
142
143/*
144 * TCP タイマ変数
145 */
146
147#define NUM_TCP_TIMERS 4 /* TCP のタイマ数 */
148
149/*
150 * TCP 受付口
151 */
152
153/* IPv6 用 TCP 受付口 */
154
155typedef struct t_tcp6_rep {
156
157 /*
158 * ITRON TCP/IP API、TCP 受付口と同じメンバ
159 */
160 ATR repatr; /* 受付口属性 */
161 T_IPV6EP myaddr; /* 自分のアドレス */
162
163#ifdef TCP_CFG_EXTENTIONS
164 uint16_t flags; /* 受付口フラグ */
165 ID semid_lock; /* 受付口ロック */
166#endif /* of #ifdef TCP_CFG_EXTENTIONS */
167
168 } T_TCP6_REP;
169
170/* IPv4 用 TCP 受付口 */
171
172typedef struct t_tcp4_rep {
173
174 /*
175 * ITRON TCP/IP API、TCP 受付口と同じメンバ
176 */
177 ATR repatr; /* 受付口属性 */
178 T_IPV4EP myaddr; /* 自分のアドレス */
179
180#ifdef TCP_CFG_EXTENTIONS
181 uint16_t flags; /* 受付口フラグ */
182 ID semid_lock; /* 受付口ロック */
183#endif /* of #ifdef TCP_CFG_EXTENTIONS */
184
185 } T_TCP4_REP;
186
187#if defined(_IP6_CFG)
188
189#define T_TCP_REP T_TCP6_REP
190
191#else /* of #if defined(_IP6_CFG) */
192
193#if defined(_IP4_CFG)
194
195#define T_TCP_REP T_TCP4_REP
196
197#endif /* of #if defined(_IP4_CFG) */
198
199#endif /* of #if defined(_IP6_CFG) */
200
201#define T_TCP_REP_DEFINED
202
203/*
204 * 受付口フラグ
205 */
206
207#define TCP_REP_FLG_DYNAMIC UINT_C(0x0400) /* 動的生成・削除可能受付口。 */
208#define TCP_REP_FLG_VALID UINT_C(0x0800) /* 生成済みで有効な受付口。 */
209
210/*
211 * TCP 通信端点
212 */
213
214#ifndef T_NET_BUF_DEFINED
215
216typedef struct t_net_buf T_NET_BUF;
217
218#define T_NET_BUF_DEFINED
219
220#endif /* of #ifndef T_NET_BUF_DEFINED */
221
222typedef struct t_tcp_cep {
223
224 /*
225 * ITRON TCP/IP API、TCP 通信端点と同じメンバ
226 */
227 ATR cepatr; /* 通信端点属性 */
228 void *sbuf; /* 送信用ウィンドバッファ */
229 int_t sbufsz; /* 送信用ウィンドバッファサイズ */
230 void *rbuf; /* 受信用ウィンドバッファ */
231 int_t rbufsz; /* 受信用ウィンドバッファサイズ */
232 t_tcp_callback callback; /* コールバック関数 */
233
234 /*
235 * TINET 独自のメンバ
236 */
237 uint32_t flags; /* 通信端点フラグ */
238 ID semid_lock; /* 通信端点ロック */
239 ID est_flgid; /* コネクション状æ…
240‹ã‚¤ãƒ™ãƒ³ãƒˆãƒ•ãƒ©ã‚° */
241 ID snd_flgid; /* 送信イベントフラグ */
242 ID rcv_flgid; /* 受信イベントフラグ */
243 ID snd_tskid; /* 送信タスク識別子 */
244 ID rcv_tskid; /* 受信タスク識別子 */
245 uint8_t *sbuf_rptr; /* 送信用読み出しポインタ */
246 uint8_t *sbuf_wptr; /* 送信用書き込みポインタ */
247 uint8_t *rbuf_rptr; /* 受信用読み出しポインタ */
248 uint8_t *rbuf_wptr; /* 受信用書き込みポインタ */
249 T_TCP_SEQ snd_ssthresh; /* 輻輳ウィンドサイズ(snd_cwnd) */
250 /* のしきい値 */
251 T_TCP_TIME rxtcur; /* 現在の再送タイムアウト */
252 T_TCP_TIME srtt; /* 平滑化された RTT */
253 T_TCP_TIME rttvar; /* 平滑化された分散 */
254 T_TCP_WND snd_cwnd; /* 輻輳ウィンドサイズ */
255
256 /*
257 * 相手の最大受信セグメントサイズ
258 *
259 * オリジナルでは、一般のセグメントの最大サイズ (t_maxseg) と、
260 * オプション付きのセグメントの最大サイズ (t_maxopd) が別に
261 * なっている。これは、現在のインターネットでは、オプション付きの
262 * セグメントのほうが多いからと説明されているためである。
263 * 本実装
264では、最大セグメントサイズオプション以外のオプションは
265 * 実装
266しないので、t_maxseg の使用する。
267 */
268 T_TCP_SEG maxseg;
269
270 int16_t snd_tfn; /* 送信動作中の API 機能コード */
271 int16_t rcv_tfn; /* 受信動作中の API 機能コード */
272
273#ifdef TCP_CFG_NON_BLOCKING
274
275 T_IPEP *p_dstaddr; /* 相手のアドレスへのポインタ */
276 T_IPEP *p_myaddr; /* 自分のアドレスへのポインタ */
277
278#if defined(_IP6_CFG) && defined(_IP4_CFG)
279 T_IPV4EP *p_dstaddr4; /* 相手のアドレスへのポインタ */
280 T_IPV4EP *p_myaddr4; /* 自分のアドレスへのポインタ */
281#endif
282
283 int16_t snd_nblk_tfn; /* 送信動作中の API 機能コード */
284 int16_t rcv_nblk_tfn; /* 受信動作中の API 機能コード */
285 void *snd_data; /* 送信データ領域のå…
286ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹ */
287 int_t snd_len; /* 送信データ領域の長さ */
288 void *rcv_data; /* 受信データ領域のå…
289ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹ */
290 int_t rcv_len; /* 受信データ領域の長さ */
291 void **snd_p_buf; /* 送信バッファへのポインタ */
292 void **rcv_p_buf; /* 受信バッファへのポインタ */
293
294#endif /* of #ifdef TCP_CFG_NON_BLOCKING */
295
296#ifdef TCP_CFG_SWBUF_CSAVE
297 T_NET_BUF *swbufq; /* 送信ウィンドバッファキュー */
298#endif
299
300 /*
301 * これ以降のメンバーは tcp_init_cep() 関数でゼロクリアーされる。
302 */
303
304 T_TCP_TIME timer[NUM_TCP_TIMERS]; /* TCP のタイマ */
305 T_IPEP dstaddr; /* 相手のアドレス */
306 T_IPEP myaddr; /* 自分のアドレス */
307 T_NET_BUF *reassq; /* 受信再構成キュー */
308
309#if defined(_IP6_CFG)
310
311#if defined(_IP4_CFG)
312
313 T_TCP4_REP *rep4; /* IPv4 用受付口 */
314
315#endif /* of #if defined(_IP4_CFG) */
316
317 T_TCP6_REP *rep; /* IPv6 用受付口 */
318
319#else /* of #if defined(_IP6_CFG) */
320
321#if defined(_IP4_CFG)
322
323 T_TCP4_REP *rep; /* IPv4 用受付口 */
324
325#endif /* of #if defined(_IP4_CFG) */
326
327#endif /* of #if defined(_IP6_CFG) */
328
329
330#ifdef TCP_CFG_RWBUF_CSAVE
331 T_NET_BUF *rwbufq; /* 受信ウィンドバッファキュー */
332#endif
333
334#ifdef TCP_CFG_EXTENTIONS
335 T_TCP_HDR *urg_tcph; /* 緊急データå…
336¥ã‚Šã®ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã® TCP ヘッダ */
337 T_TCP_SEQ snd_up; /* 送信した緊急ポインタ */
338 T_TCP_SEQ rcv_up; /* 受信した緊急ポインタ */
339#endif /* of #ifdef TCP_CFG_EXTENTIONS */
340
341 T_TCP_SEQ snd_una; /* 未確認の最小送信 SEQ つまり */
342 /* 確認された最大送信 SEQ */
343 T_TCP_SEQ snd_max; /* 送信した最大 SEQ */
344 T_TCP_SEQ snd_nxt; /* 次に送信する SEQ */
345 T_TCP_SEQ snd_old_nxt; /* å…
346ƒã® snd_nxt */
347 T_TCP_SEQ snd_wl1; /* 前回ウィンドを更新した SEQ */
348 T_TCP_SEQ snd_wl2; /* 前回ウィンドを更新した ACK */
349 T_TCP_SEQ iss; /* 自分の SEQ の初期値 */
350 T_TCP_SEQ irs; /* 相手の SEQ の初期値 */
351 T_TCP_SEQ rcv_nxt; /* 受信を期待
352している最小の SEQ */
353 T_TCP_SEQ rcv_adv; /* 受信を期待
354している最大の SEQ */
355 T_TCP_SEQ rcv_wnd; /* 受信可能なウィンドサイズ */
356 T_TCP_SEQ rtseq; /* 時間計測を始めた SEQ */
357 T_TCP_SEQ last_ack_sent; /* 最後に送信した ACK */
358 T_TCP_TIME idle; /* アイドル時間 */
359 ER error; /* 非同期に発生したエラー */
360 ER net_error; /* ネットワークのエラー状æ…
361‹ */
362 T_TCP_WND snd_wnd; /* 相手の受信可能ウィンドサイズ */
363 T_TCP_WND max_sndwnd; /* 今までの最大送信ウィンドサイズ */
364 T_TCP_TIME rtt; /* 往復時間 */
365 uint16_t swbuf_count; /* 送信ウィンドバッファの使用中サイズ */
366 uint16_t rwbuf_count; /* 受信ウィンドバッファの使用中サイズ */
367 uint16_t rcv_buf_len; /* tcp_rcv_buf の割当て長 */
368 uint16_t get_buf_len; /* tcp_rcv_buf の割当て長 */
369 uint8_t rxtshift; /* 再送信回数の log(2) */
370 uint8_t fsm_state; /* FSM 状æ…
371‹ */
372 uint8_t dupacks; /* 再送 ACK 数 */
373
374#if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES)
375 uint16_t rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数 */
376#endif
377
378 } T_TCP_CEP;
379
380#define T_TCP6_CEP T_TCP_CEP
381#define T_TCP4_CEP T_TCP_CEP
382
383/*
384 * Time Wait 用 TCP 通信端点
385 */
386
387typedef struct t_tcp_twcep {
388 int_t rbufsz; /* 受信用ウィンドバッファサイズ */
389 T_TCP_TIME timer_2msl; /* 2MSL タイマ */
390 T_IPEP dstaddr; /* 相手のアドレス */
391 T_IPEP myaddr; /* 自分のアドレス */
392 T_TCP_SEQ snd_una; /* 未確認の最小送信 SEQ つまり */
393 /* 確認された最大送信 SEQ */
394 T_TCP_SEQ rcv_nxt; /* 受信を期待
395している最小の SEQ */
396 uint16_t rwbuf_count; /* 受信ウィンドバッファの使用中サイズ */
397 uint8_t fsm_state; /* FSM 状æ…
398‹ */
399 uint8_t flags; /* 通信端点フラグ */
400
401 } T_TCP_TWCEP;
402
403#define T_TCP_CEP_DEFINED
404
405/*
406 * TCP 通信端点の状æ…
407‹ãƒ•ãƒ©ã‚°
408 */
409
410#define TCP_CEP_FLG_IPV4 ULONG_C(0x00000001) /* IPv4 用。 */
411#define TCP_CEP_FLG_ACK_NOW ULONG_C(0x00000100) /* 直ちに相手に ACK を送る。 */
412#define TCP_CEP_FLG_DEL_ACK ULONG_C(0x00000200) /* ACK を遅
413延する。 */
414#define TCP_CEP_FLG_SENT_FIN ULONG_C(0x00000400) /* FIN を送ってある。 */
415#define TCP_CEP_FLG_NEED_SYN ULONG_C(0x00000800) /* SYN を送信する。 */
416#define TCP_CEP_FLG_NEED_FIN ULONG_C(0x00001000) /* FIN を送信する。 */
417#define TCP_CEP_FLG_FORCE ULONG_C(0x00002000) /* 強制送信。 */
418#define TCP_CEP_FLG_NO_PUSH ULONG_C(0x00004000) /* push しない。 */
419#define TCP_CEP_FLG_NO_DELAY ULONG_C(0x00008000) /* 遅
420延しない。 */
421#define TCP_CEP_FLG_FORCE_CLEAR ULONG_C(0x00010000) /* 強制送信した後フラグをクリアーする。*/
422#define TCP_CEP_FLG_POST_OUTPUT ULONG_C(0x00020000) /* 送信を開始する。 */
423#define TCP_CEP_FLG_RESERVE_OUTPUT ULONG_C(0x00040000) /* 送信を予約する。 */
424#define TCP_CEP_FLG_DYNAMIC ULONG_C(0x00100000) /* 動的生成・削除可能通信端点。 */
425#define TCP_CEP_FLG_VALID ULONG_C(0x00200000) /* 生成済みで有効な通信端点。 */
426#define TCP_CEP_FLG_CLOSE_AFTER_OUTPUT ULONG_C(0x00400000) /* 送信した後コネクションを閉じる。*/
427#define TCP_CEP_FLG_RESTORE_NEXT_OUTPUT ULONG_C(0x00800000) /* 送信した後、snd_nxt をå…
428ƒã«æˆ»ã™ã€‚*/
429
430/* 送受信ウィンドバッファの省コピー機能 */
431#define TCP_CEP_FLG_WBCS_NBUF_REQ ULONG_C(0x80000000) /* ネットワークバッファ割当て要求*/
432#define TCP_CEP_FLG_WBCS_MASK ULONG_C(0x70000000) /* マスク */
433#define TCP_CEP_FLG_WBCS_FREE ULONG_C(0x00000000) /* 送信ウィンドバッファ未使用 */
434#define TCP_CEP_FLG_WBCS_WOPEN_PEND ULONG_C(0x10000000) /* 相手の受信ウィンドの開き待
435ち */
436#define TCP_CEP_FLG_WBCS_NBUF_PEND ULONG_C(0x20000000) /* ネットワークバッファ予約待
437ち */
438#define TCP_CEP_FLG_WBCS_NBUF_RSVD ULONG_C(0x30000000) /* ネットワークバッファ予約済み */
439#define TCP_CEP_FLG_WBCS_NBUF_READY ULONG_C(0x40000000) /* ネットワークバッファ割当て済み*/
440#define TCP_CEP_FLG_WBCS_SEND_READY ULONG_C(0x50000000) /* 送信可能 */
441#define TCP_CEP_FLG_WBCS_SENT ULONG_C(0x60000000) /* 送信済みで、ACK待
442ち */
443#define TCP_CEP_FLG_WBCS_ACKED ULONG_C(0x70000000) /* 送信済みで、ACK完了 */
444
445/* 初期化から除外するフラグの定義 */
446#define TCP_CEP_FLG_NOT_CLEAR (TCP_CEP_FLG_WBCS_NBUF_REQ|TCP_CEP_FLG_WBCS_MASK|\
447 TCP_CEP_FLG_DYNAMIC|TCP_CEP_FLG_VALID|TCP_CEP_FLG_IPV4)
448
449/*
450 * 通信端点イベントフラグ
451 */
452
453#define TCP_CEP_EVT_ESTABLISHED ULONG_C(0x00000001) /* コネクション確立 */
454#define TCP_CEP_EVT_CLOSED ULONG_C(0x00000002) /* 未使用状æ…
455‹ */
456#define TCP_CEP_EVT_SWBUF_READY ULONG_C(0x00000004) /* 送信ウィンドバッファ空き */
457#define TCP_CEP_EVT_RWBUF_READY ULONG_C(0x00000008) /* 送信ウィンドバッファデータあり*/
458#define TCP_CEP_EVT_ALL ULONG_C(0xffffffff) /* å…
459¨ã‚¤ãƒ™ãƒ³ãƒˆ */
460
461/*
462 * 追加 API 機能・事象コード
463 */
464
465/* TCP 関係 */
466
467#define TFN_TCP_UNDEF (0)
468
469/*
470 * srtt: 平滑化された RTT
471 * rttvar: 平滑化された分散
472 * rtt: 測定された往復時間
473 *
474 * 平滑化された RTT (srtt) と平滑化された分散 (rttvar) を
475 * 整数型で計算するために、左シフトしてスケールする。
476 * srtt は 2 進小数点以下 3 ビット、
477 * rttvar は 2 進小数点以下 2 ビットを保持する。
478 */
479
480#define TCP_DELTA_SHIFT 2
481 /* 差分 = rtt/8 + srtt*7/8 の計算のためのシフト値 */
482#define TCP_SRTT_SHIFT (TCP_DELTA_SHIFT + 3)
483 /* srtt のシフト値、3(+2)ビット */
484#define TCP_RTTVAR_SHIFT (TCP_DELTA_SHIFT + 2)
485 /* rttvar のシフト値、2(+2)ビット */
486#define TCP_SRTT_SCALE (1<<TCP_SRTT_SHIFT)
487#define TCP_RTTVAR_SCALE (1<<TCP_RTTVAR_SHIFT)
488
489/*
490 * 高速再転送を開始する再送 ACK 数のしきい値
491 */
492
493#define MAX_TCP_REXMT_THRESH 3
494
495/*
496 * 受信再構成キューでの TCP ヘッダ
497 */
498
499typedef struct t_tcp_q_hdr {
500 uint16_t sport; /* 送信å…
501ƒãƒãƒ¼ãƒˆç•ªå· */
502 uint16_t dport; /* 宛å…
503ˆãƒãƒ¼ãƒˆç•ªå· */
504
505 uint32_t seq; /* SEQ 番号 */
506
507 T_NET_BUF *next; /* 次のセグメント、å…
508ƒã¯ ACK 番号(ack) */
509
510 uint8_t doff; /* データオフセット(上位4ビット) */
511 uint8_t flags; /* フラグ(下位6ビット) */
512 uint16_t soff; /* SDU オフセット、å…
513ƒã¯ã‚¦ã‚£ãƒ³ãƒ‰ã‚µã‚¤ã‚º(win) */
514
515 uint16_t slen; /* SDU 長、å…
516ƒã¯ãƒã‚§ãƒƒã‚¯ã‚µãƒ (sum) */
517 uint16_t urp; /* 緊急ポインタ(SDU 長補正) */
518 } __attribute__((packed, aligned(2)))T_TCP_Q_HDR;
519
520#define GET_TCP_Q_HDR(nbuf,thoff) ((T_TCP_Q_HDR*)((uint8_t*)((nbuf)->buf) + thoff))
521
522/*
523 * オブジェクト ID の最小値の定義
524 */
525
526#define TMIN_TCP_REPID 1 /* TCP 受付口 ID の最小値 */
527#define TMIN_TCP6_REPID 1 /* TCP/IPv6 受付口 ID の最小値 */
528#define TMIN_TCP4_REPID (TNUM_TCP6_REPID+1) /* TCP/IPv4 受付口 ID の最小値 */
529
530#define TMIN_TCP_CEPID 1 /* TCP 通信端点 ID の最小値 */
531#define TMIN_TCP6_CEPID 1 /* TCP/IPv6 通信端点 ID の最小値 */
532#define TMIN_TCP4_CEPID (TNUM_TCP6_CEPID+1) /* TCP/IPv4 通信端点 ID の最小値 */
533
534#define TMIN_TCP_TWCEPID 1 /* Time Wait 用 TCP 通信端点 ID の最小値 */
535
536/*
537 * 制御セグメント(データなし)サイズのネットワークバッファ
538 */
539
540#if defined(IF_HDR_SIZE) && defined(IP_HDR_SIZE)
541
542typedef struct t_net_buf_cseg {
543 uint16_t len; /* データの長さ */
544 uint8_t idix; /* mpfid のインデックス */
545 uint8_t flags; /* フラグ */
546#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
547 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
548#endif
549#if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4
550 uint8_t halign[4 - IF_HDR_ALIGN];
551#endif
552 uint8_t buf[IF_HDR_SIZE + IP_HDR_SIZE + TCP_HDR_SIZE];
553 /* バッファ本体 */
554 } T_NET_BUF_CSEG;
555
556#endif /* of #if defined(IF_HDR_SIZE) && defined(IP_HDR_SIZE) */
557
558/*
559 * SNMP の 管理情
560報ベース (MIB)
561 */
562
563typedef struct t_tcp_stats {
564 uint32_t tcpActiveOpens;
565 uint32_t tcpPassiveOpens;
566 uint32_t tcpAttemptFails;
567 uint32_t tcpEstabResets;
568/* uint32_t tcpCurrEstab;*/
569 uint32_t tcpInSegs;
570 uint32_t tcpOutSegs;
571 uint32_t tcpRetransSegs;
572 uint32_t tcpInErrs;
573 uint32_t tcpOutRsts;
574} T_TCP_STATS;
575
576/*
577 * 関数シミュレーションマクロ
578 */
579
580/* TCP 受付口 */
581
582#define VALID_TCP6_REPID(id) (TMIN_TCP6_REPID<=(id)&&(id)<=tmax_tcp6_repid)
583#define VALID_TCP4_REPID(id) (TMIN_TCP4_REPID<=(id)&&(id)<=tmax_tcp4_repid)
584
585#define INDEX_TCP6_REP(id) ((id)-TMIN_TCP6_REPID)
586#define INDEX_TCP4_REP(id) ((id)-TMIN_TCP4_REPID)
587
588#define GET_TCP6_REP(id) (&(tcp6_rep[INDEX_TCP6_REP(id)]))
589#define GET_TCP4_REP(id) (&(tcp4_rep[INDEX_TCP4_REP(id)]))
590
591#define GET_TCP6_REPID(rep) ((ID)(((rep)-tcp6_rep)+TMIN_TCP6_REPID))
592#define GET_TCP4_REPID(rep) ((ID)(((rep)-tcp4_rep)+TMIN_TCP4_REPID))
593
594#ifdef TCP_CFG_EXTENTIONS
595
596#define VALID_TCP_REP(rep) (((rep)->flags&TCP_REP_FLG_VALID)!=0)
597#define DYNAMIC_TCP_REP(rep) (((rep)->flags&TCP_REP_FLG_DYNAMIC)!=0)
598
599#else /* of #ifdef TCP_CFG_EXTENTIONS */
600
601#define VALID_TCP_REP(rep) (true)
602#define DYNAMIC_TCP_REP(rep) (false)
603
604#endif /* of #ifdef TCP_CFG_EXTENTIONS */
605
606/* TCP 通信端点 */
607
608#define VALID_TCP_CEPID(id) (TMIN_TCP_CEPID<=(id)&&(id)<=tmax_tcp_cepid)
609#define INDEX_TCP_CEP(id) ((id)-TMIN_TCP_CEPID)
610
611#define GET_TCP_CEP(id) (&(tcp_cep[INDEX_TCP_CEP(id)]))
612
613#define GET_TCP_CEPID(cep) ((ID)(((cep)-tcp_cep)+TMIN_TCP_CEPID))
614#define GET_TCP_TWCEPID(cep) ((ID)(((cep)-tcp_twcep)+TMIN_TCP_TWCEPID))
615
616#define VALID_TCP_CEP(cep) (((cep)->flags&TCP_CEP_FLG_VALID)!=0)
617#define DYNAMIC_TCP_CEP(cep) (((cep)->flags&TCP_CEP_FLG_DYNAMIC)!=0)
618#define TCP_IS_CEP_IPV6(cep) (((cep)->flags&TCP_CEP_FLG_IPV4)==0)
619#define TCP_IS_CEP_IPV4(cep) (((cep)->flags&TCP_CEP_FLG_IPV4)!=0)
620
621#define IS_TFN_TCP_RCV(t) ((t)==TFN_TCP_ACP_CEP||(t)==TFN_TCP_RCV_DAT||\
622 (t)==TFN_TCP_CLS_CEP||\
623 (t)==TFN_TCP_RCV_BUF||(t)==TFN_TCP_REL_BUF||\
624 (t)==TFN_TCP_RCV_OOB)
625
626#define VALID_TFN_TCP_CAN(t) ((t)==TFN_TCP_ACP_CEP||(t)==TFN_TCP_CON_CEP||\
627 (t)==TFN_TCP_CLS_CEP||\
628 (t)==TFN_TCP_SND_DAT||(t)==TFN_TCP_RCV_DAT||\
629 (t)==TFN_TCP_GET_BUF||(t)==TFN_TCP_RCV_BUF||\
630 (t)==TFN_TCP_SND_OOB||\
631 (t)==TFN_TCP_ALL)
632
633#define VALID_URG_POINTER(urg) (TCP_CFG_URG_OFFSET==0||urg!=0)
634
635/*
636 * å…
637¨åŸŸå¤‰æ•°
638 */
639
640extern uint8_t tcp_initialized;
641
642extern T_TCP_STATS tcp_stats;
643
644/* TCP 受付口 */
645
646extern T_TCP6_REP tcp6_rep[];
647extern T_TCP4_REP tcp4_rep[];
648
649#if defined(SUPPORT_INET6)
650#define tcp_rep tcp6_rep
651#elif defined(SUPPORT_INET4)
652#define tcp_rep tcp4_rep
653#endif
654
655extern const ID tmax_tcp_repid;
656
657#if defined(SUPPORT_INET6) && defined(SUPPORT_INET4)
658extern const ID tmax_tcp6_repid;
659extern const ID tmax_tcp4_repid;
660#else
661#define tmax_tcp6_repid tmax_tcp_repid
662#define tmax_tcp4_repid tmax_tcp_repid
663#endif
664
665/* TCP 通信端点 */
666
667extern T_TCP_CEP tcp_cep[];
668extern T_TCP_TWCEP tcp_twcep[];
669
670extern const ID tmax_tcp_cepid;
671
672#if defined(SUPPORT_INET6) && defined(SUPPORT_INET4)
673extern const ID tmax_tcp6_cepid;
674extern const ID tmax_tcp4_cepid;
675#else
676#define tmax_tcp6_cepid tmax_tcp_cepid
677#define tmax_tcp4_cepid tmax_tcp_cepid
678#endif
679
680/*
681 * Inline 関数
682 */
683
684#ifndef TCP_CFG_RWBUF_CSAVE
685
686/*
687 * TCP 通信端点の受信ウィンドバッファの省コピー機能が
688 * 無効の場合は何もしないためのダミーの関数
689 */
690
691/*
692 * tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。
693 */
694
695Inline void
696tcp_free_rwbufq_ncs (T_TCP_CEP *cep)
697{
698 }
699
700#endif /* of #ifndef TCP_CFG_RWBUF_CSAVE */
701
702#ifdef TCP_CFG_SWBUF_CSAVE_ONLY
703
704/*
705 * TCP 通信端点の送信ウィンドバッファの省コピー機能のみが
706 * 有効の場合は何もしないためのダミーの関数
707 */
708
709/*
710 * tcp_read_swbuf_cs -- 送信ウィンドバッファからデータを読み出す。
711 */
712
713Inline void
714tcp_read_swbuf_cs (T_TCP_CEP *cep, T_NET_BUF *output, uint_t len, uint_t doff)
715{
716 }
717
718#endif /* of #ifdef TCP_CFG_SWBUF_CSAVE_ONLY */
719
720#ifndef TCP_CFG_SWBUF_CSAVE
721
722/*
723 * TCP 通信端点の送信ウィンドバッファの省コピー機能が
724 * 無効の場合は何もしないためのダミーの関数
725 */
726
727/*
728 * tcp_free_swbufq -- 送信ウィンドバッファキューを解放する。
729 */
730
731Inline void
732tcp_free_swbufq_ncs (T_TCP_CEP *cep)
733{
734 }
735
736/*
737 * tcp_alloc_swbuf -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する。
738 */
739
740Inline void
741tcp_alloc_swbuf_ncs (T_TCP_CEP *cep)
742{
743 }
744
745/*
746 * tcp_push_res_nbuf -- ネットワークバッファを予約する。
747 */
748
749Inline T_NET_BUF *
750tcp_push_res_nbuf_ncs (T_NET_BUF *nbuf)
751{
752 return nbuf;
753 }
754
755/*
756 * tcp_pull_res_nbuf -- 予約してあるネットワークバッファ返す。
757 */
758
759Inline T_NET_BUF *
760tcp_pull_res_nbuf_ncs (ATR nbatr)
761{
762 return NULL;
763 }
764
765#endif /* of #ifndef TCP_CFG_SWBUF_CSAVE */
766
767/*
768 * TCP 通信端点の受信ウィンドバッファの省コピー機能の切り替えマクロ
769 */
770
771#ifdef TCP_CFG_RWBUF_CSAVE
772
773#ifdef TCP_CFG_RWBUF_CSAVE_ONLY
774
775#define TCP_FREE_RWBUFQ(cep) tcp_free_rwbufq_cs(cep)
776#define TCP_DROP_RWBUF(cep,len) tcp_drop_rwbuf_cs(cep,len)
777#define TCP_READ_RWBUF(cep,data,len) tcp_read_rwbuf_cs(cep,data,len)
778#define TCP_GET_RWBUF_ADDR(cep,buf) tcp_get_rwbuf_addr_cs(cep,buf)
779#define TCP_WRITE_RWBUF(cep,input,thoff) tcp_write_rwbuf_cs(cep,input,thoff)
780
781#else /* of #ifdef TCP_CFG_RWBUF_CSAVE_ONLY */
782
783#define TCP_FREE_RWBUFQ(cep) tcp_free_rwbufq(cep)
784#define TCP_DROP_RWBUF(cep,len) tcp_drop_rwbuf(cep,len)
785#define TCP_READ_RWBUF(cep,data,len) tcp_read_rwbuf(cep,data,len)
786#define TCP_GET_RWBUF_ADDR(cep,buf) tcp_get_rwbuf_addr(cep,buf)
787#define TCP_WRITE_RWBUF(cep,input,thoff) tcp_write_rwbuf(cep,input,thoff)
788
789#endif /* of #ifdef TCP_CFG_RWBUF_CSAVE_ONLY */
790
791#else /* of #ifdef TCP_CFG_RWBUF_CSAVE */
792
793#define TCP_FREE_RWBUFQ(cep) tcp_free_rwbufq_ncs(cep)
794#define TCP_DROP_RWBUF(cep,len) tcp_drop_rwbuf_ncs(cep,len)
795#define TCP_READ_RWBUF(cep,data,len) tcp_read_rwbuf_ncs(cep,data,len)
796#define TCP_GET_RWBUF_ADDR(cep,buf) tcp_get_rwbuf_addr_ncs(cep,buf)
797#define TCP_WRITE_RWBUF(cep,input,thoff) tcp_write_rwbuf_ncs(cep,input,thoff)
798
799#endif /* of #ifdef TCP_CFG_RWBUF_CSAVE */
800
801/*
802 * TCP 通信端点の送信ウィンドバッファの省コピー機能の切り替えマクロ
803 */
804
805#ifdef TCP_CFG_SWBUF_CSAVE
806
807#define TCP_PUSH_RES_NBUF(nbuf) tcp_push_res_nbuf(nbuf)
808#define TCP_PULL_RES_NBUF(atr) tcp_pull_res_nbuf(atr)
809
810#ifdef TCP_CFG_SWBUF_CSAVE_ONLY
811
812#define TCP_FREE_SWBUFQ(cep) tcp_free_swbufq_cs(cep)
813#define TCP_ALLOC_SWBUF(cep) tcp_alloc_swbuf_cs(cep)
814#define TCP_DROP_SWBUF(cep,len) tcp_drop_swbuf_cs(cep,len)
815#define TCP_WRITE_SWBUF(cep,data,len) tcp_write_swbuf_cs(cep,data,len)
816#define TCP_READ_SWBUF(cep,output,len,doff) tcp_read_swbuf_cs(cep,output,len,doff)
817#define TCP_WAIT_SWBUF(cep,tmout) tcp_wait_swbuf_cs(cep,tmout)
818#define TCP_GET_SWBUF_ADDR(cep,buf) tcp_get_swbuf_addr_cs(cep,buf)
819#define TCP_SEND_SWBUF(cep,len) tcp_send_swbuf_cs(cep,len)
820#define TCP_IS_SWBUF_FULL(cep) tcp_is_swbuf_full_cs(cep)
821
822#else /* of #ifdef TCP_CFG_SWBUF_CSAVE_ONLY */
823
824#define TCP_FREE_SWBUFQ(cep) tcp_free_swbufq(cep)
825#define TCP_ALLOC_SWBUF(cep) tcp_alloc_swbuf(cep)
826#define TCP_DROP_SWBUF(cep,len) tcp_drop_swbuf(cep,len)
827#define TCP_WRITE_SWBUF(cep,data,len) tcp_write_swbuf(cep,data,len)
828#define TCP_READ_SWBUF(cep,output,len,doff) tcp_read_swbuf(cep,output,len,doff)
829#define TCP_WAIT_SWBUF(cep,tmout) tcp_wait_swbuf(cep,tmout)
830#define TCP_GET_SWBUF_ADDR(cep,buf) tcp_get_swbuf_addr(cep,buf)
831#define TCP_SEND_SWBUF(cep,len) tcp_send_swbuf(cep,len)
832#define TCP_IS_SWBUF_FULL(cep) tcp_is_swbuf_full(cep)
833
834#endif /* of #ifdef TCP_CFG_SWBUF_CSAVE_ONLY */
835
836#else /* of #ifdef TCP_CFG_SWBUF_CSAVE */
837
838#define TCP_READ_SWBUF(cep,output,len,doff) tcp_read_swbuf_ncs(cep,output,len,doff)
839#define TCP_FREE_SWBUFQ(cep) tcp_free_swbufq_ncs(cep)
840#define TCP_ALLOC_SWBUF(cep) tcp_alloc_swbuf_ncs(cep)
841#define TCP_PUSH_RES_NBUF(nbuf) tcp_push_res_nbuf_ncs(nbuf)
842#define TCP_PULL_RES_NBUF(atr) tcp_pull_res_nbuf_ncs(atr)
843#define TCP_DROP_SWBUF(cep,len) tcp_drop_swbuf_ncs(cep,len)
844#define TCP_WRITE_SWBUF(cep,data,len) tcp_write_swbuf_ncs(cep,data,len)
845#define TCP_WAIT_SWBUF(cep,tmout) tcp_wait_swbuf_ncs(cep,tmout)
846#define TCP_GET_SWBUF_ADDR(cep,buf) tcp_get_swbuf_addr_ncs(cep,buf)
847#define TCP_SEND_SWBUF(cep,len) tcp_send_swbuf_ncs(cep,len)
848#define TCP_IS_SWBUF_FULL(cep) tcp_is_swbuf_full_ncs(cep)
849
850#endif /* of #ifdef TCP_CFG_SWBUF_CSAVE */
851
852/*
853 * 関数
854 */
855
856extern uint_t tcp_input (T_NET_BUF **inputp, uint_t *offp, uint_t *nextp);
857extern void tcp_init (void);
858extern void tcp_init_iss (void);
859extern T_TCP_CEP *tcp_close (T_TCP_CEP *cep);
860extern T_TCP_CEP *tcp_drop (T_TCP_CEP *cep, ER err);
861extern void tcp_respond (T_NET_BUF *nbuf, T_TCP_CEP *cep,
862 T_TCP_SEQ ack, T_TCP_SEQ seq, uint_t rbfree, uint8_t flags);
863extern ER tcp_get_segment (T_NET_BUF **nbuf, T_TCP_CEP *cep,
864 uint_t optlen, uint_t len, uint_t maxlen, ATR nbatr, TMO tmout);
865extern ER tcpn_get_segment (T_NET_BUF **nbuf, T_TCP_CEP *cep,
866 uint_t optlen, uint_t len, uint_t maxlen, ATR nbatr, TMO tmout);
867extern void tcp_init_cep (T_TCP_CEP *cep);
868extern void tcp_notify (T_NET_BUF *input, int code);
869extern T_TCP_TIME tcp_rexmt_val (T_TCP_CEP *cep);
870extern void tcp_set_persist_timer (T_TCP_CEP *cep);
871extern void tcp_cancel_timers (T_TCP_CEP *cep);
872extern void tcp_alloc_auto_port (T_TCP_CEP *cep);
873extern ER tcp_alloc_port (T_TCP_CEP *cep, uint16_t portno);
874extern ER tcp_lock_cep (ID cepid, T_TCP_CEP **p_cep, FN tfn);
875extern void tcp_free_reassq (T_TCP_CEP *cep);
876extern ER tcp_can_send_more (T_TCP_CEP *cep, FN fncd, TMO tmout);
877extern ER tcp_can_recv_more (ER *error, T_TCP_CEP *cep, FN fncd, TMO tmout);
878extern uint8_t tcp_move_ra2rw (T_TCP_CEP *cep, uint8_t flags);
879extern uint8_t tcp_write_raque (T_NET_BUF *input, T_TCP_CEP *cep, uint_t thoff, uint8_t flags);
880extern ER tcp_wait_rwbuf (T_TCP_CEP *cep, TMO tmout);
881extern T_TCP_CEP *tcp_user_closed (T_TCP_CEP *cep);
882extern T_TCP_CEP *tcp_find_cep (T_NET_BUF *input, uint_t off);
883extern T_TCP_TWCEP*tcp_find_twcep (T_NET_BUF *input, uint_t off);
884extern bool_t tcp_is_addr_accept (T_NET_BUF *input, uint_t off);
885extern void tcp_move_twcep (T_TCP_CEP *cep);
886
887/*
888 * TCP 通信端点の受信ウィンドバッファ用関数
889 */
890
891/*
892 * TCP 通信端点の受信ウィンドバッファの省コピー機能が有効の場合、
893 * 関数の選択に使用する。
894 */
895
896extern void tcp_free_rwbufq (T_TCP_CEP *cep);
897extern void tcp_drop_rwbuf (T_TCP_CEP *cep, uint_t len);
898extern void tcp_write_rwbuf (T_TCP_CEP *cep, T_NET_BUF *input, uint_t tcpoff);
899extern uint_t tcp_read_rwbuf (T_TCP_CEP *cep, void *data, uint_t len);
900extern uint_t tcp_get_rwbuf_addr (T_TCP_CEP *cep, void **p_buf);
901
902/*
903 * TCP 通信端点の受信ウィンドバッファの省コピー機能用関数
904 */
905
906extern void tcp_free_rwbufq_cs (T_TCP_CEP *cep);
907extern void tcp_drop_rwbuf_cs (T_TCP_CEP *cep, uint_t len);
908extern void tcp_write_rwbuf_cs (T_TCP_CEP *cep, T_NET_BUF *input, uint_t tcpoff);
909extern uint_t tcp_read_rwbuf_cs (T_TCP_CEP *cep, void *data, uint_t len);
910extern uint_t tcp_get_rwbuf_addr_cs (T_TCP_CEP *cep, void **p_buf);
911
912/*
913 * TCP 通信端点の受信ウィンドバッファの【非】省コピー機能用関数
914 */
915
916extern void tcp_free_rwbufq_ncs (T_TCP_CEP *cep);
917extern void tcp_drop_rwbuf_ncs (T_TCP_CEP *cep, uint_t len);
918extern void tcp_write_rwbuf_ncs (T_TCP_CEP *cep, T_NET_BUF *input, uint_t tcpoff);
919extern uint_t tcp_read_rwbuf_ncs (T_TCP_CEP *cep, void *data, uint_t len);
920extern uint_t tcp_get_rwbuf_addr_ncs (T_TCP_CEP *cep, void **p_buf);
921
922/*
923 * TCP 通信端点の送信ウィンドバッファ用関数
924 */
925
926/*
927 * TCP 通信端点の送信ウィンドバッファの省コピー機能が有効の場合、
928 * 関数の選択に使用する。
929 */
930
931extern void tcp_free_swbufq (T_TCP_CEP *cep);
932extern void tcp_drop_swbuf (T_TCP_CEP *cep, uint_t len);
933extern ER_UINT tcp_write_swbuf (T_TCP_CEP *cep, void *data, uint_t len);
934extern void tcp_read_swbuf (T_TCP_CEP *cep, T_NET_BUF *output, uint_t len, uint_t doff);
935extern void tcp_send_swbuf (T_TCP_CEP *cep, uint_t len);
936extern ER_UINT tcp_get_swbuf_addr (T_TCP_CEP *cep, void **p_buf);
937extern ER tcp_wait_swbuf (T_TCP_CEP *cep, TMO tmout);
938extern T_NET_BUF *tcp_push_res_nbuf (T_NET_BUF *buf);
939extern T_NET_BUF *tcp_pull_res_nbuf (ATR nbatr);
940extern void tcp_alloc_swbuf (T_TCP_CEP *cep);
941extern bool_t tcp_is_swbuf_full (T_TCP_CEP *cep);
942extern void tcp_init_swbuf (T_TCP_CEP *cep);
943
944/*
945 * TCP 通信端点の送信ウィンドバッファの省コピー機能用関数
946 */
947
948extern void tcp_free_swbufq_cs (T_TCP_CEP *cep);
949extern void tcp_drop_swbuf_cs (T_TCP_CEP *cep, uint_t len);
950extern ER_UINT tcp_write_swbuf_cs (T_TCP_CEP *cep, void *data, uint_t len);
951extern void tcp_read_swbuf_cs (T_TCP_CEP *cep, T_NET_BUF *output, uint_t len, uint_t doff);
952extern void tcp_send_swbuf_cs (T_TCP_CEP *cep, uint_t len);
953extern ER_UINT tcp_get_swbuf_addr_cs (T_TCP_CEP *cep, void **p_buf);
954extern ER tcp_wait_swbuf_cs (T_TCP_CEP *cep, TMO tmout);
955extern void tcp_alloc_swbuf_cs (T_TCP_CEP *cep);
956extern bool_t tcp_is_swbuf_full_cs (T_TCP_CEP *cep);
957
958/*
959 * TCP 通信端点の送信ウィンドバッファの【非】省コピー機能用関数
960 */
961
962extern void tcp_free_swbufq_ncs (T_TCP_CEP *cep);
963extern void tcp_drop_swbuf_ncs (T_TCP_CEP *cep, uint_t len);
964extern ER_UINT tcp_write_swbuf_ncs (T_TCP_CEP *cep, void *data, uint_t len);
965extern void tcp_read_swbuf_ncs (T_TCP_CEP *cep, T_NET_BUF *output, uint_t len, uint_t doff);
966extern void tcp_send_swbuf_ncs (T_TCP_CEP *cep, uint_t len);
967extern ER_UINT tcp_get_swbuf_addr_ncs (T_TCP_CEP *cep, void **p_buf);
968extern ER tcp_wait_swbuf_ncs (T_TCP_CEP *cep, TMO tmout);
969extern T_NET_BUF *tcp_push_res_nbuf_ncs (T_NET_BUF *buf);
970extern T_NET_BUF *tcp_pull_res_nbuf_ncs (ATR nbatr);
971extern void tcp_alloc_swbuf_ncs (T_TCP_CEP *cep);
972extern bool_t tcp_is_swbuf_full_ncs (T_TCP_CEP *cep);
973
974/*
975 * TCP ヘッダのトレース出力機能用関数
976 */
977extern void tcp_output_trace (T_NET_BUF *output, T_TCP_CEP *cep);
978extern void tcp_input_trace (T_NET_BUF *input, T_TCP_CEP *cep);
979
980/* TCP 出力タスク */
981
982extern void tcp_output_task(intptr_t exinf);
983
984#endif /* of #ifndef _TCP_VAR_H_ */
Note: See TracBrowser for help on using the repository browser.