Changeset 321 for EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_var.h
- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_var.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 5 5 * Tomakomai National College of Technology, JAPAN 6 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 責ãããã¨ï¼ 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 84 72 85 73 /* 86 * TCP ãããã»ãã¤ãã¼ãã¢ã¯ã»ã¹ãã¯ã74 * TCP ヘッダ・ペイロードアクセスマクロ 87 75 */ 88 76 … … 105 93 106 94 /* 107 * TINET 1.1 ã¨ã®äºææ§ã®ããã®å®ç¾©95 * TINET 1.1 との互換性のための定義 108 96 */ 109 97 … … 118 106 119 107 /* 120 * TINET 1.3 ã¨ã®äºææ§ã®ããã®å®ç¾©108 * TINET 1.3 との互換性のための定義 121 109 */ 122 110 … … 127 115 128 116 /* 129 * ã³ã¼ã«ããã¯é¢æ°ã®å®ç¾©117 * コールバック関数の定義 130 118 */ 131 119 … … 133 121 134 122 /* 135 * TCP åä»å£136 */ 137 138 /* IPv4 ç¨ TCP åä»å£*/123 * TCP 受付口 124 */ 125 126 /* IPv4 用 TCP 受付口 */ 139 127 typedef struct t_tcp4_rep { 140 128 141 129 /* 142 * ITRON TCP/IP API ãTCP åä»å£ã¨åãã¡ã³ã130 * ITRON TCP/IP API、TCP 受付口と同じメンバ 143 131 */ 144 ATR repatr; /* åä»å£å±æ§*/145 T_IPV4EP myaddr; /* èªåã®ã¢ãã¬ã¹*/132 ATR repatr; /* 受付口属性 */ 133 T_IPV4EP myaddr; /* 自分のアドレス */ 146 134 147 135 #ifdef TCP_CFG_EXTENTIONS 148 uint16_t flags; /* åä»å£ãã©ã°*/149 ID semid_lock; /* åä»å£ããã¯*/136 uint16_t flags; /* 受付口フラグ */ 137 ID semid_lock; /* 受付口ロック */ 150 138 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 151 139 152 140 } T_TCP4_REP; 153 141 154 /* IPv6 ç¨ TCP åä»å£*/142 /* IPv6 用 TCP 受付口 */ 155 143 typedef struct t_tcp6_rep { 156 144 157 145 /* 158 * ITRON TCP/IP API ãTCP åä»å£ã¨åãã¡ã³ã146 * ITRON TCP/IP API、TCP 受付口と同じメンバ 159 147 */ 160 ATR repatr; /* åä»å£å±æ§*/161 T_IPV6EP myaddr; /* èªåã®ã¢ãã¬ã¹*/148 ATR repatr; /* 受付口属性 */ 149 T_IPV6EP myaddr; /* 自分のアドレス */ 162 150 163 151 #ifdef TCP_CFG_EXTENTIONS 164 uint16_t flags; /* åä»å£ãã©ã°*/165 ID semid_lock; /* åä»å£ããã¯*/152 uint16_t flags; /* 受付口フラグ */ 153 ID semid_lock; /* 受付口ロック */ 166 154 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 167 155 … … 177 165 178 166 /* 179 * åä»å£ãã©ã°180 */ 181 182 #define TCP_REP_FLG_DYNAMIC UINT_C(0x0400) /* åççæã»åé¤å¯è½åä»å£ã*/183 #define TCP_REP_FLG_VALID UINT_C(0x0800) /* çææ¸ã¿ã§æå¹ãªåä»å£ã*/184 185 /* 186 * TCP é信端ç¹167 * 受付口フラグ 168 */ 169 170 #define TCP_REP_FLG_DYNAMIC UINT_C(0x0400) /* 動的生成・削除可能受付口。 */ 171 #define TCP_REP_FLG_VALID UINT_C(0x0800) /* 生成済みで有効な受付口。 */ 172 173 /* 174 * TCP 通信端点 187 175 */ 188 176 … … 192 180 193 181 /* 194 * é常㮠IPv4 TCP é信端ç¹182 * 通常の IPv4 TCP 通信端点 195 183 */ 196 184 typedef struct t_tcp4_cep { 197 185 198 186 /* 199 * ITRON TCP/IP API ãTCP é信端ç¹ã¨åãã¡ã³ã187 * ITRON TCP/IP API、TCP 通信端点と同じメンバ 200 188 */ 201 ATR cepatr; /* é信端ç¹å±æ§*/202 void *sbuf; /* éä¿¡ç¨ã¦ã£ã³ããããã¡*/203 int_t sbufsz; /* éä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº*/204 void *rbuf; /* åä¿¡ç¨ã¦ã£ã³ããããã¡*/205 int_t rbufsz; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº*/206 t_tcp_callback callback; /* ã³ã¼ã«ããã¯é¢æ°*/189 ATR cepatr; /* 通信端点属性 */ 190 void *sbuf; /* 送信用ウィンドバッファ */ 191 int_t sbufsz; /* 送信用ウィンドバッファサイズ */ 192 void *rbuf; /* 受信用ウィンドバッファ */ 193 int_t rbufsz; /* 受信用ウィンドバッファサイズ */ 194 t_tcp_callback callback; /* コールバック関数 */ 207 195 208 196 /* 209 * TINET ç¬èªã®ã¡ã³ã197 * TINET 独自のメンバ 210 198 */ 211 uint32_t flags; /* é信端ç¹ãã©ã° */ 212 ID semid_lock; /* é信端ç¹ãã㯠*/ 213 ID est_flgid; /* ã³ãã¯ã·ã§ã³ç¶æ 214 ã¤ãã³ããã©ã° */ 215 ID snd_flgid; /* éä¿¡ã¤ãã³ããã©ã° */ 216 ID rcv_flgid; /* åä¿¡ã¤ãã³ããã©ã° */ 217 ID snd_tskid; /* éä¿¡ã¿ã¹ã¯èå¥å */ 218 ID rcv_tskid; /* åä¿¡ã¿ã¹ã¯èå¥å */ 219 uint8_t *sbuf_rptr; /* éä¿¡ç¨èªã¿åºããã¤ã³ã¿ */ 220 uint8_t *sbuf_wptr; /* éä¿¡ç¨æ¸ãè¾¼ã¿ãã¤ã³ã¿ */ 221 uint8_t *rbuf_rptr; /* åä¿¡ç¨èªã¿åºããã¤ã³ã¿ */ 222 uint8_t *rbuf_wptr; /* åä¿¡ç¨æ¸ãè¾¼ã¿ãã¤ã³ã¿ */ 223 T_TCP_SEQ snd_ssthresh; /* 輻輳ã¦ã£ã³ããµã¤ãº(snd_cwnd) */ 224 /* ã®ãããå¤ */ 225 T_TCP_TIME rxtcur; /* ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ã */ 226 T_TCP_TIME srtt; /* å¹³æ»åããã RTT */ 227 T_TCP_TIME rttvar; /* å¹³æ»åãããåæ£ */ 228 T_TCP_WND snd_cwnd; /* 輻輳ã¦ã£ã³ããµã¤ãº */ 199 uint32_t flags; /* 通信端点フラグ */ 200 ID semid_lock; /* 通信端点ロック */ 201 ID est_flgid; /* コネクション状態イベントフラグ */ 202 ID snd_flgid; /* 送信イベントフラグ */ 203 ID rcv_flgid; /* 受信イベントフラグ */ 204 ID snd_tskid; /* 送信タスク識別子 */ 205 ID rcv_tskid; /* 受信タスク識別子 */ 206 uint8_t *sbuf_rptr; /* 送信用読み出しポインタ */ 207 uint8_t *sbuf_wptr; /* 送信用書き込みポインタ */ 208 uint8_t *rbuf_rptr; /* 受信用読み出しポインタ */ 209 uint8_t *rbuf_wptr; /* 受信用書き込みポインタ */ 210 T_TCP_SEQ snd_ssthresh; /* 輻輳ウィンドサイズ(snd_cwnd) */ 211 /* のしきい値 */ 212 T_TCP_TIME rxtcur; /* 現在の再送タイムアウト */ 213 T_TCP_TIME srtt; /* 平滑化された RTT */ 214 T_TCP_TIME rttvar; /* 平滑化された分散 */ 215 T_TCP_WND snd_cwnd; /* 輻輳ウィンドサイズ */ 229 216 230 217 /* 231 * ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº218 * 相手の最大受信セグメントサイズ 232 219 * 233 * ãªãªã¸ãã«ã§ã¯ãä¸è¬ã®ã»ã°ã¡ã³ãã®æ大ãµã¤ãº (t_maxseg) ã¨ã 234 * ãªãã·ã§ã³ä»ãã®ã»ã°ã¡ã³ãã®æ大ãµã¤ãº (t_maxopd) ãå¥ã« 235 * ãªã£ã¦ãããããã¯ãç¾å¨ã®ã¤ã³ã¿ã¼ãããã§ã¯ããªãã·ã§ã³ä»ãã® 236 * ã»ã°ã¡ã³ãã®ã»ããå¤ãããã¨èª¬æããã¦ããããã§ããã 237 * æ¬å®è£ 238 ã§ã¯ãæ大ã»ã°ã¡ã³ããµã¤ãºãªãã·ã§ã³ä»¥å¤ã®ãªãã·ã§ã³ã¯ 239 * å®è£ 240 ããªãã®ã§ãt_maxseg ã®ä½¿ç¨ããã 220 * オリジナルでは、一般のセグメントの最大サイズ (t_maxseg) と、 221 * オプション付きのセグメントの最大サイズ (t_maxopd) が別に 222 * なっている。これは、現在のインターネットでは、オプション付きの 223 * セグメントのほうが多いからと説明されているためである。 224 * 本実装では、最大セグメントサイズオプション以外のオプションは 225 * 実装しないので、t_maxseg の使用する。 241 226 */ 242 227 T_TCP_SEG maxseg; 243 228 244 int16_t snd_tfn; /* éä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã*/245 int16_t rcv_tfn; /* åä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã*/229 int16_t snd_tfn; /* 送信動作中の API 機能コード */ 230 int16_t rcv_tfn; /* 受信動作中の API 機能コード */ 246 231 247 232 #ifdef TCP_CFG_NON_BLOCKING 248 233 249 T_IPV4EP *p_dstaddr; /* ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿ */ 250 T_IPV4EP *p_myaddr; /* èªåã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿ */ 251 int16_t snd_nblk_tfn; /* éä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã */ 252 int16_t rcv_nblk_tfn; /* åä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã */ 253 void *snd_data; /* éä¿¡ãã¼ã¿é åã®å 254 é ã¢ãã¬ã¹ */ 255 int_t snd_len; /* éä¿¡ãã¼ã¿é åã®é·ã */ 256 void *rcv_data; /* åä¿¡ãã¼ã¿é åã®å 257 é ã¢ãã¬ã¹ */ 258 int_t rcv_len; /* åä¿¡ãã¼ã¿é åã®é·ã */ 259 void **snd_p_buf; /* éä¿¡ãããã¡ã¸ã®ãã¤ã³ã¿ */ 260 void **rcv_p_buf; /* åä¿¡ãããã¡ã¸ã®ãã¤ã³ã¿ */ 234 T_IPV4EP *p_dstaddr; /* 相手のアドレスへのポインタ */ 235 T_IPV4EP *p_myaddr; /* 自分のアドレスへのポインタ */ 236 int16_t snd_nblk_tfn; /* 送信動作中の API 機能コード */ 237 int16_t rcv_nblk_tfn; /* 受信動作中の API 機能コード */ 238 void *snd_data; /* 送信データ領域の先頭アドレス */ 239 int_t snd_len; /* 送信データ領域の長さ */ 240 void *rcv_data; /* 受信データ領域の先頭アドレス */ 241 int_t rcv_len; /* 受信データ領域の長さ */ 242 void **snd_p_buf; /* 送信バッファへのポインタ */ 243 void **rcv_p_buf; /* 受信バッファへのポインタ */ 261 244 262 245 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 263 246 264 247 #ifdef TCP_CFG_SWBUF_CSAVE 265 T_NET_BUF *swbufq; /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼*/248 T_NET_BUF *swbufq; /* 送信ウィンドバッファキュー */ 266 249 #endif /* of #ifdef TCP_CFG_SWBUF_CSAVE */ 267 250 268 251 /* 269 * ãã以éã®ã¡ã³ãã¼ã¯ tcp_init_cep() é¢æ°ã§ã¼ãã¯ãªã¢ã¼ãããã252 * これ以降のメンバーは tcp_init_cep() 関数でゼロクリアーされる。 270 253 */ 271 254 272 T_TCP_TIME timer[NUM_TCP_TIMERS]; /* TCP ã®ã¿ã¤ã*/273 T_IPV4EP dstaddr; /* ç¸æã®ã¢ãã¬ã¹*/274 T_IPV4EP myaddr; /* èªåã®ã¢ãã¬ã¹*/275 T_TCP4_REP *rep; /* åä»å£*/276 T_NET_BUF *reassq; /* åä¿¡åæ§æãã¥ã¼*/255 T_TCP_TIME timer[NUM_TCP_TIMERS]; /* TCP のタイマ */ 256 T_IPV4EP dstaddr; /* 相手のアドレス */ 257 T_IPV4EP myaddr; /* 自分のアドレス */ 258 T_TCP4_REP *rep; /* 受付口 */ 259 T_NET_BUF *reassq; /* 受信再構成キュー */ 277 260 278 261 #ifdef TCP_CFG_RWBUF_CSAVE 279 T_NET_BUF *rwbufq; /* åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼*/262 T_NET_BUF *rwbufq; /* 受信ウィンドバッファキュー */ 280 263 #endif /* of #ifdef TCP_CFG_RWBUF_CSAVE */ 281 264 282 265 #ifdef TCP_CFG_EXTENTIONS 283 T_TCP_HDR *urg_tcph; /* ç·æ¥ãã¼ã¿å 284 ¥ãã®ã»ã°ã¡ã³ãã® TCP ããã */ 285 T_TCP_SEQ snd_up; /* éä¿¡ããç·æ¥ãã¤ã³ã¿ */ 286 T_TCP_SEQ rcv_up; /* åä¿¡ããç·æ¥ãã¤ã³ã¿ */ 266 T_TCP_HDR *urg_tcph; /* 緊急データ入りのセグメントの TCP ヘッダ */ 267 T_TCP_SEQ snd_up; /* 送信した緊急ポインタ */ 268 T_TCP_SEQ rcv_up; /* 受信した緊急ポインタ */ 287 269 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 288 270 289 T_TCP_SEQ snd_una; /* æªç¢ºèªã®æå°éä¿¡ SEQ ã¤ã¾ã */ 290 /* 確èªãããæ大éä¿¡ SEQ */ 291 T_TCP_SEQ snd_max; /* éä¿¡ããæ大 SEQ */ 292 T_TCP_SEQ snd_nxt; /* 次ã«éä¿¡ãã SEQ */ 293 T_TCP_SEQ snd_old_nxt; /* å 294 ã® snd_nxt */ 295 T_TCP_SEQ snd_wl1; /* ååã¦ã£ã³ããæ´æ°ãã SEQ */ 296 T_TCP_SEQ snd_wl2; /* ååã¦ã£ã³ããæ´æ°ãã ACK */ 297 T_TCP_SEQ iss; /* èªåã® SEQ ã®åæå¤ */ 298 T_TCP_SEQ irs; /* ç¸æã® SEQ ã®åæå¤ */ 299 T_TCP_SEQ rcv_nxt; /* åä¿¡ãæå¾ 300 ãã¦ããæå°ã® SEQ */ 301 T_TCP_SEQ rcv_adv; /* åä¿¡ãæå¾ 302 ãã¦ããæ大㮠SEQ */ 303 T_TCP_SEQ rcv_wnd; /* åä¿¡å¯è½ãªã¦ã£ã³ããµã¤ãº */ 304 T_TCP_SEQ rtseq; /* æéè¨æ¸¬ãå§ãã SEQ */ 305 T_TCP_SEQ last_ack_sent; /* æå¾ã«éä¿¡ãã ACK */ 306 T_TCP_TIME idle; /* ã¢ã¤ãã«æé */ 307 ER error; /* éåæã«çºçããã¨ã©ã¼ */ 308 ER net_error; /* ãããã¯ã¼ã¯ã®ã¨ã©ã¼ç¶æ 309 */ 310 T_TCP_WND snd_wnd; /* ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº */ 311 T_TCP_WND max_sndwnd; /* ä»ã¾ã§ã®æ大éä¿¡ã¦ã£ã³ããµã¤ãº */ 312 T_TCP_TIME rtt; /* å¾å¾©æé */ 313 uint16_t swbuf_count; /* éä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 314 uint16_t rwbuf_count; /* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 315 uint16_t rcv_buf_len; /* tcp_rcv_buf ã®å²å½ã¦é· */ 316 uint16_t get_buf_len; /* tcp_rcv_buf ã®å²å½ã¦é· */ 317 uint8_t rxtshift; /* åéä¿¡åæ°ã® log(2) */ 318 uint8_t fsm_state; /* FSM ç¶æ 319 */ 320 uint8_t dupacks; /* åé ACK æ° */ 271 T_TCP_SEQ snd_una; /* 未確認の最小送信 SEQ つまり */ 272 /* 確認された最大送信 SEQ */ 273 T_TCP_SEQ snd_max; /* 送信した最大 SEQ */ 274 T_TCP_SEQ snd_nxt; /* 次に送信する SEQ */ 275 T_TCP_SEQ snd_old_nxt; /* 元の snd_nxt */ 276 T_TCP_SEQ snd_wl1; /* 前回ウィンドを更新した SEQ */ 277 T_TCP_SEQ snd_wl2; /* 前回ウィンドを更新した ACK */ 278 T_TCP_SEQ iss; /* 自分の SEQ の初期値 */ 279 T_TCP_SEQ irs; /* 相手の SEQ の初期値 */ 280 T_TCP_SEQ rcv_nxt; /* 受信を期待している最小の SEQ */ 281 T_TCP_SEQ rcv_adv; /* 受信を期待している最大の SEQ */ 282 T_TCP_SEQ rcv_wnd; /* 受信可能なウィンドサイズ */ 283 T_TCP_SEQ rtseq; /* 時間計測を始めた SEQ */ 284 T_TCP_SEQ last_ack_sent; /* 最後に送信した ACK */ 285 T_TCP_TIME idle; /* アイドル時間 */ 286 ER error; /* 非同期に発生したエラー */ 287 ER net_error; /* ネットワークのエラー状態 */ 288 T_TCP_WND snd_wnd; /* 相手の受信可能ウィンドサイズ */ 289 T_TCP_WND max_sndwnd; /* 今までの最大送信ウィンドサイズ */ 290 T_TCP_TIME rtt; /* 往復時間 */ 291 uint16_t swbuf_count; /* 送信ウィンドバッファの使用中サイズ */ 292 uint16_t rwbuf_count; /* 受信ウィンドバッファの使用中サイズ */ 293 uint16_t rcv_buf_len; /* tcp_rcv_buf の割当て長 */ 294 uint16_t get_buf_len; /* tcp_rcv_buf の割当て長 */ 295 uint8_t rxtshift; /* 再送信回数の log(2) */ 296 uint8_t fsm_state; /* FSM 状態 */ 297 uint8_t dupacks; /* 再送 ACK 数 */ 321 298 322 299 #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES) 323 uint8_t rwbufq_entries; /* åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ã¨ã³ããªæ°*/300 uint8_t rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数 */ 324 301 #endif /* of #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES) */ 325 302 … … 327 304 328 305 /* 329 * Time Wait ç¨ IPv4 TCP é信端ç¹306 * Time Wait 用 IPv4 TCP 通信端点 330 307 */ 331 308 typedef struct t_tcp4_twcep { 332 int_t rbufsz; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº */ 333 T_TCP_TIME timer_2msl; /* 2MSL ã¿ã¤ã */ 334 T_IPV4EP dstaddr; /* ç¸æã®ã¢ãã¬ã¹ */ 335 T_IPV4EP myaddr; /* èªåã®ã¢ãã¬ã¹ */ 336 T_TCP_SEQ snd_una; /* æªç¢ºèªã®æå°éä¿¡ SEQ ã¤ã¾ã */ 337 /* 確èªãããæ大éä¿¡ SEQ */ 338 T_TCP_SEQ rcv_nxt; /* åä¿¡ãæå¾ 339 ãã¦ããæå°ã® SEQ */ 340 uint16_t rwbuf_count; /* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 341 uint8_t fsm_state; /* FSM ç¶æ 342 */ 309 int_t rbufsz; /* 受信用ウィンドバッファサイズ */ 310 T_TCP_TIME timer_2msl; /* 2MSL タイマ */ 311 T_IPV4EP dstaddr; /* 相手のアドレス */ 312 T_IPV4EP myaddr; /* 自分のアドレス */ 313 T_TCP_SEQ snd_una; /* 未確認の最小送信 SEQ つまり */ 314 /* 確認された最大送信 SEQ */ 315 T_TCP_SEQ rcv_nxt; /* 受信を期待している最小の SEQ */ 316 uint16_t rwbuf_count; /* 受信ウィンドバッファの使用中サイズ */ 317 uint8_t fsm_state; /* FSM 状態 */ 343 318 344 319 } T_TCP4_TWCEP; 345 320 346 321 /* 347 * é常㮠IPv6 TCP é信端ç¹322 * 通常の IPv6 TCP 通信端点 348 323 */ 349 324 typedef struct t_tcp6_cep { 350 325 351 326 /* 352 * ITRON TCP/IP API ãTCP é信端ç¹ã¨åãã¡ã³ã327 * ITRON TCP/IP API、TCP 通信端点と同じメンバ 353 328 */ 354 ATR cepatr; /* é信端ç¹å±æ§*/355 void *sbuf; /* éä¿¡ç¨ã¦ã£ã³ããããã¡*/356 int_t sbufsz; /* éä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº*/357 void *rbuf; /* åä¿¡ç¨ã¦ã£ã³ããããã¡*/358 int_t rbufsz; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº*/359 t_tcp_callback callback; /* ã³ã¼ã«ããã¯é¢æ°*/329 ATR cepatr; /* 通信端点属性 */ 330 void *sbuf; /* 送信用ウィンドバッファ */ 331 int_t sbufsz; /* 送信用ウィンドバッファサイズ */ 332 void *rbuf; /* 受信用ウィンドバッファ */ 333 int_t rbufsz; /* 受信用ウィンドバッファサイズ */ 334 t_tcp_callback callback; /* コールバック関数 */ 360 335 361 336 /* 362 * TINET ç¬èªã®ã¡ã³ã337 * TINET 独自のメンバ 363 338 */ 364 uint32_t flags; /* é信端ç¹ãã©ã° */ 365 ID semid_lock; /* é信端ç¹ãã㯠*/ 366 ID est_flgid; /* ã³ãã¯ã·ã§ã³ç¶æ 367 ã¤ãã³ããã©ã° */ 368 ID snd_flgid; /* éä¿¡ã¤ãã³ããã©ã° */ 369 ID rcv_flgid; /* åä¿¡ã¤ãã³ããã©ã° */ 370 ID snd_tskid; /* éä¿¡ã¿ã¹ã¯èå¥å */ 371 ID rcv_tskid; /* åä¿¡ã¿ã¹ã¯èå¥å */ 372 uint8_t *sbuf_rptr; /* éä¿¡ç¨èªã¿åºããã¤ã³ã¿ */ 373 uint8_t *sbuf_wptr; /* éä¿¡ç¨æ¸ãè¾¼ã¿ãã¤ã³ã¿ */ 374 uint8_t *rbuf_rptr; /* åä¿¡ç¨èªã¿åºããã¤ã³ã¿ */ 375 uint8_t *rbuf_wptr; /* åä¿¡ç¨æ¸ãè¾¼ã¿ãã¤ã³ã¿ */ 376 T_TCP_SEQ snd_ssthresh; /* 輻輳ã¦ã£ã³ããµã¤ãº(snd_cwnd) */ 377 /* ã®ãããå¤ */ 378 T_TCP_TIME rxtcur; /* ç¾å¨ã®åéã¿ã¤ã ã¢ã¦ã */ 379 T_TCP_TIME srtt; /* å¹³æ»åããã RTT */ 380 T_TCP_TIME rttvar; /* å¹³æ»åãããåæ£ */ 381 T_TCP_WND snd_cwnd; /* 輻輳ã¦ã£ã³ããµã¤ãº */ 339 uint32_t flags; /* 通信端点フラグ */ 340 ID semid_lock; /* 通信端点ロック */ 341 ID est_flgid; /* コネクション状態イベントフラグ */ 342 ID snd_flgid; /* 送信イベントフラグ */ 343 ID rcv_flgid; /* 受信イベントフラグ */ 344 ID snd_tskid; /* 送信タスク識別子 */ 345 ID rcv_tskid; /* 受信タスク識別子 */ 346 uint8_t *sbuf_rptr; /* 送信用読み出しポインタ */ 347 uint8_t *sbuf_wptr; /* 送信用書き込みポインタ */ 348 uint8_t *rbuf_rptr; /* 受信用読み出しポインタ */ 349 uint8_t *rbuf_wptr; /* 受信用書き込みポインタ */ 350 T_TCP_SEQ snd_ssthresh; /* 輻輳ウィンドサイズ(snd_cwnd) */ 351 /* のしきい値 */ 352 T_TCP_TIME rxtcur; /* 現在の再送タイムアウト */ 353 T_TCP_TIME srtt; /* 平滑化された RTT */ 354 T_TCP_TIME rttvar; /* 平滑化された分散 */ 355 T_TCP_WND snd_cwnd; /* 輻輳ウィンドサイズ */ 382 356 383 357 /* 384 * ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº358 * 相手の最大受信セグメントサイズ 385 359 * 386 * ãªãªã¸ãã«ã§ã¯ãä¸è¬ã®ã»ã°ã¡ã³ãã®æ大ãµã¤ãº (t_maxseg) ã¨ã 387 * ãªãã·ã§ã³ä»ãã®ã»ã°ã¡ã³ãã®æ大ãµã¤ãº (t_maxopd) ãå¥ã« 388 * ãªã£ã¦ãããããã¯ãç¾å¨ã®ã¤ã³ã¿ã¼ãããã§ã¯ããªãã·ã§ã³ä»ãã® 389 * ã»ã°ã¡ã³ãã®ã»ããå¤ãããã¨èª¬æããã¦ããããã§ããã 390 * æ¬å®è£ 391 ã§ã¯ãæ大ã»ã°ã¡ã³ããµã¤ãºãªãã·ã§ã³ä»¥å¤ã®ãªãã·ã§ã³ã¯ 392 * å®è£ 393 ããªãã®ã§ãt_maxseg ã®ä½¿ç¨ããã 360 * オリジナルでは、一般のセグメントの最大サイズ (t_maxseg) と、 361 * オプション付きのセグメントの最大サイズ (t_maxopd) が別に 362 * なっている。これは、現在のインターネットでは、オプション付きの 363 * セグメントのほうが多いからと説明されているためである。 364 * 本実装では、最大セグメントサイズオプション以外のオプションは 365 * 実装しないので、t_maxseg の使用する。 394 366 */ 395 367 T_TCP_SEG maxseg; 396 368 397 T_IPV6EP *p_dstaddr; /* ç¸æã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/398 T_IPV6EP *p_myaddr; /* èªåã®ã¢ãã¬ã¹ã¸ã®ãã¤ã³ã¿*/399 int16_t snd_tfn; /* éä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã*/400 int16_t rcv_tfn; /* åä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã*/369 T_IPV6EP *p_dstaddr; /* 相手のアドレスへのポインタ */ 370 T_IPV6EP *p_myaddr; /* 自分のアドレスへのポインタ */ 371 int16_t snd_tfn; /* 送信動作中の API 機能コード */ 372 int16_t rcv_tfn; /* 受信動作中の API 機能コード */ 401 373 402 374 #ifdef TCP_CFG_NON_BLOCKING 403 375 404 int16_t snd_nblk_tfn; /* éä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã */ 405 int16_t rcv_nblk_tfn; /* åä¿¡åä½ä¸ã® API æ©è½ã³ã¼ã */ 406 void *snd_data; /* éä¿¡ãã¼ã¿é åã®å 407 é ã¢ãã¬ã¹ */ 408 int_t snd_len; /* éä¿¡ãã¼ã¿é åã®é·ã */ 409 void *rcv_data; /* åä¿¡ãã¼ã¿é åã®å 410 é ã¢ãã¬ã¹ */ 411 int_t rcv_len; /* åä¿¡ãã¼ã¿é åã®é·ã */ 412 void **snd_p_buf; /* éä¿¡ãããã¡ã¸ã®ãã¤ã³ã¿ */ 413 void **rcv_p_buf; /* åä¿¡ãããã¡ã¸ã®ãã¤ã³ã¿ */ 376 int16_t snd_nblk_tfn; /* 送信動作中の API 機能コード */ 377 int16_t rcv_nblk_tfn; /* 受信動作中の API 機能コード */ 378 void *snd_data; /* 送信データ領域の先頭アドレス */ 379 int_t snd_len; /* 送信データ領域の長さ */ 380 void *rcv_data; /* 受信データ領域の先頭アドレス */ 381 int_t rcv_len; /* 受信データ領域の長さ */ 382 void **snd_p_buf; /* 送信バッファへのポインタ */ 383 void **rcv_p_buf; /* 受信バッファへのポインタ */ 414 384 415 385 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 416 386 417 387 #ifdef TCP_CFG_SWBUF_CSAVE 418 T_NET_BUF *swbufq; /* éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼*/388 T_NET_BUF *swbufq; /* 送信ウィンドバッファキュー */ 419 389 #endif /* of #ifdef TCP_CFG_SWBUF_CSAVE */ 420 390 421 391 /* 422 * ãã以éã®ã¡ã³ãã¼ã¯ tcp_init_cep() é¢æ°ã§ã¼ãã¯ãªã¢ã¼ãããã392 * これ以降のメンバーは tcp_init_cep() 関数でゼロクリアーされる。 423 393 */ 424 394 425 T_TCP_TIME timer[NUM_TCP_TIMERS]; /* TCP ã®ã¿ã¤ã*/426 T_IPV6EP dstaddr; /* ç¸æã®ã¢ãã¬ã¹*/427 T_IPV6EP myaddr; /* èªåã®ã¢ãã¬ã¹*/428 T_TCP6_REP *rep; /* åä»å£*/429 T_NET_BUF *reassq; /* åä¿¡åæ§æãã¥ã¼*/395 T_TCP_TIME timer[NUM_TCP_TIMERS]; /* TCP のタイマ */ 396 T_IPV6EP dstaddr; /* 相手のアドレス */ 397 T_IPV6EP myaddr; /* 自分のアドレス */ 398 T_TCP6_REP *rep; /* 受付口 */ 399 T_NET_BUF *reassq; /* 受信再構成キュー */ 430 400 431 401 #ifdef TCP_CFG_RWBUF_CSAVE 432 T_NET_BUF *rwbufq; /* åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼*/402 T_NET_BUF *rwbufq; /* 受信ウィンドバッファキュー */ 433 403 #endif /* of #ifdef TCP_CFG_RWBUF_CSAVE */ 434 404 435 405 #ifdef TCP_CFG_EXTENTIONS 436 T_TCP_HDR *urg_tcph; /* ç·æ¥ãã¼ã¿å 437 ¥ãã®ã»ã°ã¡ã³ãã® TCP ããã */ 438 T_TCP_SEQ snd_up; /* éä¿¡ããç·æ¥ãã¤ã³ã¿ */ 439 T_TCP_SEQ rcv_up; /* åä¿¡ããç·æ¥ãã¤ã³ã¿ */ 406 T_TCP_HDR *urg_tcph; /* 緊急データ入りのセグメントの TCP ヘッダ */ 407 T_TCP_SEQ snd_up; /* 送信した緊急ポインタ */ 408 T_TCP_SEQ rcv_up; /* 受信した緊急ポインタ */ 440 409 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 441 410 442 T_TCP_SEQ snd_una; /* æªç¢ºèªã®æå°éä¿¡ SEQ ã¤ã¾ã */ 443 /* 確èªãããæ大éä¿¡ SEQ */ 444 T_TCP_SEQ snd_max; /* éä¿¡ããæ大 SEQ */ 445 T_TCP_SEQ snd_nxt; /* 次ã«éä¿¡ãã SEQ */ 446 T_TCP_SEQ snd_old_nxt; /* å 447 ã® snd_nxt */ 448 T_TCP_SEQ snd_wl1; /* ååã¦ã£ã³ããæ´æ°ãã SEQ */ 449 T_TCP_SEQ snd_wl2; /* ååã¦ã£ã³ããæ´æ°ãã ACK */ 450 T_TCP_SEQ iss; /* èªåã® SEQ ã®åæå¤ */ 451 T_TCP_SEQ irs; /* ç¸æã® SEQ ã®åæå¤ */ 452 T_TCP_SEQ rcv_nxt; /* åä¿¡ãæå¾ 453 ãã¦ããæå°ã® SEQ */ 454 T_TCP_SEQ rcv_adv; /* åä¿¡ãæå¾ 455 ãã¦ããæ大㮠SEQ */ 456 T_TCP_SEQ rcv_wnd; /* åä¿¡å¯è½ãªã¦ã£ã³ããµã¤ãº */ 457 T_TCP_SEQ rtseq; /* æéè¨æ¸¬ãå§ãã SEQ */ 458 T_TCP_SEQ last_ack_sent; /* æå¾ã«éä¿¡ãã ACK */ 459 T_TCP_TIME idle; /* ã¢ã¤ãã«æé */ 460 ER error; /* éåæã«çºçããã¨ã©ã¼ */ 461 ER net_error; /* ãããã¯ã¼ã¯ã®ã¨ã©ã¼ç¶æ 462 */ 463 T_TCP_WND snd_wnd; /* ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº */ 464 T_TCP_WND max_sndwnd; /* ä»ã¾ã§ã®æ大éä¿¡ã¦ã£ã³ããµã¤ãº */ 465 T_TCP_TIME rtt; /* å¾å¾©æé */ 466 uint16_t swbuf_count; /* éä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 467 uint16_t rwbuf_count; /* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 468 uint16_t rcv_buf_len; /* tcp_rcv_buf ã®å²å½ã¦é· */ 469 uint16_t get_buf_len; /* tcp_rcv_buf ã®å²å½ã¦é· */ 470 uint8_t rxtshift; /* åéä¿¡åæ°ã® log(2) */ 471 uint8_t fsm_state; /* FSM ç¶æ 472 */ 473 uint8_t dupacks; /* åé ACK æ° */ 411 T_TCP_SEQ snd_una; /* 未確認の最小送信 SEQ つまり */ 412 /* 確認された最大送信 SEQ */ 413 T_TCP_SEQ snd_max; /* 送信した最大 SEQ */ 414 T_TCP_SEQ snd_nxt; /* 次に送信する SEQ */ 415 T_TCP_SEQ snd_old_nxt; /* 元の snd_nxt */ 416 T_TCP_SEQ snd_wl1; /* 前回ウィンドを更新した SEQ */ 417 T_TCP_SEQ snd_wl2; /* 前回ウィンドを更新した ACK */ 418 T_TCP_SEQ iss; /* 自分の SEQ の初期値 */ 419 T_TCP_SEQ irs; /* 相手の SEQ の初期値 */ 420 T_TCP_SEQ rcv_nxt; /* 受信を期待している最小の SEQ */ 421 T_TCP_SEQ rcv_adv; /* 受信を期待している最大の SEQ */ 422 T_TCP_SEQ rcv_wnd; /* 受信可能なウィンドサイズ */ 423 T_TCP_SEQ rtseq; /* 時間計測を始めた SEQ */ 424 T_TCP_SEQ last_ack_sent; /* 最後に送信した ACK */ 425 T_TCP_TIME idle; /* アイドル時間 */ 426 ER error; /* 非同期に発生したエラー */ 427 ER net_error; /* ネットワークのエラー状態 */ 428 T_TCP_WND snd_wnd; /* 相手の受信可能ウィンドサイズ */ 429 T_TCP_WND max_sndwnd; /* 今までの最大送信ウィンドサイズ */ 430 T_TCP_TIME rtt; /* 往復時間 */ 431 uint16_t swbuf_count; /* 送信ウィンドバッファの使用中サイズ */ 432 uint16_t rwbuf_count; /* 受信ウィンドバッファの使用中サイズ */ 433 uint16_t rcv_buf_len; /* tcp_rcv_buf の割当て長 */ 434 uint16_t get_buf_len; /* tcp_rcv_buf の割当て長 */ 435 uint8_t rxtshift; /* 再送信回数の log(2) */ 436 uint8_t fsm_state; /* FSM 状態 */ 437 uint8_t dupacks; /* 再送 ACK 数 */ 474 438 475 439 #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES) 476 uint8_t rwbufq_entries; /* åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã®ã¨ã³ããªæ°*/440 uint8_t rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数 */ 477 441 #endif /* of #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES) */ 478 442 … … 480 444 481 445 /* 482 * Time Wait ç¨ IPv6 TCP é信端ç¹446 * Time Wait 用 IPv6 TCP 通信端点 483 447 */ 484 448 typedef struct t_tcp6_twcep { 485 int_t rbufsz; /* åä¿¡ç¨ã¦ã£ã³ããããã¡ãµã¤ãº */ 486 T_TCP_TIME timer_2msl; /* 2MSL ã¿ã¤ã */ 487 T_IPV6EP dstaddr; /* ç¸æã®ã¢ãã¬ã¹ */ 488 T_IPV6EP myaddr; /* èªåã®ã¢ãã¬ã¹ */ 489 T_TCP_SEQ snd_una; /* æªç¢ºèªã®æå°éä¿¡ SEQ ã¤ã¾ã */ 490 /* 確èªãããæ大éä¿¡ SEQ */ 491 T_TCP_SEQ iss; /* èªåã® SEQ ã®åæå¤ */ 492 T_TCP_SEQ irs; /* ç¸æã® SEQ ã®åæå¤ */ 493 T_TCP_SEQ rcv_nxt; /* åä¿¡ãæå¾ 494 ãã¦ããæå°ã® SEQ */ 495 T_TCP_WND snd_wnd; /* ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº */ 496 uint16_t rwbuf_count; /* åä¿¡ã¦ã£ã³ããããã¡ã®ä½¿ç¨ä¸ãµã¤ãº */ 497 uint8_t fsm_state; /* FSM ç¶æ 498 */ 449 int_t rbufsz; /* 受信用ウィンドバッファサイズ */ 450 T_TCP_TIME timer_2msl; /* 2MSL タイマ */ 451 T_IPV6EP dstaddr; /* 相手のアドレス */ 452 T_IPV6EP myaddr; /* 自分のアドレス */ 453 T_TCP_SEQ snd_una; /* 未確認の最小送信 SEQ つまり */ 454 /* 確認された最大送信 SEQ */ 455 T_TCP_SEQ iss; /* 自分の SEQ の初期値 */ 456 T_TCP_SEQ irs; /* 相手の SEQ の初期値 */ 457 T_TCP_SEQ rcv_nxt; /* 受信を期待している最小の SEQ */ 458 T_TCP_WND snd_wnd; /* 相手の受信可能ウィンドサイズ */ 459 uint16_t rwbuf_count; /* 受信ウィンドバッファの使用中サイズ */ 460 uint8_t fsm_state; /* FSM 状態 */ 499 461 500 462 } T_TCP6_TWCEP; … … 513 475 514 476 /* 515 * TCP é信端ç¹ã®ç¶æ 516 ãã©ã° 517 */ 518 519 #define TCP_CEP_FLG_ACK_NOW ULONG_C(0x00000001) /* ç´ã¡ã«ç¸æã« ACK ãéãã */ 520 #define TCP_CEP_FLG_DEL_ACK ULONG_C(0x00000002) /* ACK ãé 521 延ããã */ 522 #define TCP_CEP_FLG_SENT_FIN ULONG_C(0x00000004) /* FIN ãéã£ã¦ããã */ 523 #define TCP_CEP_FLG_NEED_SYN ULONG_C(0x00000008) /* SYN ãéä¿¡ããã */ 524 #define TCP_CEP_FLG_NEED_FIN ULONG_C(0x00000010) /* FIN ãéä¿¡ããã */ 525 #define TCP_CEP_FLG_FORCE ULONG_C(0x00000020) /* å¼·å¶éä¿¡ã */ 526 #define TCP_CEP_FLG_NO_PUSH ULONG_C(0x00000040) /* push ããªãã */ 527 #define TCP_CEP_FLG_NO_DELAY ULONG_C(0x00000080) /* é 528 延ããªãã */ 529 #define TCP_CEP_FLG_FORCE_CLEAR ULONG_C(0x00000100) /* å¼·å¶éä¿¡ããå¾ãã©ã°ãã¯ãªã¢ã¼ããã*/ 530 #define TCP_CEP_FLG_POST_OUTPUT ULONG_C(0x00000200) /* éä¿¡ãéå§ããã */ 531 #define TCP_CEP_FLG_RESERVE_OUTPUT ULONG_C(0x00000400) /* éä¿¡ãäºç´ããã */ 532 #define TCP_CEP_FLG_DYNAMIC ULONG_C(0x00001000) /* åççæã»åé¤å¯è½é信端ç¹ã */ 533 #define TCP_CEP_FLG_VALID ULONG_C(0x00002000) /* çææ¸ã¿ã§æå¹ãªé信端ç¹ã */ 534 #define TCP_CEP_FLG_CLOSE_AFTER_OUTPUT ULONG_C(0x00004000) /* éä¿¡ããå¾ã³ãã¯ã·ã§ã³ãéããã*/ 535 #define TCP_CEP_FLG_RESTORE_NEXT_OUTPUT ULONG_C(0x00008000) /* éä¿¡ããå¾ãsnd_nxt ãå 536 ã«æ»ãã*/ 537 538 /* éåä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ */ 539 #define TCP_CEP_FLG_WBCS_NBUF_REQ ULONG_C(0x00080000) /* ãããã¯ã¼ã¯ãããã¡å²å½ã¦è¦æ± */ 540 #define TCP_CEP_FLG_WBCS_MASK ULONG_C(0x00070000) /* ãã¹ã¯ */ 541 #define TCP_CEP_FLG_WBCS_FREE ULONG_C(0x00000000) /* éä¿¡ã¦ã£ã³ããããã¡æªä½¿ç¨ */ 542 #define TCP_CEP_FLG_WBCS_WOPEN_PEND ULONG_C(0x00010000) /* ç¸æã®åä¿¡ã¦ã£ã³ãã®éãå¾ 543 ã¡ */ 544 #define TCP_CEP_FLG_WBCS_NBUF_PEND ULONG_C(0x00020000) /* ãããã¯ã¼ã¯ãããã¡äºç´å¾ 545 ã¡ */ 546 #define TCP_CEP_FLG_WBCS_NBUF_RSVD ULONG_C(0x00030000) /* ãããã¯ã¼ã¯ãããã¡äºç´æ¸ã¿ */ 547 #define TCP_CEP_FLG_WBCS_NBUF_READY ULONG_C(0x00040000) /* ãããã¯ã¼ã¯ãããã¡å²å½ã¦æ¸ã¿ */ 548 #define TCP_CEP_FLG_WBCS_SEND_READY ULONG_C(0x00050000) /* éä¿¡å¯è½ */ 549 #define TCP_CEP_FLG_WBCS_SENT ULONG_C(0x00060000) /* éä¿¡æ¸ã¿ã§ãACKå¾ 550 ã¡ */ 551 #define TCP_CEP_FLG_WBCS_ACKED ULONG_C(0x00070000) /* éä¿¡æ¸ã¿ã§ãACKå®äº */ 552 553 /* 554 * é信端ç¹ã¤ãã³ããã©ã° 555 */ 556 557 #define TCP_CEP_EVT_ESTABLISHED ULONG_C(0x00000001) /* ã³ãã¯ã·ã§ã³ç¢ºç« */ 558 #define TCP_CEP_EVT_CLOSED ULONG_C(0x00000002) /* æªä½¿ç¨ç¶æ 559 */ 560 #define TCP_CEP_EVT_SWBUF_READY ULONG_C(0x00000004) /* éä¿¡ã¦ã£ã³ããããã¡ç©ºã */ 561 #define TCP_CEP_EVT_RWBUF_READY ULONG_C(0x00000008) /* éä¿¡ã¦ã£ã³ããããã¡ãã¼ã¿ãã */ 562 #define TCP_CEP_EVT_ALL ULONG_C(0xffffffff) /* å 563 ¨ã¤ãã³ã */ 564 565 /* 566 * 追å API æ©è½ã»äºè±¡ã³ã¼ã 567 */ 568 569 /* TCP é¢ä¿ */ 477 * TCP 通信端点の状態フラグ 478 */ 479 480 #define TCP_CEP_FLG_ACK_NOW ULONG_C(0x00000001) /* 直ちに相手に ACK を送る。 */ 481 #define TCP_CEP_FLG_DEL_ACK ULONG_C(0x00000002) /* ACK を遅延する。 */ 482 #define TCP_CEP_FLG_SENT_FIN ULONG_C(0x00000004) /* FIN を送ってある。 */ 483 #define TCP_CEP_FLG_NEED_SYN ULONG_C(0x00000008) /* SYN を送信する。 */ 484 #define TCP_CEP_FLG_NEED_FIN ULONG_C(0x00000010) /* FIN を送信する。 */ 485 #define TCP_CEP_FLG_FORCE ULONG_C(0x00000020) /* 強制送信。 */ 486 #define TCP_CEP_FLG_NO_PUSH ULONG_C(0x00000040) /* push しない。 */ 487 #define TCP_CEP_FLG_NO_DELAY ULONG_C(0x00000080) /* 遅延しない。 */ 488 #define TCP_CEP_FLG_FORCE_CLEAR ULONG_C(0x00000100) /* 強制送信した後フラグをクリアーする。*/ 489 #define TCP_CEP_FLG_POST_OUTPUT ULONG_C(0x00000200) /* 送信を開始する。 */ 490 #define TCP_CEP_FLG_RESERVE_OUTPUT ULONG_C(0x00000400) /* 送信を予約する。 */ 491 #define TCP_CEP_FLG_DYNAMIC ULONG_C(0x00001000) /* 動的生成・削除可能通信端点。 */ 492 #define TCP_CEP_FLG_VALID ULONG_C(0x00002000) /* 生成済みで有効な通信端点。 */ 493 #define TCP_CEP_FLG_CLOSE_AFTER_OUTPUT ULONG_C(0x00004000) /* 送信した後コネクションを閉じる。*/ 494 #define TCP_CEP_FLG_RESTORE_NEXT_OUTPUT ULONG_C(0x00008000) /* 送信した後、snd_nxt を元に戻す。*/ 495 496 /* 送受信ウィンドバッファの省コピー機能 */ 497 #define TCP_CEP_FLG_WBCS_NBUF_REQ ULONG_C(0x00080000) /* ネットワークバッファ割当て要求 */ 498 #define TCP_CEP_FLG_WBCS_MASK ULONG_C(0x00070000) /* マスク */ 499 #define TCP_CEP_FLG_WBCS_FREE ULONG_C(0x00000000) /* 送信ウィンドバッファ未使用 */ 500 #define TCP_CEP_FLG_WBCS_WOPEN_PEND ULONG_C(0x00010000) /* 相手の受信ウィンドの開き待ち */ 501 #define TCP_CEP_FLG_WBCS_NBUF_PEND ULONG_C(0x00020000) /* ネットワークバッファ予約待ち */ 502 #define TCP_CEP_FLG_WBCS_NBUF_RSVD ULONG_C(0x00030000) /* ネットワークバッファ予約済み */ 503 #define TCP_CEP_FLG_WBCS_NBUF_READY ULONG_C(0x00040000) /* ネットワークバッファ割当て済み */ 504 #define TCP_CEP_FLG_WBCS_SEND_READY ULONG_C(0x00050000) /* 送信可能 */ 505 #define TCP_CEP_FLG_WBCS_SENT ULONG_C(0x00060000) /* 送信済みで、ACK待ち */ 506 #define TCP_CEP_FLG_WBCS_ACKED ULONG_C(0x00070000) /* 送信済みで、ACK完了 */ 507 508 /* 509 * 通信端点イベントフラグ 510 */ 511 512 #define TCP_CEP_EVT_ESTABLISHED ULONG_C(0x00000001) /* コネクション確立 */ 513 #define TCP_CEP_EVT_CLOSED ULONG_C(0x00000002) /* 未使用状態 */ 514 #define TCP_CEP_EVT_SWBUF_READY ULONG_C(0x00000004) /* 送信ウィンドバッファ空き */ 515 #define TCP_CEP_EVT_RWBUF_READY ULONG_C(0x00000008) /* 送信ウィンドバッファデータあり */ 516 #define TCP_CEP_EVT_ALL ULONG_C(0xffffffff) /* 全イベント */ 517 518 /* 519 * 追加 API 機能・事象コード 520 */ 521 522 /* TCP 関係 */ 570 523 571 524 #define TFN_TCP_UNDEF (0) 572 525 573 526 /* 574 * srtt: å¹³æ»åãããRTT575 * rttvar: å¹³æ»åãããåæ£576 * rtt: 測å®ãããå¾å¾©æé527 * srtt: 平滑化された RTT 528 * rttvar: 平滑化された分散 529 * rtt: 測定された往復時間 577 530 * 578 * å¹³æ»åããã RTT (srtt) ã¨å¹³æ»åãããåæ£ (rttvar) ã579 * æ´æ°åã§è¨ç®ããããã«ãå·¦ã·ãããã¦ã¹ã±ã¼ã«ããã580 * srtt 㯠2 é²å°æ°ç¹ä»¥ä¸ 3 ãããã581 * rttvar 㯠2 é²å°æ°ç¹ä»¥ä¸ 2 ããããä¿æããã531 * 平滑化された RTT (srtt) と平滑化された分散 (rttvar) を 532 * 整数型で計算するために、左シフトしてスケールする。 533 * srtt は 2 進小数点以下 3 ビット、 534 * rttvar は 2 進小数点以下 2 ビットを保持する。 582 535 */ 583 536 584 537 #define TCP_DELTA_SHIFT 2 585 /* å·®å = rtt/8 + srtt*7/8 ã®è¨ç®ã®ããã®ã·ããå¤*/538 /* 差分 = rtt/8 + srtt*7/8 の計算のためのシフト値 */ 586 539 #define TCP_SRTT_SHIFT (TCP_DELTA_SHIFT + 3) 587 /* srtt ã®ã·ããå¤ã3(+2)ããã*/540 /* srtt のシフト値、3(+2)ビット */ 588 541 #define TCP_RTTVAR_SHIFT (TCP_DELTA_SHIFT + 2) 589 /* rttvar ã®ã·ããå¤ã2(+2)ããã*/542 /* rttvar のシフト値、2(+2)ビット */ 590 543 #define TCP_SRTT_SCALE (1<<TCP_SRTT_SHIFT) 591 544 #define TCP_RTTVAR_SCALE (1<<TCP_RTTVAR_SHIFT) 592 545 593 546 /* 594 * é«éå転éãéå§ããåé ACK æ°ã®ãããå¤547 * 高速再転送を開始する再送 ACK 数のしきい値 595 548 */ 596 549 … … 598 551 599 552 /* 600 * åä¿¡åæ§æãã¥ã¼ã§ã® TCP ããã553 * 受信再構成キューでの TCP ヘッダ 601 554 */ 602 555 603 556 typedef struct t_tcp_q_hdr { 604 uint16_t sport; /* éä¿¡å 605 ãã¼ãçªå· */ 606 uint16_t dport; /* å®å 607 ãã¼ãçªå· */ 608 609 uint32_t seq; /* SEQ çªå· */ 610 611 T_NET_BUF *next; /* 次ã®ã»ã°ã¡ã³ããå 612 㯠ACK çªå·(ack) */ 613 614 uint8_t doff; /* ãã¼ã¿ãªãã»ãã(ä¸ä½4ããã) */ 615 uint8_t flags; /* ãã©ã°(ä¸ä½6ããã) */ 616 uint16_t soff; /* SDU ãªãã»ãããå 617 ã¯ã¦ã£ã³ããµã¤ãº(win) */ 618 619 uint16_t slen; /* SDU é·ãå 620 ã¯ãã§ãã¯ãµã (sum) */ 621 uint16_t urp; /* ç·æ¥ãã¤ã³ã¿ï¼SDU é·è£æ£ï¼ */ 557 uint16_t sport; /* 送信元ポート番号 */ 558 uint16_t dport; /* 宛先ポート番号 */ 559 560 uint32_t seq; /* SEQ 番号 */ 561 562 T_NET_BUF *next; /* 次のセグメント、元は ACK 番号(ack) */ 563 564 uint8_t doff; /* データオフセット(上位4ビット) */ 565 uint8_t flags; /* フラグ(下位6ビット) */ 566 uint16_t soff; /* SDU オフセット、元はウィンドサイズ(win) */ 567 568 uint16_t slen; /* SDU 長、元はチェックサム(sum) */ 569 uint16_t urp; /* 緊急ポインタ(SDU 長補正) */ 622 570 } __attribute__((packed, aligned(2)))T_TCP_Q_HDR; 623 571 … … 626 574 627 575 /* 628 * ãªãã¸ã§ã¯ã ID ã®æå°å¤ã®å®ç¾©629 */ 630 631 #define TMIN_TCP_REPID 1 /* TCP åä»å£ ID ã®æå°å¤*/632 #define TMIN_TCP_CEPID 1 /* TCP éä¿¡ç«¯ç¹ ID ã®æå°å¤*/633 #define TMIN_TCP_TWCEPID 1 /* Time Wait ç¨ TCP éä¿¡ç«¯ç¹ ID ã®æå°å¤*/634 635 /* 636 * å¶å¾¡ã»ã°ã¡ã³ãï¼ãã¼ã¿ãªãï¼ãµã¤ãºã®ãããã¯ã¼ã¯ãããã¡576 * オブジェクト ID の最小値の定義 577 */ 578 579 #define TMIN_TCP_REPID 1 /* TCP 受付口 ID の最小値 */ 580 #define TMIN_TCP_CEPID 1 /* TCP 通信端点 ID の最小値 */ 581 #define TMIN_TCP_TWCEPID 1 /* Time Wait 用 TCP 通信端点 ID の最小値 */ 582 583 /* 584 * 制御セグメント(データなし)サイズのネットワークバッファ 637 585 */ 638 586 639 587 typedef struct t_net_buf_cseg { 640 uint16_t len; /* ãã¼ã¿ã®é·ã*/641 uint8_t idix; /* mpfid ã®ã¤ã³ããã¯ã¹*/642 uint8_t flags; /* ãã©ã°*/588 uint16_t len; /* データの長さ */ 589 uint8_t idix; /* mpfid のインデックス */ 590 uint8_t flags; /* フラグ */ 643 591 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN 644 592 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN]; … … 648 596 #endif 649 597 uint8_t buf[IF_HDR_SIZE + IP_HDR_SIZE + TCP_HDR_SIZE]; 650 /* ãããã¡æ¬ä½*/598 /* バッファ本体 */ 651 599 } T_NET_BUF_CSEG; 652 600 … … 654 602 655 603 /* 656 * SNMP 㮠管çæ 657 å ±ãã¼ã¹ (MIB) 604 * SNMP の 管理情報ベース (MIB) 658 605 */ 659 606 … … 674 621 675 622 /* 676 * é¢æ°ã·ãã¥ã¬ã¼ã·ã§ã³ãã¯ã623 * 関数シミュレーションマクロ 677 624 */ 678 625 … … 720 667 721 668 /* 722 * å 723 ¨åå¤æ° 669 * 全域変数 724 670 */ 725 671 … … 738 684 739 685 /* 740 * Inline é¢æ°686 * Inline 関数 741 687 */ 742 688 … … 744 690 745 691 /* 746 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã747 * ç¡å¹ã®å ´åã¯ä½ãããªãããã®ããã¼ã®é¢æ°748 */ 749 750 /* 751 * tcp_free_rwbufq -- åä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã解æ¾ããã692 * TCP 通信端点の受信ウィンドバッファの省コピー機能が 693 * 無効の場合は何もしないためのダミーの関数 694 */ 695 696 /* 697 * tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。 752 698 */ 753 699 … … 762 708 763 709 /* 764 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®ã¿ã765 * æå¹ã®å ´åã¯ä½ãããªãããã®ããã¼ã®é¢æ°766 */ 767 768 /* 769 * tcp_read_swbuf_cs -- éä¿¡ã¦ã£ã³ããããã¡ãããã¼ã¿ãèªã¿åºãã710 * TCP 通信端点の送信ウィンドバッファの省コピー機能のみが 711 * 有効の場合は何もしないためのダミーの関数 712 */ 713 714 /* 715 * tcp_read_swbuf_cs -- 送信ウィンドバッファからデータを読み出す。 770 716 */ 771 717 … … 780 726 781 727 /* 782 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã783 * ç¡å¹ã®å ´åã¯ä½ãããªãããã®ããã¼ã®é¢æ°784 */ 785 786 /* 787 * tcp_free_swbufq -- éä¿¡ã¦ã£ã³ããããã¡ãã¥ã¼ã解æ¾ããã728 * TCP 通信端点の送信ウィンドバッファの省コピー機能が 729 * 無効の場合は何もしないためのダミーの関数 730 */ 731 732 /* 733 * tcp_free_swbufq -- 送信ウィンドバッファキューを解放する。 788 734 */ 789 735 … … 794 740 795 741 /* 796 * tcp_alloc_swbuf -- éä¿¡ã¦ã£ã³ããããã¡ç¨ã®ãããã¯ã¼ã¯ãããã¡ã®å²ãå½ã¦ãæ示ããã742 * tcp_alloc_swbuf -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する。 797 743 */ 798 744 … … 803 749 804 750 /* 805 * tcp_push_res_nbuf -- ãããã¯ã¼ã¯ãããã¡ãäºç´ããã751 * tcp_push_res_nbuf -- ネットワークバッファを予約する。 806 752 */ 807 753 … … 813 759 814 760 /* 815 * tcp_pull_res_nbuf -- äºç´ãã¦ãããããã¯ã¼ã¯ãããã¡è¿ãã761 * tcp_pull_res_nbuf -- 予約してあるネットワークバッファ返す。 816 762 */ 817 763 … … 825 771 826 772 /* 827 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®åãæ¿ããã¯ã773 * TCP 通信端点の受信ウィンドバッファの省コピー機能の切り替えマクロ 828 774 */ 829 775 … … 859 805 860 806 /* 861 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ã®åãæ¿ããã¯ã807 * TCP 通信端点の送信ウィンドバッファの省コピー機能の切り替えマクロ 862 808 */ 863 809 … … 910 856 911 857 /* 912 * é¢æ°858 * 関数 913 859 */ 914 860 … … 941 887 942 888 /* 943 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ç¨é¢æ°944 */ 945 946 /* 947 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã®å ´åã948 * é¢æ°ã®é¸æã«ä½¿ç¨ããã889 * TCP 通信端点の受信ウィンドバッファ用関数 890 */ 891 892 /* 893 * TCP 通信端点の受信ウィンドバッファの省コピー機能が有効の場合、 894 * 関数の選択に使用する。 949 895 */ 950 896 … … 956 902 957 903 /* 958 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ç¨é¢æ°904 * TCP 通信端点の受信ウィンドバッファの省コピー機能用関数 959 905 */ 960 906 … … 966 912 967 913 /* 968 * TCP é信端ç¹ã®åä¿¡ã¦ã£ã³ããããã¡ã®ãéãçã³ãã¼æ©è½ç¨é¢æ°914 * TCP 通信端点の受信ウィンドバッファの【非】省コピー機能用関数 969 915 */ 970 916 … … 976 922 977 923 /* 978 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ç¨é¢æ°979 */ 980 981 /* 982 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ãæå¹ã®å ´åã983 * é¢æ°ã®é¸æã«ä½¿ç¨ããã924 * TCP 通信端点の送信ウィンドバッファ用関数 925 */ 926 927 /* 928 * TCP 通信端点の送信ウィンドバッファの省コピー機能が有効の場合、 929 * 関数の選択に使用する。 984 930 */ 985 931 … … 998 944 999 945 /* 1000 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®çã³ãã¼æ©è½ç¨é¢æ°946 * TCP 通信端点の送信ウィンドバッファの省コピー機能用関数 1001 947 */ 1002 948 … … 1012 958 1013 959 /* 1014 * TCP é信端ç¹ã®éä¿¡ã¦ã£ã³ããããã¡ã®ãéãçã³ãã¼æ©è½ç¨é¢æ°960 * TCP 通信端点の送信ウィンドバッファの【非】省コピー機能用関数 1015 961 */ 1016 962 … … 1028 974 1029 975 /* 1030 * tcp_find_cep -- ãã¼ãçªå·ãã TCP é信端ç¹ãå¾ãã976 * tcp_find_cep -- ポート番号から TCP 通信端点を得る。 1031 977 * 1032 * 注æ: myaddr ã¯ã1033 * TINET-1.2 ãããããã¯ã¼ã¯ãã¤ããªã¼ãã1034 * TINET-1.1 ã¾ã§ã¯ããã¹ããã¤ããªã¼ã978 * 注意: myaddr は、 979 * TINET-1.2 からネットワークバイトオーダ、 980 * TINET-1.1 までは、ホストバイトオーダ 1035 981 */ 1036 982 extern T_TCP_CEP *tcp_find_cep (T_IN_ADDR *dstaddr, uint16_t dstport, … … 1038 984 1039 985 /* 1040 * TCP ãããã®ãã¬ã¼ã¹åºåæ©è½ç¨é¢æ°986 * TCP ヘッダのトレース出力機能用関数 1041 987 */ 1042 988 extern void tcp_output_trace (T_NET_BUF *output, T_TCP_CEP *cep); 1043 989 extern void tcp_input_trace (T_NET_BUF *input, T_TCP_CEP *cep); 1044 990 1045 /* TCP åºåã¿ã¹ã¯*/991 /* TCP 出力タスク */ 1046 992 1047 993 extern void tcp_output_task(intptr_t exinf);
Note:
See TracChangeset
for help on using the changeset viewer.