net: flow_offload: add list handling functions
This patch adds the list handling functions for the flow block API: * flow_block_cb_lookup() allows drivers to look up for existing flow blocks. * flow_block_cb_add() adds a flow block to the per driver list to be registered by the core. * flow_block_cb_remove() to remove a flow block from the list of existing flow blocks per driver and to request the core to unregister this. The flow block API also annotates the netns this flow block belongs to. 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
d63db30c85
commit
da3eeb904f
@@ -176,6 +176,7 @@ struct flow_block_cb *flow_block_cb_alloc(struct net *net, tc_setup_cb_t *cb,
|
||||
if (!block_cb)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
block_cb->net = net;
|
||||
block_cb->cb = cb;
|
||||
block_cb->cb_ident = cb_ident;
|
||||
block_cb->cb_priv = cb_priv;
|
||||
@@ -194,6 +195,22 @@ void flow_block_cb_free(struct flow_block_cb *block_cb)
|
||||
}
|
||||
EXPORT_SYMBOL(flow_block_cb_free);
|
||||
|
||||
struct flow_block_cb *flow_block_cb_lookup(struct flow_block_offload *f,
|
||||
tc_setup_cb_t *cb, void *cb_ident)
|
||||
{
|
||||
struct flow_block_cb *block_cb;
|
||||
|
||||
list_for_each_entry(block_cb, f->driver_block_list, driver_list) {
|
||||
if (block_cb->net == f->net &&
|
||||
block_cb->cb == cb &&
|
||||
block_cb->cb_ident == cb_ident)
|
||||
return block_cb;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(flow_block_cb_lookup);
|
||||
|
||||
int flow_block_cb_setup_simple(struct flow_block_offload *f,
|
||||
struct list_head *driver_block_list,
|
||||
tc_setup_cb_t *cb, void *cb_ident, void *cb_priv,
|
||||
|
||||
Reference in New Issue
Block a user