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

Drew Gallatin gallatin at
Wed Jul 20 19:00:52 UTC 2016

I'd certainly prefer not to add any overhead.  Properly managing this (and
other similar) lists is a job for some lightweight lifecycle based
mechanism like concurrency kit or rcu.

Unless you have a solid  reason to fix it, I'd suggest just adding the
locking commented out (the way rwatson did with IN_IFADDR_RLOCK in
ip_input(), so that the next person to trip over it will know what's going


On Wed, Jul 20, 2016 at 1:29 PM, Ryan Stone <rysto32 at> wrote:

> 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.
> [1]
> _______________________________________________
> freebsd-transport at mailing list
> To unsubscribe, send any mail to "
> freebsd-transport-unsubscribe at"

More information about the freebsd-transport mailing list