Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/NetworkPkg/Ip4Dxe/Ip4Output.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/Ip4Output.c
r85718 r99404 10 10 11 11 UINT16 mIp4Id; 12 13 12 14 13 /** … … 32 31 EFI_STATUS 33 32 Ip4PrependHead ( 34 IN OUT NET_BUF 35 IN IP4_HEAD 36 IN UINT8 37 IN UINT32 38 ) 39 { 40 UINT32 41 UINT32 42 IP4_HEAD 43 BOOLEAN 33 IN OUT NET_BUF *Packet, 34 IN IP4_HEAD *Head, 35 IN UINT8 *Option, 36 IN UINT32 OptLen 37 ) 38 { 39 UINT32 HeadLen; 40 UINT32 Len; 41 IP4_HEAD *PacketHead; 42 BOOLEAN FirstFragment; 44 43 45 44 // … … 54 53 ASSERT (((Len % 4) == 0) && (HeadLen <= IP4_MAX_HEADLEN)); 55 54 56 PacketHead = (IP4_HEAD *) 55 PacketHead = (IP4_HEAD *)NetbufAllocSpace (Packet, HeadLen, NET_BUF_HEAD); 57 56 58 57 if (PacketHead == NULL) { … … 60 59 } 61 60 62 Ip4CopyOption (Option, OptLen, FirstFragment, (UINT8 *) 61 Ip4CopyOption (Option, OptLen, FirstFragment, (UINT8 *)(PacketHead + 1), &Len); 63 62 64 63 // 65 64 // Set the head up, convert the host byte order to network byte order 66 65 // 67 PacketHead->Ver 68 PacketHead->HeadLen = (UINT8)(HeadLen >> 2);69 PacketHead->Tos 70 PacketHead->TotalLen = HTONS ((UINT16)Packet->TotalSize);71 PacketHead->Id 72 PacketHead->Fragment 73 PacketHead->Checksum 74 PacketHead->Ttl 75 PacketHead->Protocol 76 PacketHead->Src 77 PacketHead->Dst 78 PacketHead->Checksum = (UINT16) (~NetblockChecksum ((UINT8 *)PacketHead, HeadLen));79 80 Packet->Ip.Ip4 66 PacketHead->Ver = 4; 67 PacketHead->HeadLen = (UINT8)(HeadLen >> 2); 68 PacketHead->Tos = Head->Tos; 69 PacketHead->TotalLen = HTONS ((UINT16)Packet->TotalSize); 70 PacketHead->Id = HTONS (Head->Id); 71 PacketHead->Fragment = HTONS (Head->Fragment); 72 PacketHead->Checksum = 0; 73 PacketHead->Ttl = Head->Ttl; 74 PacketHead->Protocol = Head->Protocol; 75 PacketHead->Src = HTONL (Head->Src); 76 PacketHead->Dst = HTONL (Head->Dst); 77 PacketHead->Checksum = (UINT16)(~NetblockChecksum ((UINT8 *)PacketHead, HeadLen)); 78 79 Packet->Ip.Ip4 = PacketHead; 81 80 return EFI_SUCCESS; 82 81 } 83 84 82 85 83 /** … … 98 96 IP4_INTERFACE * 99 97 Ip4SelectInterface ( 100 IN IP4_SERVICE 101 IN IP4_ADDR 102 IN IP4_ADDR 103 ) 104 { 105 IP4_INTERFACE 106 IP4_INTERFACE 107 LIST_ENTRY 98 IN IP4_SERVICE *IpSb, 99 IN IP4_ADDR Dst, 100 IN IP4_ADDR Src 101 ) 102 { 103 IP4_INTERFACE *IpIf; 104 IP4_INTERFACE *Selected; 105 LIST_ENTRY *Entry; 108 106 109 107 // … … 143 141 return Selected; 144 142 } 145 146 143 147 144 /** … … 160 157 VOID 161 158 Ip4SysPacketSent ( 162 IP4_PROTOCOL 163 NET_BUF 164 EFI_STATUS 165 UINT32 166 VOID 159 IP4_PROTOCOL *Ip4Instance, 160 NET_BUF *Packet, 161 EFI_STATUS IoStatus, 162 UINT32 LinkFlag, 163 VOID *Context 167 164 ) 168 165 { 169 166 NetbufFree (Packet); 170 167 } 171 172 168 173 169 /** … … 208 204 EFI_STATUS 209 205 Ip4Output ( 210 IN IP4_SERVICE 211 IN IP4_PROTOCOL 212 IN NET_BUF 213 IN IP4_HEAD 214 IN UINT8 215 IN UINT32 216 IN IP4_ADDR 217 IN IP4_FRAME_CALLBACK 218 IN VOID 219 ) 220 { 221 IP4_INTERFACE 222 IP4_ROUTE_CACHE_ENTRY 223 IP4_ADDR 224 EFI_STATUS 225 NET_BUF 226 UINT32 227 UINT32 228 UINT32 229 UINT32 230 UINT32 231 UINT32 232 BOOLEAN 206 IN IP4_SERVICE *IpSb, 207 IN IP4_PROTOCOL *IpInstance OPTIONAL, 208 IN NET_BUF *Packet, 209 IN IP4_HEAD *Head, 210 IN UINT8 *Option, 211 IN UINT32 OptLen, 212 IN IP4_ADDR GateWay, 213 IN IP4_FRAME_CALLBACK Callback, 214 IN VOID *Context 215 ) 216 { 217 IP4_INTERFACE *IpIf; 218 IP4_ROUTE_CACHE_ENTRY *CacheEntry; 219 IP4_ADDR Dest; 220 EFI_STATUS Status; 221 NET_BUF *Fragment; 222 UINT32 Index; 223 UINT32 HeadLen; 224 UINT32 PacketLen; 225 UINT32 Offset; 226 UINT32 Mtu; 227 UINT32 Num; 228 BOOLEAN RawData; 233 229 234 230 // … … 257 253 258 254 if ((IpInstance != NULL) && IpInstance->ConfigData.RawData) { 259 RawData 255 RawData = TRUE; 260 256 } else { 261 Head->HeadLen = (UINT8)(HeadLen >> 2);262 Head->Id 263 Head->Ver 264 RawData 257 Head->HeadLen = (UINT8)(HeadLen >> 2); 258 Head->Id = mIp4Id++; 259 Head->Ver = 4; 260 RawData = FALSE; 265 261 } 266 262 … … 278 274 ); 279 275 280 if (EFI_ERROR (Status)) {276 if (EFI_ERROR (Status)) { 281 277 return Status; 282 278 } … … 290 286 // 291 287 GateWay = IP4_ALLONE_ADDRESS; 292 293 288 } else if (IP4_IS_MULTICAST (Dest)) { 294 289 // … … 298 293 // 299 294 GateWay = Head->Dst; 300 301 295 } else if (GateWay == IP4_ALLZERO_ADDRESS) { 302 296 // … … 344 338 // fragments there are. 345 339 // 346 Mtu 347 Num 340 Mtu = (Mtu - HeadLen) & (~0x07); 341 Num = (Packet->TotalSize + Mtu - 1) / Mtu; 348 342 349 343 // … … 438 432 } 439 433 440 441 434 /** 442 435 The filter function to find a packet and all its fragments. … … 452 445 BOOLEAN 453 446 Ip4CancelPacketFragments ( 454 IN IP4_LINK_TX_TOKEN 455 IN VOID 456 ) 457 { 458 if ((Frame->Packet == (NET_BUF *) 447 IN IP4_LINK_TX_TOKEN *Frame, 448 IN VOID *Context 449 ) 450 { 451 if ((Frame->Packet == (NET_BUF *)Context) || (Frame->Context == Context)) { 459 452 return TRUE; 460 453 } … … 462 455 return FALSE; 463 456 } 464 465 457 466 458 /** … … 474 466 VOID 475 467 Ip4CancelPacket ( 476 IN IP4_INTERFACE 477 IN NET_BUF 478 IN EFI_STATUS 468 IN IP4_INTERFACE *IpIf, 469 IN NET_BUF *Packet, 470 IN EFI_STATUS IoStatus 479 471 ) 480 472 {
Note:
See TracChangeset
for help on using the changeset viewer.