[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

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 
> 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!


More information about the ipxe-devel mailing list