net: flow_offload: add flow_block_cb_alloc() and flow_block_cb_free()
Add a new helper function to allocate flow_block_cb objects. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
32f8c4093a
commit
d63db30c85
|
@ -260,6 +260,20 @@ struct flow_block_offload {
|
|||
struct netlink_ext_ack *extack;
|
||||
};
|
||||
|
||||
struct flow_block_cb {
|
||||
struct list_head list;
|
||||
tc_setup_cb_t *cb;
|
||||
void *cb_ident;
|
||||
void *cb_priv;
|
||||
void (*release)(void *cb_priv);
|
||||
unsigned int refcnt;
|
||||
};
|
||||
|
||||
struct flow_block_cb *flow_block_cb_alloc(struct net *net, tc_setup_cb_t *cb,
|
||||
void *cb_ident, void *cb_priv,
|
||||
void (*release)(void *cb_priv));
|
||||
void flow_block_cb_free(struct flow_block_cb *block_cb);
|
||||
|
||||
int flow_block_cb_setup_simple(struct flow_block_offload *f,
|
||||
struct list_head *driver_list, tc_setup_cb_t *cb,
|
||||
void *cb_ident, void *cb_priv, bool ingress_only);
|
||||
|
|
|
@ -166,6 +166,34 @@ void flow_rule_match_enc_opts(const struct flow_rule *rule,
|
|||
}
|
||||
EXPORT_SYMBOL(flow_rule_match_enc_opts);
|
||||
|
||||
struct flow_block_cb *flow_block_cb_alloc(struct net *net, tc_setup_cb_t *cb,
|
||||
void *cb_ident, void *cb_priv,
|
||||
void (*release)(void *cb_priv))
|
||||
{
|
||||
struct flow_block_cb *block_cb;
|
||||
|
||||
block_cb = kzalloc(sizeof(*block_cb), GFP_KERNEL);
|
||||
if (!block_cb)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
block_cb->cb = cb;
|
||||
block_cb->cb_ident = cb_ident;
|
||||
block_cb->cb_priv = cb_priv;
|
||||
block_cb->release = release;
|
||||
|
||||
return block_cb;
|
||||
}
|
||||
EXPORT_SYMBOL(flow_block_cb_alloc);
|
||||
|
||||
void flow_block_cb_free(struct flow_block_cb *block_cb)
|
||||
{
|
||||
if (block_cb->release)
|
||||
block_cb->release(block_cb->cb_priv);
|
||||
|
||||
kfree(block_cb);
|
||||
}
|
||||
EXPORT_SYMBOL(flow_block_cb_free);
|
||||
|
||||
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,
|
||||
|
|
Loading…
Reference in New Issue