Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/NetworkPkg/TcpDxe/TcpOutput.c
- Timestamp:
- Apr 14, 2023 3:17:44 PM (22 months ago)
- Location:
- trunk/src/VBox/Devices/EFI/FirmwareNew
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/FirmwareNew
-
Property svn:mergeinfo
changed from (toggle deleted branches)
to (toggle deleted branches)/vendor/edk2/current 103735-103757,103769-103776,129194-145445 /vendor/edk2/current 103735-103757,103769-103776,129194-156846
-
Property svn:mergeinfo
changed from (toggle deleted branches)
-
trunk/src/VBox/Devices/EFI/FirmwareNew/NetworkPkg/TcpDxe/TcpOutput.c
r85718 r99404 34 34 UINT32 35 35 TcpRcvWinOld ( 36 IN TCP_CB *Tcb36 IN TCP_CB *Tcb 37 37 ) 38 38 { … … 42 42 43 43 if (TCP_SEQ_GT (Tcb->RcvWl2 + Tcb->RcvWnd, Tcb->RcvNxt)) { 44 45 44 OldWin = TCP_SUB_SEQ ( 46 Tcb->RcvWl2 + Tcb->RcvWnd,47 Tcb->RcvNxt48 );45 Tcb->RcvWl2 + Tcb->RcvWnd, 46 Tcb->RcvNxt 47 ); 49 48 } 50 49 … … 62 61 UINT32 63 62 TcpRcvWinNow ( 64 IN TCP_CB *Tcb63 IN TCP_CB *Tcb 65 64 ) 66 65 { … … 73 72 ASSERT (Sk != NULL); 74 73 75 OldWin 76 77 Win 78 79 Increase 74 OldWin = TcpRcvWinOld (Tcb); 75 76 Win = SockGetFreeSpace (Sk, SOCK_RCV_BUF); 77 78 Increase = 0; 80 79 if (Win > OldWin) { 81 80 Increase = Win - OldWin; … … 88 87 // 89 88 if ((Increase > Tcb->SndMss) || (2 * Increase >= GET_RCV_BUFFSIZE (Sk))) { 90 91 89 return Win; 92 90 } … … 107 105 UINT16 108 106 TcpComputeWnd ( 109 IN OUT TCP_CB *Tcb,110 IN BOOLEAN Syn107 IN OUT TCP_CB *Tcb, 108 IN BOOLEAN Syn 111 109 ) 112 110 { … … 117 115 // 118 116 if (Syn) { 119 120 117 Wnd = GET_RCV_BUFFSIZE (Tcb->Sk); 121 118 } else { 122 123 Wnd = TcpRcvWinNow (Tcb); 119 Wnd = TcpRcvWinNow (Tcb); 124 120 125 121 Tcb->RcvWnd = Wnd; … … 127 123 128 124 Wnd = MIN (Wnd >> Tcb->RcvWndScale, 0xffff); 129 return NTOHS ((UINT16) 125 return NTOHS ((UINT16)Wnd); 130 126 } 131 127 … … 140 136 TCP_SEQNO 141 137 TcpGetMaxSndNxt ( 142 IN TCP_CB *Tcb143 ) 144 { 145 LIST_ENTRY 146 NET_BUF 138 IN TCP_CB *Tcb 139 ) 140 { 141 LIST_ENTRY *Entry; 142 NET_BUF *Nbuf; 147 143 148 144 if (IsListEmpty (&Tcb->SndQue)) { … … 169 165 UINT32 170 166 TcpDataToSend ( 171 IN TCP_CB *Tcb,172 IN INTN Force167 IN TCP_CB *Tcb, 168 IN INTN Force 173 169 ) 174 170 { … … 193 189 194 190 if (TCP_SEQ_GT (Limit, Tcb->SndUna + Tcb->CWnd)) { 195 196 191 Limit = Tcb->SndUna + Tcb->CWnd; 197 192 } … … 207 202 // its advertised window. 208 203 // 209 Left 210 211 Len 204 Left = GET_SND_DATASIZE (Sk) + TCP_SUB_SEQ (TcpGetMaxSndNxt (Tcb), Tcb->SndNxt); 205 206 Len = MIN (Win, Left); 212 207 213 208 if (Len > Tcb->SndMss) { … … 215 210 } 216 211 217 if ((Force != 0) || (Len == 0 && Left == 0)) {212 if ((Force != 0) || ((Len == 0) && (Left == 0))) { 218 213 return Len; 219 214 } 220 215 221 if ( Len == 0 && Left != 0) {216 if ((Len == 0) && (Left != 0)) { 222 217 goto SetPersistTimer; 223 218 } … … 232 227 // 233 228 if ((Len == Tcb->SndMss) || (2 * Len >= Tcb->SndWndMax)) { 234 235 229 return Len; 236 230 } … … 238 232 if ((Len == Left) && 239 233 ((Tcb->SndNxt == Tcb->SndUna) || TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_NO_NAGLE)) 240 ) {241 234 ) 235 { 242 236 return Len; 243 237 } … … 249 243 SetPersistTimer: 250 244 if (!TCP_TIMER_ON (Tcb->EnabledTimer, TCP_TIMER_REXMIT)) { 251 252 245 DEBUG ( 253 ( EFI_D_WARN,254 "TcpDataToSend: enter persistent state for TCB %p\n",255 Tcb)246 (DEBUG_WARN, 247 "TcpDataToSend: enter persistent state for TCB %p\n", 248 Tcb) 256 249 ); 257 250 … … 277 270 INTN 278 271 TcpTransmitSegment ( 279 IN OUT TCP_CB *Tcb,280 IN NET_BUF *Nbuf272 IN OUT TCP_CB *Tcb, 273 IN NET_BUF *Nbuf 281 274 ) 282 275 { … … 295 288 DataLen = Nbuf->TotalSize; 296 289 297 Seg 298 Syn 290 Seg = TCPSEG_NETBUF (Nbuf); 291 Syn = TCP_FLG_ON (Seg->Flag, TCP_FLG_SYN); 299 292 300 293 if (Syn) { 301 302 294 Len = TcpSynBuildOption (Tcb, Nbuf); 303 295 } else { 304 305 296 Len = TcpBuildOption (Tcb, Nbuf); 306 297 } … … 310 301 Len += sizeof (TCP_HEAD); 311 302 312 Head = (TCP_HEAD *) 313 314 315 316 303 Head = (TCP_HEAD *)NetbufAllocSpace ( 304 Nbuf, 305 sizeof (TCP_HEAD), 306 NET_BUF_HEAD 307 ); 317 308 318 309 ASSERT (Head != NULL); 319 310 320 Nbuf->Tcp 321 322 Head->SrcPort 323 Head->DstPort 324 Head->Seq 325 Head->Ack 326 Head->HeadLen = (UINT8)(Len >> 2);327 Head->Res 328 Head->Wnd 329 Head->Checksum 311 Nbuf->Tcp = Head; 312 313 Head->SrcPort = Tcb->LocalEnd.Port; 314 Head->DstPort = Tcb->RemoteEnd.Port; 315 Head->Seq = NTOHL (Seg->Seq); 316 Head->Ack = NTOHL (Tcb->RcvNxt); 317 Head->HeadLen = (UINT8)(Len >> 2); 318 Head->Res = 0; 319 Head->Wnd = TcpComputeWnd (Tcb, Syn); 320 Head->Checksum = 0; 330 321 331 322 // … … 337 328 if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_SND_PSH) && 338 329 TCP_SEQ_BETWEEN (Seg->Seq, Tcb->SndPsh, Seg->End) 339 ) {340 330 ) 331 { 341 332 TCP_SET_FLG (Seg->Flag, TCP_FLG_PSH); 342 333 TCP_CLEAR_FLG (Tcb->CtrlFlag, TCP_CTRL_SND_PSH); 343 344 334 } else if ((Seg->End == Tcb->SndNxt) && (GET_SND_DATASIZE (Tcb->Sk) == 0)) { 345 346 335 TCP_SET_FLG (Seg->Flag, TCP_FLG_PSH); 347 336 } … … 354 343 355 344 if (TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_SND_URG) && TCP_SEQ_LEQ (Seg->Seq, Tcb->SndUp)) { 356 357 345 TCP_SET_FLG (Seg->Flag, TCP_FLG_URG); 358 346 359 347 if (TCP_SEQ_LT (Tcb->SndUp, Seg->End)) { 360 361 Seg->Urg = (UINT16) TCP_SUB_SEQ (Tcb->SndUp, Seg->Seq); 348 Seg->Urg = (UINT16)TCP_SUB_SEQ (Tcb->SndUp, Seg->Seq); 362 349 } else { 363 364 Seg->Urg = (UINT16) MIN ( 365 TCP_SUB_SEQ (Tcb->SndUp, 366 Seg->Seq), 367 0xffff 368 ); 369 } 370 } 371 372 Head->Flag = Seg->Flag; 373 Head->Urg = NTOHS (Seg->Urg); 374 Head->Checksum = TcpChecksum (Nbuf, Tcb->HeadSum); 350 Seg->Urg = (UINT16)MIN ( 351 TCP_SUB_SEQ ( 352 Tcb->SndUp, 353 Seg->Seq 354 ), 355 0xffff 356 ); 357 } 358 } 359 360 Head->Flag = Seg->Flag; 361 Head->Urg = NTOHS (Seg->Urg); 362 Head->Checksum = TcpChecksum (Nbuf, Tcb->HeadSum); 375 363 376 364 // … … 402 390 NET_BUF * 403 391 TcpGetSegmentSndQue ( 404 IN TCP_CB *Tcb,405 IN TCP_SEQNO Seq,406 IN UINT32 Len407 ) 408 { 409 LIST_ENTRY 410 LIST_ENTRY 411 NET_BUF 412 TCP_SEG 413 NET_BUF 414 TCP_SEQNO 415 UINT8 416 UINT8 417 INT32 418 INT32 392 IN TCP_CB *Tcb, 393 IN TCP_SEQNO Seq, 394 IN UINT32 Len 395 ) 396 { 397 LIST_ENTRY *Head; 398 LIST_ENTRY *Cur; 399 NET_BUF *Node; 400 TCP_SEG *Seg; 401 NET_BUF *Nbuf; 402 TCP_SEQNO End; 403 UINT8 *Data; 404 UINT8 Flag; 405 INT32 Offset; 406 INT32 CopyLen; 419 407 420 408 ASSERT ((Tcb != NULL) && TCP_SEQ_LEQ (Seq, Tcb->SndNxt) && (Len > 0)); … … 423 411 // Find the segment that contains the Seq. 424 412 // 425 Head 426 427 Node 428 Seg 413 Head = &Tcb->SndQue; 414 415 Node = NULL; 416 Seg = NULL; 429 417 430 418 NET_LIST_FOR_EACH (Cur, Head) { 431 Node 432 Seg 419 Node = NET_LIST_USER_STRUCT (Cur, NET_BUF, List); 420 Seg = TCPSEG_NETBUF (Node); 433 421 434 422 if (TCP_SEQ_LT (Seq, Seg->End) && TCP_SEQ_LEQ (Seg->Seq, Seq)) { 435 436 423 break; 437 424 } … … 449 436 TCP_SEQ_LEQ (Seg->End, Seg->Seq + Len) && 450 437 !NET_BUF_SHARED (Node) 451 ) {452 438 ) 439 { 453 440 NET_GET_REF (Node); 454 441 return Node; … … 466 453 NetbufReserve (Nbuf, TCP_MAX_HEAD); 467 454 468 Flag 469 End 455 Flag = Seg->Flag; 456 End = Seg->End; 470 457 471 458 if (TCP_SEQ_LT (Seq + Len, Seg->End)) { … … 483 470 // 484 471 if (TCP_FLG_ON (Seg->Flag, TCP_FLG_SYN)) { 485 486 472 if (TCP_SEQ_LT (Seg->Seq, Seq)) { 487 488 473 TCP_CLEAR_FLG (Flag, TCP_FLG_SYN); 489 474 Offset--; 490 475 } else { 491 492 476 CopyLen--; 493 477 } … … 499 483 // 500 484 if (TCP_FLG_ON (Seg->Flag, TCP_FLG_FIN)) { 501 502 485 if (Seg->End == End) { 503 504 486 CopyLen--; 505 487 } else { 506 507 488 TCP_CLEAR_FLG (Flag, TCP_FLG_FIN); 508 489 } … … 518 499 ASSERT (Data != NULL); 519 500 520 if ((INT32) 501 if ((INT32)NetbufCopy (Node, Offset, CopyLen, Data) != CopyLen) { 521 502 goto OnError; 522 503 } … … 525 506 CopyMem (TCPSEG_NETBUF (Nbuf), Seg, sizeof (TCP_SEG)); 526 507 527 TCPSEG_NETBUF (Nbuf)->Seq 528 TCPSEG_NETBUF (Nbuf)->End 529 TCPSEG_NETBUF (Nbuf)->Flag 508 TCPSEG_NETBUF (Nbuf)->Seq = Seq; 509 TCPSEG_NETBUF (Nbuf)->End = End; 510 TCPSEG_NETBUF (Nbuf)->Flag = Flag; 530 511 531 512 return Nbuf; … … 548 529 NET_BUF * 549 530 TcpGetSegmentSock ( 550 IN TCP_CB *Tcb,551 IN TCP_SEQNO Seq,552 IN UINT32 Len553 ) 554 { 555 NET_BUF *Nbuf;556 UINT8 *Data;557 UINT32 DataGet;531 IN TCP_CB *Tcb, 532 IN TCP_SEQNO Seq, 533 IN UINT32 Len 534 ) 535 { 536 NET_BUF *Nbuf; 537 UINT8 *Data; 538 UINT32 DataGet; 558 539 559 540 ASSERT ((Tcb != NULL) && (Tcb->Sk != NULL)); … … 563 544 if (Nbuf == NULL) { 564 545 DEBUG ( 565 ( EFI_D_ERROR,566 "TcpGetSegmentSock: failed to allocate a netbuf for TCB %p\n",567 Tcb)546 (DEBUG_ERROR, 547 "TcpGetSegmentSock: failed to allocate a netbuf for TCB %p\n", 548 Tcb) 568 549 ); 569 550 … … 593 574 594 575 if (DataGet != 0) { 595 596 576 SockDataSent (Tcb->Sk, DataGet); 597 577 } … … 613 593 NET_BUF * 614 594 TcpGetSegment ( 615 IN TCP_CB *Tcb,616 IN TCP_SEQNO Seq,617 IN UINT32 Len618 ) 619 { 620 NET_BUF *Nbuf;595 IN TCP_CB *Tcb, 596 IN TCP_SEQNO Seq, 597 IN UINT32 Len 598 ) 599 { 600 NET_BUF *Nbuf; 621 601 622 602 ASSERT (Tcb != NULL); … … 626 606 // 627 607 if ((Len != 0) && TCP_SEQ_LT (Seq, TcpGetMaxSndNxt (Tcb))) { 628 629 608 Nbuf = TcpGetSegmentSndQue (Tcb, Seq, Len); 630 609 } else { 631 632 610 Nbuf = TcpGetSegmentSock (Tcb, Seq, Len); 633 611 } … … 653 631 INTN 654 632 TcpRetransmit ( 655 IN TCP_CB *Tcb,656 IN TCP_SEQNO Seq657 ) 658 { 659 NET_BUF *Nbuf;660 UINT32 Len;633 IN TCP_CB *Tcb, 634 IN TCP_SEQNO Seq 635 ) 636 { 637 NET_BUF *Nbuf; 638 UINT32 Len; 661 639 662 640 // … … 676 654 // 677 655 if ((Tcb->SndWndScale != 0) && 678 (TCP_SEQ_GT (Seq, Tcb->RetxmitSeqMax) || TCP_SEQ_BETWEEN (Tcb->SndWl2 + Tcb->SndWnd, Seq, Tcb->SndWl2 + Tcb->SndWnd + (1 << Tcb->SndWndScale)))) { 656 (TCP_SEQ_GT (Seq, Tcb->RetxmitSeqMax) || TCP_SEQ_BETWEEN (Tcb->SndWl2 + Tcb->SndWnd, Seq, Tcb->SndWl2 + Tcb->SndWnd + (1 << Tcb->SndWndScale)))) 657 { 679 658 Len = TCP_SUB_SEQ (Tcb->SndNxt, Seq); 680 659 DEBUG ( 681 ( EFI_D_WARN,682 "TcpRetransmit: retransmission without regard to the receiver window for TCB %p\n",683 Tcb)660 (DEBUG_WARN, 661 "TcpRetransmit: retransmission without regard to the receiver window for TCB %p\n", 662 Tcb) 684 663 ); 685 686 664 } else if (TCP_SEQ_GEQ (Tcb->SndWl2 + Tcb->SndWnd, Seq)) { 687 665 Len = TCP_SUB_SEQ (Tcb->SndWl2 + Tcb->SndWnd, Seq); 688 689 666 } else { 690 667 DEBUG ( 691 ( EFI_D_WARN,692 "TcpRetransmit: retransmission cancelled because send window too small for TCB %p\n",693 Tcb)668 (DEBUG_WARN, 669 "TcpRetransmit: retransmission cancelled because send window too small for TCB %p\n", 670 Tcb) 694 671 ); 695 672 … … 747 724 INTN 748 725 TcpCheckSndQue ( 749 IN LIST_ENTRY 750 ) 751 { 752 LIST_ENTRY 753 NET_BUF 754 TCP_SEQNO 726 IN LIST_ENTRY *Head 727 ) 728 { 729 LIST_ENTRY *Entry; 730 NET_BUF *Nbuf; 731 TCP_SEQNO Seq; 755 732 756 733 if (IsListEmpty (Head)) { 757 734 return 1; 758 735 } 736 759 737 // 760 738 // Initialize the Seq. … … 797 775 INTN 798 776 TcpToSendData ( 799 IN OUT TCP_CB *Tcb,800 IN INTN Force801 ) 802 { 803 UINT32 Len;804 INTN Sent;805 UINT8 Flag;806 NET_BUF *Nbuf;807 TCP_SEG *Seg;808 TCP_SEQNO Seq;809 TCP_SEQNO End;777 IN OUT TCP_CB *Tcb, 778 IN INTN Force 779 ) 780 { 781 UINT32 Len; 782 INTN Sent; 783 UINT8 Flag; 784 NET_BUF *Nbuf; 785 TCP_SEG *Seg; 786 TCP_SEQNO Seq; 787 TCP_SEQNO End; 810 788 811 789 ASSERT ((Tcb != NULL) && (Tcb->Sk != NULL) && (Tcb->State != TCP_LISTEN)); … … 814 792 815 793 if ((Tcb->State == TCP_CLOSED) || TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_FIN_SENT)) { 816 817 794 return 0; 818 795 } … … 822 799 // Compute how much data can be sent 823 800 // 824 Len 825 Seq 801 Len = TcpDataToSend (Tcb, Force); 802 Seq = Tcb->SndNxt; 826 803 827 804 ASSERT ((Tcb->State) < (ARRAY_SIZE (mTcpOutFlag))); 828 Flag 805 Flag = mTcpOutFlag[Tcb->State]; 829 806 830 807 if ((Flag & TCP_FLG_SYN) != 0) { 831 832 808 Seq = Tcb->Iss; 833 809 Len = 0; … … 846 822 if (Nbuf == NULL) { 847 823 DEBUG ( 848 ( EFI_D_ERROR,849 "TcpToSendData: failed to get a segment for TCB %p\n",850 Tcb)824 (DEBUG_ERROR, 825 "TcpToSendData: failed to get a segment for TCB %p\n", 826 Tcb) 851 827 ); 852 828 … … 873 849 (GET_SND_DATASIZE (Tcb->Sk) == 0) && 874 850 TCP_SEQ_LT (End + 1, Tcb->SndWnd + Tcb->SndWl2) 875 ) { 851 ) 852 { 876 853 DEBUG ( 877 ( EFI_D_NET,878 "TcpToSendData: send FIN to peer for TCB %p in state %s\n",879 Tcb,880 mTcpStateName[Tcb->State])854 (DEBUG_NET, 855 "TcpToSendData: send FIN to peer for TCB %p in state %s\n", 856 Tcb, 857 mTcpStateName[Tcb->State]) 881 858 ); 882 859 … … 891 868 Seg->Flag = Flag; 892 869 893 if ( TcpVerifySegment (Nbuf) == 0 || TcpCheckSndQue (&Tcb->SndQue) == 0) {870 if ((TcpVerifySegment (Nbuf) == 0) || (TcpCheckSndQue (&Tcb->SndQue) == 0)) { 894 871 DEBUG ( 895 ( EFI_D_ERROR,896 "TcpToSendData: discard a broken segment for TCB %p\n",897 Tcb)872 (DEBUG_ERROR, 873 "TcpToSendData: discard a broken segment for TCB %p\n", 874 Tcb) 898 875 ); 899 876 goto OnError; … … 905 882 if (Seg->End == Seg->Seq) { 906 883 DEBUG ( 907 ( EFI_D_WARN,908 "TcpToSendData: created a empty segment for TCB %p, free it now\n",909 Tcb)884 (DEBUG_WARN, 885 "TcpToSendData: created a empty segment for TCB %p, free it now\n", 886 Tcb) 910 887 ); 911 888 … … 917 894 Nbuf->Tcp = NULL; 918 895 919 if ((Flag & TCP_FLG_FIN) != 0) 896 if ((Flag & TCP_FLG_FIN) != 0) { 920 897 TCP_SET_FLG (Tcb->CtrlFlag, TCP_CTRL_FIN_SENT); 921 898 } … … 958 935 // 959 936 if ((Tcb->CongestState == TCP_CONGEST_OPEN) && !TCP_FLG_ON (Tcb->CtrlFlag, TCP_CTRL_RTT_ON)) { 960 961 937 DEBUG ( 962 ( EFI_D_NET,963 "TcpToSendData: set RTT measure sequence %d for TCB %p\n",964 Seq,965 Tcb)938 (DEBUG_NET, 939 "TcpToSendData: set RTT measure sequence %d for TCB %p\n", 940 Seq, 941 Tcb) 966 942 ); 967 943 … … 970 946 Tcb->RttMeasure = 0; 971 947 } 972 973 948 } while (Len == Tcb->SndMss); 974 949 … … 991 966 VOID 992 967 TcpSendAck ( 993 IN OUT TCP_CB *Tcb994 ) 995 { 996 NET_BUF *Nbuf;997 TCP_SEG *Seg;968 IN OUT TCP_CB *Tcb 969 ) 970 { 971 NET_BUF *Nbuf; 972 TCP_SEG *Seg; 998 973 999 974 Nbuf = NetbufAlloc (TCP_MAX_HEAD); … … 1029 1004 INTN 1030 1005 TcpSendZeroProbe ( 1031 IN OUT TCP_CB *Tcb1032 ) 1033 { 1034 NET_BUF *Nbuf;1035 TCP_SEG *Seg;1006 IN OUT TCP_CB *Tcb 1007 ) 1008 { 1009 NET_BUF *Nbuf; 1010 TCP_SEG *Seg; 1036 1011 INTN Result; 1037 1012 … … 1053 1028 Seg->Flag = TCP_FLG_ACK; 1054 1029 1055 Result 1030 Result = TcpTransmitSegment (Tcb, Nbuf); 1056 1031 NetbufFree (Nbuf); 1057 1032 … … 1067 1042 VOID 1068 1043 TcpToSendAck ( 1069 IN OUT TCP_CB *Tcb1070 ) 1071 { 1072 UINT32 TcpNow;1044 IN OUT TCP_CB *Tcb 1045 ) 1046 { 1047 UINT32 TcpNow; 1073 1048 1074 1049 // … … 1091 1066 1092 1067 DEBUG ( 1093 ( EFI_D_NET,1094 "TcpToSendAck: scheduled a delayed ACK for TCB %p\n",1095 Tcb)1068 (DEBUG_NET, 1069 "TcpToSendAck: scheduled a delayed ACK for TCB %p\n", 1070 Tcb) 1096 1071 ); 1097 1072 … … 1144 1119 } 1145 1120 1146 Nhead = (TCP_HEAD *) 1121 Nhead = (TCP_HEAD *)NetbufAllocSpace ( 1147 1122 Nbuf, 1148 1123 sizeof (TCP_HEAD), … … 1160 1135 // 1161 1136 if (Tcb == NULL) { 1162 1163 1137 if (TCP_FLG_ON (Head->Flag, TCP_FLG_ACK)) { 1164 Nhead->Seq 1165 Nhead->Ack 1138 Nhead->Seq = Head->Ack; 1139 Nhead->Ack = 0; 1166 1140 } else { 1167 1141 Nhead->Seq = 0; … … 1170 1144 } 1171 1145 } else { 1172 1173 Nhead->Seq = HTONL (Tcb->SndNxt); 1174 Nhead->Ack = HTONL (Tcb->RcvNxt); 1146 Nhead->Seq = HTONL (Tcb->SndNxt); 1147 Nhead->Ack = HTONL (Tcb->RcvNxt); 1175 1148 TCP_SET_FLG (Nhead->Flag, TCP_FLG_ACK); 1176 1149 } … … 1178 1151 Nhead->SrcPort = Head->DstPort; 1179 1152 Nhead->DstPort = Head->SrcPort; 1180 Nhead->HeadLen = (UINT8) 1153 Nhead->HeadLen = (UINT8)(sizeof (TCP_HEAD) >> 2); 1181 1154 Nhead->Res = 0; 1182 1155 Nhead->Wnd = HTONS (0xFFFF); … … 1210 1183 INTN 1211 1184 TcpVerifySegment ( 1212 IN NET_BUF *Nbuf1185 IN NET_BUF *Nbuf 1213 1186 ) 1214 1187 { … … 1223 1196 NET_CHECK_SIGNATURE (Nbuf, NET_BUF_SIGNATURE); 1224 1197 1225 Seg 1226 Len 1227 Head 1198 Seg = TCPSEG_NETBUF (Nbuf); 1199 Len = Nbuf->TotalSize; 1200 Head = Nbuf->Tcp; 1228 1201 1229 1202 if (Head != NULL) { … … 1249 1222 return 1; 1250 1223 } 1251
Note:
See TracChangeset
for help on using the changeset viewer.