Changeset 331 for EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_subr_cs.c
- 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_subr_cs.c
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 * … … 95 95 #include <net/ethernet.h> 96 96 #include <net/if_arp.h> 97 #include <net/ppp_ipcp.h>98 97 #include <net/net.h> 98 #include <net/net_endian.h> 99 99 #include <net/net_var.h> 100 100 #include <net/net_buf.h> … … 103 103 104 104 #include <netinet/in.h> 105 #include <netinet6/in6.h>106 #include <netinet6/in6_var.h>107 105 #include <netinet/in_var.h> 106 #include <netinet/in_itron.h> 108 107 #include <netinet/ip.h> 109 108 #include <netinet/ip_var.h> 110 #include <netinet/ip6.h>111 #include <netinet6/ip6_var.h>112 #include <netinet6/nd6.h>113 109 #include <netinet/tcp.h> 114 #include <netinet/tcp_timer.h>115 110 #include <netinet/tcp_var.h> 116 111 #include <netinet/tcp_fsm.h> 117 112 #include <netinet/tcp_seq.h> 118 #include <netinet/ in_itron.h>113 #include <netinet/tcp_timer.h> 119 114 120 115 #ifdef SUPPORT_TCP … … 122 117 #ifdef TCP_CFG_SWBUF_CSAVE 123 118 124 #ifndef TCP_CFG_SWBUF_CSAVE_ONLY 119 #ifdef TCP_CFG_SWBUF_CSAVE_ONLY 120 121 #else /* of #ifdef TCP_CFG_SWBUF_CSAVE_ONLY */ 125 122 126 123 /* … … 242 239 } 243 240 244 #endif /* of #if ndef TCP_CFG_SWBUF_CSAVE_ONLY */241 #endif /* of #ifdef TCP_CFG_SWBUF_CSAVE_ONLY */ 245 242 246 243 /* … … 270 267 { 271 268 ER_UINT error; 269 uint_t hdr_size = IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr); 272 270 273 271 /* 通信端点をロックする。*/ 274 272 syscall(wai_sem(cep->semid_lock)); 275 273 276 if ((error = net_buf_siz(cep->swbufq)) > 0 && error >= IF_IP_TCP_HDR_SIZE) { 277 274 if ((error = net_buf_siz(cep->swbufq)) > 0 && error >= hdr_size) { 278 275 279 276 /* … … 291 288 * 空きサイズを 4 オクテット境界に調整する。 292 289 */ 293 error = (uint_t)(((error - IF_IP_TCP_HDR_SIZE) >> 2 << 2) + IF_IP_TCP_HDR_SIZE);290 error = (uint_t)(((error - hdr_size) >> 2 << 2) + hdr_size); 294 291 295 292 if (len > cep->sbufsz - cep->swbuf_count) 296 293 len = (uint_t)(cep->sbufsz - cep->swbuf_count); 297 if (len > (error - IF_IP_TCP_HDR_SIZE))298 len = (uint_t)(error - IF_IP_TCP_HDR_SIZE);294 if (len > (error - hdr_size)) 295 len = (uint_t)(error - hdr_size); 299 296 300 297 /* 送信ウインドサイズによりサイズを調整する。*/ … … 315 312 316 313 /* ネットワークバッファ長と IP データグラム長を設定する。*/ 317 cep->swbufq->len = (uint16_t)(cep->swbuf_count + IF_IP_TCP_HDR_SIZE);318 SET_IP_SDU_SIZE( GET_IP_HDR(cep->swbufq), cep->swbuf_count + TCP_HDR_SIZE);314 cep->swbufq->len = (uint16_t)(cep->swbuf_count + hdr_size); 315 SET_IP_SDU_SIZE(cep->swbufq, cep->swbuf_count + TCP_HDR_SIZE); 319 316 320 317 /* フラグを、送信可能に設定する。*/ … … 324 321 else { /* 送信ウインドバッファが不正 */ 325 322 syslog(LOG_WARNING, "[TCP] illegal window buff for send, CEP: %d, %4d < %4d.", 326 GET_TCP_CEPID(cep), error, IF_IP_TCP_HDR_SIZE);323 GET_TCP_CEPID(cep), error, hdr_size); 327 324 328 325 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/ … … 348 345 int_t win; 349 346 350 351 347 /* 送信ウィンドバッファが割当て済みで、空きがあれば終了する。*/ 352 348 if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_READY && 353 (cep->swbuf_count + IF_IP_TCP_ HDR_SIZE) < net_buf_siz(cep->swbufq))349 (cep->swbuf_count + IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr)) < net_buf_siz(cep->swbufq)) 354 350 return E_OK; 355 351 … … 423 419 424 420 /* ネットワークバッファを獲得する。*/ 425 if ((error = tcp _get_segment(&cep->swbufq, cep, 0,421 if ((error = tcpn_get_segment(&cep->swbufq, cep, 0, 426 422 TCP_CFG_SWBUF_CSAVE_MIN_SIZE, 427 TCP_CFG_SWBUF_CSAVE_MAX_SIZE - IF_IP_TCP_HDR_SIZE,423 TCP_CFG_SWBUF_CSAVE_MAX_SIZE, 428 424 NBA_SEARCH_DESCENT, tmout)) != E_OK) 429 425 return error; … … 463 459 * 空きサイズを 4 オクテット境界に調整する。 464 460 */ 465 error = (uint_t)(((error - IF_IP_TCP_ HDR_SIZE) >> 2 << 2) - cep->swbuf_count);461 error = (uint_t)(((error - IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr)) >> 2 << 2) - cep->swbuf_count); 466 462 467 463 /* 送信ウインドサイズによりサイズを調整する。*/ … … 508 504 509 505 /* ネットワークバッファ長と IP データグラム長を設定する。*/ 510 cep->swbufq->len = (uint16_t)(cep->swbuf_count + IF_IP_TCP_ HDR_SIZE);511 SET_IP_SDU_SIZE( GET_IP_HDR(cep->swbufq), len + TCP_HDR_SIZE);506 cep->swbufq->len = (uint16_t)(cep->swbuf_count + IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr)); 507 SET_IP_SDU_SIZE(cep->swbufq, len + TCP_HDR_SIZE); 512 508 513 509 /* tcp_get_buf の割当て長をリセットする。*/ … … 573 569 { 574 570 return (cep->flags & TCP_CEP_FLG_WBCS_MASK) != TCP_CEP_FLG_WBCS_NBUF_READY || 575 cep->swbuf_count >= cep->swbufq->len - IF_IP_TCP_ HDR_SIZE;571 cep->swbuf_count >= cep->swbufq->len - IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr); 576 572 } 577 573 … … 590 586 591 587 /* 送信ウインドバッファのアドレスを設定する。*/ 592 cep->sbuf_wptr = cep->sbuf_rptr = GET_TCP_SDU(cep->swbufq, IF_IP_TCP_ HDR_OFFSET);588 cep->sbuf_wptr = cep->sbuf_rptr = GET_TCP_SDU(cep->swbufq, IF_IP_TCP_NET_HDR_OFFSET(&cep->dstaddr.ipaddr)); 593 589 594 590 /* フラグを、ネットワークバッファ割当て済みに設定する。*/ … … 664 660 #ifdef TCP_CFG_RWBUF_CSAVE 665 661 666 #ifndef TCP_CFG_RWBUF_CSAVE_ONLY 662 #ifdef TCP_CFG_RWBUF_CSAVE_ONLY 663 664 #else /* of #ifdef TCP_CFG_RWBUF_CSAVE_ONLY */ 667 665 668 666 /* … … 736 734 } 737 735 738 #endif /* of #if ndef TCP_CFG_RWBUF_CSAVE_ONLY */736 #endif /* of #ifdef TCP_CFG_RWBUF_CSAVE_ONLY */ 739 737 740 738 /* … … 753 751 if (cep->rwbufq != NULL) { 754 752 755 qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_ TCP_IP_Q_HDR(cep->rwbufq)->thoff);753 qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)); 756 754 cep->rwbuf_count -= len; 757 755 … … 796 794 */ 797 795 while (cep->rwbufq != NULL && len > 0) { 798 qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_ TCP_IP_Q_HDR(cep->rwbufq)->thoff);796 qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)); 799 797 800 798 /* … … 808 806 809 807 memcpy(buf, 810 GET_TCP_SDU(cep->rwbufq, GET_ TCP_IP_Q_HDR(cep->rwbufq)->thoff) + qhdr->soff,808 GET_TCP_SDU(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)) + qhdr->soff, 811 809 (size_t)blen); 812 810 … … 850 848 851 849 /* 受信ウィンドバッファのデータのアドレスの先頭を設定する。*/ 852 qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_ TCP_IP_Q_HDR(cep->rwbufq)->thoff);853 *p_buf = GET_TCP_SDU(cep->rwbufq, GET_ TCP_IP_Q_HDR(cep->rwbufq)->thoff) + qhdr->soff;850 qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)); 851 *p_buf = GET_TCP_SDU(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)) + qhdr->soff; 854 852 855 853 /* 受信ウィンドバッファのデータ長を計算する。*/ … … 880 878 if (cep->rwbuf_count == 0 && cep->reassq == NULL) { 881 879 while (cep->rwbufq != NULL) { 882 next = GET_TCP_Q_HDR(cep->rwbufq, GET_ TCP_IP_Q_HDR(cep->rwbufq)->thoff)->next;880 next = GET_TCP_Q_HDR(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq))->next; 883 881 884 882 #ifdef TCP_CFG_RWBUF_CSAVE_MAX_QUEUES … … 961 959 nextp = &cep->rwbufq; 962 960 while (*nextp) 963 nextp = &GET_TCP_Q_HDR(*nextp, GET_ TCP_IP_Q_HDR(*nextp)->thoff)->next;961 nextp = &GET_TCP_Q_HDR(*nextp, GET_IP_TCP_Q_HDR_OFFSET(*nextp))->next; 964 962 *nextp = input; 965 963 … … 984 982 int_t len; 985 983 986 qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_ TCP_IP_Q_HDR(cep->rwbufq)->thoff);984 qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)); 987 985 len = qhdr->slen; 988 986 … … 999 997 /* 受信ウィンドバッファのアドレスを返す。*/ 1000 998 *cep->rcv_p_buf = GET_TCP_SDU(cep->rwbufq, 1001 GET_ TCP_IP_Q_HDR(cep->rwbufq)->thoff) + qhdr->soff;999 GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)) + qhdr->soff; 1002 1000 1003 1001 if (IS_PTR_DEFINED(cep->callback)) 1004 1002 1005 1003 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 1006 1007 1004 (*cep->callback)(GET_TCP_CEPID(cep), cep->rcv_nblk_tfn, (void*)len); 1008 1009 #else /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */ 1010 1005 #else 1011 1006 (*cep->callback)(GET_TCP_CEPID(cep), cep->rcv_nblk_tfn, (void*)&len); 1012 1013 #endif /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */ 1014 1007 #endif 1015 1008 else 1016 1009 syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep)); … … 1053 1046 1054 1047 #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 1055 1056 1048 (*cep->callback)(GET_TCP_CEPID(cep), cep->rcv_nblk_tfn, (void*)len); 1057 1058 #else /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */ 1059 1049 #else 1060 1050 (*cep->callback)(GET_TCP_CEPID(cep), cep->rcv_nblk_tfn, (void*)&len); 1061 1062 #endif /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */ 1063 1051 #endif 1064 1052 else 1065 1053 syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
Note:
See TracChangeset
for help on using the changeset viewer.