Hi all!
Trying to track down an unexpected behavior for one of our teams here:
“We tried to PXEBoot a VM using IPv6 and even though the server replied with all requested boot options, the firmware for some reason did a DHCPv6 release instead of going for a network boot.”
The team dug in with some debugging and tracked things down to this process and the associated code:
- DHCP server is sending REPLY with valid boot params and tftp server address.
- UEFI upon receiving this REPLY, it is trying to send UDP request with port 4011 and uses TFTP global address as destination address.
-
Ip6Output() in /NetworkPkg/Ip6Dxe/Ip6Output.c drops the UDP request generated in Step-2. This is due to route miss.
-
Function:
https://github.com/tianocore/edk2/blob/20ca52882877ba9025da2ee58c8dab7808eca457/NetworkPkg/Ip6Dxe/Ip6Output.c#L476
-
Error return:
https://github.com/tianocore/edk2/blob/20ca52882877ba9025da2ee58c8dab7808eca457/NetworkPkg/Ip6Dxe/Ip6Output.c#L701
- As the UDP request with port 4011 failed, UEFI does a RELEASE message and errors out.
- Below the code snippet inside UEFI where packet is getting dropped.
Here’s some questions from the team:
- Why is UEFI doing UDP request with port 4011 to TFTP server address. We expect it to start TFTP with data provided in REPLY by server.
- In data center, the blades are not directly connected to server. So how can UEFI learn the routes to send a unicast request using global address.
- In case of IPv4, we don’t see any UDP request using port 4011. Why alone for IPv6?
Thoughts? Thanks in advance!
- Bret