Re: [RFC net-next 1/1] seg6: add counters support for SRv6 Behaviors

From: Jakub Kicinski
Date: Wed Apr 07 2021 - 16:24:51 EST


On Wed, 7 Apr 2021 20:03:32 +0200 Andrea Mayer wrote:
> This patch provides counters for SRv6 Behaviors as defined in [1], section
> 6. For each SRv6 Behavior instance, the counters defined in [1] are:
>
> - the total number of packets that have been correctly processed;
> - the total amount of traffic in bytes of all packets that have been
> correctly processed;
>
> In addition, we introduces a new counter that counts the number of packets
> that have NOT been properly processed (i.e. errors) by an SRv6 Behavior
> instance.
>
> Each SRv6 Behavior instance can be configured, at the time of its creation,
> to make use of counters.
> This is done through iproute2 which allows the user to create an SRv6
> Behavior instance specifying the optional "count" attribute as shown in the
> following example:
>
> $ ip -6 route add 2001:db8::1 encap seg6local action End count dev eth0
>
> per-behavior counters can be shown by adding "-s" to the iproute2 command
> line, i.e.:
>
> $ ip -s -6 route show 2001:db8::1
> 2001:db8::1 encap seg6local action End packets 0 bytes 0 errors 0 dev eth0
>
> [1] https://www.rfc-editor.org/rfc/rfc8986.html#name-counters
>
> Signed-off-by: Andrea Mayer <andrea.mayer@xxxxxxxxxxx>

> +static int put_nla_counters(struct sk_buff *skb, struct seg6_local_lwt *slwt)
> +{
> + struct seg6_local_counters counters = { 0, 0, 0 };
> + struct nlattr *nla;
> + int i;
> +
> + nla = nla_reserve(skb, SEG6_LOCAL_COUNTERS, sizeof(counters));
> + if (!nla)
> + return -EMSGSIZE;

nla_reserve_64bit(), IIUC netlink guarantees alignment of 64 bit values.