net: Update fib_table_lookup tracepoints
Subsystems (4)
[email protected]
maintainerv2 cover net: Update fib_table_lookup tracepoints
From: David Ahern <[email protected]>
Update the FIB lookup tracepoints to include ip proto and port fields from the flow struct. In the process make the IPv4 tracepoint inline with IPv6 which is much easier to use and follow the lookup and result.
Remove the tracepoint in fib_validate_source which does not provide value above the fib_table_lookup which immediately follows it.
v2
- move CREATE_TRACE_POINTS for the v6 tracepoint to route.c to handle its need for an internal function to convert route type to error and handle IPv6 as a module or builtin. Reported by kbuild robot.
David Ahern (3):
net/ipv4: Udate fib_table_lookup tracepoint net/ipv6: Udate fib6_table_lookup tracepoint net/ipv4: Remove tracepoint in fib_validate_source
include/trace/events/fib.h | 107 ++++++++++++++++++-------------------------- include/trace/events/fib6.h | 29 +++++++++--- net/core/net-traces.c | 4 -- net/ipv4/fib_frontend.c | 2 - net/ipv4/fib_trie.c | 14 +++--- net/ipv6/route.c | 9 +++- 6 files changed, 81 insertions(+), 84 deletions(-)
Signature · 1 line
2.11.0
[email protected]
maintainerPATCH v2 1/3 net/ipv4: Udate fib_table_lookup tracepoint
From: David Ahern <[email protected]>
Commit 4a2d73a4fb36 ("ipv4: fib_rules: support match on sport, dport and ip proto") added support for protocol and ports to FIB rules. Update the FIB lookup tracepoint to dump the parameters.
In addition, make the IPv4 tracepoint similar to the IPv6 one where the lookup parameters and result are dumped in 1 event. It is much easier to use and understand the outcome of the lookup.
--- include/trace/events/fib.h | 72 +++++++++++++++++++++++++++------------------- net/ipv4/fib_trie.c | 14 +++++---- 2 files changed, 52 insertions(+), 34 deletions(-)
include/trace/events/fib.h +43 -29
@@ -12,12 +12,14 @@ TRACE_EVENT(fib_table_lookup, - TP_PROTO(u32 tb_id, const struct flowi4 *flp), + TP_PROTO(u32 tb_id, const struct flowi4 *flp, + const struct fib_nh *nh, int err), - TP_ARGS(tb_id, flp), + TP_ARGS(tb_id, flp, nh, err), TP_STRUCT__entry( __field( u32, tb_id ) + __field( int, err ) __field( int, oif ) __field( int, iif ) __field( __u8, tos )
@@ -25,12 +27,19 @@ TRACE_EVENT(fib_table_lookup, __field( __u8, flags ) __array( __u8, src, 4 ) __array( __u8, dst, 4 ) + __array( __u8, gw, 4 ) + __array( __u8, saddr, 4 ) + __field( u16, sport ) + __field( u16, dport ) + __field( u8, proto ) +__dynamic_array (char, name,IFNAMSIZ ) ),TP_fast_assign ( __be32 *p32; __entry->tb_id = tb_id; + __entry->err = err; __entry->oif = flp->flowi4_oif; __entry->iif = flp->flowi4_iif; __entry->tos = flp->flowi4_tos;
@@ -42,36 +51,41 @@ TRACE_EVENT(fib_table_lookup, p32 = (__be32 *) __entry->dst; *p32 = flp->daddr; - ), - -TP_printk ("table %u oif %d iif %d src %pI4 dst %pI4 tos %d scope %d flags %x" , - __entry->tb_id, __entry->oif, __entry->iif, - __entry->src, __entry->dst, __entry->tos, __entry->scope, - __entry->flags) -); - -TRACE_EVENT (fib_table_lookup_nh, - - TP_PROTO(const struct fib_nh *nh), - -TP_ARGS (nh), - -TP_STRUCT__entry ( - __string( name, nh->nh_dev->name) - __field( int, oif ) -__array ( __u8, src,4 ) - ), - -TP_fast_assign ( - __be32 *p32 = (__be32 *) __entry->src; - __assign_str(name, nh->nh_dev ? nh->nh_dev->name : "not set"); - __entry->oif = nh->nh_oif; - *p32 = nh->nh_saddr; + __entry->proto = flp->flowi4_proto; +if (__entry->proto ==IPPROTO_TCP || + __entry->proto ==IPPROTO_UDP ) { + __entry->sport =ntohs (flp->fl4_sport); + __entry->dport =ntohs (flp->fl4_dport); + }else { + __entry->sport =0 ; + __entry->dport =0 ; + } + +if (nh) { + p32 = (__be32 *) __entry->saddr; + *p32 = nh->nh_saddr; + + p32 = (__be32 *) __entry->gw; + *p32 = nh->nh_gw; + +__assign_str (name, nh->nh_dev ? nh->nh_dev->name :"-" ); + }else { + p32 = (__be32 *) __entry->saddr; + *p32 =0 ; + + p32 = (__be32 *) __entry->gw; + *p32 =0 ; + +__assign_str (name,"-" ); + } ), -TP_printk ("nexthop dev %s oif %d src %pI4" , -__get_str (name), __entry->oif, __entry->src) +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" , + __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) ); TRACE_EVENT(fib_validate_source,
net/ipv4/fib_trie.c +9 -5
@@ -1326,14 +1326,14 @@ int fib_table_lookup(struct fib_table *tb, const struct flowi4 *flp,unsigned long index;t_key cindex; -trace_fib_table_lookup (tb->tb_id, flp); - pn = t->kv; cindex =0 ; n =get_child_rcu (pn, cindex); -if (!n) +if (!n) { +trace_fib_table_lookup (tb->tb_id, flp,NULL , -EAGAIN );return -EAGAIN ; + }#ifdef CONFIG_IP_FIB_TRIE_STATS this_cpu_inc (stats->gets);
@@ -1416,8 +1416,11 @@ int fib_table_lookup(struct fib_table *tb, const struct flowi4 *flp,* nothing for us to do as we do not have any * further nodes to parse. */ -if (IS_TRIE (pn)) +if (IS_TRIE (pn)) { +trace_fib_table_lookup (tb->tb_id, flp, +NULL , -EAGAIN );return -EAGAIN ; + }#ifdef CONFIG_IP_FIB_TRIE_STATS this_cpu_inc (stats->backtrack);#endif
@@ -1459,6 +1462,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,NULL , err);return err; }if (fi->fib_flags &RTNH_F_DEAD )
@@ -1494,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_nh (nh); +trace_fib_table_lookup (tb->tb_id, flp, nh, err);return err; }
Signature · 1 line
2.11.0
[email protected]
maintainerPATCH v2 2/3 net/ipv6: Udate fib6_table_lookup tracepoint
In reply to [email protected]From: David Ahern <[email protected]>
Commit bb0ad1987e96 ("ipv6: fib6_rules: support for match on sport, dport and ip proto") added support for protocol and ports to FIB rules. Update the FIB lookup tracepoint to dump the parameters.
--- include/trace/events/fib6.h | 29 ++++++++++++++++++++++------- net/core/net-traces.c | 4 ---- net/ipv6/route.c | 9 +++++++-- 3 files changed, 29 insertions(+), 13 deletions(-)
include/trace/events/fib6.h +22 -7
@@ -19,7 +19,7 @@ TRACE_EVENT(fib6_table_lookup,TP_STRUCT__entry (__field (u32 ,tb_id ) - +__field ( int, err )__field ( int, oif )__field ( int, iif ) __field( __u8, tos )
@@ -27,7 +27,10 @@ TRACE_EVENT(fib6_table_lookup, __field( __u8, flags ) __array( __u8, src, 16 ) __array( __u8, dst, 16 ) - + __field( u16, sport ) + __field( u16, dport ) + __field( u8, proto ) + __field( u8, rt_type ) __dynamic_array( char, name, IFNAMSIZ )__array ( __u8, gw,16 ) ),
@@ -36,6 +39,7 @@ TRACE_EVENT(fib6_table_lookup,struct in6_addr *in6; __entry->tb_id = table->tb6_id; + __entry->err =ip6_rt_type_to_error (f6i->fib6_type); __entry->oif = flp->flowi6_oif; __entry->iif = flp->flowi6_iif; __entry->tos =ip6_tclass (flp->flowlabel);
@@ -48,10 +52,20 @@ TRACE_EVENT(fib6_table_lookup, in6 = (struct in6_addr *)__entry->dst; *in6 = flp->daddr; + __entry->proto = flp->flowi6_proto; +if (__entry->proto ==IPPROTO_TCP || + __entry->proto ==IPPROTO_UDP ) { + __entry->sport =ntohs (flp->fl6_sport); + __entry->dport =ntohs (flp->fl6_dport); + }else { + __entry->sport =0 ; + __entry->dport =0 ; + } +if (f6i->fib6_nh.nh_dev) {__assign_str (name, f6i->fib6_nh.nh_dev); }else { -__assign_str (name,"" ); +__assign_str (name,"-" ); }if (f6i == net->ipv6.fib6_null_entry) {struct in6_addr in6_zero = {};
@@ -65,10 +79,11 @@ TRACE_EVENT(fib6_table_lookup, } ), -TP_printk ("table %3u oif %d iif %d src %pI6c dst %pI6c tos %d scope %d flags %x ==> dev %s gw %pI6c" , - __entry->tb_id, __entry->oif, __entry->iif, - __entry->src, __entry->dst, __entry->tos, __entry->scope, - __entry->flags,__get_str (name), __entry->gw) +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" , + __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->err) );#endif /* _TRACE_FIB6_H */
net/core/net-traces.c +0 -4
@@ -35,10 +35,6 @@#include <trace/events/tcp.h> #include <trace/events/fib.h> #include <trace/events/qdisc.h> -#if IS_ENABLED (CONFIG_IPV6 ) -#include <trace/events/fib6.h> -EXPORT_TRACEPOINT_SYMBOL_GPL (fib6_table_lookup); -#endif #if IS_ENABLED (CONFIG_BRIDGE )#include <trace/events/bridge.h> EXPORT_TRACEPOINT_SYMBOL_GPL (br_fdb_add);
net/ipv6/route.c +7 -2
@@ -63,14 +63,19 @@#include <net/lwtunnel.h> #include <net/ip_tunnels.h> #include <net/l3mdev.h> -#include <trace/events/fib6.h> -#include <linux/uaccess.h> #ifdef CONFIG_SYSCTL #include <linux/sysctl.h> #endif +static int ip6_rt_type_to_error (u8 fib6_type); + +#define CREATE_TRACE_POINTS +#include <trace/events/fib6.h> +EXPORT_TRACEPOINT_SYMBOL_GPL (fib6_table_lookup); +#undef CREATE_TRACE_POINTS +enum rt6_nud_state {RT6_NUD_FAIL_HARD =-3 ,RT6_NUD_FAIL_PROBE =-2 ,
Signature · 1 line
2.11.0
[email protected]
maintainerPATCH v2 3/3 net/ipv4: Remove tracepoint in fib_validate_source
In reply to [email protected]From: David Ahern <[email protected]>
Tracepoint does not add value and the call to fib_lookup follows it which shows the same information and the fib lookup result.
--- include/trace/events/fib.h | 35 ----------------------------------- net/ipv4/fib_frontend.c | 2 -- 2 files changed, 37 deletions(-)
include/trace/events/fib.h +0 -35
@@ -87,41 +87,6 @@ TRACE_EVENT(fib_table_lookup, __entry->tos, __entry->scope, __entry->flags, __get_str(name), __entry->gw, __entry->saddr, __entry->err) ); - -TRACE_EVENT (fib_validate_source, - - TP_PROTO(const struct net_device *dev, const struct flowi4 *flp), - -TP_ARGS (dev, flp), - -TP_STRUCT__entry ( - __string( name, dev->name ) - __field( int, oif ) - __field( int, iif ) - __field( __u8, tos ) - __array( __u8, src, 4 ) -__array ( __u8, dst,4 ) - ), - -TP_fast_assign ( - __be32 *p32; - - __assign_str(name, dev ? dev->name : "not set"); - __entry->oif = flp->flowi4_oif; - __entry->iif = flp->flowi4_iif; - __entry->tos = flp->flowi4_tos; - - p32 = (__be32 *) __entry->src; - *p32 = flp->saddr; - - p32 = (__be32 *) __entry->dst; - *p32 = flp->daddr; - ), - -TP_printk ("dev %s oif %d iif %d tos %d src %pI4 dst %pI4" , -__get_str (name), __entry->oif, __entry->iif, __entry->tos, - __entry->src, __entry->dst) -);#endif /* _TRACE_FIB_H */ /* This part must be outside protection */
net/ipv4/fib_frontend.c +0 -2
@@ -354,8 +354,6 @@ static int __fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst, fl4.fl4_dport =0 ; } -trace_fib_validate_source (dev, &fl4); -if (fib_lookup (net, &fl4, &res,0 )) goto last_resort; if (res.type != RTN_UNICAST &&
Signature · 1 line
2.11.0
David Miller
maintainerFrom: [email protected]
Date: Wed, 23 May 2018 17:08:46 -0700
Quoted 6 lines
From: David Ahern <[email protected]>
Update the FIB lookup tracepoints to include ip proto and port fields from the flow struct. In the process make the IPv4 tracepoint inline with IPv6 which is much easier to use and follow the lookup and result.
Quoted 7 lines
Remove the tracepoint in
fib_validate_sourcewhich does not provide value above thefib_table_lookupwhich immediately follows it.v2
- moveCREATE_TRACE_POINTSfor the v6 tracepoint toroute.cto handle its need for an internal function to convert route type to error and handle IPv6 as a module or builtin. Reported by kbuild robot.
Series applied.