]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
tracing: ipv6: Add flow label to fib6_table_lookup tracepoint
authorIdo Schimmel <idosch@nvidia.com>
Mon, 16 Dec 2024 17:12:00 +0000 (19:12 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 19 Dec 2024 15:02:22 +0000 (16:02 +0100)
The different parameters affecting the IPv6 route lookup are printed to
the trace buffer by the fib6_table_lookup tracepoint. Add the IPv6 flow
label for better observability as it can affect the route lookup both in
terms of multipath hash calculation and policy based routing (FIB
rules). Example:

 # echo 1 > /sys/kernel/tracing/events/fib6/fib6_table_lookup/enable
 # ip -6 route get ::1 flowlabel 0x12345 ipproto udp sport 12345 dport 54321 &> /dev/null
 # cat /sys/kernel/tracing/trace_pipe
               ip-358     [010] .....    44.897484: fib6_table_lookup: table 255 oif 0 iif 1 proto 17 ::/12345 -> ::1/54321 flowlabel 0x12345 tos 0 scope 0 flags 0 ==> dev lo gw :: err 0

Reviewed-by: Petr Machata <petrm@nvidia.com>
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Guillaume Nault <gnault@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
include/trace/events/fib6.h

index 5d7ee2610728060a0deeb33c0167963e19d1ff5c..8d22b2e98d481b0c6e3efe4036589518e42336ab 100644 (file)
@@ -22,6 +22,7 @@ TRACE_EVENT(fib6_table_lookup,
                __field(        int,    err             )
                __field(        int,    oif             )
                __field(        int,    iif             )
+               __field(        u32,    flowlabel       )
                __field(        __u8,   tos             )
                __field(        __u8,   scope           )
                __field(        __u8,   flags           )
@@ -42,6 +43,7 @@ TRACE_EVENT(fib6_table_lookup,
                __entry->err = ip6_rt_type_to_error(res->fib6_type);
                __entry->oif = flp->flowi6_oif;
                __entry->iif = flp->flowi6_iif;
+               __entry->flowlabel = ntohl(flowi6_get_flowlabel(flp));
                __entry->tos = ip6_tclass(flp->flowlabel);
                __entry->scope = flp->flowi6_scope;
                __entry->flags = flp->flowi6_flags;
@@ -76,11 +78,11 @@ TRACE_EVENT(fib6_table_lookup,
                }
        ),
 
-       TP_printk("table %3u oif %d iif %d proto %u %pI6c/%u -> %pI6c/%u tos %d scope %d flags %x ==> dev %s gw %pI6c err %d",
+       TP_printk("table %3u oif %d iif %d proto %u %pI6c/%u -> %pI6c/%u flowlabel %#x tos %d scope %d flags %x ==> dev %s gw %pI6c err %d",
                  __entry->tb_id, __entry->oif, __entry->iif, __entry->proto,
                  __entry->src, __entry->sport, __entry->dst, __entry->dport,
-                 __entry->tos, __entry->scope, __entry->flags,
-                 __entry->name, __entry->gw, __entry->err)
+                 __entry->flowlabel, __entry->tos, __entry->scope,
+                 __entry->flags, __entry->name, __entry->gw, __entry->err)
 );
 
 #endif /* _TRACE_FIB6_H */