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 _______________________________________________ ipxe-devel mailing list [email protected] https://lists.ipxe.org/mailman/listinfo/ipxe-devel

