em0: No buffer space available for IPv6 traffic but IPv4 is OK

From: José_Pérez <fbl_at_aoek.com>
Date: Fri, 18 Aug 2023 08:01:41 UTC
Hi,
on this intel em0
# dmesg |fgrep em0
em0: <Intel(R) Gigabit CT 82574L> port 0xd800-0xd81f mem 
0xfe9e0000-0xfe9fffff,0xfe9dc000-0xfe9dffff irq 48 at device 0.0 on pci1
em0: Using 1024 TX descriptors and 1024 RX descriptors
em0: Using 2 RX queues 2 TX queues
em0: Using MSI-X interrupts with 3 vectors
em0: Ethernet address: xx:xx:xx:xx:xx:xx
em0: netmap queues/slots: TX 2/1024, RX 2/1024

IPv4 and IPv6 used to work seamlessly for the past 6+ years.

# ifconfig em0
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 
1500
         
options=81249b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER>
         ether xx:xx:xx:xx:xx:xx
         inet xxx.xxx.xxx.xxx netmask 0xffffff00 broadcast 
xxx.xxx.xxx.255
         inet6 fe80::xxxx:xxxx:xxxx:xxxx%em0 prefixlen 64 scopeid 0x1
         inet6 2xxx:xxxx:xxxx:xxxx::1 prefixlen 64
         media: Ethernet autoselect (100baseTX <full-duplex>)
         status: active
         nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>

Nevertheless, now IPv6 traffic does not work anymore:
# ping6 www.google.com
PING6(56=40+8+8 bytes) 2xxx:xxxx:xxxx:xxxx::1 --> 2yyy:yyyy:yyyy:yyyy::1
ping6: sendmsg: No buffer space available
ping6: wrote www.google.com 16 chars, ret=-1

 From send(2):
[...]
      [ENOBUFS]          The system was unable to allocate an internal 
buffer.
                         The operation may succeed when buffers become
                         available.

      [ENOBUFS]          The output queue for a network interface was 
full.
                         This generally indicates that the interface has
                         stopped sending, but may be caused by transient
                         congestion.
[...]

There is little traffic on the interface and it seems that buffers are 
available:
# netstat -m
2108/3472/5580 mbufs in use (current/cache/total)
2062/1336/3398/1018874 mbuf clusters in use (current/cache/total/max)
15/1250 mbuf+clusters out of packet secondary zone in use 
(current/cache)
[...]

Interestingly, there is incoming IPv6 local broadcast traffic as sniffed 
by
# tcpdump -n -i em0 ip6
(ICMP6, neighbor solicitation, UDP from LAN link local addresses).

Has anyone seen this before and can suggest a fix?

Reboot did not solve, no software updates made, no config changes, just 
stop working from one day to the next.

Thank you.

-- 
José Pérez