[ipxe-devel] SAN Boot Windows XP with USB-NIC.
Michael Brown
mbrown at fensystems.co.uk
Thu Mar 17 01:20:24 UTC 2011
On Tuesday 15 Mar 2011 18:06:05 jerrycheng-hinet wrote:
> > i.e. assume that the NIC supports interrupts if *either* the ServiceFlags
> > indicate SUPPORTED_IRQ *or* the IRQ number is non-zero.
>
> I have tried to add above code to undinet.c. It seemed to work for my
> USB-NIC.
Yes; unfortunately it would break undionly.kpxe running on an Emulex NIC.
Since the bug is in the PXE stack of your USB NIC (which is incorrectly
advertising that it does not use interrupts), I can't justify breaking the
Emulex NICs in order to make your USB NIC work. We need to find some other
solution.
> So far, the sanboot seemed to get into trouble in NTDETECT.com. The screen
> showed "NTDETECT FAILED", then NB power reset happened .
>
> I have opened debug messages of "undinet, int13, autoboot, sanboot_cmd,
> iscsi" and captured the trace of whole booting process by wireshark.
>
> If you are available, please take a look at attached wireshark trace
> and.give me some suggestions? Thanks very much!
Thanks for the packet trace! It hadn't occurred to me to use DEBUG=syslog as
a means of annotating a wireshark capture with inline debug output; it's quite
a neat trick.
It looks at a first glance as though the NIC suddenly goes deaf to packets
within a specific TCP connection. For example, packet 1947 shows that iPXE
must have received packet 1946 but not packet 1945. It then appears that iPXE
ignores the retransmissions in packets 1948, 1949, 1950, 1959, 1960 and 1961,
at which point the INT13 layer times out and closes the iSCSI connection.
iPXE then immediately successfully re-opens the iSCSI connection, which
proceeds happily until packet 2021, where the same pattern occurs.
The troublesome packets are the first packets within their respective
connections to have a size which is greater than a standard Ethernet MTU.
Everything we see is wholly consistent with these large packets being dropped
before they are received by iPXE.
I think the problem is that you have the MTU on the server set to greater than
1500. iPXE requests a TCP MSS of 1460 bytes, but I think the TCP offload on
your server's network card may be ignoring that.
You need to prevent your server's network card from sending packets that are
too large for the USB NIC to receive. To do this, you can either:
a) set the MTU on the server's NIC down to the standard Ethernet value of 1500
bytes, or
b) disable TCP segmentation offload (TSO) on the server's NIC.
Let me know what happens!
Michael
More information about the ipxe-devel
mailing list