diff options
author | David Gwynne <dlg@cvs.openbsd.org> | 2019-01-09 01:14:22 +0000 |
---|---|---|
committer | David Gwynne <dlg@cvs.openbsd.org> | 2019-01-09 01:14:22 +0000 |
commit | 562fa931bdd50700df4ee8590cc96f0d4281e02f (patch) | |
tree | 23f85aa72d579a4bd2c7098356f8992a2fe501c8 /sys/net80211 | |
parent | 8c996c7c7b7671f46c069ad2f6e9fb62510d3774 (diff) |
split if_enqueue up so drivers can replace ifq handling if needed
if_enqueue() still makes sure packets get handled by pf on the way
out, and seen by bridge if needed. however instead of falling through
to ifq mapping and output, it now calls a function pointer in the
ifnet struct. that pointer defaults to the ifq handling, but drivers
can override it to bypass ifq processing.
the most obvious users of the function pointer will be virtual
interfaces, eg, vlan(4). ifqs are good if you need to serialise
access to the thing that transmits packets (like hardware rings on
nics), or mitigate the number of times you do ring processing, but
neither of those things are desirable on vlan interfaces. ideally
vlan could transmit on any cpu without having packets serialised
by it's own ifq before being pushed down to an arbitrary number of
rings on the parent interface. bypassing ifqs means the driver can
push the vlan tag on concurrently and push down to the parent frmo
any cpu.
ok mpi@
no objection from claudio@
Diffstat (limited to 'sys/net80211')
0 files changed, 0 insertions, 0 deletions