in_broadcast() called for almost every packet in ip_output()

Ryan Stone rysto32 at
Wed Jul 20 17:29:31 UTC 2016

I've hit a dilemma in a fix I have in review[1].  Currently, in_broadcast()
iterates over the ifnet address list without holding any locks.  I can
pretty easily panic the kernel by constantly adding and removing addresses
while passing traffic over the interface.  The fix is to acquire the
appropriate rlock, but the catch is that according to dtrace,
in_broadcast() is called on almost every packet that passes through
ip_output().  I'm concerned about adding additional locking operations to
the transmit path.

Do we actually need to call in_broadcast() so often?  It seems silly to
check whether we are sending to a broadcast address on a per-packet basis.


More information about the freebsd-transport mailing list