mirror of
https://github.com/torvalds/linux
synced 2024-09-06 18:01:05 +00:00
net: nexthop: Add ability to enable / disable hardware statistics
Add netlink support for enabling collection of HW statistics on nexthop groups. Signed-off-by: Ido Schimmel <idosch@nvidia.com> Reviewed-by: David Ahern <dsahern@kernel.org> Signed-off-by: Petr Machata <petrm@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5877786fcf
commit
746c19a52e
|
@ -47,6 +47,8 @@ struct nh_config {
|
|||
bool nh_grp_res_has_idle_timer;
|
||||
bool nh_grp_res_has_unbalanced_timer;
|
||||
|
||||
bool nh_hw_stats;
|
||||
|
||||
struct nlattr *nh_encap;
|
||||
u16 nh_encap_type;
|
||||
|
||||
|
|
|
@ -68,6 +68,9 @@ enum {
|
|||
/* nested; nexthop group stats */
|
||||
NHA_GROUP_STATS,
|
||||
|
||||
/* u32; nexthop hardware stats enable */
|
||||
NHA_HW_STATS_ENABLE,
|
||||
|
||||
__NHA_MAX,
|
||||
};
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@ static const struct nla_policy rtm_nh_policy_new[] = {
|
|||
[NHA_ENCAP] = { .type = NLA_NESTED },
|
||||
[NHA_FDB] = { .type = NLA_FLAG },
|
||||
[NHA_RES_GROUP] = { .type = NLA_NESTED },
|
||||
[NHA_HW_STATS_ENABLE] = NLA_POLICY_MAX(NLA_U32, true),
|
||||
};
|
||||
|
||||
static const struct nla_policy rtm_nh_policy_get[] = {
|
||||
|
@ -778,7 +779,8 @@ static int nla_put_nh_group(struct sk_buff *skb, struct nexthop *nh,
|
|||
goto nla_put_failure;
|
||||
|
||||
if (op_flags & NHA_OP_FLAG_DUMP_STATS &&
|
||||
nla_put_nh_group_stats(skb, nh))
|
||||
(nla_put_u32(skb, NHA_HW_STATS_ENABLE, nhg->hw_stats) ||
|
||||
nla_put_nh_group_stats(skb, nh)))
|
||||
goto nla_put_failure;
|
||||
|
||||
return 0;
|
||||
|
@ -1202,6 +1204,7 @@ static int nh_check_attr_group(struct net *net,
|
|||
if (!tb[i])
|
||||
continue;
|
||||
switch (i) {
|
||||
case NHA_HW_STATS_ENABLE:
|
||||
case NHA_FDB:
|
||||
continue;
|
||||
case NHA_RES_GROUP:
|
||||
|
@ -2622,6 +2625,9 @@ static struct nexthop *nexthop_create_group(struct net *net,
|
|||
if (cfg->nh_fdb)
|
||||
nhg->fdb_nh = 1;
|
||||
|
||||
if (cfg->nh_hw_stats)
|
||||
nhg->hw_stats = true;
|
||||
|
||||
rcu_assign_pointer(nh->nh_grp, nhg);
|
||||
|
||||
return nh;
|
||||
|
@ -2964,6 +2970,9 @@ static int rtm_to_nh_config(struct net *net, struct sk_buff *skb,
|
|||
err = rtm_to_nh_config_grp_res(tb[NHA_RES_GROUP],
|
||||
cfg, extack);
|
||||
|
||||
if (tb[NHA_HW_STATS_ENABLE])
|
||||
cfg->nh_hw_stats = nla_get_u32(tb[NHA_HW_STATS_ENABLE]);
|
||||
|
||||
/* no other attributes should be set */
|
||||
goto out;
|
||||
}
|
||||
|
@ -3055,6 +3064,10 @@ static int rtm_to_nh_config(struct net *net, struct sk_buff *skb,
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (tb[NHA_HW_STATS_ENABLE]) {
|
||||
NL_SET_ERR_MSG(extack, "Cannot enable nexthop hardware statistics for non-group nexthops");
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = 0;
|
||||
out:
|
||||
|
|
Loading…
Reference in a new issue