[Bug 280074] em(4) temporarily hangs and re-enables TX CSUM if a bridge it's a member of is modified
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
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.