svn commit: r304436 - in head: . sys/netinet
Bruce Simpson
bms at fastmail.net
Sat Aug 20 21:44:14 UTC 2016
On 20/08/16 22:17, Bruce Simpson wrote:
> However, we still have to keep the FreeBSD-on-Ethernet ship sailing
> smoothly. The intent of the original input path change is clearly for
> performance, but perhaps slipping the M_BCAST tag in the stack is the
> right way forward.
>
> I would also suggest: we add ability to qualify where in the stack
> M_BCAST was raised (in case of any possible re-entry), by allocating one
> more MBUF flag to Layer 2.
>
> Then, the same M_PROMISC flag trick can be applied... and Ryan's
> broadcast performance boost could perhaps even carry across L2 bridging
> tiers, e.g. stacked if_bridge or netgraph, providing we know what
> direction in the stack it's traveling in (and its absolute ifnet origin)
The main motivation for this: retain the original meaning of M_BCAST.
(in addition to Ryan's intended new meaning that IP indicate to itself
"This is IPv4 broadcast" and to others - it could be used to expedite
delivery with some form of map).
But, say, let's add a second flag which allows for controlled stacking
of L2 in situations like this.
Let's call it M_BCPROXY. It can be tracked for the original meaning,
i.e. without the new meaning Ryan proposes for M_BCAST.
When M_BCAST is set and M_BCPROXY is clear, we know the packet is
broadcast, but we don't know for sure that this isn't because IP
inspected it, and set the M_BCAST flag due to the destination IPv4
address being identified as such (and valid for its link, if you are
enforcing the Strong IP End-Station model, RFC 1122 style, as is the BSD
default).
However, if we set M_BCPROXY at the same time, then, in situations where
we might potentially re-enter the stack holding the same broadcast
packet, we know that IP marked the packet as broadcast, and - on entry -
can change our routing/switching/allocation/replication strategies
accordingly.
(This is not information which, on its own, holding the origin ifnet
pointer provides; the flag is needed to sense direction in the stack.)
So, as the mbuf chain is handed-off between other L2 entities (this can
easily happen with stacked VLAN tags, in Q-in-Q and provider
environments, which pfSense can service very well) - and, if the node
itself determines that it is also a recipient of the broadcast, for
correct hand-off if the broadcast does need to be forwarded by some
other FreeBSD subsystem.
It could also be checked by firewalls: e.g. for a corroborated check,
from the mask of these two flags, where in the stack (or link forest) a
purported broadcast packet actually originated from.
(Pretty much essential for maintaining audit trail if a Smurf-like
amplification attack is caught in the act, or if an NTP relay (or other
association) terminates in an NTP broadcast association. And, of course,
to trace dodgy broadcast Sun-style XDR RPC back to its source.)
More information about the svn-src-head
mailing list