net: sched: register callbacks for indirect tc block binds
authorJohn Hurley <john.hurley@netronome.com>
Sat, 10 Nov 2018 05:21:26 +0000 (21:21 -0800)
committerDavid S. Miller <davem@davemloft.net>
Sun, 11 Nov 2018 17:54:52 +0000 (09:54 -0800)
commit7f76fa36754b08d9709ae50cd0a9477a6f998b21
treeaef7defef8900232af5a3e8e91ca44b064bdccfb
parentd1ce01144e75c82bc3c036863f57ac3029354429
net: sched: register callbacks for indirect tc block binds

Currently drivers can register to receive TC block bind/unbind callbacks
by implementing the setup_tc ndo in any of their given netdevs. However,
drivers may also be interested in binds to higher level devices (e.g.
tunnel drivers) to potentially offload filters applied to them.

Introduce indirect block devs which allows drivers to register callbacks
for block binds on other devices. The callback is triggered when the
device is bound to a block, allowing the driver to register for rules
applied to that block using already available functions.

Freeing an indirect block callback will trigger an unbind event (if
necessary) to direct the driver to remove any offloaded rules and unreg
any block rule callbacks. It is the responsibility of the implementing
driver to clean any registered indirect block callbacks before exiting,
if the block it still active at such a time.

Allow registering an indirect block dev callback for a device that is
already bound to a block. In this case (if it is an ingress block),
register and also trigger the callback meaning that any already installed
rules can be replayed to the calling driver.

Signed-off-by: John Hurley <john.hurley@netronome.com>
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/pkt_cls.h
include/net/sch_generic.h
net/sched/cls_api.c