[Bug 280074] em(4) temporarily hangs and re-enables TX CSUM if a bridge it's a member of is modified

From: <bugzilla-noreply_at_freebsd.org>
Date: Wed, 18 Feb 2026 06:44:08 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=280074

--- Comment #17 from Joshua Kinard <freebsd@kumba.dev> ---
(In reply to Kevin Bowling from comment #15)
Some of the configuration of this system is probably from accumulated knowledge
over the years.  I built it almost ~6 years ago in mid-2020, on FreeBSD
12.0-RELEASE, and as long as things keep working, I don't really modify things
too significantly.  Some of the tweaks I used back then may not be applicable
to now, but if I'm not seeing any side-effects, I'll usually just leave them
as-is.

Universally, I turn Wake-on-LAN off on every system or piece of equipment I
have, because I have had the odd occurrence of something turning on
unexpectedly because something else on my home network spat out a WOL packet
for unknown reasons.  Pretty sure I've quashed the last vestiges of that,
though, but I figured, it can't hurt to just force it off everywhere I can, be
it Windows, Linux, *BSD, or some weird firmware.

Here's a snippet of what dmesg says immediately after boot on the base system
driver under 15.0-RELEASE-p3.  Some info has been masked for privacy, and I am
aware about the assignment of an IP to a bridge member no longer being
relevant.  The lines at the ~370sec mark are where I stopped the jail, and
network connectivity stalled for 5-8 seconds, which is the bug I am seeing:

> # dmesg | grep "em0\|epair0\|jail0\|bridge0\|lo0"
> em0: <Intel(R) I219-V CNP(6)> mem 0x91b00000-0x91b1ffff at device 31.6 on pci0
> em0: EEPROM V0.4-4
> em0: Using 4096 TX descriptors and 4096 RX descriptors
> em0: Using an MSI interrupt
> em0: Ethernet address: aa:bb:cc:dd:ee:ff
> [9] bridge0: Ethernet address: aa:bb:cc:dd:ee:ff
> [10] em0: link state changed to UP
> [10] lo0: link state changed to UP
> [20] em0: link state changed to DOWN
> [20] em0: link state changed to UP
> [32] em0: link state changed to DOWN
> [32] em0: link state changed to UP
> [40] bridge0: WARNING: Adding member interface em0 which has an IP address assigned is deprecated and will be unsupported in a future release.
> [40] bridge0: link state changed to UP
> [40] em0: promiscuous mode enabled
> [44] epair0a: Ethernet address: aa:bb:cc:dd:ee:ff
> [44] epair0b: Ethernet address: aa:bb:cc:dd:ee:ff
> [44] epair0a: link state changed to UP
> [44] epair0b: link state changed to UP
> [54] epair0a: promiscuous mode enabled
> [54] em0: link state changed to DOWN
> [54] em0: link state changed to UP
> [55] epair0b: changing name to 'jail0'
> [56] lo0: link state changed to UP
> [371] epair0a: promiscuous mode disabled
> [372] em0: 2 link states coalesced
> [372] em0: link state changed to UP
> [372] epair0a: link state changed to DOWN
> [372] jail0: link state changed to DOWN

And this is what ifconfig reports for all interfaces after boot, with the squid
jail up and running:

> em0: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 9000
>         options=800020<JUMBO_MTU,HWSTATS>
>         ether aa:bb:cc:dd:ee:ff
>         inet x.x.x.x netmask 0xffffff00 broadcast x.x.x.255
>         inet6 fe80::xxxx:xxxx:xxxx:xxxx%em0 prefixlen 64 scopeid 0x1
>         inet6 fdxx:xxxx:xxxx:xxxx::xxxx:xxxx prefixlen 120
>         media: Ethernet autoselect (1000baseT <full-duplex>)
>         status: active
>         nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
> lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384
>         options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
>         inet 127.0.0.1 netmask 0xff000000
>         inet6 ::1 prefixlen 128
>         inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
>         groups: lo
>         nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
> bridge0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 9000
>         options=10<VLAN_HWTAGGING>
>         ether aa:bb:cc:dd:ee:ff
>         id xx:xx:xx:xx:xx:xx priority 32768 hellotime 2 fwddelay 15
>         maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
>         root id 00:e0:67:22:31:d6 priority 32768 ifcost 70000 port 1
>         bridge flags=0<>
>         member: epair0a flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
>                 port 5 priority 128 path cost 2000 proto rstp
>                 role designated state forwarding vlan protocol 802.1q
>         member: em0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
>                 port 1 priority 128 path cost 20000 proto rstp
>                 role root state forwarding vlan protocol 802.1q
>         groups: bridge
>         nd6 options=9<PERFORMNUD,IFDISABLED>
> ipfw0: flags=1008801<UP,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 65536
>         options=0
>         groups: ipfw
> epair0a: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 9000
>         options=200009<RXCSUM,VLAN_MTU,RXCSUM_IPV6>
>         ether aa:bb:cc:dd:ee:ff
>         groups: epair
>         media: Ethernet 10Gbase-T (10Gbase-T <full-duplex>)
>         status: active
>         nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

And this is ifconfig again after the jail has been stopped via "jail -r squid":

> em0: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 9000
>         options=4800020<JUMBO_MTU,HWSTATS,MEXTPG>
>         ether aa:bb:cc:dd:ee:ff
>         inet x.x.x.x netmask 0xffffff00 broadcast x.x.x.255
>         inet6 fe80::xxxx:xxxx:xxxx:xxxx%em0 prefixlen 64 scopeid 0x1
>         inet6 fdxx:xxxx:xxxx:xxxx::xxxx:xxxx prefixlen 120
>         media: Ethernet autoselect (1000baseT <full-duplex>)
>         status: active
>         nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
> lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384
>         options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
>         inet 127.0.0.1 netmask 0xff000000
>         inet6 ::1 prefixlen 128
>         inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
>         groups: lo
>         nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
> bridge0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 9000
>         options=10<VLAN_HWTAGGING>
>         ether aa:bb:cc:dd:ee:ff
>         id xx:xx:xx:xx:xx:xx priority 32768 hellotime 2 fwddelay 15
>         maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
>         root id 00:e0:67:22:31:d6 priority 32768 ifcost 70000 port 1
>         bridge flags=0<>
>         member: em0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP>
>                 port 1 priority 128 path cost 20000 proto rstp
>                 role root state forwarding vlan protocol 802.1q
>         groups: bridge
>         nd6 options=9<PERFORMNUD,IFDISABLED>
> ipfw0: flags=1008801<UP,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 65536
>         options=0
>         groups: ipfw

These are my lines in /etc/rc.conf that I use to configure the interfaces,
including comments:

> # Setup em0 interface for wired networking
> EM0_IPV4="x.x.x.x/24"
> EM0_IPV6="fdxx:xxxx:xxxx:xxxx::xxxx:xxxx/120"
> EM0_MTU=9000
> EM_OPTS="-wol -lro -tso -rxcsum -rxcsum6 -txcsum -txcsum6 -vlanmtu -vlanhwtag -vlanhwfilter -vlanhwcsum -vlanhwtso"
> ifconfig_em0="inet ${EM0_IPV4} ${EM_OPTS} mtu ${EM0_MTU}"
> ifconfig_em0_ipv6="inet6 ${EM0_IPV6}"
> 
> # Set the default router.
> defaultrouter="x.x.x.1"
> 
> # Setup a bridge interface for jailed epair devices to reach the
> # physical network.  A "soft switch" tied to em0, as xxx only
> # has a single networking port.
> BRIDGE_MEMBERS="addm em0"
> BRIDGE_MTU="9000"
> BRIDGE_STP="stp em0"
> cloned_interfaces="bridge0"
> ifconfig_bridge0="${BRIDGE_MEMBERS} ${BRIDGE_STP} mtu ${BRIDGE_MTU}"


If you need better debugging info, I'll need to know how to get the base system
driver to emit it.  E.g., if there's a sysctl tunable or something, let me
know.

-- 
You are receiving this mail because:
You are the assignee for the bug.