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>