Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/NetworkPkg/Ip4Dxe/Ip4Impl.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/Ip4Dxe/Ip4Impl.c
r85718 r99404 8 8 #include "Ip4Impl.h" 9 9 10 EFI_IPSEC2_PROTOCOL 10 EFI_IPSEC2_PROTOCOL *mIpSec = NULL; 11 11 12 12 /** … … 31 31 EFIAPI 32 32 EfiIp4GetModeData ( 33 IN CONST EFI_IP4_PROTOCOL *This,34 OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL,35 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,36 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL33 IN CONST EFI_IP4_PROTOCOL *This, 34 OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL, 35 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, 36 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL 37 37 ); 38 38 … … 83 83 EFIAPI 84 84 EfiIp4Configure ( 85 IN EFI_IP4_PROTOCOL 86 IN EFI_IP4_CONFIG_DATA 85 IN EFI_IP4_PROTOCOL *This, 86 IN EFI_IP4_CONFIG_DATA *IpConfigData OPTIONAL 87 87 ); 88 88 … … 120 120 EFIAPI 121 121 EfiIp4Groups ( 122 IN EFI_IP4_PROTOCOL 123 IN BOOLEAN 124 IN EFI_IPv4_ADDRESS 122 IN EFI_IP4_PROTOCOL *This, 123 IN BOOLEAN JoinFlag, 124 IN EFI_IPv4_ADDRESS *GroupAddress OPTIONAL 125 125 ); 126 126 … … 178 178 EFIAPI 179 179 EfiIp4Routes ( 180 IN EFI_IP4_PROTOCOL 181 IN BOOLEAN 182 IN EFI_IPv4_ADDRESS 183 IN EFI_IPv4_ADDRESS 184 IN EFI_IPv4_ADDRESS 180 IN EFI_IP4_PROTOCOL *This, 181 IN BOOLEAN DeleteRoute, 182 IN EFI_IPv4_ADDRESS *SubnetAddress, 183 IN EFI_IPv4_ADDRESS *SubnetMask, 184 IN EFI_IPv4_ADDRESS *GatewayAddress 185 185 ); 186 186 … … 217 217 EFIAPI 218 218 EfiIp4Transmit ( 219 IN EFI_IP4_PROTOCOL *This,220 IN EFI_IP4_COMPLETION_TOKEN *Token219 IN EFI_IP4_PROTOCOL *This, 220 IN EFI_IP4_COMPLETION_TOKEN *Token 221 221 ); 222 222 … … 256 256 EFIAPI 257 257 EfiIp4Receive ( 258 IN EFI_IP4_PROTOCOL *This,259 IN EFI_IP4_COMPLETION_TOKEN *Token258 IN EFI_IP4_PROTOCOL *This, 259 IN EFI_IP4_COMPLETION_TOKEN *Token 260 260 ); 261 261 … … 292 292 EFIAPI 293 293 EfiIp4Cancel ( 294 IN EFI_IP4_PROTOCOL *This,295 IN EFI_IP4_COMPLETION_TOKEN *Token OPTIONAL294 IN EFI_IP4_PROTOCOL *This, 295 IN EFI_IP4_COMPLETION_TOKEN *Token OPTIONAL 296 296 ); 297 297 … … 326 326 EFIAPI 327 327 EfiIp4Poll ( 328 IN EFI_IP4_PROTOCOL 328 IN EFI_IP4_PROTOCOL *This 329 329 ); 330 330 331 331 EFI_IP4_PROTOCOL 332 mEfiIp4ProtocolTemplete = {332 mEfiIp4ProtocolTemplete = { 333 333 EfiIp4GetModeData, 334 334 EfiIp4Configure, … … 362 362 EFIAPI 363 363 EfiIp4GetModeData ( 364 IN CONST EFI_IP4_PROTOCOL *This,365 OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL,366 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,367 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL364 IN CONST EFI_IP4_PROTOCOL *This, 365 OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL, 366 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, 367 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL 368 368 ) 369 369 { 370 IP4_PROTOCOL 371 IP4_SERVICE 372 EFI_IP4_CONFIG_DATA 373 EFI_STATUS 374 EFI_TPL 375 IP4_ADDR 370 IP4_PROTOCOL *IpInstance; 371 IP4_SERVICE *IpSb; 372 EFI_IP4_CONFIG_DATA *Config; 373 EFI_STATUS Status; 374 EFI_TPL OldTpl; 375 IP4_ADDR Ip; 376 376 377 377 if (This == NULL) { … … 388 388 // IsConfigured is "whether the station address has been configured" 389 389 // 390 Ip4ModeData->IsStarted 390 Ip4ModeData->IsStarted = (BOOLEAN)(IpInstance->State == IP4_STATE_CONFIGED); 391 391 CopyMem (&Ip4ModeData->ConfigData, &IpInstance->ConfigData, sizeof (Ip4ModeData->ConfigData)); 392 Ip4ModeData->IsConfigured 393 394 Ip4ModeData->GroupCount 395 Ip4ModeData->GroupTable = (EFI_IPv4_ADDRESS *)IpInstance->Groups;392 Ip4ModeData->IsConfigured = FALSE; 393 394 Ip4ModeData->GroupCount = IpInstance->GroupCount; 395 Ip4ModeData->GroupTable = (EFI_IPv4_ADDRESS *)IpInstance->Groups; 396 396 397 397 Ip4ModeData->IcmpTypeCount = 23; 398 398 Ip4ModeData->IcmpTypeList = mIp4SupportedIcmp; 399 399 400 Ip4ModeData->RouteTable 401 Ip4ModeData->RouteCount 400 Ip4ModeData->RouteTable = NULL; 401 Ip4ModeData->RouteCount = 0; 402 402 403 403 Ip4ModeData->MaxPacketSize = IpSb->MaxPacketSize; … … 410 410 // 411 411 if (Ip4ModeData->IsStarted) { 412 Config 412 Config = &Ip4ModeData->ConfigData; 413 413 414 414 Ip = HTONL (IpInstance->Interface->Ip); … … 443 443 return Status; 444 444 } 445 446 445 447 446 /** … … 465 464 EFI_STATUS 466 465 Ip4ServiceConfigMnp ( 467 IN IP4_SERVICE 468 IN BOOLEAN 466 IN IP4_SERVICE *IpSb, 467 IN BOOLEAN Force 469 468 ) 470 469 { 471 LIST_ENTRY 472 LIST_ENTRY 473 IP4_INTERFACE 474 IP4_PROTOCOL 475 BOOLEAN 476 BOOLEAN 477 EFI_STATUS 470 LIST_ENTRY *Entry; 471 LIST_ENTRY *ProtoEntry; 472 IP4_INTERFACE *IpIf; 473 IP4_PROTOCOL *IpInstance; 474 BOOLEAN Reconfig; 475 BOOLEAN PromiscReceive; 476 EFI_STATUS Status; 478 477 479 478 Reconfig = FALSE; … … 487 486 // 488 487 NET_LIST_FOR_EACH (Entry, &IpSb->Interfaces) { 489 490 488 IpIf = NET_LIST_USER_STRUCT (Entry, IP4_INTERFACE, Link); 491 489 IpIf->PromiscRecv = FALSE; … … 508 506 } 509 507 510 Reconfig = TRUE;508 Reconfig = TRUE; 511 509 IpSb->MnpConfigData.EnablePromiscuousReceive = PromiscReceive; 512 510 } … … 524 522 } 525 523 526 527 524 /** 528 525 Initialize the IP4_PROTOCOL structure to the unconfigured states. … … 534 531 VOID 535 532 Ip4InitProtocol ( 536 IN IP4_SERVICE 537 IN OUT IP4_PROTOCOL 533 IN IP4_SERVICE *IpSb, 534 IN OUT IP4_PROTOCOL *IpInstance 538 535 ) 539 536 { … … 545 542 CopyMem (&IpInstance->Ip4Proto, &mEfiIp4ProtocolTemplete, sizeof (IpInstance->Ip4Proto)); 546 543 IpInstance->State = IP4_STATE_UNCONFIGED; 547 IpInstance->InDestroy 544 IpInstance->InDestroy = FALSE; 548 545 IpInstance->Service = IpSb; 549 546 550 547 InitializeListHead (&IpInstance->Link); 551 NetMapInit 552 NetMapInit 548 NetMapInit (&IpInstance->RxTokens); 549 NetMapInit (&IpInstance->TxTokens); 553 550 InitializeListHead (&IpInstance->Received); 554 551 InitializeListHead (&IpInstance->Delivered); … … 557 554 EfiInitializeLock (&IpInstance->RecycleLock, TPL_NOTIFY); 558 555 } 559 560 556 561 557 /** … … 596 592 IpSb = IpInstance->Service; 597 593 598 Ip4Config2 594 Ip4Config2 = NULL; 599 595 600 596 // … … 647 643 if (IpIf != NULL) { 648 644 NET_GET_REF (IpIf); 649 650 645 } else { 651 646 IpIf = Ip4CreateInterface (IpSb->Mnp, IpSb->Controller, IpSb->Image); … … 687 682 if (Policy != Ip4Config2PolicyDhcp) { 688 683 Ip4Config2 = &IpSb->Ip4Config2Instance.Ip4Config2; 689 Policy = Ip4Config2PolicyDhcp;690 Status = Ip4Config2->SetData (691 Ip4Config2,692 Ip4Config2DataTypePolicy,693 sizeof (EFI_IP4_CONFIG2_POLICY),694 &Policy695 );684 Policy = Ip4Config2PolicyDhcp; 685 Status = Ip4Config2->SetData ( 686 Ip4Config2, 687 Ip4Config2DataTypePolicy, 688 sizeof (EFI_IP4_CONFIG2_POLICY), 689 &Policy 690 ); 696 691 if (EFI_ERROR (Status)) { 697 692 goto ON_ERROR; … … 716 711 IpInstance->Interface = IpIf; 717 712 if (IpIf->Arp != NULL) { 718 Arp = NULL;713 Arp = NULL; 719 714 Status = gBS->OpenProtocol ( 720 715 IpIf->ArpHandle, 721 716 &gEfiArpProtocolGuid, 722 (VOID **) 717 (VOID **)&Arp, 723 718 gIp4DriverBinding.DriverBindingHandle, 724 719 IpInstance->Handle, … … 730 725 } 731 726 } 727 732 728 InsertTailList (&IpIf->IpInstances, &IpInstance->AddrLink); 733 729 734 730 CopyMem (&IpInstance->ConfigData, Config, sizeof (IpInstance->ConfigData)); 735 IpInstance->State 731 IpInstance->State = IP4_STATE_CONFIGED; 736 732 737 733 // … … 752 748 } 753 749 754 755 750 /** 756 751 Clean up the IP4 child, release all the resources used by it. … … 764 759 EFI_STATUS 765 760 Ip4CleanProtocol ( 766 IN IP4_PROTOCOL 761 IN IP4_PROTOCOL *IpInstance 767 762 ) 768 763 { … … 781 776 // 782 777 if (!IsListEmpty (&IpInstance->Delivered)) { 783 ;784 778 } 785 779 … … 794 788 ); 795 789 } 790 796 791 Ip4FreeInterface (IpInstance->Interface, IpInstance); 797 792 IpInstance->Interface = NULL; … … 815 810 if (IpInstance->Groups != NULL) { 816 811 FreePool (IpInstance->Groups); 817 IpInstance->Groups 818 IpInstance->GroupCount 812 IpInstance->Groups = NULL; 813 IpInstance->GroupCount = 0; 819 814 } 820 815 … … 825 820 return EFI_SUCCESS; 826 821 } 827 828 822 829 823 /** … … 873 867 EFIAPI 874 868 EfiIp4Configure ( 875 IN EFI_IP4_PROTOCOL 876 IN EFI_IP4_CONFIG_DATA 869 IN EFI_IP4_PROTOCOL *This, 870 IN EFI_IP4_CONFIG_DATA *IpConfigData OPTIONAL 877 871 ) 878 872 { 879 IP4_PROTOCOL 880 EFI_IP4_CONFIG_DATA 881 EFI_TPL 882 EFI_STATUS 883 BOOLEAN 884 IP4_ADDR 885 IP4_ADDR 873 IP4_PROTOCOL *IpInstance; 874 EFI_IP4_CONFIG_DATA *Current; 875 EFI_TPL OldTpl; 876 EFI_STATUS Status; 877 BOOLEAN AddrOk; 878 IP4_ADDR IpAddress; 879 IP4_ADDR SubnetMask; 886 880 887 881 // … … 899 893 // 900 894 if (IpConfigData != NULL) { 901 902 895 CopyMem (&IpAddress, &IpConfigData->StationAddress, sizeof (IP4_ADDR)); 903 896 CopyMem (&SubnetMask, &IpConfigData->SubnetMask, sizeof (IP4_ADDR)); … … 932 925 933 926 if (!Current->UseDefaultAddress && 934 (!EFI_IP4_EQUAL (&Current->StationAddress, &IpConfigData->StationAddress) || 935 !EFI_IP4_EQUAL (&Current->SubnetMask, &IpConfigData->SubnetMask))) { 927 (!EFI_IP4_EQUAL (&Current->StationAddress, &IpConfigData->StationAddress) || 928 !EFI_IP4_EQUAL (&Current->SubnetMask, &IpConfigData->SubnetMask))) 929 { 936 930 Status = EFI_ALREADY_STARTED; 937 931 goto ON_EXIT; … … 972 966 gBS->RestoreTPL (OldTpl); 973 967 return Status; 974 975 968 } 976 977 969 978 970 /** … … 993 985 EFI_STATUS 994 986 Ip4Groups ( 995 IN IP4_PROTOCOL 996 IN BOOLEAN 997 IN EFI_IPv4_ADDRESS 987 IN IP4_PROTOCOL *IpInstance, 988 IN BOOLEAN JoinFlag, 989 IN EFI_IPv4_ADDRESS *GroupAddress OPTIONAL 998 990 ) 999 991 { 1000 IP4_ADDR 1001 IP4_ADDR 1002 UINT32 992 IP4_ADDR *Members; 993 IP4_ADDR Group; 994 UINT32 Index; 1003 995 1004 996 // … … 1046 1038 // is decremented each time an address is removed.. 1047 1039 // 1048 for (Index = IpInstance->GroupCount; Index > 0 1040 for (Index = IpInstance->GroupCount; Index > 0; Index--) { 1049 1041 ASSERT (IpInstance->Groups != NULL); 1050 1042 Group = IpInstance->Groups[Index - 1]; … … 1072 1064 return ((GroupAddress != NULL) ? EFI_NOT_FOUND : EFI_SUCCESS); 1073 1065 } 1074 1075 1066 1076 1067 /** … … 1107 1098 EFIAPI 1108 1099 EfiIp4Groups ( 1109 IN EFI_IP4_PROTOCOL 1110 IN BOOLEAN 1111 IN EFI_IPv4_ADDRESS 1100 IN EFI_IP4_PROTOCOL *This, 1101 IN BOOLEAN JoinFlag, 1102 IN EFI_IPv4_ADDRESS *GroupAddress OPTIONAL 1112 1103 ) 1113 1104 { 1114 IP4_PROTOCOL 1115 EFI_STATUS 1116 EFI_TPL 1117 IP4_ADDR 1105 IP4_PROTOCOL *IpInstance; 1106 EFI_STATUS Status; 1107 EFI_TPL OldTpl; 1108 IP4_ADDR McastIp; 1118 1109 1119 1110 if ((This == NULL) || (JoinFlag && (GroupAddress == NULL))) { … … 1148 1139 return Status; 1149 1140 } 1150 1151 1141 1152 1142 /** … … 1203 1193 EFIAPI 1204 1194 EfiIp4Routes ( 1205 IN EFI_IP4_PROTOCOL 1206 IN BOOLEAN 1207 IN EFI_IPv4_ADDRESS 1208 IN EFI_IPv4_ADDRESS 1209 IN EFI_IPv4_ADDRESS 1195 IN EFI_IP4_PROTOCOL *This, 1196 IN BOOLEAN DeleteRoute, 1197 IN EFI_IPv4_ADDRESS *SubnetAddress, 1198 IN EFI_IPv4_ADDRESS *SubnetMask, 1199 IN EFI_IPv4_ADDRESS *GatewayAddress 1210 1200 ) 1211 1201 { 1212 IP4_PROTOCOL 1213 IP4_INTERFACE 1214 IP4_ADDR 1215 IP4_ADDR 1216 IP4_ADDR 1217 EFI_STATUS 1218 EFI_TPL 1202 IP4_PROTOCOL *IpInstance; 1203 IP4_INTERFACE *IpIf; 1204 IP4_ADDR Dest; 1205 IP4_ADDR Netmask; 1206 IP4_ADDR Nexthop; 1207 EFI_STATUS Status; 1208 EFI_TPL OldTpl; 1219 1209 1220 1210 // … … 1222 1212 // 1223 1213 if ((This == NULL) || (SubnetAddress == NULL) || 1224 (SubnetMask == NULL) || (GatewayAddress == NULL)) { 1214 (SubnetMask == NULL) || (GatewayAddress == NULL)) 1215 { 1225 1216 return EFI_INVALID_PARAMETER; 1226 1217 } … … 1247 1238 Nexthop = NTOHL (Nexthop); 1248 1239 1249 IpIf 1240 IpIf = IpInstance->Interface; 1250 1241 1251 1242 if (!IP4_IS_VALID_NETMASK (Netmask)) { … … 1258 1249 // 1259 1250 if ((Nexthop != IP4_ALLZERO_ADDRESS) && 1260 (( IpIf->SubnetMask != IP4_ALLONE_ADDRESS&& !IP4_NET_EQUAL (Nexthop, IpIf->Ip, IpIf->SubnetMask)) ||1261 IP4_IS_BROADCAST (Ip4GetNetCast (Nexthop, IpIf)))) {1262 1251 (((IpIf->SubnetMask != IP4_ALLONE_ADDRESS) && !IP4_NET_EQUAL (Nexthop, IpIf->Ip, IpIf->SubnetMask)) || 1252 IP4_IS_BROADCAST (Ip4GetNetCast (Nexthop, IpIf)))) 1253 { 1263 1254 Status = EFI_INVALID_PARAMETER; 1264 1255 goto ON_EXIT; … … 1276 1267 } 1277 1268 1278 1279 1269 /** 1280 1270 Check whether the user's token or event has already … … 1294 1284 EFIAPI 1295 1285 Ip4TokenExist ( 1296 IN NET_MAP 1297 IN NET_MAP_ITEM 1298 IN VOID 1286 IN NET_MAP *Map, 1287 IN NET_MAP_ITEM *Item, 1288 IN VOID *Context 1299 1289 ) 1300 1290 { … … 1302 1292 EFI_IP4_COMPLETION_TOKEN *TokenInItem; 1303 1293 1304 Token = (EFI_IP4_COMPLETION_TOKEN *) 1305 TokenInItem = (EFI_IP4_COMPLETION_TOKEN *) 1294 Token = (EFI_IP4_COMPLETION_TOKEN *)Context; 1295 TokenInItem = (EFI_IP4_COMPLETION_TOKEN *)Item->Key; 1306 1296 1307 1297 if ((Token == TokenInItem) || (Token->Event == TokenInItem->Event)) { … … 1326 1316 EFI_STATUS 1327 1317 Ip4TxTokenValid ( 1328 IN EFI_IP4_COMPLETION_TOKEN 1329 IN IP4_INTERFACE 1330 IN BOOLEAN 1318 IN EFI_IP4_COMPLETION_TOKEN *Token, 1319 IN IP4_INTERFACE *IpIf, 1320 IN BOOLEAN RawData 1331 1321 ) 1332 1322 { 1333 EFI_IP4_TRANSMIT_DATA 1334 EFI_IP4_OVERRIDE_DATA 1335 IP4_ADDR 1336 IP4_ADDR 1337 UINT32 1338 UINT32 1339 UINT32 1323 EFI_IP4_TRANSMIT_DATA *TxData; 1324 EFI_IP4_OVERRIDE_DATA *Override; 1325 IP4_ADDR Src; 1326 IP4_ADDR Gateway; 1327 UINT32 Offset; 1328 UINT32 Index; 1329 UINT32 HeadLen; 1340 1330 1341 1331 if ((Token == NULL) || (Token->Event == NULL) || (Token->Packet.TxData == NULL)) { … … 1360 1350 for (Index = 0; Index < TxData->FragmentCount; Index++) { 1361 1351 if ((TxData->FragmentTable[Index].FragmentBuffer == NULL) || 1362 (TxData->FragmentTable[Index].FragmentLength == 0)) {1363 1352 (TxData->FragmentTable[Index].FragmentLength == 0)) 1353 { 1364 1354 return EFI_INVALID_PARAMETER; 1365 1355 } … … 1408 1398 if ((NetGetIpClass (Src) > IP4_ADDR_CLASSC) || 1409 1399 (Src == IP4_ALLONE_ADDRESS) || 1410 IP4_IS_BROADCAST (Ip4GetNetCast (Src, IpIf))) {1411 1400 IP4_IS_BROADCAST (Ip4GetNetCast (Src, IpIf))) 1401 { 1412 1402 return EFI_INVALID_PARAMETER; 1413 1403 } … … 1420 1410 ((NetGetIpClass (Gateway) > IP4_ADDR_CLASSC) || 1421 1411 !IP4_NET_EQUAL (Gateway, IpIf->Ip, IpIf->SubnetMask) || 1422 IP4_IS_BROADCAST (Ip4GetNetCast (Gateway, IpIf)))) {1423 1412 IP4_IS_BROADCAST (Ip4GetNetCast (Gateway, IpIf)))) 1413 { 1424 1414 return EFI_INVALID_PARAMETER; 1425 1415 } … … 1432 1422 1433 1423 if ((HeadLen > IP4_MAX_HEADLEN) || 1434 (TxData->TotalDataLength + HeadLen > IP4_MAX_PACKET_SIZE)) {1435 1424 (TxData->TotalDataLength + HeadLen > IP4_MAX_PACKET_SIZE)) 1425 { 1436 1426 return EFI_BAD_BUFFER_SIZE; 1437 1427 } … … 1439 1429 return EFI_SUCCESS; 1440 1430 } 1441 1442 1431 1443 1432 /** … … 1465 1454 EFIAPI 1466 1455 Ip4FreeTxToken ( 1467 IN VOID 1456 IN VOID *Context 1468 1457 ) 1469 1458 { 1470 IP4_TXTOKEN_WRAP 1471 NET_MAP_ITEM 1472 1473 Wrap = (IP4_TXTOKEN_WRAP *) 1459 IP4_TXTOKEN_WRAP *Wrap; 1460 NET_MAP_ITEM *Item; 1461 1462 Wrap = (IP4_TXTOKEN_WRAP *)Context; 1474 1463 1475 1464 // … … 1501 1490 FreePool (Wrap); 1502 1491 } 1503 1504 1492 1505 1493 /** … … 1515 1503 VOID 1516 1504 Ip4OnPacketSent ( 1517 IP4_PROTOCOL 1518 NET_BUF 1519 EFI_STATUS 1520 UINT32 1521 VOID 1505 IP4_PROTOCOL *Ip4Instance, 1506 NET_BUF *Packet, 1507 EFI_STATUS IoStatus, 1508 UINT32 Flag, 1509 VOID *Context 1522 1510 ) 1523 1511 { 1524 IP4_TXTOKEN_WRAP 1512 IP4_TXTOKEN_WRAP *Wrap; 1525 1513 1526 1514 // … … 1537 1525 // in Ip4FreeTxToken and Ip4Output for information. 1538 1526 // 1539 Wrap = (IP4_TXTOKEN_WRAP *) 1527 Wrap = (IP4_TXTOKEN_WRAP *)Context; 1540 1528 Wrap->Token->Status = IoStatus; 1541 1529 1542 1530 NetbufFree (Wrap->Packet); 1543 1531 } 1544 1545 1532 1546 1533 /** … … 1576 1563 EFIAPI 1577 1564 EfiIp4Transmit ( 1578 IN EFI_IP4_PROTOCOL *This,1579 IN EFI_IP4_COMPLETION_TOKEN *Token1565 IN EFI_IP4_PROTOCOL *This, 1566 IN EFI_IP4_COMPLETION_TOKEN *Token 1580 1567 ) 1581 1568 { 1582 IP4_SERVICE 1583 IP4_PROTOCOL 1584 IP4_INTERFACE 1585 IP4_TXTOKEN_WRAP 1586 EFI_IP4_TRANSMIT_DATA 1587 EFI_IP4_CONFIG_DATA 1588 EFI_IP4_OVERRIDE_DATA 1589 IP4_HEAD 1590 IP4_ADDR 1591 EFI_STATUS 1592 EFI_TPL 1593 BOOLEAN 1594 UINT32 1595 UINT8 1596 UINT32 1597 UINT8 1598 VOID 1569 IP4_SERVICE *IpSb; 1570 IP4_PROTOCOL *IpInstance; 1571 IP4_INTERFACE *IpIf; 1572 IP4_TXTOKEN_WRAP *Wrap; 1573 EFI_IP4_TRANSMIT_DATA *TxData; 1574 EFI_IP4_CONFIG_DATA *Config; 1575 EFI_IP4_OVERRIDE_DATA *Override; 1576 IP4_HEAD Head; 1577 IP4_ADDR GateWay; 1578 EFI_STATUS Status; 1579 EFI_TPL OldTpl; 1580 BOOLEAN DontFragment; 1581 UINT32 HeadLen; 1582 UINT8 RawHdrLen; 1583 UINT32 OptionsLength; 1584 UINT8 *OptionsBuffer; 1585 VOID *FirstFragment; 1599 1586 1600 1587 if (This == NULL) { … … 1608 1595 } 1609 1596 1610 OldTpl 1611 1612 IpSb 1613 IpIf 1614 Config 1597 OldTpl = gBS->RaiseTPL (TPL_CALLBACK); 1598 1599 IpSb = IpInstance->Service; 1600 IpIf = IpInstance->Interface; 1601 Config = &IpInstance->ConfigData; 1615 1602 1616 1603 if (Config->UseDefaultAddress && IP4_NO_MAPPING (IpInstance)) { … … 1652 1639 CopyMem (&RawHdrLen, FirstFragment, sizeof (UINT8)); 1653 1640 1654 RawHdrLen = (UINT8) 1641 RawHdrLen = (UINT8)(RawHdrLen & 0x0f); 1655 1642 if (RawHdrLen < 5) { 1656 1643 Status = EFI_INVALID_PARAMETER; … … 1658 1645 } 1659 1646 1660 RawHdrLen = (UINT8) 1647 RawHdrLen = (UINT8)(RawHdrLen << 2); 1661 1648 1662 1649 CopyMem (&Head, FirstFragment, IP4_MIN_HEADLEN); … … 1681 1668 } else { 1682 1669 OptionsLength = RawHdrLen - IP4_MIN_HEADLEN; 1683 OptionsBuffer = (UINT8 *) 1670 OptionsBuffer = (UINT8 *)FirstFragment + IP4_MIN_HEADLEN; 1684 1671 } 1685 1672 … … 1687 1674 // Trim off IPv4 header and options from first fragment. 1688 1675 // 1689 TxData->FragmentTable[0].FragmentBuffer = (UINT8 *) 1676 TxData->FragmentTable[0].FragmentBuffer = (UINT8 *)FirstFragment + RawHdrLen; 1690 1677 TxData->FragmentTable[0].FragmentLength = TxData->FragmentTable[0].FragmentLength - RawHdrLen; 1691 1678 } else { … … 1718 1705 1719 1706 OptionsLength = TxData->OptionsLength; 1720 OptionsBuffer = (UINT8 *) 1707 OptionsBuffer = (UINT8 *)(TxData->OptionsBuffer); 1721 1708 } 1722 1709 … … 1739 1726 } 1740 1727 1741 Wrap->IpInstance 1742 Wrap->Token 1743 Wrap->Sent 1744 Wrap->Life 1745 Wrap->Packet 1746 (NET_FRAGMENT *)TxData->FragmentTable,1747 1748 1749 1750 1751 1752 1728 Wrap->IpInstance = IpInstance; 1729 Wrap->Token = Token; 1730 Wrap->Sent = FALSE; 1731 Wrap->Life = IP4_US_TO_SEC (Config->TransmitTimeout); 1732 Wrap->Packet = NetbufFromExt ( 1733 (NET_FRAGMENT *)TxData->FragmentTable, 1734 TxData->FragmentCount, 1735 IP4_MAX_HEADLEN, 1736 0, 1737 Ip4FreeTxToken, 1738 Wrap 1739 ); 1753 1740 1754 1741 if (Wrap->Packet == NULL) { … … 1769 1756 // Restore pointer of first fragment in RawData mode. 1770 1757 // 1771 TxData->FragmentTable[0].FragmentBuffer = (UINT8 *) 1758 TxData->FragmentTable[0].FragmentBuffer = (UINT8 *)FirstFragment; 1772 1759 } 1773 1760 … … 1801 1788 // Restore pointer of first fragment in RawData mode. 1802 1789 // 1803 TxData->FragmentTable[0].FragmentBuffer = (UINT8 *) 1790 TxData->FragmentTable[0].FragmentBuffer = (UINT8 *)FirstFragment; 1804 1791 } 1805 1792 … … 1811 1798 // Restore pointer of first fragment in RawData mode. 1812 1799 // 1813 TxData->FragmentTable[0].FragmentBuffer = (UINT8 *) 1800 TxData->FragmentTable[0].FragmentBuffer = (UINT8 *)FirstFragment; 1814 1801 } 1815 1802 … … 1818 1805 return Status; 1819 1806 } 1820 1821 1807 1822 1808 /** … … 1855 1841 EFIAPI 1856 1842 EfiIp4Receive ( 1857 IN EFI_IP4_PROTOCOL *This,1858 IN EFI_IP4_COMPLETION_TOKEN *Token1843 IN EFI_IP4_PROTOCOL *This, 1844 IN EFI_IP4_COMPLETION_TOKEN *Token 1859 1845 ) 1860 1846 { 1861 IP4_PROTOCOL 1862 EFI_STATUS 1863 EFI_TPL 1847 IP4_PROTOCOL *IpInstance; 1848 EFI_STATUS Status; 1849 EFI_TPL OldTpl; 1864 1850 1865 1851 // … … 1910 1896 return Status; 1911 1897 } 1912 1913 1898 1914 1899 /** … … 1932 1917 EFIAPI 1933 1918 Ip4CancelTxTokens ( 1934 IN NET_MAP 1935 IN NET_MAP_ITEM 1936 IN VOID 1919 IN NET_MAP *Map, 1920 IN NET_MAP_ITEM *Item, 1921 IN VOID *Context 1937 1922 ) 1938 1923 { … … 1940 1925 IP4_TXTOKEN_WRAP *Wrap; 1941 1926 1942 Token = (EFI_IP4_COMPLETION_TOKEN *) 1927 Token = (EFI_IP4_COMPLETION_TOKEN *)Context; 1943 1928 1944 1929 // … … 1950 1935 } 1951 1936 1952 Wrap = (IP4_TXTOKEN_WRAP *) 1937 Wrap = (IP4_TXTOKEN_WRAP *)Item->Value; 1953 1938 ASSERT (Wrap != NULL); 1954 1939 … … 1969 1954 return EFI_SUCCESS; 1970 1955 } 1971 1972 1956 1973 1957 /** … … 1988 1972 EFIAPI 1989 1973 Ip4CancelRxTokens ( 1990 IN NET_MAP 1991 IN NET_MAP_ITEM 1992 IN VOID 1974 IN NET_MAP *Map, 1975 IN NET_MAP_ITEM *Item, 1976 IN VOID *Context 1993 1977 ) 1994 1978 { … … 1996 1980 EFI_IP4_COMPLETION_TOKEN *This; 1997 1981 1998 Token = (EFI_IP4_COMPLETION_TOKEN *) 1982 Token = (EFI_IP4_COMPLETION_TOKEN *)Context; 1999 1983 This = Item->Key; 2000 1984 … … 2015 1999 return EFI_SUCCESS; 2016 2000 } 2017 2018 2001 2019 2002 /** … … 2032 2015 EFI_STATUS 2033 2016 Ip4Cancel ( 2034 IN IP4_PROTOCOL *IpInstance,2035 IN EFI_IP4_COMPLETION_TOKEN *Token OPTIONAL2017 IN IP4_PROTOCOL *IpInstance, 2018 IN EFI_IP4_COMPLETION_TOKEN *Token OPTIONAL 2036 2019 ) 2037 2020 { 2038 EFI_STATUS 2021 EFI_STATUS Status; 2039 2022 2040 2023 // … … 2084 2067 // 2085 2068 if (!NetMapIsEmpty (&IpInstance->TxTokens) || 2086 !NetMapIsEmpty (&IpInstance->RxTokens)) {2087 2069 !NetMapIsEmpty (&IpInstance->RxTokens)) 2070 { 2088 2071 return EFI_DEVICE_ERROR; 2089 2072 } … … 2091 2074 return EFI_SUCCESS; 2092 2075 } 2093 2094 2076 2095 2077 /** … … 2125 2107 EFIAPI 2126 2108 EfiIp4Cancel ( 2127 IN EFI_IP4_PROTOCOL *This,2128 IN EFI_IP4_COMPLETION_TOKEN *Token OPTIONAL2109 IN EFI_IP4_PROTOCOL *This, 2110 IN EFI_IP4_COMPLETION_TOKEN *Token OPTIONAL 2129 2111 ) 2130 2112 { 2131 IP4_PROTOCOL 2132 EFI_STATUS 2133 EFI_TPL 2113 IP4_PROTOCOL *IpInstance; 2114 EFI_STATUS Status; 2115 EFI_TPL OldTpl; 2134 2116 2135 2117 if (This == NULL) { … … 2157 2139 return Status; 2158 2140 } 2159 2160 2141 2161 2142 /** … … 2189 2170 EFIAPI 2190 2171 EfiIp4Poll ( 2191 IN EFI_IP4_PROTOCOL 2172 IN EFI_IP4_PROTOCOL *This 2192 2173 ) 2193 2174 { … … 2231 2212 EFIAPI 2232 2213 Ip4SentPacketTicking ( 2233 IN NET_MAP 2234 IN NET_MAP_ITEM 2235 IN VOID 2214 IN NET_MAP *Map, 2215 IN NET_MAP_ITEM *Item, 2216 IN VOID *Context 2236 2217 ) 2237 2218 { 2238 IP4_TXTOKEN_WRAP 2239 2240 Wrap = (IP4_TXTOKEN_WRAP *) 2219 IP4_TXTOKEN_WRAP *Wrap; 2220 2221 Wrap = (IP4_TXTOKEN_WRAP *)Item->Value; 2241 2222 ASSERT (Wrap != NULL); 2242 2223 … … 2260 2241 EFIAPI 2261 2242 Ip4TimerTicking ( 2262 IN EFI_EVENT 2263 IN VOID 2243 IN EFI_EVENT Event, 2244 IN VOID *Context 2264 2245 ) 2265 2246 { 2266 IP4_SERVICE 2267 2268 IpSb = (IP4_SERVICE *) 2247 IP4_SERVICE *IpSb; 2248 2249 IpSb = (IP4_SERVICE *)Context; 2269 2250 NET_CHECK_SIGNATURE (IpSb, IP4_SERVICE_SIGNATURE); 2270 2251 … … 2288 2269 EFIAPI 2289 2270 Ip4TimerReconfigChecking ( 2290 IN EFI_EVENT 2291 IN VOID 2271 IN EFI_EVENT Event, 2272 IN VOID *Context 2292 2273 ) 2293 2274 { 2294 IP4_SERVICE 2295 BOOLEAN 2296 EFI_STATUS 2297 EFI_SIMPLE_NETWORK_MODE 2298 2299 IpSb = (IP4_SERVICE *) 2275 IP4_SERVICE *IpSb; 2276 BOOLEAN OldMediaPresent; 2277 EFI_STATUS Status; 2278 EFI_SIMPLE_NETWORK_MODE SnpModeData; 2279 2280 IpSb = (IP4_SERVICE *)Context; 2300 2281 NET_CHECK_SIGNATURE (IpSb, IP4_SERVICE_SIGNATURE); 2301 2282
Note:
See TracChangeset
for help on using the changeset viewer.