Changeset 331 for EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_var.h
- Timestamp:
- Jan 21, 2018, 12:10:09 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_var.h
r321 r331 2 2 * TINET (TCP/IP Protocol Stack) 3 3 * 4 * Copyright (C) 2001-20 09by Dep. of Computer Science and Engineering4 * Copyright (C) 2001-2017 by Dep. of Computer Science and Engineering 5 5 * Tomakomai National College of Technology, JAPAN 6 6 * … … 75 75 */ 76 76 77 #define IP_TCP_HDR_SIZE (IP_HDR_SIZE + TCP_HDR_SIZE)78 #define IF_IP_TCP_HDR_SIZE (IF_IP_HDR_SIZE + TCP_HDR_SIZE)79 #define IF_IP_TCP_HDR_OFFSET (IF_IP_HDR_SIZE)80 #define IF_IP_TCP_SDU_OFFSET (IF_IP_TCP_HDR_SIZE)81 82 77 #define GET_TCP_HDR(nbuf,thoff) ((T_TCP_HDR*)((uint8_t*)((nbuf)->buf) + thoff)) 83 78 #define GET_TCP_OPT(nbuf,thoff) ((uint8_t*)((nbuf)->buf) + thoff + TCP_HDR_SIZE) 84 #define GET_TCP_SDU(nbuf,thoff) ((uint8_t*)((nbuf)->buf) + thoff + GET_TCP_HDR_SIZE 2(nbuf,thoff))79 #define GET_TCP_SDU(nbuf,thoff) ((uint8_t*)((nbuf)->buf) + thoff + GET_TCP_HDR_SIZE(nbuf,thoff)) 85 80 86 81 #define GET_TCP_HDR_OFFSET(nbuf) (GET_IF_IP_HDR_SIZE(nbuf)) 87 82 88 #define GET_TCP_HDR_SIZE2(nbuf,thoff) (TCP_HDR_LEN(GET_TCP_HDR(nbuf,thoff)->doff)) 89 #define GET_IP_TCP_HDR_SIZE2(nbuf,thoff) \ 90 (GET_IP_HDR_SIZE(GET_IP_HDR(nbuf)) + GET_TCP_HDR_SIZE2(nbuf,thoff)) 91 #define GET_IF_IP_TCP_HDR_SIZE2(nbuf,thoff) \ 92 (IF_HDR_SIZE + GET_IP_TCP_HDR_SIZE2(nbuf,thoff)) 83 #define GET_TCP_HDR_SIZE(nbuf,thoff) (TCP_HDR_LEN(GET_TCP_HDR(nbuf,thoff)->doff)) 84 85 #define GET_IP_TCP_HDR_SIZE(nbuf,thoff) (GET_IP_HDR_SIZE(nbuf) + GET_TCP_HDR_SIZE(nbuf,thoff)) 86 #define GET_IF_IP_TCP_HDR_SIZE(nbuf,thoff) \ 87 (IF_HDR_SIZE + GET_IP_TCP_HDR_SIZE(nbuf,thoff)) 88 #define IF_IP_TCP_HDR_SIZE(nbuf) (IF_IP_HDR_SIZE(nbuf) + TCP_HDR_SIZE) 89 #define IF_IP_TCP_HDR_OFFSET(nbuf) (IF_IP_HDR_SIZE(nbuf)) 90 #define IF_IP_TCP_NET_HDR_SIZE(addr) (IF_IP_NET_HDR_SIZE(addr) + TCP_HDR_SIZE) 91 #define IF_IP_TCP_NET_HDR_OFFSET(addr) (IF_IP_NET_HDR_SIZE(addr)) 93 92 94 93 /* … … 96 95 */ 97 96 98 #if defined(SUPPORT_INET4)97 #if !defined(_IP6_CFG) && defined(_IP4_CFG) 99 98 100 99 #define IP4_TCP_HDR_SIZE IP_TCP_HDR_SIZE 101 100 #define IF_IP4_TCP_HDR_SIZE IF_IP_TCP_HDR_SIZE 102 #define GET_IP4_TCP_HDR_SIZE(nbuf) GET_IP_TCP_HDR_SIZE (nbuf)103 #define GET_IF_IP4_TCP_HDR_SIZE(nbuf) GET_IF_IP_TCP_HDR_SIZE (nbuf)104 105 #endif /* of #if defined(SUPPORT_INET4) */101 #define GET_IP4_TCP_HDR_SIZE(nbuf) GET_IP_TCP_HDR_SIZE1(nbuf) 102 #define GET_IF_IP4_TCP_HDR_SIZE(nbuf) GET_IF_IP_TCP_HDR_SIZE1(nbuf) 103 104 #endif /* of #if !defined(_IP6_CFG) && defined(_IP4_CFG) */ 106 105 107 106 /* … … 110 109 111 110 #define TMIN_TCP_CREPID TMIN_TCP_REPID 111 #define TNUM_TCP_CREPID TNUM_TCP_REPID 112 112 113 #define TMIN_TCP_CCEPID TMIN_TCP_CEPID 113 #define TNUM_TCP_CREPID TNUM_TCP_REPID114 114 #define TNUM_TCP_CCEPID TNUM_TCP_CEPID 115 115 … … 121 121 122 122 /* 123 * TCP で使用する変数の型の定義 124 */ 125 126 typedef uint32_t T_TCP_SEQ; 127 typedef uint16_t T_TCP_SEG; 128 typedef uint16_t T_TCP_WND; 129 typedef int16_t T_TCP_TIME; 130 131 /* 132 * TCP タイマ変数 133 */ 134 135 #define NUM_TCP_TIMERS 4 /* TCP のタイマ数 */ 136 137 /* 123 138 * TCP 受付口 124 139 */ 125 140 141 /* IPv6 用 TCP 受付口 */ 142 143 typedef struct t_tcp6_rep { 144 145 /* 146 * ITRON TCP/IP API、TCP 受付口と同じメンバ 147 */ 148 ATR repatr; /* 受付口属性 */ 149 T_IPV6EP myaddr; /* 自分のアドレス */ 150 151 #ifdef TCP_CFG_EXTENTIONS 152 uint16_t flags; /* 受付口フラグ */ 153 ID semid_lock; /* 受付口ロック */ 154 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 155 156 } T_TCP6_REP; 157 126 158 /* IPv4 用 TCP 受付口 */ 159 127 160 typedef struct t_tcp4_rep { 128 161 … … 140 173 } T_TCP4_REP; 141 174 142 /* IPv6 用 TCP 受付口 */ 143 typedef struct t_tcp6_rep { 144 145 /* 146 * ITRON TCP/IP API、TCP 受付口と同じメンバ 147 */ 148 ATR repatr; /* 受付口属性 */ 149 T_IPV6EP myaddr; /* 自分のアドレス */ 150 151 #ifdef TCP_CFG_EXTENTIONS 152 uint16_t flags; /* 受付口フラグ */ 153 ID semid_lock; /* 受付口ロック */ 154 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 155 156 } T_TCP6_REP; 157 158 #if defined(SUPPORT_INET4) 175 #if defined(_IP6_CFG) 176 177 #define T_TCP_REP T_TCP6_REP 178 179 #else /* of #if defined(_IP6_CFG) */ 180 181 #if defined(_IP4_CFG) 182 159 183 #define T_TCP_REP T_TCP4_REP 160 #endif 161 162 #if defined(SUPPORT_INET6) 163 #define T_TCP_REP T_TCP6_REP 164 #endif 184 185 #endif /* of #if defined(_IP4_CFG) */ 186 187 #endif /* of #if defined(_IP6_CFG) */ 188 189 #define T_TCP_REP_DEFINED 165 190 166 191 /* … … 175 200 */ 176 201 177 typedef uint32_t T_TCP_SEQ; 178 typedef uint16_t T_TCP_SEG; 179 typedef uint16_t T_TCP_WND; 180 181 /* 182 * 通常の IPv4 TCP 通信端点 183 */ 184 typedef struct t_tcp4_cep { 202 #ifndef T_NET_BUF_DEFINED 203 204 typedef struct t_net_buf T_NET_BUF; 205 206 #define T_NET_BUF_DEFINED 207 208 #endif /* of #ifndef T_NET_BUF_DEFINED */ 209 210 typedef struct t_tcp_cep { 185 211 186 212 /* … … 232 258 #ifdef TCP_CFG_NON_BLOCKING 233 259 234 T_IPV4EP *p_dstaddr; /* 相手のアドレスへのポインタ */ 235 T_IPV4EP *p_myaddr; /* 自分のアドレスへのポインタ */ 260 T_IPEP *p_dstaddr; /* 相手のアドレスへのポインタ */ 261 T_IPEP *p_myaddr; /* 自分のアドレスへのポインタ */ 262 263 #if defined(_IP6_CFG) && defined(_IP4_CFG) 264 T_IPV4EP *p_dstaddr4; /* 相手のアドレスへのポインタ */ 265 T_IPV4EP *p_myaddr4; /* 自分のアドレスへのポインタ */ 266 #endif 267 236 268 int16_t snd_nblk_tfn; /* 送信動作中の API 機能コード */ 237 269 int16_t rcv_nblk_tfn; /* 受信動作中の API 機能コード */ … … 247 279 #ifdef TCP_CFG_SWBUF_CSAVE 248 280 T_NET_BUF *swbufq; /* 送信ウィンドバッファキュー */ 249 #endif /* of #ifdef TCP_CFG_SWBUF_CSAVE */281 #endif 250 282 251 283 /* … … 254 286 255 287 T_TCP_TIME timer[NUM_TCP_TIMERS]; /* TCP のタイマ */ 256 T_IPV4EP dstaddr; /* 相手のアドレス */ 257 T_IPV4EP myaddr; /* 自分のアドレス */ 258 T_TCP4_REP *rep; /* 受付口 */ 288 T_IPEP dstaddr; /* 相手のアドレス */ 289 T_IPEP myaddr; /* 自分のアドレス */ 259 290 T_NET_BUF *reassq; /* 受信再構成キュー */ 291 292 #if defined(_IP6_CFG) 293 294 #if defined(_IP4_CFG) 295 296 T_TCP4_REP *rep4; /* IPv4 用受付口 */ 297 298 #endif /* of #if defined(_IP4_CFG) */ 299 300 T_TCP6_REP *rep; /* IPv6 用受付口 */ 301 302 #else /* of #if defined(_IP6_CFG) */ 303 304 #if defined(_IP4_CFG) 305 306 T_TCP4_REP *rep; /* IPv4 用受付口 */ 307 308 #endif /* of #if defined(_IP4_CFG) */ 309 310 #endif /* of #if defined(_IP6_CFG) */ 311 260 312 261 313 #ifdef TCP_CFG_RWBUF_CSAVE 262 314 T_NET_BUF *rwbufq; /* 受信ウィンドバッファキュー */ 263 #endif /* of #ifdef TCP_CFG_RWBUF_CSAVE */315 #endif 264 316 265 317 #ifdef TCP_CFG_EXTENTIONS … … 298 350 299 351 #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES) 300 uint8_t rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数 */ 301 #endif /* of #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES) */ 302 303 } T_TCP4_CEP; 304 305 /* 306 * Time Wait 用 IPv4 TCP 通信端点 307 */ 308 typedef struct t_tcp4_twcep { 352 uint16_t rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数 */ 353 #endif 354 355 } T_TCP_CEP; 356 357 #define T_TCP6_CEP T_TCP_CEP 358 #define T_TCP4_CEP T_TCP_CEP 359 360 /* 361 * Time Wait 用 TCP 通信端点 362 */ 363 364 typedef struct t_tcp_twcep { 309 365 int_t rbufsz; /* 受信用ウィンドバッファサイズ */ 310 366 T_TCP_TIME timer_2msl; /* 2MSL タイマ */ 311 T_IP V4EPdstaddr; /* 相手のアドレス */312 T_IP V4EPmyaddr; /* 自分のアドレス */367 T_IPEP dstaddr; /* 相手のアドレス */ 368 T_IPEP myaddr; /* 自分のアドレス */ 313 369 T_TCP_SEQ snd_una; /* 未確認の最小送信 SEQ つまり */ 314 370 /* 確認された最大送信 SEQ */ … … 316 372 uint16_t rwbuf_count; /* 受信ウィンドバッファの使用中サイズ */ 317 373 uint8_t fsm_state; /* FSM 状態 */ 318 319 } T_TCP4_TWCEP; 320 321 /* 322 * 通常の IPv6 TCP 通信端点 323 */ 324 typedef struct t_tcp6_cep { 325 326 /* 327 * ITRON TCP/IP API、TCP 通信端点と同じメンバ 328 */ 329 ATR cepatr; /* 通信端点属性 */ 330 void *sbuf; /* 送信用ウィンドバッファ */ 331 int_t sbufsz; /* 送信用ウィンドバッファサイズ */ 332 void *rbuf; /* 受信用ウィンドバッファ */ 333 int_t rbufsz; /* 受信用ウィンドバッファサイズ */ 334 t_tcp_callback callback; /* コールバック関数 */ 335 336 /* 337 * TINET 独自のメンバ 338 */ 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; /* 輻輳ウィンドサイズ */ 356 357 /* 358 * 相手の最大受信セグメントサイズ 359 * 360 * オリジナルでは、一般のセグメントの最大サイズ (t_maxseg) と、 361 * オプション付きのセグメントの最大サイズ (t_maxopd) が別に 362 * なっている。これは、現在のインターネットでは、オプション付きの 363 * セグメントのほうが多いからと説明されているためである。 364 * 本実装では、最大セグメントサイズオプション以外のオプションは 365 * 実装しないので、t_maxseg の使用する。 366 */ 367 T_TCP_SEG maxseg; 368 369 T_IPV6EP *p_dstaddr; /* 相手のアドレスへのポインタ */ 370 T_IPV6EP *p_myaddr; /* 自分のアドレスへのポインタ */ 371 int16_t snd_tfn; /* 送信動作中の API 機能コード */ 372 int16_t rcv_tfn; /* 受信動作中の API 機能コード */ 373 374 #ifdef TCP_CFG_NON_BLOCKING 375 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; /* 受信バッファへのポインタ */ 384 385 #endif /* of #ifdef TCP_CFG_NON_BLOCKING */ 386 387 #ifdef TCP_CFG_SWBUF_CSAVE 388 T_NET_BUF *swbufq; /* 送信ウィンドバッファキュー */ 389 #endif /* of #ifdef TCP_CFG_SWBUF_CSAVE */ 390 391 /* 392 * これ以降のメンバーは tcp_init_cep() 関数でゼロクリアーされる。 393 */ 394 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; /* 受信再構成キュー */ 400 401 #ifdef TCP_CFG_RWBUF_CSAVE 402 T_NET_BUF *rwbufq; /* 受信ウィンドバッファキュー */ 403 #endif /* of #ifdef TCP_CFG_RWBUF_CSAVE */ 404 405 #ifdef TCP_CFG_EXTENTIONS 406 T_TCP_HDR *urg_tcph; /* 緊急データ入りのセグメントの TCP ヘッダ */ 407 T_TCP_SEQ snd_up; /* 送信した緊急ポインタ */ 408 T_TCP_SEQ rcv_up; /* 受信した緊急ポインタ */ 409 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 410 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 数 */ 438 439 #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES) 440 uint8_t rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数 */ 441 #endif /* of #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES) */ 442 443 } T_TCP6_CEP; 444 445 /* 446 * Time Wait 用 IPv6 TCP 通信端点 447 */ 448 typedef struct t_tcp6_twcep { 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 状態 */ 461 462 } T_TCP6_TWCEP; 463 464 #if defined(SUPPORT_INET4) 465 #define T_TCP_CEP T_TCP4_CEP 466 #define T_TCP_TWCEP T_TCP4_TWCEP 467 #endif /* of #if defined(SUPPORT_INET4) */ 468 469 #if defined(SUPPORT_INET6) 470 #define T_TCP_CEP T_TCP6_CEP 471 #define T_TCP_TWCEP T_TCP6_TWCEP 472 #endif /* of #if defined(SUPPORT_INET6) */ 374 uint8_t flags; /* 通信端点フラグ */ 375 376 } T_TCP_TWCEP; 473 377 474 378 #define T_TCP_CEP_DEFINED … … 478 382 */ 479 383 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 を元に戻す。*/ 384 #define TCP_CEP_FLG_IPV4 ULONG_C(0x00000001) /* IPv4 用。 */ 385 #define TCP_CEP_FLG_ACK_NOW ULONG_C(0x00000100) /* 直ちに相手に ACK を送る。 */ 386 #define TCP_CEP_FLG_DEL_ACK ULONG_C(0x00000200) /* ACK を遅延する。 */ 387 #define TCP_CEP_FLG_SENT_FIN ULONG_C(0x00000400) /* FIN を送ってある。 */ 388 #define TCP_CEP_FLG_NEED_SYN ULONG_C(0x00000800) /* SYN を送信する。 */ 389 #define TCP_CEP_FLG_NEED_FIN ULONG_C(0x00001000) /* FIN を送信する。 */ 390 #define TCP_CEP_FLG_FORCE ULONG_C(0x00002000) /* 強制送信。 */ 391 #define TCP_CEP_FLG_NO_PUSH ULONG_C(0x00004000) /* push しない。 */ 392 #define TCP_CEP_FLG_NO_DELAY ULONG_C(0x00008000) /* 遅延しない。 */ 393 #define TCP_CEP_FLG_FORCE_CLEAR ULONG_C(0x00010000) /* 強制送信した後フラグをクリアーする。*/ 394 #define TCP_CEP_FLG_POST_OUTPUT ULONG_C(0x00020000) /* 送信を開始する。 */ 395 #define TCP_CEP_FLG_RESERVE_OUTPUT ULONG_C(0x00040000) /* 送信を予約する。 */ 396 #define TCP_CEP_FLG_DYNAMIC ULONG_C(0x00100000) /* 動的生成・削除可能通信端点。 */ 397 #define TCP_CEP_FLG_VALID ULONG_C(0x00200000) /* 生成済みで有効な通信端点。 */ 398 #define TCP_CEP_FLG_CLOSE_AFTER_OUTPUT ULONG_C(0x00400000) /* 送信した後コネクションを閉じる。*/ 399 #define TCP_CEP_FLG_RESTORE_NEXT_OUTPUT ULONG_C(0x00800000) /* 送信した後、snd_nxt を元に戻す。*/ 495 400 496 401 /* 送受信ウィンドバッファの省コピー機能 */ 497 #define TCP_CEP_FLG_WBCS_NBUF_REQ ULONG_C(0x 00080000) /* ネットワークバッファ割当て要求*/498 #define TCP_CEP_FLG_WBCS_MASK ULONG_C(0x 00070000) /* マスク */402 #define TCP_CEP_FLG_WBCS_NBUF_REQ ULONG_C(0x80000000) /* ネットワークバッファ割当て要求*/ 403 #define TCP_CEP_FLG_WBCS_MASK ULONG_C(0x70000000) /* マスク */ 499 404 #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完了 */ 405 #define TCP_CEP_FLG_WBCS_WOPEN_PEND ULONG_C(0x10000000) /* 相手の受信ウィンドの開き待ち */ 406 #define TCP_CEP_FLG_WBCS_NBUF_PEND ULONG_C(0x20000000) /* ネットワークバッファ予約待ち */ 407 #define TCP_CEP_FLG_WBCS_NBUF_RSVD ULONG_C(0x30000000) /* ネットワークバッファ予約済み */ 408 #define TCP_CEP_FLG_WBCS_NBUF_READY ULONG_C(0x40000000) /* ネットワークバッファ割当て済み*/ 409 #define TCP_CEP_FLG_WBCS_SEND_READY ULONG_C(0x50000000) /* 送信可能 */ 410 #define TCP_CEP_FLG_WBCS_SENT ULONG_C(0x60000000) /* 送信済みで、ACK待ち */ 411 #define TCP_CEP_FLG_WBCS_ACKED ULONG_C(0x70000000) /* 送信済みで、ACK完了 */ 412 413 /* 初期化から除外するフラグの定義 */ 414 #define TCP_CEP_FLG_NOT_CLEAR (TCP_CEP_FLG_WBCS_NBUF_REQ|TCP_CEP_FLG_WBCS_MASK|\ 415 TCP_CEP_FLG_DYNAMIC|TCP_CEP_FLG_VALID|TCP_CEP_FLG_IPV4) 507 416 508 417 /* … … 513 422 #define TCP_CEP_EVT_CLOSED ULONG_C(0x00000002) /* 未使用状態 */ 514 423 #define TCP_CEP_EVT_SWBUF_READY ULONG_C(0x00000004) /* 送信ウィンドバッファ空き */ 515 #define TCP_CEP_EVT_RWBUF_READY ULONG_C(0x00000008) /* 送信ウィンドバッファデータあり 424 #define TCP_CEP_EVT_RWBUF_READY ULONG_C(0x00000008) /* 送信ウィンドバッファデータあり*/ 516 425 #define TCP_CEP_EVT_ALL ULONG_C(0xffffffff) /* 全イベント */ 517 426 … … 571 480 572 481 #define GET_TCP_Q_HDR(nbuf,thoff) ((T_TCP_Q_HDR*)((uint8_t*)((nbuf)->buf) + thoff)) 573 #define GET_TCP_IP_Q_HDR(nbuf) ((T_TCP_IP_Q_HDR*)GET_IP_HDR(nbuf))574 482 575 483 /* … … 577 485 */ 578 486 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 の最小値 */ 487 #define TMIN_TCP_REPID 1 /* TCP 受付口 ID の最小値 */ 488 #define TMIN_TCP6_REPID 1 /* TCP/IPv6 受付口 ID の最小値 */ 489 #define TMIN_TCP4_REPID (TNUM_TCP6_REPID+1) /* TCP/IPv4 受付口 ID の最小値 */ 490 491 #define TMIN_TCP_CEPID 1 /* TCP 通信端点 ID の最小値 */ 492 #define TMIN_TCP6_CEPID 1 /* TCP/IPv6 通信端点 ID の最小値 */ 493 #define TMIN_TCP4_CEPID (TNUM_TCP6_CEPID+1) /* TCP/IPv4 通信端点 ID の最小値 */ 494 495 #define TMIN_TCP_TWCEPID 1 /* Time Wait 用 TCP 通信端点 ID の最小値 */ 582 496 583 497 /* 584 498 * 制御セグメント(データなし)サイズのネットワークバッファ 585 499 */ 500 501 #if defined(IF_HDR_SIZE) && defined(IP_HDR_SIZE) 586 502 587 503 typedef struct t_net_buf_cseg { … … 599 515 } T_NET_BUF_CSEG; 600 516 601 # ifdef SUPPORT_MIB517 #endif /* of #if defined(IF_HDR_SIZE) && defined(IP_HDR_SIZE) */ 602 518 603 519 /* … … 618 534 } T_TCP_STATS; 619 535 620 #endif /* of #ifdef SUPPORT_MIB */621 622 536 /* 623 537 * 関数シミュレーションマクロ 624 538 */ 625 539 626 #define VAID_TCP_REPID(id) (TMIN_TCP_REPID<=(id)&&(id)<=tmax_tcp_repid) 627 #define VAID_TCP_CEPID(id) (TMIN_TCP_CEPID<=(id)&&(id)<=tmax_tcp_cepid) 628 629 #define INDEX_TCP_REP(id) ((id)-TMIN_TCP_REPID) 540 /* TCP 受付口 */ 541 542 #define VALID_TCP6_REPID(id) (TMIN_TCP6_REPID<=(id)&&(id)<=tmax_tcp6_repid) 543 #define VALID_TCP4_REPID(id) (TMIN_TCP4_REPID<=(id)&&(id)<=tmax_tcp4_repid) 544 545 #define INDEX_TCP6_REP(id) ((id)-TMIN_TCP6_REPID) 546 #define INDEX_TCP4_REP(id) ((id)-TMIN_TCP4_REPID) 547 548 #define GET_TCP6_REP(id) (&(tcp6_rep[INDEX_TCP6_REP(id)])) 549 #define GET_TCP4_REP(id) (&(tcp4_rep[INDEX_TCP4_REP(id)])) 550 551 #define GET_TCP6_REPID(rep) ((ID)(((rep)-tcp6_rep)+TMIN_TCP6_REPID)) 552 #define GET_TCP4_REPID(rep) ((ID)(((rep)-tcp4_rep)+TMIN_TCP4_REPID)) 553 554 #ifdef TCP_CFG_EXTENTIONS 555 556 #define VALID_TCP_REP(rep) (((rep)->flags&TCP_REP_FLG_VALID)!=0) 557 #define DYNAMIC_TCP_REP(rep) (((rep)->flags&TCP_REP_FLG_DYNAMIC)!=0) 558 559 #else /* of #ifdef TCP_CFG_EXTENTIONS */ 560 561 #define VALID_TCP_REP(rep) (true) 562 #define DYNAMIC_TCP_REP(rep) (false) 563 564 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 565 566 /* TCP 通信端点 */ 567 568 #define VALID_TCP_CEPID(id) (TMIN_TCP_CEPID<=(id)&&(id)<=tmax_tcp_cepid) 630 569 #define INDEX_TCP_CEP(id) ((id)-TMIN_TCP_CEPID) 631 570 632 #define GET_TCP_REP(id) (&(tcp_rep[INDEX_TCP_REP(id)]))633 571 #define GET_TCP_CEP(id) (&(tcp_cep[INDEX_TCP_CEP(id)])) 634 572 635 #define GET_TCP_REPID(rep) ((ID)(((rep)-tcp_rep)+TMIN_TCP_REPID))636 573 #define GET_TCP_CEPID(cep) ((ID)(((cep)-tcp_cep)+TMIN_TCP_CEPID)) 637 574 #define GET_TCP_TWCEPID(cep) ((ID)(((cep)-tcp_twcep)+TMIN_TCP_TWCEPID)) 575 576 #define VALID_TCP_CEP(cep) (((cep)->flags&TCP_CEP_FLG_VALID)!=0) 577 #define DYNAMIC_TCP_CEP(cep) (((cep)->flags&TCP_CEP_FLG_DYNAMIC)!=0) 578 #define TCP_IS_CEP_IPV6(cep) (((cep)->flags&TCP_CEP_FLG_IPV4)==0) 579 #define TCP_IS_CEP_IPV4(cep) (((cep)->flags&TCP_CEP_FLG_IPV4)!=0) 638 580 639 581 #define IS_TFN_TCP_RCV(t) ((t)==TFN_TCP_ACP_CEP||(t)==TFN_TCP_RCV_DAT||\ … … 651 593 #define VALID_URG_POINTER(urg) (TCP_CFG_URG_OFFSET==0||urg!=0) 652 594 653 #define VALID_TCP_CEP(cep) (((cep)->flags&TCP_CEP_FLG_VALID)!=0)654 #define DYNAMIC_TCP_CEP(cep) (((cep)->flags&TCP_CEP_FLG_DYNAMIC)!=0)655 656 #ifdef TCP_CFG_EXTENTIONS657 658 #define VALID_TCP_REP(rep) (((rep)->flags&TCP_REP_FLG_VALID)!=0)659 #define DYNAMIC_TCP_REP(rep) (((rep)->flags&TCP_REP_FLG_DYNAMIC)!=0)660 661 #else /* of #ifdef TCP_CFG_EXTENTIONS */662 663 #define VALID_TCP_REP(rep) (true)664 #define DYNAMIC_TCP_REP(rep) (false)665 666 #endif /* of #ifdef TCP_CFG_EXTENTIONS */667 668 595 /* 669 596 * 全域変数 670 597 */ 671 598 672 extern T_TCP_REP tcp_rep[]; 599 extern uint8_t tcp_initialized; 600 601 extern T_TCP_STATS tcp_stats; 602 603 /* TCP 受付口 */ 604 605 extern T_TCP6_REP tcp6_rep[]; 606 extern T_TCP4_REP tcp4_rep[]; 607 608 #if defined(SUPPORT_INET6) 609 #define tcp_rep tcp6_rep 610 #elif defined(SUPPORT_INET4) 611 #define tcp_rep tcp4_rep 612 #endif 613 614 extern const ID tmax_tcp_repid; 615 616 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) 617 extern const ID tmax_tcp6_repid; 618 extern const ID tmax_tcp4_repid; 619 #else 620 #define tmax_tcp6_repid tmax_tcp_repid 621 #define tmax_tcp4_repid tmax_tcp_repid 622 #endif 623 624 /* TCP 通信端点 */ 625 673 626 extern T_TCP_CEP tcp_cep[]; 674 extern uint8_t tcp_initialized;675 extern const ID tmax_tcp_repid; 627 extern T_TCP_TWCEP tcp_twcep[]; 628 676 629 extern const ID tmax_tcp_cepid; 677 extern T_TCP_TWCEP tcp_twcep[]; 678 679 #ifdef SUPPORT_MIB 680 681 extern T_TCP_STATS tcp_stats; 682 683 #endif /* of #ifdef SUPPORT_MIB */ 630 631 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) 632 extern const ID tmax_tcp6_cepid; 633 extern const ID tmax_tcp4_cepid; 634 #else 635 #define tmax_tcp6_cepid tmax_tcp_cepid 636 #define tmax_tcp4_cepid tmax_tcp_cepid 637 #endif 684 638 685 639 /* … … 866 820 extern void tcp_respond (T_NET_BUF *nbuf, T_TCP_CEP *cep, 867 821 T_TCP_SEQ ack, T_TCP_SEQ seq, uint_t rbfree, uint8_t flags); 868 extern void tcp_set_header (T_NET_BUF *nbuf, T_TCP_CEP *cep, uint_t thoff, uint_t optlen);869 822 extern ER tcp_get_segment (T_NET_BUF **nbuf, T_TCP_CEP *cep, 870 823 uint_t optlen, uint_t len, uint_t maxlen, ATR nbatr, TMO tmout); 824 extern ER tcpn_get_segment (T_NET_BUF **nbuf, T_TCP_CEP *cep, 825 uint_t optlen, uint_t len, uint_t maxlen, ATR nbatr, TMO tmout); 871 826 extern void tcp_init_cep (T_TCP_CEP *cep); 872 827 extern void tcp_notify (T_NET_BUF *input, int code); … … 876 831 extern void tcp_alloc_auto_port (T_TCP_CEP *cep); 877 832 extern ER tcp_alloc_port (T_TCP_CEP *cep, uint16_t portno); 878 extern void tcp_move_twcep (T_TCP_CEP *cep);879 833 extern ER tcp_lock_cep (ID cepid, T_TCP_CEP **p_cep, FN tfn); 880 834 extern void tcp_free_reassq (T_TCP_CEP *cep); … … 885 839 extern ER tcp_wait_rwbuf (T_TCP_CEP *cep, TMO tmout); 886 840 extern T_TCP_CEP *tcp_user_closed (T_TCP_CEP *cep); 841 extern T_TCP_CEP *tcp_find_cep (T_NET_BUF *input, uint_t off); 842 extern T_TCP_TWCEP*tcp_find_twcep (T_NET_BUF *input, uint_t off); 843 extern bool_t tcp_is_addr_accept (T_NET_BUF *input, uint_t off); 844 extern void tcp_move_twcep (T_TCP_CEP *cep); 887 845 888 846 /* … … 974 932 975 933 /* 976 * tcp_find_cep -- ポート番号から TCP 通信端点を得る。977 *978 * 注意: myaddr は、979 * TINET-1.2 からネットワークバイトオーダ、980 * TINET-1.1 までは、ホストバイトオーダ981 */982 extern T_TCP_CEP *tcp_find_cep (T_IN_ADDR *dstaddr, uint16_t dstport,983 T_IN_ADDR *peeraddr, uint16_t peerport);984 985 /*986 934 * TCP ヘッダのトレース出力機能用関数 987 935 */
Note:
See TracChangeset
for help on using the changeset viewer.