net: sched: act: add extack to init callback
This patch adds extack support for act init callback api. This prepares to handle extack support inside each specific act implementation. Based on work by David Ahern <dsahern@gmail.com> Cc: David Ahern <dsahern@gmail.com> Signed-off-by: Alexander Aring <aring@mojatatu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
84ae017a00
commit
589dad6d71
|
@ -90,7 +90,7 @@ struct tc_action_ops {
|
||||||
int (*lookup)(struct net *net, struct tc_action **a, u32 index);
|
int (*lookup)(struct net *net, struct tc_action **a, u32 index);
|
||||||
int (*init)(struct net *net, struct nlattr *nla,
|
int (*init)(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **act, int ovr,
|
struct nlattr *est, struct tc_action **act, int ovr,
|
||||||
int bind);
|
int bind, struct netlink_ext_ack *extack);
|
||||||
int (*walk)(struct net *, struct sk_buff *,
|
int (*walk)(struct net *, struct sk_buff *,
|
||||||
struct netlink_callback *, int,
|
struct netlink_callback *, int,
|
||||||
const struct tc_action_ops *);
|
const struct tc_action_ops *);
|
||||||
|
|
|
@ -680,9 +680,10 @@ struct tc_action *tcf_action_init_1(struct net *net, struct tcf_proto *tp,
|
||||||
|
|
||||||
/* backward compatibility for policer */
|
/* backward compatibility for policer */
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
err = a_o->init(net, tb[TCA_ACT_OPTIONS], est, &a, ovr, bind);
|
err = a_o->init(net, tb[TCA_ACT_OPTIONS], est, &a, ovr, bind,
|
||||||
|
extack);
|
||||||
else
|
else
|
||||||
err = a_o->init(net, nla, est, &a, ovr, bind);
|
err = a_o->init(net, nla, est, &a, ovr, bind, extack);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto err_mod;
|
goto err_mod;
|
||||||
|
|
||||||
|
|
|
@ -272,7 +272,7 @@ static void tcf_bpf_prog_fill_cfg(const struct tcf_bpf *prog,
|
||||||
|
|
||||||
static int tcf_bpf_init(struct net *net, struct nlattr *nla,
|
static int tcf_bpf_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **act,
|
struct nlattr *est, struct tc_action **act,
|
||||||
int replace, int bind)
|
int replace, int bind, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct tc_action_net *tn = net_generic(net, bpf_net_id);
|
struct tc_action_net *tn = net_generic(net, bpf_net_id);
|
||||||
struct nlattr *tb[TCA_ACT_BPF_MAX + 1];
|
struct nlattr *tb[TCA_ACT_BPF_MAX + 1];
|
||||||
|
|
|
@ -96,7 +96,8 @@ static const struct nla_policy connmark_policy[TCA_CONNMARK_MAX + 1] = {
|
||||||
|
|
||||||
static int tcf_connmark_init(struct net *net, struct nlattr *nla,
|
static int tcf_connmark_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a,
|
struct nlattr *est, struct tc_action **a,
|
||||||
int ovr, int bind)
|
int ovr, int bind,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct tc_action_net *tn = net_generic(net, connmark_net_id);
|
struct tc_action_net *tn = net_generic(net, connmark_net_id);
|
||||||
struct nlattr *tb[TCA_CONNMARK_MAX + 1];
|
struct nlattr *tb[TCA_CONNMARK_MAX + 1];
|
||||||
|
|
|
@ -46,7 +46,7 @@ static struct tc_action_ops act_csum_ops;
|
||||||
|
|
||||||
static int tcf_csum_init(struct net *net, struct nlattr *nla,
|
static int tcf_csum_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a, int ovr,
|
struct nlattr *est, struct tc_action **a, int ovr,
|
||||||
int bind)
|
int bind, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct tc_action_net *tn = net_generic(net, csum_net_id);
|
struct tc_action_net *tn = net_generic(net, csum_net_id);
|
||||||
struct tcf_csum_params *params_old, *params_new;
|
struct tcf_csum_params *params_old, *params_new;
|
||||||
|
|
|
@ -56,7 +56,7 @@ static const struct nla_policy gact_policy[TCA_GACT_MAX + 1] = {
|
||||||
|
|
||||||
static int tcf_gact_init(struct net *net, struct nlattr *nla,
|
static int tcf_gact_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a,
|
struct nlattr *est, struct tc_action **a,
|
||||||
int ovr, int bind)
|
int ovr, int bind, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct tc_action_net *tn = net_generic(net, gact_net_id);
|
struct tc_action_net *tn = net_generic(net, gact_net_id);
|
||||||
struct nlattr *tb[TCA_GACT_MAX + 1];
|
struct nlattr *tb[TCA_GACT_MAX + 1];
|
||||||
|
|
|
@ -447,7 +447,7 @@ static int populate_metalist(struct tcf_ife_info *ife, struct nlattr **tb,
|
||||||
|
|
||||||
static int tcf_ife_init(struct net *net, struct nlattr *nla,
|
static int tcf_ife_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a,
|
struct nlattr *est, struct tc_action **a,
|
||||||
int ovr, int bind)
|
int ovr, int bind, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct tc_action_net *tn = net_generic(net, ife_net_id);
|
struct tc_action_net *tn = net_generic(net, ife_net_id);
|
||||||
struct nlattr *tb[TCA_IFE_MAX + 1];
|
struct nlattr *tb[TCA_IFE_MAX + 1];
|
||||||
|
|
|
@ -193,7 +193,7 @@ err1:
|
||||||
|
|
||||||
static int tcf_ipt_init(struct net *net, struct nlattr *nla,
|
static int tcf_ipt_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a, int ovr,
|
struct nlattr *est, struct tc_action **a, int ovr,
|
||||||
int bind)
|
int bind, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
return __tcf_ipt_init(net, ipt_net_id, nla, est, a, &act_ipt_ops, ovr,
|
return __tcf_ipt_init(net, ipt_net_id, nla, est, a, &act_ipt_ops, ovr,
|
||||||
bind);
|
bind);
|
||||||
|
@ -201,7 +201,7 @@ static int tcf_ipt_init(struct net *net, struct nlattr *nla,
|
||||||
|
|
||||||
static int tcf_xt_init(struct net *net, struct nlattr *nla,
|
static int tcf_xt_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a, int ovr,
|
struct nlattr *est, struct tc_action **a, int ovr,
|
||||||
int bind)
|
int bind, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
return __tcf_ipt_init(net, xt_net_id, nla, est, a, &act_xt_ops, ovr,
|
return __tcf_ipt_init(net, xt_net_id, nla, est, a, &act_xt_ops, ovr,
|
||||||
bind);
|
bind);
|
||||||
|
|
|
@ -69,7 +69,7 @@ static struct tc_action_ops act_mirred_ops;
|
||||||
|
|
||||||
static int tcf_mirred_init(struct net *net, struct nlattr *nla,
|
static int tcf_mirred_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a, int ovr,
|
struct nlattr *est, struct tc_action **a, int ovr,
|
||||||
int bind)
|
int bind, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct tc_action_net *tn = net_generic(net, mirred_net_id);
|
struct tc_action_net *tn = net_generic(net, mirred_net_id);
|
||||||
struct nlattr *tb[TCA_MIRRED_MAX + 1];
|
struct nlattr *tb[TCA_MIRRED_MAX + 1];
|
||||||
|
|
|
@ -37,7 +37,8 @@ static const struct nla_policy nat_policy[TCA_NAT_MAX + 1] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static int tcf_nat_init(struct net *net, struct nlattr *nla, struct nlattr *est,
|
static int tcf_nat_init(struct net *net, struct nlattr *nla, struct nlattr *est,
|
||||||
struct tc_action **a, int ovr, int bind)
|
struct tc_action **a, int ovr, int bind,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct tc_action_net *tn = net_generic(net, nat_net_id);
|
struct tc_action_net *tn = net_generic(net, nat_net_id);
|
||||||
struct nlattr *tb[TCA_NAT_MAX + 1];
|
struct nlattr *tb[TCA_NAT_MAX + 1];
|
||||||
|
|
|
@ -132,7 +132,7 @@ static int tcf_pedit_key_ex_dump(struct sk_buff *skb,
|
||||||
|
|
||||||
static int tcf_pedit_init(struct net *net, struct nlattr *nla,
|
static int tcf_pedit_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a,
|
struct nlattr *est, struct tc_action **a,
|
||||||
int ovr, int bind)
|
int ovr, int bind, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct tc_action_net *tn = net_generic(net, pedit_net_id);
|
struct tc_action_net *tn = net_generic(net, pedit_net_id);
|
||||||
struct nlattr *tb[TCA_PEDIT_MAX + 1];
|
struct nlattr *tb[TCA_PEDIT_MAX + 1];
|
||||||
|
|
|
@ -74,7 +74,8 @@ static const struct nla_policy police_policy[TCA_POLICE_MAX + 1] = {
|
||||||
|
|
||||||
static int tcf_act_police_init(struct net *net, struct nlattr *nla,
|
static int tcf_act_police_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a,
|
struct nlattr *est, struct tc_action **a,
|
||||||
int ovr, int bind)
|
int ovr, int bind,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
int ret = 0, err;
|
int ret = 0, err;
|
||||||
struct nlattr *tb[TCA_POLICE_MAX + 1];
|
struct nlattr *tb[TCA_POLICE_MAX + 1];
|
||||||
|
|
|
@ -37,7 +37,7 @@ static const struct nla_policy sample_policy[TCA_SAMPLE_MAX + 1] = {
|
||||||
|
|
||||||
static int tcf_sample_init(struct net *net, struct nlattr *nla,
|
static int tcf_sample_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a, int ovr,
|
struct nlattr *est, struct tc_action **a, int ovr,
|
||||||
int bind)
|
int bind, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct tc_action_net *tn = net_generic(net, sample_net_id);
|
struct tc_action_net *tn = net_generic(net, sample_net_id);
|
||||||
struct nlattr *tb[TCA_SAMPLE_MAX + 1];
|
struct nlattr *tb[TCA_SAMPLE_MAX + 1];
|
||||||
|
|
|
@ -79,7 +79,7 @@ static const struct nla_policy simple_policy[TCA_DEF_MAX + 1] = {
|
||||||
|
|
||||||
static int tcf_simp_init(struct net *net, struct nlattr *nla,
|
static int tcf_simp_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a,
|
struct nlattr *est, struct tc_action **a,
|
||||||
int ovr, int bind)
|
int ovr, int bind, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct tc_action_net *tn = net_generic(net, simp_net_id);
|
struct tc_action_net *tn = net_generic(net, simp_net_id);
|
||||||
struct nlattr *tb[TCA_DEF_MAX + 1];
|
struct nlattr *tb[TCA_DEF_MAX + 1];
|
||||||
|
|
|
@ -66,7 +66,7 @@ static const struct nla_policy skbedit_policy[TCA_SKBEDIT_MAX + 1] = {
|
||||||
|
|
||||||
static int tcf_skbedit_init(struct net *net, struct nlattr *nla,
|
static int tcf_skbedit_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a,
|
struct nlattr *est, struct tc_action **a,
|
||||||
int ovr, int bind)
|
int ovr, int bind, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct tc_action_net *tn = net_generic(net, skbedit_net_id);
|
struct tc_action_net *tn = net_generic(net, skbedit_net_id);
|
||||||
struct nlattr *tb[TCA_SKBEDIT_MAX + 1];
|
struct nlattr *tb[TCA_SKBEDIT_MAX + 1];
|
||||||
|
|
|
@ -84,7 +84,7 @@ static const struct nla_policy skbmod_policy[TCA_SKBMOD_MAX + 1] = {
|
||||||
|
|
||||||
static int tcf_skbmod_init(struct net *net, struct nlattr *nla,
|
static int tcf_skbmod_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a,
|
struct nlattr *est, struct tc_action **a,
|
||||||
int ovr, int bind)
|
int ovr, int bind, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct tc_action_net *tn = net_generic(net, skbmod_net_id);
|
struct tc_action_net *tn = net_generic(net, skbmod_net_id);
|
||||||
struct nlattr *tb[TCA_SKBMOD_MAX + 1];
|
struct nlattr *tb[TCA_SKBMOD_MAX + 1];
|
||||||
|
|
|
@ -70,7 +70,7 @@ static const struct nla_policy tunnel_key_policy[TCA_TUNNEL_KEY_MAX + 1] = {
|
||||||
|
|
||||||
static int tunnel_key_init(struct net *net, struct nlattr *nla,
|
static int tunnel_key_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a,
|
struct nlattr *est, struct tc_action **a,
|
||||||
int ovr, int bind)
|
int ovr, int bind, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct tc_action_net *tn = net_generic(net, tunnel_key_net_id);
|
struct tc_action_net *tn = net_generic(net, tunnel_key_net_id);
|
||||||
struct nlattr *tb[TCA_TUNNEL_KEY_MAX + 1];
|
struct nlattr *tb[TCA_TUNNEL_KEY_MAX + 1];
|
||||||
|
|
|
@ -109,7 +109,7 @@ static const struct nla_policy vlan_policy[TCA_VLAN_MAX + 1] = {
|
||||||
|
|
||||||
static int tcf_vlan_init(struct net *net, struct nlattr *nla,
|
static int tcf_vlan_init(struct net *net, struct nlattr *nla,
|
||||||
struct nlattr *est, struct tc_action **a,
|
struct nlattr *est, struct tc_action **a,
|
||||||
int ovr, int bind)
|
int ovr, int bind, struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct tc_action_net *tn = net_generic(net, vlan_net_id);
|
struct tc_action_net *tn = net_generic(net, vlan_net_id);
|
||||||
struct nlattr *tb[TCA_VLAN_MAX + 1];
|
struct nlattr *tb[TCA_VLAN_MAX + 1];
|
||||||
|
|
Loading…
Reference in New Issue