Bug 200971

Summary: ARP table not being updated
Product: Base System Reporter: n+freebsd
Component: kernAssignee: freebsd-bugs (Nobody) <bugs>
Status: Closed Works As Intended    
Severity: Affects Only Me    
Priority: ---    
Version: 10.1-RELEASE   
Hardware: amd64   
OS: Any   

Description n+freebsd 2015-06-19 12:36:58 UTC
Hello,
I've got a FreeBSD router which, when receiving an ARP response, sometimes doesn't add the received MAC address to its ARP table. When I add the address manually everything works as expected. The network interface is a NVIDIA nForce MCP55 Networking Adapter but I've seen the same problem on a QLogic NetXtreme II BCM5709 1000Base-T (C0). There are no recent dmesg lines when the problem occurs. Sometimes the problem persists for some MAC adresses for longer periods of time but can be temporarily fixed by rebooting.

This is the network interface's configuration:
root@fw0:~ # ifconfig nfe0
nfe0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=c219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC,VLAN_HWTSO,LINKSTATE>
	ether 00:1b:24:e0:56:cb
	inet 10.182.0.2 netmask 0xfffe0000 broadcast 10.183.255.255 
	inet 10.182.0.1 netmask 0xfffe0000 broadcast 10.183.255.255 vhid 2 
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	carp: MASTER vhid 2 advbase 1 advskew 150

There are a few hundred devices on this LAN:
root@fw0:~ # arp -a -n | wc -l
     299

root@fw0:~ # netstat -m
1033/3272/4305 mbufs in use (current/cache/total)
1032/1764/2796/2040374 mbuf clusters in use (current/cache/total/max)
1032/1751 mbuf+clusters out of packet secondary zone in use (current/cache)
0/8/8/1020186 4k (page size) jumbo clusters in use (current/cache/total/max)
0/0/0/302277 9k jumbo clusters in use (current/cache/total/max)
0/0/0/170031 16k jumbo clusters in use (current/cache/total/max)
2322K/4378K/6700K bytes allocated to network (current/cache/total)
0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters)
0/0/0 requests for mbufs delayed (mbufs/clusters/mbuf+clusters)
0/0/0 requests for jumbo clusters delayed (4k/9k/16k)
0/0/0 requests for jumbo clusters denied (4k/9k/16k)
0 requests for sfbufs denied
0 requests for sfbufs delayed
0 requests for I/O initiated by sendfile


10.182.31.204 is the address I'm pinging the router from:

root@fw0:~ # tcpdump -i nfe0 -n arp or icmp | grep 10.182.31.204
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on nfe0, link-type EN10MB (Ethernet), capture size 65535 bytes
capability mode sandbox enabled
00:26:38.873053 IP 10.182.31.204 > 10.182.0.2: ICMP echo request, id 1878, seq 0, length 64
00:26:38.873076 ARP, Request who-has 10.182.31.204 tell 10.182.0.2, length 28
00:26:38.878488 ARP, Reply 10.182.31.204 is-at 00:19:99:59:8f:7a, length 46
00:26:39.874292 IP 10.182.31.204 > 10.182.0.2: ICMP echo request, id 1878, seq 1, length 64
00:26:39.874309 ARP, Request who-has 10.182.31.204 tell 10.182.0.2, length 28
00:26:39.879737 ARP, Reply 10.182.31.204 is-at 00:19:99:59:8f:7a, length 46
00:26:40.875381 IP 10.182.31.204 > 10.182.0.2: ICMP echo request, id 1878, seq 2, length 64
00:26:40.875396 ARP, Request who-has 10.182.31.204 tell 10.182.0.2, length 28
00:26:40.877751 ARP, Reply 10.182.31.204 is-at 00:19:99:59:8f:7a, length 46
00:26:41.878761 IP 10.182.31.204 > 10.182.0.2: ICMP echo request, id 1878, seq 3, length 64
00:26:41.878775 ARP, Request who-has 10.182.31.204 tell 10.182.0.2, length 28
00:26:41.880701 ARP, Reply 10.182.31.204 is-at 00:19:99:59:8f:7a, length 46
00:26:42.880428 IP 10.182.31.204 > 10.182.0.2: ICMP echo request, id 1878, seq 4, length 64
00:26:42.880442 ARP, Request who-has 10.182.31.204 tell 10.182.0.2, length 28
00:26:42.881555 ARP, Reply 10.182.31.204 is-at 00:19:99:59:8f:7a, length 46
00:26:43.892658 IP 10.182.31.204 > 10.182.0.2: ICMP echo request, id 1878, seq 5, length 64
00:26:43.892672 ARP, Request who-has 10.182.31.204 tell 10.182.0.2, length 28
00:26:43.893789 ARP, Reply 10.182.31.204 is-at 00:19:99:59:8f:7a, length 46
00:26:44.897217 IP 10.182.31.204 > 10.182.0.2: ICMP echo request, id 1878, seq 6, length 64
00:26:44.897232 ARP, Request who-has 10.182.31.204 tell 10.182.0.2, length 28
00:26:44.898380 ARP, Reply 10.182.31.204 is-at 00:19:99:59:8f:7a, length 46
^C196 packets captured
161947 packets received by filter
0 packets dropped by kernel

root@fw0:~ # arp -a -n | grep 10.182.31.204
? (10.182.31.204) at (incomplete) on nfe0 expired [ethernet]

root@fw0:~ # arp -s 10.182.31.204 00:19:99:59:8f:7a

root@fw0:~ # tcpdump -i nfe0 -n arp or icmp | grep 10.182.31.204
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on nfe0, link-type EN10MB (Ethernet), capture size 65535 bytes
capability mode sandbox enabled
00:26:52.943674 IP 10.182.31.204 > 10.182.0.2: ICMP echo request, id 1878, seq 14, length 64
00:26:52.943692 IP 10.182.0.2 > 10.182.31.204: ICMP echo reply, id 1878, seq 14, length 64
00:26:53.944908 IP 10.182.31.204 > 10.182.0.2: ICMP echo request, id 1878, seq 15, length 64
00:26:53.944921 IP 10.182.0.2 > 10.182.31.204: ICMP echo reply, id 1878, seq 15, length 64
00:26:54.966946 IP 10.182.31.204 > 10.182.0.2: ICMP echo request, id 1878, seq 16, length 64
00:26:54.966959 IP 10.182.0.2 > 10.182.31.204: ICMP echo reply, id 1878, seq 16, length 64
00:26:55.970233 IP 10.182.31.204 > 10.182.0.2: ICMP echo request, id 1878, seq 17, length 64
00:26:55.970246 IP 10.182.0.2 > 10.182.31.204: ICMP echo reply, id 1878, seq 17, length 64
00:26:56.972007 IP 10.182.31.204 > 10.182.0.2: ICMP echo request, id 1878, seq 18, length 64
00:26:56.972021 IP 10.182.0.2 > 10.182.31.204: ICMP echo reply, id 1878, seq 18, length 64
^C95 packets captured
114882 packets received by filter
0 packets dropped by kernel