[eepro100-bug] 82559ER and DHCP
Donald Becker
becker@scyld.com
Mon Oct 21 23:31:00 2002
On Mon, 21 Oct 2002, David Mattes wrote:
> I've been pulling my hair out for the last couple days with a JumpTec
> PC104 Board (266MHz Pentium w/ MMX) and onboard 82559ER. I have
> installed several Redhat versions (7.2, 7.3, 8.0) only to get the same
> results. I have compiled and used the eepro100 driver distributed with
> Redhat and the new drivers from Donald Becker's website (1.25 27Aug2002).
>
> I can configure the NIC to use a static IP address just fine. Large
> files transfer, the interface works as it should.
>
> When I try to use DHCP, the interface never comes up with an IP address.
> I'm quite familiar with setting up DHCP and am fairly certain that I
> don't have any other broken links in the chain. I've tried to get an
> address with pump, dhcpcd, and dhclient (ISC's DHCP client).
The server should log if the client has been granted an address.
> Has anyone else seen this problem, or have a fix for it, or have
> suggestions of things to try.
A problem with other adapter types has been "bouncing" the link --
shutting down the link and immediately starting it again. Many DHCP clients
repeatedly shut down and bring up the network interface rather than
reconfigure it in place.
If the driver shuts off the transceiver when the interface is shut down
or resets the transceiver when it is brought up, the broken link can
trigger bad behavior in switches. Packet may be discarded for the first
few seconds.
You can see this happening by watching the LEDs or running
mii-diag eth0 --watch
The reset is documented in the driver. Here is the comment and code
around line 908:
________________
/* With some transceivers we must retrigger negotiation to reset
power-up errors. */
if ((sp->drv_flags & ResetMII) &&
________________
And guess which chip has the 'ResetMII' flags set...
{"Intel EtherExpress Pro/100+ i82559ER", { 0x12098086, 0xffffffff,},
A few lines later the code reads
#ifdef honor_default_port
mdio_write(ioaddr, phy_addr, 0, mii_ctrl[dev->default_port & 7]);
#else
mdio_write(ioaddr, phy_addr, 0, 0x3300);
#endif
Try commenting out these lines.
--
Donald Becker becker@scyld.com
Scyld Computing Corporation http://www.scyld.com
410 Severn Ave. Suite 210 Scyld Beowulf cluster system
Annapolis MD 21403 410-990-9993