On 29/10/14 17:14, Floris Bos wrote:
I'm not sure if it is actually the iBFT that is the problem.
My initial guess was that was the case because the nameserver does not
show up in "ipconfig", and my iSCSI disk is not there.
But perhaps Windows does not copy the nameserver from iBFT, but normally
gets that by using normal DHCP later on.
And the real problem is that network connectivity is just screwed up,
perhaps caused by iPXE leaving the network adapter in some kind of state
Windows is not expecting.
That I am seeing DHCP requests, and repeated ARP requests for the IP of
my SAN after Windows booted supports the theory that it does have the
iBFT, but that Windows is able to transmit network packets, but somehow
has problems receiving them.

- Several commits I tried before "[tcp] Do not send RST for unrecognised
connections" all work properly
- Several commits I tried after, all fail
- It might be coincidence, but I just managed to get HEAD to work by
reversing both "[tcp] Do not send RST for unrecognised connections" and
"[tcp] Defer sending ACKs until all received packets have been
processed" both which do hackery in src/net/tcp.c.

The problem does not seem to be related to the iBFT; I think we can leave that aside for now.

Interesting. I wonder if it could be somehow related to the possibility of packets arriving between the time that Windows last allows iPXE control of the NIC (via an INT 13 call) and the moment that the Windows native driver starts up.

Unfortunately there is no way to enforce a clean handover of the NIC when doing anything with iSCSI, since the INT 13 API simply does not have any "shut down device" call. The Windows driver will therefore always find the NIC in a slightly unexpected state in which it is already up and running and receiving packets. It's plausible that the two TCP-related changes alter the behaviour in terms of when packets are transmitted (and thus responses received) sufficiently to trigger/avoid a bug.

You could try using the iPXE native driver instead of undionly.kkpxe. This will definitely change the state of the NIC at the time that the Windows driver starts up, and it may be that Windows likes this state better.

You could also try using wireshark to see if there are any packets present on the network which might arrive after iPXE last relinquishes control (i.e. after the last packet sent by iPXE within its TCP connection to the iSCSI target) but before the Windows driver has started up (i.e. before Windows' initial DHCP request or anything else which has obviously been sent by Windows).

A problem is that the SAN-booted OS is likely to clear the screen
almost immediately, meaning that the warning message would not be seen
in practice.

But if I am doing a SAN installation couldn't the warning be printed the
moment I do the sanhook command?

The iBFT is not created until you attempt to boot from the SAN target.

You can get some diagnostic information from the information printed
by pxeprefix.S when undionly.[k]kpxe starts up.  In particular, the
"XXXkB free base memory after PXE unload" will show you how much
memory was free before iPXE claimed its base memory segments.

"577kB free base memory after PXE unload" with Virtualbox.

OK; the 512kB boundary is definitely not the problem.

Michael
_______________________________________________
ipxe-devel mailing list
[email protected]
https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel

Reply via email to