Skip to content

Commit

Permalink
ipv4: Update fib_table_lookup tracepoint to take common nexthop
Browse files Browse the repository at this point in the history
Update fib_table_lookup tracepoint to take a fib_nh_common struct and
dump the v6 gateway address if the nexthop uses it.

Over the years saddr has not proven useful and the output of the
tracepoint produces very long lines. Since saddr is not part of
fib_nh_common, drop it. If it needs to be added later, fib_nh which
contains saddr can be obtained from a fib_nh_common via container_of.

Signed-off-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David Ahern authored and David S. Miller committed Apr 4, 2019
1 parent 4950c2b commit 0af7e7c
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 20 deletions.
45 changes: 26 additions & 19 deletions include/trace/events/fib.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
TRACE_EVENT(fib_table_lookup,

TP_PROTO(u32 tb_id, const struct flowi4 *flp,
const struct fib_nh *nh, int err),
const struct fib_nh_common *nhc, int err),

TP_ARGS(tb_id, flp, nh, err),
TP_ARGS(tb_id, flp, nhc, err),

TP_STRUCT__entry(
__field( u32, tb_id )
Expand All @@ -28,14 +28,17 @@ TRACE_EVENT(fib_table_lookup,
__field( __u8, flags )
__array( __u8, src, 4 )
__array( __u8, dst, 4 )
__array( __u8, gw, 4 )
__array( __u8, saddr, 4 )
__array( __u8, gw4, 4 )
__array( __u8, gw6, 16 )
__field( u16, sport )
__field( u16, dport )
__dynamic_array(char, name, IFNAMSIZ )
),

TP_fast_assign(
struct in6_addr in6_zero = {};
struct net_device *dev;
struct in6_addr *in6;
__be32 *p32;

__entry->tb_id = tb_id;
Expand All @@ -62,33 +65,37 @@ TRACE_EVENT(fib_table_lookup,
__entry->dport = 0;
}

if (nh) {
struct net_device *dev;
dev = nhc ? nhc->nhc_dev : NULL;
__assign_str(name, dev ? dev->name : "-");

p32 = (__be32 *) __entry->saddr;
*p32 = nh->nh_saddr;
if (nhc) {
if (nhc->nhc_family == AF_INET) {
p32 = (__be32 *) __entry->gw4;
*p32 = nhc->nhc_gw.ipv4;

p32 = (__be32 *) __entry->gw;
*p32 = nh->fib_nh_gw4;
in6 = (struct in6_addr *)__entry->gw6;
*in6 = in6_zero;
} else if (nhc->nhc_family == AF_INET6) {
p32 = (__be32 *) __entry->gw4;
*p32 = 0;

dev = nh->fib_nh_dev;
__assign_str(name, dev ? dev->name : "-");
in6 = (struct in6_addr *)__entry->gw6;
*in6 = nhc->nhc_gw.ipv6;
}
} else {
p32 = (__be32 *) __entry->saddr;
p32 = (__be32 *) __entry->gw4;
*p32 = 0;

p32 = (__be32 *) __entry->gw;
*p32 = 0;

__assign_str(name, "-");
in6 = (struct in6_addr *)__entry->gw6;
*in6 = in6_zero;
}
),

TP_printk("table %u oif %d iif %d proto %u %pI4/%u -> %pI4/%u tos %d scope %d flags %x ==> dev %s gw %pI4 src %pI4 err %d",
TP_printk("table %u oif %d iif %d proto %u %pI4/%u -> %pI4/%u tos %d scope %d flags %x ==> dev %s gw %pI4/%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,
__get_str(name), __entry->gw, __entry->saddr, __entry->err)
__get_str(name), __entry->gw4, __entry->gw6, __entry->err)
);
#endif /* _TRACE_FIB_H */

Expand Down
2 changes: 1 addition & 1 deletion net/ipv4/fib_trie.c
Original file line number Diff line number Diff line change
Expand Up @@ -1498,7 +1498,7 @@ int fib_table_lookup(struct fib_table *tb, const struct flowi4 *flp,
#ifdef CONFIG_IP_FIB_TRIE_STATS
this_cpu_inc(stats->semantic_match_passed);
#endif
trace_fib_table_lookup(tb->tb_id, flp, nh, err);
trace_fib_table_lookup(tb->tb_id, flp, &nh->nh_common, err);

return err;
}
Expand Down

0 comments on commit 0af7e7c

Please sign in to comment.