Unreliable bge link state events (and associated dhclient problems)

Ben Jencks ben at bjencks.net
Thu Jul 28 05:48:09 GMT 2005


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On my Thinkpad T43p, the bge card seems to be unreliable in giving link
state events. This causes dhclient to behave incorrectly (at least my
understanding of correctly, given what I've read on -current, -questions
and -stable).

I'm starting with the interface up and fully configured through
dhclient.

brj at wagner$ ifconfig bge0
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=1a<TXCSUM,VLAN_MTU,VLAN_HWTAGGING>
        inet6 fe80::211:25ff:feb2:bc6c%bge0 prefixlen 64 scopeid 0x1 
        inet6 2001:5c0:8316:0:211:25ff:feb2:bc6c prefixlen 64 autoconf 
        inet 10.11.55.6 netmask 0xfffffff8 broadcast 10.11.55.7
        ether 00:11:25:b2:bc:6c
        media: Ethernet autoselect (1000baseTX <full-duplex>)
        status: active

Now I unplug the cable.
dmesg does not report any change. When I ask ifconfig, I get

brj at wagner$ ifconfig bge0
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=1a<TXCSUM,VLAN_MTU,VLAN_HWTAGGING>
        inet6 fe80::211:25ff:feb2:bc6c%bge0 prefixlen 64 scopeid 0x1 
        inet6 2001:5c0:8316:0:211:25ff:feb2:bc6c prefixlen 64 autoconf 
        inet 10.11.55.6 netmask 0xfffffff8 broadcast 10.11.55.7
        ether 00:11:25:b2:bc:6c
        media: Ethernet autoselect (none)
        status: no carrier

Also, upon querying ifconfig, dmesg reports:
bge0: link state changed to DOWN

dhclient stays running, and the IP address is still configured, even
after the kernel notices the link state change.

When I then plug the cable back in, it requires another ifconfig poll to
get the kernel to notice.

If I manually stop dhclient after unplugging, bge0 is taken down.
bge0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
        options=1a<TXCSUM,VLAN_MTU,VLAN_HWTAGGING>
        inet6 fe80::211:25ff:feb2:bc6c%bge0 prefixlen 64 scopeid 0x1 
        inet6 2001:5c0:8316:0:211:25ff:feb2:bc6c prefixlen 64 autoconf 
        inet 10.11.55.6 netmask 0xfffffff8 broadcast 10.11.55.7
        ether 00:11:25:b2:bc:6c
        media: Ethernet autoselect (none)
        status: no carrier

(The address is still configured after dhclient exits, is this right?)

My understanding was that downed interfaces don't report
events. However, when I plug the cable in when it's down, it is
immediately noticed, plus dhclient is started properly.

If, after unplugging and stopping dhclient, I manually ifconfig bge0 up,
then plug in again, I still get the correct behavior (event is
immediately noticed, and dhclient is started).

I also tried without bge0 configured in rc.conf. I found that the only
event that reliably appears when it should, rather than on an ifconfig
poll, is the UP event after ifconfig bge0 down; ifconfig bge0 up. Once I
got a down event properly, but I couldn't reproduce it.

So, the problem seems to be that link state events are not generated
properly after the first UP event after ifconfig bge0 up. Also, dhclient
doesn't seem to respond to the DOWN events generated by an ifconfig
poll.

bge0 at pci2:0:0:  class=0x020000 card=0x05771014 chip=0x167d14e4 rev=0x11 hdr=0x00
    vendor   = 'Broadcom Corporation'
    device   = 'BCM5750A1M NetXtreme Gigabit Ethernet PCI Express'
    class    = network
    subclass = ethernet


Sorry for the long post, but I figured better too much info than too
little.
- -- 
Ben
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (FreeBSD)

iD8DBQFC6HGXpt3yYclAKVsRAm8hAJ4xqSZE1lao611l86/ipZMRUjp0/gCeOQIz
ZN+f+2DgAzX3B1ctV7q9NKM=
=ersQ
-----END PGP SIGNATURE-----


More information about the freebsd-stable mailing list