ipv6, trace: fix tos reporting on fib6_table_lookup
authorDaniel Borkmann <daniel@iogearbox.net>
Fri, 18 Mar 2016 17:37:59 +0000 (18:37 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sun, 20 Mar 2016 17:44:34 +0000 (13:44 -0400)
flowi6_tos of struct flowi6 is unused in IPv6, therefore dumping tos on
that tracepoint will also give incorrect information wrt traffic class.

If we want to fix it, we need to extract it via ip6_tclass(flp->flowlabel).
While for the same test case I get a count of 0 non-zero tos values before
the change, they now start to show up after the change:

  # ./perf record -e fib6:fib6_table_lookup -a sleep 10
  # ./perf script | grep -v "tos 0" | wc -l
  60

Since there's no user in the kernel tree anymore of flowi6_tos, remove the
define to avoid any future confusion on this.

Fixes: b811580d91e9 ("net: IPv6 fib lookup tracepoint")
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/flow.h
include/trace/events/fib6.h

index 83969eebebf3b458bc4160fe0aded6f5d8fdd30c..d47ef4bb5423a3a24bf0267ef3bf6dab69226a4e 100644 (file)
@@ -127,7 +127,6 @@ struct flowi6 {
 #define flowi6_oif             __fl_common.flowic_oif
 #define flowi6_iif             __fl_common.flowic_iif
 #define flowi6_mark            __fl_common.flowic_mark
-#define flowi6_tos             __fl_common.flowic_tos
 #define flowi6_scope           __fl_common.flowic_scope
 #define flowi6_proto           __fl_common.flowic_proto
 #define flowi6_flags           __fl_common.flowic_flags
@@ -135,6 +134,7 @@ struct flowi6 {
 #define flowi6_tun_key         __fl_common.flowic_tun_key
        struct in6_addr         daddr;
        struct in6_addr         saddr;
+       /* Note: flowi6_tos is encoded in flowlabel, too. */
        __be32                  flowlabel;
        union flowi_uli         uli;
 #define fl6_sport              uli.ports.sport
index 4cf6bac4686d27ad22a1f43b8a3d67ca8fa3bfb5..d60096cddb2a6e0e40961c5a078c14c8f848e529 100644 (file)
@@ -37,7 +37,7 @@ TRACE_EVENT(fib6_table_lookup,
                __entry->tb_id = tb_id;
                __entry->oif = flp->flowi6_oif;
                __entry->iif = flp->flowi6_iif;
-               __entry->tos = flp->flowi6_tos;
+               __entry->tos = ip6_tclass(flp->flowlabel);
                __entry->scope = flp->flowi6_scope;
                __entry->flags = flp->flowi6_flags;