net: remove indirect block netdev event registration
Drivers do not register to netdev events to set up indirect blocks anymore. Remove __flow_indr_block_cb_register() and __flow_indr_block_cb_unregister(). The frontends set up the callbacks through flow_indr_dev_setup_block() Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
e445e30cf7
commit
709ffbe19b
@@ -621,78 +621,6 @@ static void tcf_chain_flush(struct tcf_chain *chain, bool rtnl_held)
|
||||
static int tcf_block_setup(struct tcf_block *block,
|
||||
struct flow_block_offload *bo);
|
||||
|
||||
static void tc_indr_block_cmd(struct net_device *dev, struct tcf_block *block,
|
||||
flow_indr_block_bind_cb_t *cb, void *cb_priv,
|
||||
enum flow_block_command command, bool ingress)
|
||||
{
|
||||
struct flow_block_offload bo = {
|
||||
.command = command,
|
||||
.binder_type = ingress ?
|
||||
FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS :
|
||||
FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS,
|
||||
.net = dev_net(dev),
|
||||
.block_shared = tcf_block_non_null_shared(block),
|
||||
};
|
||||
INIT_LIST_HEAD(&bo.cb_list);
|
||||
|
||||
if (!block)
|
||||
return;
|
||||
|
||||
bo.block = &block->flow_block;
|
||||
|
||||
down_write(&block->cb_lock);
|
||||
cb(dev, cb_priv, TC_SETUP_BLOCK, &bo);
|
||||
|
||||
tcf_block_setup(block, &bo);
|
||||
up_write(&block->cb_lock);
|
||||
}
|
||||
|
||||
static struct tcf_block *tc_dev_block(struct net_device *dev, bool ingress)
|
||||
{
|
||||
const struct Qdisc_class_ops *cops;
|
||||
const struct Qdisc_ops *ops;
|
||||
struct Qdisc *qdisc;
|
||||
|
||||
if (!dev_ingress_queue(dev))
|
||||
return NULL;
|
||||
|
||||
qdisc = dev_ingress_queue(dev)->qdisc_sleeping;
|
||||
if (!qdisc)
|
||||
return NULL;
|
||||
|
||||
ops = qdisc->ops;
|
||||
if (!ops)
|
||||
return NULL;
|
||||
|
||||
if (!ingress && !strcmp("ingress", ops->id))
|
||||
return NULL;
|
||||
|
||||
cops = ops->cl_ops;
|
||||
if (!cops)
|
||||
return NULL;
|
||||
|
||||
if (!cops->tcf_block)
|
||||
return NULL;
|
||||
|
||||
return cops->tcf_block(qdisc,
|
||||
ingress ? TC_H_MIN_INGRESS : TC_H_MIN_EGRESS,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void tc_indr_block_get_and_cmd(struct net_device *dev,
|
||||
flow_indr_block_bind_cb_t *cb,
|
||||
void *cb_priv,
|
||||
enum flow_block_command command)
|
||||
{
|
||||
struct tcf_block *block;
|
||||
|
||||
block = tc_dev_block(dev, true);
|
||||
tc_indr_block_cmd(dev, block, cb, cb_priv, command, true);
|
||||
|
||||
block = tc_dev_block(dev, false);
|
||||
tc_indr_block_cmd(dev, block, cb, cb_priv, command, false);
|
||||
}
|
||||
|
||||
static void tcf_block_offload_init(struct flow_block_offload *bo,
|
||||
struct net_device *dev,
|
||||
enum flow_block_command command,
|
||||
@@ -3836,11 +3764,6 @@ static struct pernet_operations tcf_net_ops = {
|
||||
.size = sizeof(struct tcf_net),
|
||||
};
|
||||
|
||||
static struct flow_indr_block_entry block_entry = {
|
||||
.cb = tc_indr_block_get_and_cmd,
|
||||
.list = LIST_HEAD_INIT(block_entry.list),
|
||||
};
|
||||
|
||||
static int __init tc_filter_init(void)
|
||||
{
|
||||
int err;
|
||||
@@ -3853,8 +3776,6 @@ static int __init tc_filter_init(void)
|
||||
if (err)
|
||||
goto err_register_pernet_subsys;
|
||||
|
||||
flow_indr_add_block_cb(&block_entry);
|
||||
|
||||
rtnl_register(PF_UNSPEC, RTM_NEWTFILTER, tc_new_tfilter, NULL,
|
||||
RTNL_FLAG_DOIT_UNLOCKED);
|
||||
rtnl_register(PF_UNSPEC, RTM_DELTFILTER, tc_del_tfilter, NULL,
|
||||
|
Reference in New Issue
Block a user