Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/NetworkPkg/Ip4Dxe/Ip4Input.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/Ip4Input.c
r85718 r99404 10 10 11 11 #include "Ip4Impl.h" 12 13 12 14 13 /** … … 28 27 IP4_ASSEMBLE_ENTRY * 29 28 Ip4CreateAssembleEntry ( 30 IN IP4_ADDR Dst, 31 IN IP4_ADDR Src, 32 IN UINT16 Id, 33 IN UINT8 Protocol 34 ) 35 { 36 37 IP4_ASSEMBLE_ENTRY *Assemble; 29 IN IP4_ADDR Dst, 30 IN IP4_ADDR Src, 31 IN UINT16 Id, 32 IN UINT8 Protocol 33 ) 34 { 35 IP4_ASSEMBLE_ENTRY *Assemble; 38 36 39 37 Assemble = AllocatePool (sizeof (IP4_ASSEMBLE_ENTRY)); … … 59 57 } 60 58 61 62 59 /** 63 60 Release all the fragments of a packet, then free the assemble entry. … … 68 65 VOID 69 66 Ip4FreeAssembleEntry ( 70 IN IP4_ASSEMBLE_ENTRY 71 ) 72 { 73 LIST_ENTRY 74 LIST_ENTRY 75 NET_BUF 67 IN IP4_ASSEMBLE_ENTRY *Assemble 68 ) 69 { 70 LIST_ENTRY *Entry; 71 LIST_ENTRY *Next; 72 NET_BUF *Fragment; 76 73 77 74 NET_LIST_FOR_EACH_SAFE (Entry, Next, &Assemble->Fragments) { … … 85 82 } 86 83 87 88 84 /** 89 85 Initialize an already allocated assemble table. This is generally … … 95 91 VOID 96 92 Ip4InitAssembleTable ( 97 IN OUT IP4_ASSEMBLE_TABLE 98 ) 99 { 100 UINT32 93 IN OUT IP4_ASSEMBLE_TABLE *Table 94 ) 95 { 96 UINT32 Index; 101 97 102 98 for (Index = 0; Index < IP4_ASSEMLE_HASH_SIZE; Index++) { … … 105 101 } 106 102 107 108 103 /** 109 104 Clean up the assemble table: remove all the fragments … … 115 110 VOID 116 111 Ip4CleanAssembleTable ( 117 IN IP4_ASSEMBLE_TABLE 118 ) 119 { 120 LIST_ENTRY 121 LIST_ENTRY 122 IP4_ASSEMBLE_ENTRY 123 UINT32 112 IN IP4_ASSEMBLE_TABLE *Table 113 ) 114 { 115 LIST_ENTRY *Entry; 116 LIST_ENTRY *Next; 117 IP4_ASSEMBLE_ENTRY *Assemble; 118 UINT32 Index; 124 119 125 120 for (Index = 0; Index < IP4_ASSEMLE_HASH_SIZE; Index++) { … … 133 128 } 134 129 135 136 130 /** 137 131 Trim the packet to fit in [Start, End), and update the per … … 145 139 VOID 146 140 Ip4TrimPacket ( 147 IN OUT NET_BUF 148 IN INTN 149 IN INTN 150 ) 151 { 152 IP4_CLIP_INFO 153 INTN 141 IN OUT NET_BUF *Packet, 142 IN INTN Start, 143 IN INTN End 144 ) 145 { 146 IP4_CLIP_INFO *Info; 147 INTN Len; 154 148 155 149 Info = IP4_GET_CLIP_INFO (Packet); … … 158 152 ASSERT ((Info->Start < End) && (Start < Info->End)); 159 153 160 154 if (Info->Start < Start) { 161 155 Len = Start - Info->Start; 162 156 163 NetbufTrim (Packet, (UINT32) 157 NetbufTrim (Packet, (UINT32)Len, NET_BUF_HEAD); 164 158 Info->Start = Start; 165 159 Info->Length -= Len; … … 169 163 Len = End - Info->End; 170 164 171 NetbufTrim (Packet, (UINT32) 165 NetbufTrim (Packet, (UINT32)Len, NET_BUF_TAIL); 172 166 Info->End = End; 173 167 Info->Length -= Len; 174 168 } 175 169 } 176 177 170 178 171 /** … … 187 180 EFIAPI 188 181 Ip4OnFreeFragments ( 189 IN VOID *Arg 190 ) 191 { 192 Ip4FreeAssembleEntry ((IP4_ASSEMBLE_ENTRY *) Arg); 193 } 194 182 IN VOID *Arg 183 ) 184 { 185 Ip4FreeAssembleEntry ((IP4_ASSEMBLE_ENTRY *)Arg); 186 } 195 187 196 188 /** … … 211 203 NET_BUF * 212 204 Ip4Reassemble ( 213 IN OUT IP4_ASSEMBLE_TABLE 214 IN OUT NET_BUF 215 ) 216 { 217 IP4_HEAD 218 IP4_CLIP_INFO 219 IP4_CLIP_INFO 220 IP4_ASSEMBLE_ENTRY 221 LIST_ENTRY 222 LIST_ENTRY 223 LIST_ENTRY 224 NET_BUF 225 NET_BUF 226 INTN 227 228 IpHead 229 This 205 IN OUT IP4_ASSEMBLE_TABLE *Table, 206 IN OUT NET_BUF *Packet 207 ) 208 { 209 IP4_HEAD *IpHead; 210 IP4_CLIP_INFO *This; 211 IP4_CLIP_INFO *Node; 212 IP4_ASSEMBLE_ENTRY *Assemble; 213 LIST_ENTRY *Head; 214 LIST_ENTRY *Prev; 215 LIST_ENTRY *Cur; 216 NET_BUF *Fragment; 217 NET_BUF *NewPacket; 218 INTN Index; 219 220 IpHead = Packet->Ip.Ip4; 221 This = IP4_GET_CLIP_INFO (Packet); 230 222 231 223 ASSERT (IpHead != NULL); … … 234 226 // First: find the related assemble entry 235 227 // 236 Assemble 237 Index 228 Assemble = NULL; 229 Index = IP4_ASSEMBLE_HASH (IpHead->Dst, IpHead->Src, IpHead->Id, IpHead->Protocol); 238 230 239 231 NET_LIST_FOR_EACH (Cur, &Table->Bucket[Index]) { … … 241 233 242 234 if ((Assemble->Dst == IpHead->Dst) && (Assemble->Src == IpHead->Src) && 243 (Assemble->Id == IpHead->Id) && (Assemble->Protocol == IpHead->Protocol)) { 235 (Assemble->Id == IpHead->Id) && (Assemble->Protocol == IpHead->Protocol)) 236 { 244 237 break; 245 238 } … … 263 256 InsertHeadList (&Table->Bucket[Index], &Assemble->Link); 264 257 } 258 265 259 // 266 260 // Assemble shouldn't be NULL here … … 290 284 // 291 285 if ((Prev = Cur->BackLink) != Head) { 292 Fragment 293 Node 286 Fragment = NET_LIST_USER_STRUCT (Prev, NET_BUF, List); 287 Node = IP4_GET_CLIP_INFO (Fragment); 294 288 295 289 if (This->Start < Node->End) { … … 365 359 ASSERT (Assemble->Head == NULL); 366 360 367 Assemble->Head 368 Assemble->Info 361 Assemble->Head = IpHead; 362 Assemble->Info = IP4_GET_CLIP_INFO (Packet); 369 363 } 370 364 … … 384 378 // 385 379 if ((Assemble->TotalLen != 0) && (Assemble->CurLen >= Assemble->TotalLen)) { 386 387 380 RemoveEntryList (&Assemble->Link); 388 381 … … 445 438 EFIAPI 446 439 Ip4IpSecFree ( 447 IN VOID 448 ) 449 { 450 IP4_IPSEC_WRAP 451 452 Wrap = (IP4_IPSEC_WRAP *) 440 IN VOID *Arg 441 ) 442 { 443 IP4_IPSEC_WRAP *Wrap; 444 445 Wrap = (IP4_IPSEC_WRAP *)Arg; 453 446 454 447 if (Wrap->IpSecRecycleSignal != NULL) { … … 497 490 ) 498 491 { 499 NET_FRAGMENT 500 NET_FRAGMENT 501 UINT32 502 UINT32 503 EFI_EVENT 504 NET_BUF 505 IP4_TXTOKEN_WRAP 506 IP4_IPSEC_WRAP 507 EFI_STATUS 508 IP4_HEAD 509 510 Status 492 NET_FRAGMENT *FragmentTable; 493 NET_FRAGMENT *OriginalFragmentTable; 494 UINT32 FragmentCount; 495 UINT32 OriginalFragmentCount; 496 EFI_EVENT RecycleEvent; 497 NET_BUF *Packet; 498 IP4_TXTOKEN_WRAP *TxWrap; 499 IP4_IPSEC_WRAP *IpSecWrap; 500 EFI_STATUS Status; 501 IP4_HEAD ZeroHead; 502 503 Status = EFI_SUCCESS; 511 504 512 505 if (!mIpSec2Installed) { 513 506 goto ON_EXIT; 514 507 } 508 515 509 ASSERT (mIpSec != NULL); 516 510 … … 519 513 IpSecWrap = NULL; 520 514 FragmentTable = NULL; 521 TxWrap = (IP4_TXTOKEN_WRAP *) 515 TxWrap = (IP4_TXTOKEN_WRAP *)Context; 522 516 FragmentCount = Packet->BlockOpNum; 523 517 … … 572 566 IpSb->Controller, 573 567 IP_VERSION_4, 574 (VOID *) 568 (VOID *)(*Head), 575 569 &(*Head)->Protocol, 576 (VOID **) 570 (VOID **)Options, 577 571 OptionsLen, 578 (EFI_IPSEC_FRAGMENT_DATA **) 572 (EFI_IPSEC_FRAGMENT_DATA **)(&FragmentTable), 579 573 &FragmentCount, 580 574 Direction, … … 591 585 } 592 586 593 if ( OriginalFragmentTable == FragmentTable && OriginalFragmentCount == FragmentCount) {587 if ((OriginalFragmentTable == FragmentTable) && (OriginalFragmentCount == FragmentCount)) { 594 588 // 595 589 // For ByPass Packet … … 604 598 } 605 599 606 if (Direction == EfiIPsecOutBound && TxWrap != NULL) { 607 600 if ((Direction == EfiIPsecOutBound) && (TxWrap != NULL)) { 608 601 TxWrap->IpSecRecycleSignal = RecycleEvent; 609 602 TxWrap->Packet = NetbufFromExt ( … … 621 614 // 622 615 TxWrap->Packet = *Netbuf; 623 Status = EFI_OUT_OF_RESOURCES;616 Status = EFI_OUT_OF_RESOURCES; 624 617 goto ON_EXIT; 625 618 } … … 630 623 NetIpSecNetbufFree (*Netbuf); 631 624 *Netbuf = TxWrap->Packet; 632 633 625 } else { 634 635 626 IpSecWrap = AllocateZeroPool (sizeof (IP4_IPSEC_WRAP)); 636 627 … … 660 651 } 661 652 662 if ( Direction == EfiIPsecInBound && 0 != CompareMem (*Head, &ZeroHead, sizeof (IP4_HEAD))) {653 if ((Direction == EfiIPsecInBound) && (0 != CompareMem (*Head, &ZeroHead, sizeof (IP4_HEAD)))) { 663 654 Ip4PrependHead (Packet, *Head, *Options, *OptionsLen); 664 655 Ip4NtohHead (Packet->Ip.Ip4); … … 671 662 ); 672 663 } 664 673 665 *Netbuf = Packet; 674 666 } … … 696 688 EFI_STATUS 697 689 Ip4PreProcessPacket ( 698 IN IP4_SERVICE 699 IN OUT NET_BUF 700 IN IP4_HEAD 701 IN UINT8 702 IN UINT32 703 IN UINT32 704 ) 705 { 706 IP4_CLIP_INFO 707 UINT32 708 UINT32 709 UINT16 690 IN IP4_SERVICE *IpSb, 691 IN OUT NET_BUF **Packet, 692 IN IP4_HEAD *Head, 693 IN UINT8 *Option, 694 IN UINT32 OptionLen, 695 IN UINT32 Flag 696 ) 697 { 698 IP4_CLIP_INFO *Info; 699 UINT32 HeadLen; 700 UINT32 TotalLen; 701 UINT16 Checksum; 710 702 711 703 // … … 723 715 724 716 if ((Head->Ver != 4) || (HeadLen < IP4_MIN_HEADLEN) || 725 (TotalLen < HeadLen) || (TotalLen != (*Packet)->TotalSize)) { 717 (TotalLen < HeadLen) || (TotalLen != (*Packet)->TotalSize)) 718 { 726 719 return EFI_INVALID_PARAMETER; 727 720 } … … 730 723 // Some OS may send IP packets without checksum. 731 724 // 732 Checksum = (UINT16) (~NetblockChecksum ((UINT8 *)Head, HeadLen));725 Checksum = (UINT16)(~NetblockChecksum ((UINT8 *)Head, HeadLen)); 733 726 734 727 if ((Head->Checksum != 0) && (Checksum != 0)) { … … 739 732 // Convert the IP header to host byte order, then get the per packet info. 740 733 // 741 (*Packet)->Ip.Ip4 742 743 Info 744 Info->LinkFlag 745 Info->CastType 746 Info->Start 747 Info->Length 748 Info->End 749 Info->Status 734 (*Packet)->Ip.Ip4 = Ip4NtohHead (Head); 735 736 Info = IP4_GET_CLIP_INFO (*Packet); 737 Info->LinkFlag = Flag; 738 Info->CastType = Ip4GetHostCast (IpSb, Head->Dst, Head->Src); 739 Info->Start = (Head->Fragment & IP4_HEAD_OFFSET_MASK) << 3; 740 Info->Length = Head->TotalLen - HeadLen; 741 Info->End = Info->Start + Info->Length; 742 Info->Status = EFI_SUCCESS; 750 743 751 744 // … … 816 809 BOOLEAN 817 810 Ip4IsValidPacketLength ( 818 IN NET_BUF 811 IN NET_BUF *Packet 819 812 ) 820 813 { … … 844 837 VOID 845 838 Ip4AccpetFrame ( 846 IN IP4_PROTOCOL 847 IN NET_BUF 848 IN EFI_STATUS 849 IN UINT32 850 IN VOID 851 ) 852 { 853 IP4_SERVICE 854 IP4_HEAD 855 EFI_STATUS 856 IP4_HEAD 857 UINT8 858 UINT32 859 860 IpSb = (IP4_SERVICE *) 839 IN IP4_PROTOCOL *Ip4Instance, 840 IN NET_BUF *Packet, 841 IN EFI_STATUS IoStatus, 842 IN UINT32 Flag, 843 IN VOID *Context 844 ) 845 { 846 IP4_SERVICE *IpSb; 847 IP4_HEAD *Head; 848 EFI_STATUS Status; 849 IP4_HEAD ZeroHead; 850 UINT8 *Option; 851 UINT32 OptionLen; 852 853 IpSb = (IP4_SERVICE *)Context; 861 854 Option = NULL; 862 855 … … 869 862 } 870 863 871 Head = (IP4_HEAD *)NetbufGetByte (Packet, 0, NULL);864 Head = (IP4_HEAD *)NetbufGetByte (Packet, 0, NULL); 872 865 ASSERT (Head != NULL); 873 866 OptionLen = (Head->HeadLen << 2) - IP4_MIN_HEADLEN; 874 867 if (OptionLen > 0) { 875 Option = (UINT8 *) 868 Option = (UINT8 *)(Head + 1); 876 869 } 877 870 … … 923 916 } 924 917 925 Head = (IP4_HEAD *) 918 Head = (IP4_HEAD *)NetbufGetByte (Packet, 0, NULL); 926 919 ASSERT (Head != NULL); 927 920 Status = Ip4PreProcessPacket ( … … 939 932 940 933 ASSERT (Packet != NULL); 941 Head = Packet->Ip.Ip4;934 Head = Packet->Ip.Ip4; 942 935 IP4_GET_CLIP_INFO (Packet)->Status = EFI_SUCCESS; 943 936 944 937 switch (Head->Protocol) { 945 case EFI_IP_PROTO_ICMP:946 Ip4IcmpHandle (IpSb, Head, Packet);947 break;948 949 case IP4_PROTO_IGMP:950 Ip4IgmpHandle (IpSb, Head, Packet);951 break;952 953 default:954 Ip4Demultiplex (IpSb, Head, Packet, Option, OptionLen);938 case EFI_IP_PROTO_ICMP: 939 Ip4IcmpHandle (IpSb, Head, Packet); 940 break; 941 942 case IP4_PROTO_IGMP: 943 Ip4IgmpHandle (IpSb, Head, Packet); 944 break; 945 946 default: 947 Ip4Demultiplex (IpSb, Head, Packet, Option, OptionLen); 955 948 } 956 949 … … 971 964 } 972 965 973 return ; 974 } 975 966 return; 967 } 976 968 977 969 /** … … 988 980 BOOLEAN 989 981 Ip4InstanceFrameAcceptable ( 990 IN IP4_PROTOCOL 991 IN IP4_HEAD 992 IN NET_BUF 993 ) 994 { 995 IP4_ICMP_ERROR_HEAD 996 EFI_IP4_CONFIG_DATA 997 IP4_CLIP_INFO 998 UINT16 999 UINT32 982 IN IP4_PROTOCOL *IpInstance, 983 IN IP4_HEAD *Head, 984 IN NET_BUF *Packet 985 ) 986 { 987 IP4_ICMP_ERROR_HEAD Icmp; 988 EFI_IP4_CONFIG_DATA *Config; 989 IP4_CLIP_INFO *Info; 990 UINT16 Proto; 991 UINT32 Index; 1000 992 1001 993 Config = &IpInstance->ConfigData; … … 1025 1017 1026 1018 if ((Proto == EFI_IP_PROTO_ICMP) && (!Config->AcceptAnyProtocol) && (Proto != Config->DefaultProtocol)) { 1027 NetbufCopy (Packet, 0, sizeof (Icmp.Head), (UINT8 *) 1019 NetbufCopy (Packet, 0, sizeof (Icmp.Head), (UINT8 *)&Icmp.Head); 1028 1020 1029 1021 if (mIcmpClass[Icmp.Head.Type].IcmpClass == ICMP_ERROR_MESSAGE) { … … 1032 1024 } 1033 1025 1034 NetbufCopy (Packet, 0, sizeof (Icmp), (UINT8 *) 1026 NetbufCopy (Packet, 0, sizeof (Icmp), (UINT8 *)&Icmp); 1035 1027 Proto = Icmp.IpHead.Protocol; 1036 1028 } … … 1077 1069 } 1078 1070 1079 1080 1071 /** 1081 1072 Enqueue a shared copy of the packet to the IP4 child if the … … 1095 1086 EFI_STATUS 1096 1087 Ip4InstanceEnquePacket ( 1097 IN IP4_PROTOCOL 1098 IN IP4_HEAD 1099 IN NET_BUF 1100 ) 1101 { 1102 IP4_CLIP_INFO 1103 NET_BUF 1088 IN IP4_PROTOCOL *IpInstance, 1089 IN IP4_HEAD *Head, 1090 IN NET_BUF *Packet 1091 ) 1092 { 1093 IP4_CLIP_INFO *Info; 1094 NET_BUF *Clone; 1104 1095 1105 1096 // … … 1127 1118 // packet will be removed from the queue. 1128 1119 // 1129 Info 1130 Info->Life 1120 Info = IP4_GET_CLIP_INFO (Clone); 1121 Info->Life = IP4_US_TO_SEC (IpInstance->ConfigData.ReceiveTimeout); 1131 1122 1132 1123 InsertTailList (&IpInstance->Received, &Clone->List); 1133 1124 return EFI_SUCCESS; 1134 1125 } 1135 1136 1126 1137 1127 /** … … 1147 1137 EFIAPI 1148 1138 Ip4OnRecyclePacket ( 1149 IN EFI_EVENT 1150 IN VOID 1151 ) 1152 { 1153 IP4_RXDATA_WRAP 1154 1155 Wrap = (IP4_RXDATA_WRAP *) 1139 IN EFI_EVENT Event, 1140 IN VOID *Context 1141 ) 1142 { 1143 IP4_RXDATA_WRAP *Wrap; 1144 1145 Wrap = (IP4_RXDATA_WRAP *)Context; 1156 1146 1157 1147 EfiAcquireLockOrFail (&Wrap->IpInstance->RecycleLock); … … 1165 1155 FreePool (Wrap); 1166 1156 } 1167 1168 1157 1169 1158 /** … … 1184 1173 IP4_RXDATA_WRAP * 1185 1174 Ip4WrapRxData ( 1186 IN IP4_PROTOCOL 1187 IN NET_BUF 1188 ) 1189 { 1190 IP4_RXDATA_WRAP 1191 EFI_IP4_RECEIVE_DATA 1192 EFI_STATUS 1193 BOOLEAN 1175 IN IP4_PROTOCOL *IpInstance, 1176 IN NET_BUF *Packet 1177 ) 1178 { 1179 IP4_RXDATA_WRAP *Wrap; 1180 EFI_IP4_RECEIVE_DATA *RxData; 1181 EFI_STATUS Status; 1182 BOOLEAN RawData; 1194 1183 1195 1184 Wrap = AllocatePool (IP4_RXDATA_WRAP_SIZE (Packet->BlockOpNum)); … … 1201 1190 InitializeListHead (&Wrap->Link); 1202 1191 1203 Wrap->IpInstance 1204 Wrap->Packet 1205 RxData 1192 Wrap->IpInstance = IpInstance; 1193 Wrap->Packet = Packet; 1194 RxData = &Wrap->RxData; 1206 1195 1207 1196 ZeroMem (RxData, sizeof (EFI_IP4_RECEIVE_DATA)); … … 1230 1219 if (!RawData) { 1231 1220 RxData->HeaderLength = (Packet->Ip.Ip4->HeadLen << 2); 1232 RxData->Header = (EFI_IP4_HEADER *) 1221 RxData->Header = (EFI_IP4_HEADER *)Ip4NtohHead (Packet->Ip.Ip4); 1233 1222 RxData->OptionsLength = RxData->HeaderLength - IP4_MIN_HEADLEN; 1234 1223 RxData->Options = NULL; 1235 1224 1236 1225 if (RxData->OptionsLength != 0) { 1237 RxData->Options = (VOID *) 1238 } 1239 } 1240 1241 RxData->DataLength 1226 RxData->Options = (VOID *)(RxData->Header + 1); 1227 } 1228 } 1229 1230 RxData->DataLength = Packet->TotalSize; 1242 1231 1243 1232 // … … 1245 1234 // 1246 1235 RxData->FragmentCount = Packet->BlockOpNum; 1247 NetbufBuildExt (Packet, (NET_FRAGMENT *) 1236 NetbufBuildExt (Packet, (NET_FRAGMENT *)RxData->FragmentTable, &RxData->FragmentCount); 1248 1237 1249 1238 return Wrap; 1250 1239 } 1251 1252 1240 1253 1241 /** … … 1267 1255 EFI_STATUS 1268 1256 Ip4InstanceDeliverPacket ( 1269 IN IP4_PROTOCOL 1257 IN IP4_PROTOCOL *IpInstance 1270 1258 ) 1271 1259 { … … 1281 1269 // 1282 1270 while (!IsListEmpty (&IpInstance->Received) && 1283 !NetMapIsEmpty (&IpInstance->RxTokens)) {1284 1271 !NetMapIsEmpty (&IpInstance->RxTokens)) 1272 { 1285 1273 Packet = NET_LIST_HEAD (&IpInstance->Received, NET_BUF, List); 1286 1274 … … 1296 1284 1297 1285 RemoveEntryList (&Packet->List); 1298 1299 1286 } else { 1300 1287 // … … 1322 1309 ASSERT (Head != NULL); 1323 1310 1324 Dup->Ip.Ip4 = (IP4_HEAD *) 1311 Dup->Ip.Ip4 = (IP4_HEAD *)Head; 1325 1312 1326 1313 CopyMem (Head, Packet->Ip.Ip4, Packet->Ip.Ip4->HeadLen << 2); … … 1358 1345 return EFI_SUCCESS; 1359 1346 } 1360 1361 1347 1362 1348 /** … … 1376 1362 INTN 1377 1363 Ip4InterfaceEnquePacket ( 1378 IN IP4_SERVICE 1379 IN IP4_HEAD 1380 IN NET_BUF 1381 IN UINT8 1382 IN UINT32 1383 IN IP4_INTERFACE 1384 ) 1385 { 1386 IP4_PROTOCOL 1387 IP4_CLIP_INFO 1388 LIST_ENTRY 1389 INTN 1390 INTN 1391 INTN 1364 IN IP4_SERVICE *IpSb, 1365 IN IP4_HEAD *Head, 1366 IN NET_BUF *Packet, 1367 IN UINT8 *Option, 1368 IN UINT32 OptionLen, 1369 IN IP4_INTERFACE *IpIf 1370 ) 1371 { 1372 IP4_PROTOCOL *IpInstance; 1373 IP4_CLIP_INFO *Info; 1374 LIST_ENTRY *Entry; 1375 INTN Enqueued; 1376 INTN LocalType; 1377 INTN SavedType; 1392 1378 1393 1379 // … … 1407 1393 // 1408 1394 LocalType = Info->CastType; 1409 1410 1395 } else { 1411 1396 // … … 1417 1402 if (IpIf->Ip == IP4_ALLZERO_ADDRESS) { 1418 1403 LocalType = IP4_LOCAL_HOST; 1419 1420 1404 } else { 1421 1405 LocalType = Ip4GetNetCast (Head->Dst, IpIf); … … 1437 1421 // interface. The global cast type will be restored later. 1438 1422 // 1439 SavedType 1440 Info->CastType 1441 1442 Enqueued 1423 SavedType = Info->CastType; 1424 Info->CastType = LocalType; 1425 1426 Enqueued = 0; 1443 1427 1444 1428 NET_LIST_FOR_EACH (Entry, &IpIf->IpInstances) { … … 1449 1433 // In RawData mode, add IPv4 headers and options back to packet. 1450 1434 // 1451 if ((IpInstance->ConfigData.RawData) && (Option != NULL) && (OptionLen != 0)) {1435 if ((IpInstance->ConfigData.RawData) && (Option != NULL) && (OptionLen != 0)) { 1452 1436 Ip4PrependHead (Packet, Head, Option, OptionLen); 1453 1437 } … … 1462 1446 } 1463 1447 1464 1465 1448 /** 1466 1449 Deliver the packet for each IP4 child on the interface. … … 1474 1457 EFI_STATUS 1475 1458 Ip4InterfaceDeliverPacket ( 1476 IN IP4_SERVICE 1477 IN IP4_INTERFACE 1478 ) 1479 { 1480 IP4_PROTOCOL 1481 LIST_ENTRY 1459 IN IP4_SERVICE *IpSb, 1460 IN IP4_INTERFACE *IpIf 1461 ) 1462 { 1463 IP4_PROTOCOL *Ip4Instance; 1464 LIST_ENTRY *Entry; 1482 1465 1483 1466 NET_LIST_FOR_EACH (Entry, &IpIf->IpInstances) { … … 1488 1471 return EFI_SUCCESS; 1489 1472 } 1490 1491 1473 1492 1474 /** … … 1512 1494 EFI_STATUS 1513 1495 Ip4Demultiplex ( 1514 IN IP4_SERVICE 1515 IN IP4_HEAD 1516 IN NET_BUF 1517 IN UINT8 1518 IN UINT32 1519 ) 1520 { 1521 LIST_ENTRY 1522 IP4_INTERFACE 1523 INTN 1496 IN IP4_SERVICE *IpSb, 1497 IN IP4_HEAD *Head, 1498 IN NET_BUF *Packet, 1499 IN UINT8 *Option, 1500 IN UINT32 OptionLen 1501 ) 1502 { 1503 LIST_ENTRY *Entry; 1504 IP4_INTERFACE *IpIf; 1505 INTN Enqueued; 1524 1506 1525 1507 // … … 1566 1548 } 1567 1549 1568 1569 1550 /** 1570 1551 Timeout the fragment and enqueued packets. … … 1575 1556 VOID 1576 1557 Ip4PacketTimerTicking ( 1577 IN IP4_SERVICE 1578 ) 1579 { 1580 LIST_ENTRY 1581 LIST_ENTRY 1582 LIST_ENTRY 1583 IP4_PROTOCOL 1584 IP4_ASSEMBLE_ENTRY 1585 NET_BUF 1586 IP4_CLIP_INFO 1587 UINT32 1558 IN IP4_SERVICE *IpSb 1559 ) 1560 { 1561 LIST_ENTRY *InstanceEntry; 1562 LIST_ENTRY *Entry; 1563 LIST_ENTRY *Next; 1564 IP4_PROTOCOL *IpInstance; 1565 IP4_ASSEMBLE_ENTRY *Assemble; 1566 NET_BUF *Packet; 1567 IP4_CLIP_INFO *Info; 1568 UINT32 Index; 1588 1569 1589 1570 //
Note:
See TracChangeset
for help on using the changeset viewer.