lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 2 Apr 2019 16:01:00 +0000
From:   Martin Lau <kafai@...com>
To:     David Ahern <dsahern@...nel.org>
CC:     "davem@...emloft.net" <davem@...emloft.net>,
        "netdev@...r.kernel.org" <netdev@...r.kernel.org>,
        "idosch@...lanox.com" <idosch@...lanox.com>,
        "David Ahern" <dsahern@...il.com>
Subject: Re: [PATCH v3 net-next 1/5] ipv4: Update fib_table_lookup tracepoint
 to take common nexthop

On Mon, Apr 01, 2019 at 08:02:30PM -0700, David Ahern wrote:
> From: David Ahern <dsahern@...il.com>
> 
> Update fib_table_lookup tracepoint to take a fib_nh_common struct and
> dump the v6 gateway address if the nexthop uses it.
> 
> Signed-off-by: David Ahern <dsahern@...il.com>
> ---
>  include/trace/events/fib.h | 45 ++++++++++++++++++++++++++-------------------
>  net/ipv4/fib_trie.c        |  2 +-
>  2 files changed, 27 insertions(+), 20 deletions(-)
> 
> diff --git a/include/trace/events/fib.h b/include/trace/events/fib.h
> index 61ea7a24c8e5..7f83b6eafc5c 100644
> --- a/include/trace/events/fib.h
> +++ b/include/trace/events/fib.h
> @@ -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		)
> @@ -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	)
saddr is no longer useful?

> +		__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;
> @@ -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 */
>  
> diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
> index 1e3b492690f9..13b3327206f9 100644
> --- a/net/ipv4/fib_trie.c
> +++ b/net/ipv4/fib_trie.c
> @@ -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;
>  		}
> -- 
> 2.11.0
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ