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