Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/NetworkPkg/TcpDxe/SockInterface.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/SockInterface.c
r85718 r99404 22 22 BOOLEAN 23 23 SockTokenExistedInList ( 24 IN LIST_ENTRY 25 IN EFI_EVENT 26 ) 27 { 28 LIST_ENTRY 29 SOCK_TOKEN 24 IN LIST_ENTRY *List, 25 IN EFI_EVENT Event 26 ) 27 { 28 LIST_ENTRY *ListEntry; 29 SOCK_TOKEN *SockToken; 30 30 31 31 NET_LIST_FOR_EACH (ListEntry, List) { … … 57 57 BOOLEAN 58 58 SockTokenExisted ( 59 IN SOCKET *Sock, 60 IN EFI_EVENT Event 61 ) 62 { 63 59 IN SOCKET *Sock, 60 IN EFI_EVENT Event 61 ) 62 { 64 63 if (SockTokenExistedInList (&Sock->SndTokenList, Event) || 65 64 SockTokenExistedInList (&Sock->ProcessingSndTokenList, Event) || 66 65 SockTokenExistedInList (&Sock->RcvTokenList, Event) || 67 66 SockTokenExistedInList (&Sock->ListenTokenList, Event) 68 ) {69 67 ) 68 { 70 69 return TRUE; 71 70 } 72 71 73 72 if ((Sock->ConnectionToken != NULL) && (Sock->ConnectionToken->Event == Event)) { 74 75 73 return TRUE; 76 74 } … … 96 94 SOCK_TOKEN * 97 95 SockBufferToken ( 98 IN SOCKET 99 IN LIST_ENTRY 100 IN VOID 101 IN UINT32 96 IN SOCKET *Sock, 97 IN LIST_ENTRY *List, 98 IN VOID *Token, 99 IN UINT32 DataLen 102 100 ) 103 101 { … … 106 104 SockToken = AllocateZeroPool (sizeof (SOCK_TOKEN)); 107 105 if (NULL == SockToken) { 108 109 DEBUG ( 110 (EFI_D_ERROR, 111 "SockBufferIOToken: No Memory to allocate SockToken\n") 106 DEBUG ( 107 (DEBUG_ERROR, 108 "SockBufferIOToken: No Memory to allocate SockToken\n") 112 109 ); 113 110 … … 115 112 } 116 113 117 SockToken->Sock 118 SockToken->Token = (SOCK_COMPLETION_TOKEN *)Token;119 SockToken->RemainDataLen 114 SockToken->Sock = Sock; 115 SockToken->Token = (SOCK_COMPLETION_TOKEN *)Token; 116 SockToken->RemainDataLen = DataLen; 120 117 InsertTailList (List, &SockToken->TokenList); 121 118 … … 134 131 EFI_STATUS 135 132 SockDestroyChild ( 136 IN OUT SOCKET *Sock137 ) 138 { 139 EFI_STATUS 140 TCP_PROTO_DATA 141 TCP_CB 142 EFI_GUID 143 EFI_GUID 144 VOID 133 IN OUT SOCKET *Sock 134 ) 135 { 136 EFI_STATUS Status; 137 TCP_PROTO_DATA *ProtoData; 138 TCP_CB *Tcb; 139 EFI_GUID *IpProtocolGuid; 140 EFI_GUID *TcpProtocolGuid; 141 VOID *SockProtocol; 145 142 146 143 ASSERT ((Sock != NULL) && (Sock->ProtoHandler != NULL)); … … 153 150 154 151 if (Sock->IpVersion == IP_VERSION_4) { 155 IpProtocolGuid = &gEfiIp4ProtocolGuid;152 IpProtocolGuid = &gEfiIp4ProtocolGuid; 156 153 TcpProtocolGuid = &gEfiTcp4ProtocolGuid; 157 154 } else { 158 IpProtocolGuid = &gEfiIp6ProtocolGuid;155 IpProtocolGuid = &gEfiIp6ProtocolGuid; 159 156 TcpProtocolGuid = &gEfiTcp6ProtocolGuid; 160 157 } 161 ProtoData = (TCP_PROTO_DATA *) Sock->ProtoReserved; 158 159 ProtoData = (TCP_PROTO_DATA *)Sock->ProtoReserved; 162 160 Tcb = ProtoData->TcpPcb; 163 161 … … 191 189 192 190 if (EFI_ERROR (Status)) { 193 194 DEBUG ( 195 (EFI_D_ERROR, 196 "SockDestroyChild: Open protocol installed on socket failed with %r\n", 197 Status) 191 DEBUG ( 192 (DEBUG_ERROR, 193 "SockDestroyChild: Open protocol installed on socket failed with %r\n", 194 Status) 198 195 ); 199 196 } … … 203 200 // 204 201 gBS->UninstallMultipleProtocolInterfaces ( 205 Sock->SockHandle, 206 TcpProtocolGuid, 207 SockProtocol, 208 NULL 209 ); 210 211 212 Status = EfiAcquireLockOrFail (&(Sock->Lock)); 213 if (EFI_ERROR (Status)) { 214 215 DEBUG ( 216 (EFI_D_ERROR, 217 "SockDestroyChild: Get the lock to access socket failed with %r\n", 218 Status) 202 Sock->SockHandle, 203 TcpProtocolGuid, 204 SockProtocol, 205 NULL 206 ); 207 208 Status = EfiAcquireLockOrFail (&(Sock->Lock)); 209 if (EFI_ERROR (Status)) { 210 DEBUG ( 211 (DEBUG_ERROR, 212 "SockDestroyChild: Get the lock to access socket failed with %r\n", 213 Status) 219 214 ); 220 215 … … 228 223 229 224 if (EFI_ERROR (Status)) { 230 231 DEBUG ( 232 (EFI_D_ERROR, 233 "SockDestroyChild: Protocol detach socket failed with %r\n", 234 Status) 225 DEBUG ( 226 (DEBUG_ERROR, 227 "SockDestroyChild: Protocol detach socket failed with %r\n", 228 Status) 235 229 ); 236 230 237 231 Sock->InDestroy = FALSE; 238 232 } else if (SOCK_IS_CONFIGURED (Sock)) { 239 240 233 SockConnFlush (Sock); 241 234 SockSetState (Sock, SO_CLOSED); … … 266 259 SOCKET * 267 260 SockCreateChild ( 268 IN SOCK_INIT_DATA *SockInitData261 IN SOCK_INIT_DATA *SockInitData 269 262 ) 270 263 { … … 279 272 Sock = SockCreate (SockInitData); 280 273 if (NULL == Sock) { 281 282 DEBUG ( 283 (EFI_D_ERROR, 284 "SockCreateChild: No resource to create a new socket\n") 274 DEBUG ( 275 (DEBUG_ERROR, 276 "SockCreateChild: No resource to create a new socket\n") 285 277 ); 286 278 … … 290 282 Status = EfiAcquireLockOrFail (&(Sock->Lock)); 291 283 if (EFI_ERROR (Status)) { 292 293 DEBUG ( 294 (EFI_D_ERROR, 295 "SockCreateChild: Get the lock to access socket failed with %r\n", 296 Status) 284 DEBUG ( 285 (DEBUG_ERROR, 286 "SockCreateChild: Get the lock to access socket failed with %r\n", 287 Status) 297 288 ); 298 289 goto ERROR; 299 290 } 291 300 292 // 301 293 // inform the protocol layer to attach the socket … … 305 297 EfiReleaseLock (&(Sock->Lock)); 306 298 if (EFI_ERROR (Status)) { 307 308 DEBUG ( 309 (EFI_D_ERROR, 310 "SockCreateChild: Protocol failed to attach a socket with %r\n", 311 Status) 299 DEBUG ( 300 (DEBUG_ERROR, 301 "SockCreateChild: Protocol failed to attach a socket with %r\n", 302 Status) 312 303 ); 313 304 goto ERROR; … … 340 331 // 341 332 gBS->UninstallMultipleProtocolInterfaces ( 342 Sock->SockHandle,343 TcpProtocolGuid,344 SockProtocol,345 NULL346 );347 348 333 Sock->SockHandle, 334 TcpProtocolGuid, 335 SockProtocol, 336 NULL 337 ); 338 SockDestroy (Sock); 339 return NULL; 349 340 } 350 341 … … 362 353 EFI_STATUS 363 354 SockConfigure ( 364 IN SOCKET *Sock,365 IN VOID *ConfigData355 IN SOCKET *Sock, 356 IN VOID *ConfigData 366 357 ) 367 358 { … … 370 361 Status = EfiAcquireLockOrFail (&(Sock->Lock)); 371 362 if (EFI_ERROR (Status)) { 372 373 DEBUG ( 374 (EFI_D_ERROR, 375 "SockConfigure: Get the access for socket failed with %r", 376 Status) 363 DEBUG ( 364 (DEBUG_ERROR, 365 "SockConfigure: Get the access for socket failed with %r", 366 Status) 377 367 ); 378 368 … … 415 405 EFI_STATUS 416 406 SockConnect ( 417 IN SOCKET *Sock,418 IN VOID *Token407 IN SOCKET *Sock, 408 IN VOID *Token 419 409 ) 420 410 { … … 424 414 Status = EfiAcquireLockOrFail (&(Sock->Lock)); 425 415 if (EFI_ERROR (Status)) { 426 427 DEBUG ( 428 (EFI_D_ERROR, 429 "SockConnect: Get the access for socket failed with %r", 430 Status) 416 DEBUG ( 417 (DEBUG_ERROR, 418 "SockConnect: Get the access for socket failed with %r", 419 Status) 431 420 ); 432 421 … … 440 429 441 430 if (SOCK_IS_UNCONFIGURED (Sock)) { 442 443 431 Status = EFI_NOT_STARTED; 444 432 goto OnExit; … … 446 434 447 435 if (!SOCK_IS_CLOSED (Sock) || !SOCK_IS_CONFIGURED_ACTIVE (Sock)) { 448 449 436 Status = EFI_ACCESS_DENIED; 450 437 goto OnExit; 451 438 } 452 439 453 Event = ((SOCK_COMPLETION_TOKEN *) 440 Event = ((SOCK_COMPLETION_TOKEN *)Token)->Event; 454 441 455 442 if (SockTokenExisted (Sock, Event)) { 456 457 443 Status = EFI_ACCESS_DENIED; 458 444 goto OnExit; 459 445 } 460 446 461 Sock->ConnectionToken = (SOCK_COMPLETION_TOKEN *) 447 Sock->ConnectionToken = (SOCK_COMPLETION_TOKEN *)Token; 462 448 SockSetState (Sock, SO_CONNECTING); 463 449 Status = Sock->ProtoHandler (Sock, SOCK_CONNECT, NULL); … … 489 475 EFI_STATUS 490 476 SockAccept ( 491 IN SOCKET *Sock,492 IN VOID *Token493 ) 494 { 495 EFI_TCP4_LISTEN_TOKEN *ListenToken;496 LIST_ENTRY *ListEntry;497 EFI_STATUS Status;498 SOCKET *Socket;499 EFI_EVENT Event;477 IN SOCKET *Sock, 478 IN VOID *Token 479 ) 480 { 481 EFI_TCP4_LISTEN_TOKEN *ListenToken; 482 LIST_ENTRY *ListEntry; 483 EFI_STATUS Status; 484 SOCKET *Socket; 485 EFI_EVENT Event; 500 486 501 487 ASSERT (SockStream == Sock->Type); … … 503 489 Status = EfiAcquireLockOrFail (&(Sock->Lock)); 504 490 if (EFI_ERROR (Status)) { 505 506 DEBUG ( 507 (EFI_D_ERROR, 508 "SockAccept: Get the access for socket failed with %r", 509 Status) 491 DEBUG ( 492 (DEBUG_ERROR, 493 "SockAccept: Get the access for socket failed with %r", 494 Status) 510 495 ); 511 496 … … 519 504 520 505 if (SOCK_IS_UNCONFIGURED (Sock)) { 521 522 506 Status = EFI_NOT_STARTED; 523 507 goto Exit; … … 525 509 526 510 if (!SOCK_IS_LISTENING (Sock)) { 527 528 Status = EFI_ACCESS_DENIED; 529 goto Exit; 530 } 531 532 Event = ((SOCK_COMPLETION_TOKEN *) Token)->Event; 511 Status = EFI_ACCESS_DENIED; 512 goto Exit; 513 } 514 515 Event = ((SOCK_COMPLETION_TOKEN *)Token)->Event; 533 516 534 517 if (SockTokenExisted (Sock, Event)) { 535 536 Status = EFI_ACCESS_DENIED; 537 goto Exit; 538 } 539 540 ListenToken = (EFI_TCP4_LISTEN_TOKEN *) Token; 518 Status = EFI_ACCESS_DENIED; 519 goto Exit; 520 } 521 522 ListenToken = (EFI_TCP4_LISTEN_TOKEN *)Token; 541 523 542 524 // … … 544 526 // 545 527 NET_LIST_FOR_EACH (ListEntry, &Sock->ConnectionList) { 546 547 528 Socket = NET_LIST_USER_STRUCT (ListEntry, SOCKET, ConnectionList); 548 529 … … 558 539 559 540 DEBUG ( 560 ( EFI_D_NET,561 "SockAccept: Accept a socket, now conncount is %d",562 Socket->Parent->ConnCnt)541 (DEBUG_NET, 542 "SockAccept: Accept a socket, now conncount is %d", 543 Socket->Parent->ConnCnt) 563 544 ); 564 545 Socket->Parent = NULL; … … 572 553 // 573 554 if (NULL == SockBufferToken (Sock, &(Sock->ListenTokenList), Token, 0)) { 574 575 555 Status = EFI_OUT_OF_RESOURCES; 576 556 } … … 602 582 EFI_STATUS 603 583 SockSend ( 604 IN SOCKET *Sock,605 IN VOID *Token584 IN SOCKET *Sock, 585 IN VOID *Token 606 586 ) 607 587 { … … 618 598 Status = EfiAcquireLockOrFail (&(Sock->Lock)); 619 599 if (EFI_ERROR (Status)) { 620 621 DEBUG ( 622 (EFI_D_ERROR, 623 "SockSend: Get the access for socket failed with %r", 624 Status) 600 DEBUG ( 601 (DEBUG_ERROR, 602 "SockSend: Get the access for socket failed with %r", 603 Status) 625 604 ); 626 605 … … 633 612 } 634 613 635 SndToken = (SOCK_IO_TOKEN *)Token;636 TxData = (EFI_TCP4_TRANSMIT_DATA *)SndToken->Packet.TxData;614 SndToken = (SOCK_IO_TOKEN *)Token; 615 TxData = (EFI_TCP4_TRANSMIT_DATA *)SndToken->Packet.TxData; 637 616 638 617 if (SOCK_IS_UNCONFIGURED (Sock)) { … … 642 621 643 622 if (!(SOCK_IS_CONNECTING (Sock) || SOCK_IS_CONNECTED (Sock))) { 644 645 623 Status = EFI_ACCESS_DENIED; 646 624 goto Exit; … … 665 643 666 644 if ((FreeSpace < Sock->SndBuffer.LowWater) || !SOCK_IS_CONNECTED (Sock)) { 667 668 645 SockToken = SockBufferToken ( 669 646 Sock, … … 677 654 } 678 655 } else { 679 680 656 SockToken = SockBufferToken ( 681 657 Sock, … … 686 662 687 663 if (NULL == SockToken) { 688 DEBUG ( 689 (EFI_D_ERROR, 690 "SockSend: Failed to buffer IO token into socket processing SndToken List\n", 691 Status) 692 ); 664 DEBUG ((DEBUG_ERROR, "SockSend: Failed to buffer IO token into socket processing SndToken List\n")); 693 665 694 666 Status = EFI_OUT_OF_RESOURCES; … … 699 671 700 672 if (EFI_ERROR (Status)) { 701 DEBUG ( 702 (EFI_D_ERROR, 703 "SockSend: Failed to process Snd Data\n", 704 Status) 705 ); 673 DEBUG ((DEBUG_ERROR, "SockSend: Failed to process Snd Data\n")); 706 674 707 675 RemoveEntryList (&(SockToken->TokenList)); … … 736 704 EFI_STATUS 737 705 SockRcv ( 738 IN SOCKET *Sock,739 IN VOID *Token740 ) 741 { 742 SOCK_IO_TOKEN *RcvToken;743 UINT32 RcvdBytes;744 EFI_STATUS Status;745 EFI_EVENT Event;706 IN SOCKET *Sock, 707 IN VOID *Token 708 ) 709 { 710 SOCK_IO_TOKEN *RcvToken; 711 UINT32 RcvdBytes; 712 EFI_STATUS Status; 713 EFI_EVENT Event; 746 714 747 715 ASSERT (SockStream == Sock->Type); … … 749 717 Status = EfiAcquireLockOrFail (&(Sock->Lock)); 750 718 if (EFI_ERROR (Status)) { 751 752 DEBUG ( 753 (EFI_D_ERROR, 754 "SockRcv: Get the access for socket failed with %r", 755 Status) 719 DEBUG ( 720 (DEBUG_ERROR, 721 "SockRcv: Get the access for socket failed with %r", 722 Status) 756 723 ); 757 724 … … 760 727 761 728 if (SOCK_IS_NO_MAPPING (Sock)) { 762 763 729 Status = EFI_NO_MAPPING; 764 730 goto Exit; … … 766 732 767 733 if (SOCK_IS_UNCONFIGURED (Sock)) { 768 769 734 Status = EFI_NOT_STARTED; 770 735 goto Exit; … … 772 737 773 738 if (!(SOCK_IS_CONNECTED (Sock) || SOCK_IS_CONNECTING (Sock))) { 774 775 Status = EFI_ACCESS_DENIED; 776 goto Exit; 777 } 778 779 RcvToken = (SOCK_IO_TOKEN *) Token; 739 Status = EFI_ACCESS_DENIED; 740 goto Exit; 741 } 742 743 RcvToken = (SOCK_IO_TOKEN *)Token; 780 744 781 745 // … … 788 752 } 789 753 790 RcvToken = (SOCK_IO_TOKEN *) 754 RcvToken = (SOCK_IO_TOKEN *)Token; 791 755 RcvdBytes = GET_RCV_DATASIZE (Sock); 792 756 … … 795 759 // 796 760 if (EFI_ABORTED != Sock->SockError) { 797 798 761 SIGNAL_TOKEN (&(RcvToken->Token), Sock->SockError); 799 762 Sock->SockError = EFI_ABORTED; … … 806 769 // 807 770 if (SOCK_IS_NO_MORE_DATA (Sock) && (0 == RcvdBytes)) { 808 809 771 Status = EFI_CONNECTION_FIN; 810 772 goto Exit; … … 816 778 Status = Sock->ProtoHandler (Sock, SOCK_CONSUMED, NULL); 817 779 } else { 818 819 780 if (NULL == SockBufferToken (Sock, &Sock->RcvTokenList, RcvToken, 0)) { 820 781 Status = EFI_OUT_OF_RESOURCES; … … 838 799 EFI_STATUS 839 800 SockFlush ( 840 IN OUT SOCKET *Sock801 IN OUT SOCKET *Sock 841 802 ) 842 803 { … … 847 808 Status = EfiAcquireLockOrFail (&(Sock->Lock)); 848 809 if (EFI_ERROR (Status)) { 849 850 DEBUG ( 851 (EFI_D_ERROR, 852 "SockFlush: Get the access for socket failed with %r", 853 Status) 810 DEBUG ( 811 (DEBUG_ERROR, 812 "SockFlush: Get the access for socket failed with %r", 813 Status) 854 814 ); 855 815 … … 858 818 859 819 if (!SOCK_IS_CONFIGURED (Sock)) { 860 861 820 Status = EFI_ACCESS_DENIED; 862 821 goto Exit; … … 865 824 Status = Sock->ProtoHandler (Sock, SOCK_FLUSH, NULL); 866 825 if (EFI_ERROR (Status)) { 867 868 DEBUG ( 869 (EFI_D_ERROR, 870 "SockFlush: Protocol failed handling SOCK_FLUSH with %r", 871 Status) 826 DEBUG ( 827 (DEBUG_ERROR, 828 "SockFlush: Protocol failed handling SOCK_FLUSH with %r", 829 Status) 872 830 ); 873 831 … … 907 865 EFI_STATUS 908 866 SockClose ( 909 IN OUT SOCKET *Sock,910 IN VOID *Token,911 IN BOOLEAN OnAbort867 IN OUT SOCKET *Sock, 868 IN VOID *Token, 869 IN BOOLEAN OnAbort 912 870 ) 913 871 { … … 920 878 if (EFI_ERROR (Status)) { 921 879 DEBUG ( 922 ( EFI_D_ERROR,923 "SockClose: Get the access for socket failed with %r",924 Status)880 (DEBUG_ERROR, 881 "SockClose: Get the access for socket failed with %r", 882 Status) 925 883 ); 926 884 … … 943 901 } 944 902 945 Event = ((SOCK_COMPLETION_TOKEN *) 903 Event = ((SOCK_COMPLETION_TOKEN *)Token)->Event; 946 904 947 905 if (SockTokenExisted (Sock, Event)) { … … 982 940 ) 983 941 { 984 EFI_STATUS 985 986 Status 942 EFI_STATUS Status; 943 944 Status = EFI_SUCCESS; 987 945 988 946 ASSERT (SockStream == Sock->Type); … … 991 949 if (EFI_ERROR (Status)) { 992 950 DEBUG ( 993 ( EFI_D_ERROR,994 "SockCancel: Get the access for socket failed with %r",995 Status)951 (DEBUG_ERROR, 952 "SockCancel: Get the access for socket failed with %r", 953 Status) 996 954 ); 997 955 … … 1007 965 // 1. Check ConnectionToken. 1008 966 // 1009 if ( Token == NULL || (SOCK_COMPLETION_TOKEN *) Token == Sock->ConnectionToken) {967 if ((Token == NULL) || ((SOCK_COMPLETION_TOKEN *)Token == Sock->ConnectionToken)) { 1010 968 if (Sock->ConnectionToken != NULL) { 1011 969 SIGNAL_TOKEN (Sock->ConnectionToken, EFI_ABORTED); … … 1023 981 // 1024 982 Status = SockCancelToken (Token, &Sock->ListenTokenList); 1025 if ( Token != NULL&& !EFI_ERROR (Status)) {983 if ((Token != NULL) && !EFI_ERROR (Status)) { 1026 984 goto Exit; 1027 985 } … … 1031 989 // 1032 990 Status = SockCancelToken (Token, &Sock->RcvTokenList); 1033 if ( Token != NULL&& !EFI_ERROR (Status)) {991 if ((Token != NULL) && !EFI_ERROR (Status)) { 1034 992 goto Exit; 1035 993 } … … 1039 997 // 1040 998 Status = SockCancelToken (Token, &Sock->SndTokenList); 1041 if ( Token != NULL&& !EFI_ERROR (Status)) {999 if ((Token != NULL) && !EFI_ERROR (Status)) { 1042 1000 goto Exit; 1043 1001 } … … 1053 1011 } 1054 1012 1055 1056 1013 /** 1057 1014 Get the mode data of the low layer protocol. … … 1067 1024 EFI_STATUS 1068 1025 SockGetMode ( 1069 IN SOCKET *Sock,1070 IN OUT VOID *Mode1026 IN SOCKET *Sock, 1027 IN OUT VOID *Mode 1071 1028 ) 1072 1029 { … … 1091 1048 EFI_STATUS 1092 1049 SockRoute ( 1093 IN SOCKET 1094 IN VOID 1050 IN SOCKET *Sock, 1051 IN VOID *RouteInfo 1095 1052 ) 1096 1053 { … … 1100 1057 if (EFI_ERROR (Status)) { 1101 1058 DEBUG ( 1102 ( EFI_D_ERROR,1103 "SockRoute: Get the access for socket failed with %r",1104 Status)1059 (DEBUG_ERROR, 1060 "SockRoute: Get the access for socket failed with %r", 1061 Status) 1105 1062 ); 1106 1063 … … 1124 1081 return Status; 1125 1082 } 1126
Note:
See TracChangeset
for help on using the changeset viewer.