Message ID | 5766037d73a81ddc72106cde93943bbca9289ae2.1709217658.git.petrm@nvidia.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | Support for nexthop group statistics | expand |
On 2/29/24 11:16 AM, Petr Machata wrote: > From: Ido Schimmel <idosch@nvidia.com> > > Add netlink support for enabling collection of HW statistics on nexthop > groups. > > Signed-off-by: Ido Schimmel <idosch@nvidia.com> > Signed-off-by: Petr Machata <petrm@nvidia.com> > --- > include/net/nexthop.h | 2 ++ > include/uapi/linux/nexthop.h | 3 +++ > net/ipv4/nexthop.c | 15 ++++++++++++++- > 3 files changed, 19 insertions(+), 1 deletion(-) > > diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c > index 02629ba7a75d..15f108c440ae 100644 > --- a/net/ipv4/nexthop.c > +++ b/net/ipv4/nexthop.c > @@ -37,6 +37,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, 1), numbers typically need a name or comment. Reviewed-by: David Ahern <dsahern@kernel.org>
David Ahern <dsahern@kernel.org> writes: > On 2/29/24 11:16 AM, Petr Machata wrote: >> diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c >> index 02629ba7a75d..15f108c440ae 100644 >> --- a/net/ipv4/nexthop.c >> +++ b/net/ipv4/nexthop.c >> @@ -37,6 +37,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, 1), > > numbers typically need a name or comment. How about this? [NHA_HW_STATS_ENABLE] = NLA_POLICY_MAX(NLA_U32, true), Too weird maybe?
diff --git a/include/net/nexthop.h b/include/net/nexthop.h index a8dad8f48ca8..20cd337b4a9c 100644 --- a/include/net/nexthop.h +++ b/include/net/nexthop.h @@ -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; diff --git a/include/uapi/linux/nexthop.h b/include/uapi/linux/nexthop.h index f4db63c17085..b86af80d4e09 100644 --- a/include/uapi/linux/nexthop.h +++ b/include/uapi/linux/nexthop.h @@ -68,6 +68,9 @@ enum { /* nested; nexthop group stats */ NHA_GROUP_STATS, + /* u32; nexthop hardware stats enable */ + NHA_HW_STATS_ENABLE, + __NHA_MAX, }; diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c index 02629ba7a75d..15f108c440ae 100644 --- a/net/ipv4/nexthop.c +++ b/net/ipv4/nexthop.c @@ -37,6 +37,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, 1), }; static const struct nla_policy rtm_nh_policy_get[] = { @@ -765,7 +766,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; @@ -1189,6 +1191,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: @@ -2609,6 +2612,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; @@ -2951,6 +2957,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; } @@ -3042,6 +3051,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: