Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Jul 2016 13:29:30 -0400
From:      Ryan Stone <rysto32@gmail.com>
To:        freebsd-transport@freebsd.org
Subject:   in_broadcast() called for almost every packet in ip_output()
Message-ID:  <CAFMmRNx%2Bx9GNDgDHO5oyoj-S%2BCK9bRvJhpNNFf3%2BPk0p2SQeSQ@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
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] https://reviews.freebsd.org/D7227



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFMmRNx%2Bx9GNDgDHO5oyoj-S%2BCK9bRvJhpNNFf3%2BPk0p2SQeSQ>