On Thursday 03 Mar 2011 16:56:37 jerrycheng-hinet wrote:
> > a) try running the "dhcp" command at the command line and, after it fails
> > with
> > the same "Connection timed out" error message, run the "ifstat" command
> > (http://ipxe.org/cmd/ifstat)
> 
> Still got connection timeout message. Then run the "ifstat" command, it
> showed:
> net0: 00:50:fc:8e:c7:8d on UNDI (closed)
>   [Link:up, TX:4 TXE:0 RX:0 RXE:0]

That confirms that iPXE is seeing no received packets.

> > b) try setting a static IP address as described on the error page
> > (http://ipxe.org/4c106035), and see if you can ping it from the DHCP
> > server.
> 
> Fail to ping the static IP address. Got "Destination Host Unreachable"
> message.

That is consistent with not seeing any received packets in iPXE.

> It's weird that by using the same USB-NIC, and almost identical DHCP
> configuration, DHCP function seems to be ok in gpxe.

If you have a known-working version tag (e.g. v1.0.0, which is common with 
gPXE), then you could use git bisection (http://ipxe.org/howto/bisect) to 
track down the commit that causes the problem.

The only change I can think of that might be relevant to the UNDI driver is

  http://git.ipxe.org/ipxe.git/commitdiff/006d9f1

It's possible that your card is erroneously reporting that it doesn't support 
interrupts, when in fact it requires the interrupt-triggered call to 
PXENV_UNDI_ISR_IN_START in order to make packet reception work.  You could try 
overriding the interrupts-supported detection logic using the attached patch.

Michael
diff --git a/src/arch/i386/drivers/net/undinet.c b/src/arch/i386/drivers/net/undinet.c
index 7571574..b8b2118 100644
--- a/src/arch/i386/drivers/net/undinet.c
+++ b/src/arch/i386/drivers/net/undinet.c
@@ -544,7 +544,8 @@ int undinet_probe ( struct undi_device *undi ) {
 	DBGC ( undinic, "UNDINIC %p has type %s, speed %d, flags %08x\n",
 	       undinic, undi_iface.IfaceType, undi_iface.LinkSpeed,
 	       undi_iface.ServiceFlags );
-	if ( undi_iface.ServiceFlags & SUPPORTED_IRQ ) {
+	//	if ( undi_iface.ServiceFlags & SUPPORTED_IRQ ) {
+	if ( 1 ) {
 		if ( undinic->irq > IRQ_MAX ) {
 			DBGC ( undinic, "UNDINIC %p has invalid IRQ %d\n",
 			       undinic, undinic->irq );
_______________________________________________
ipxe-devel mailing list
[email protected]
https://lists.ipxe.org/mailman/listinfo/ipxe-devel

Reply via email to