This did the trick for me where no other solution would work. Of course, link autodetection no longer occurs, but that’s a small price to pay for connectivity.

This is a Debian etch installation using a slightly more recent kernel (2.6.25-2-686).

As an interesting side note, on this new box, the interface appears as eth0 in the kernel logs, but is actually mapped as eth1. Similarly, a second Ethernet interface appears in the log as a different device number than that by which it is referenced. Any ideas why?

Update 6/22/08: Still not getting 1000BaseT (Gigabit), however. If I force 1000BaseT with ethtool -s eth1 speed 1000, the link goes down again (even with autoneg off). The same card in another box, however, detects the link and goes to 1000BaseT automatically. So I’m stuck at 100BaseT.

For me
pre-up /usr/sbin/ethtool -s eth0 duplex full speed 1000
is working very well.
This is my notebook and I noticed when I’m connected to 100MBit/s and switch later to 1GBit/s I mostly ended up with 10 MBit/s or no connection.

I couldn’t get the driver from Realtek to compile. I get a series of errors starting with:

/tmp/r8169-6.006.00/src/r8169n.c: In function 'rtl8169initone':
/tmp/r8169-6.006.00/src/r8169n.c:2432: error: implicit declaration of function 'SETMODULEOWNER'
/tmp/r8169-6.006.00/src/r8169n.c:2595: error: 'struct netdevice' has no member named 'poll'
/tmp/r8169-6.006.00/src/r8169n.c:2596: error: 'struct netdevice' has no member named 'weight'

I just encountered this very situation on one of my boxen, and I think I may have some new information.

I have two identical 8169 NICs (by C-net IIRC) and after about two weeks of continuous operation, with autoneg ON, running at gigabit, I suddenly get the link down problem, and have to turn autoneg off to get link detection again. however, if I swap the NIC for another, identical, card, I get autoneg operation again, for another couple of weeks (I’ll make a note of the exact time from now on), at which time the same problem develops, until I switch back to the NIC that stopped working the last time!