brintos

brintos / linux-shallow public Read only

0
0
Text · 2.4 KiB · 5d7ee26 Raw
90 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#undef TRACE_SYSTEM3#define TRACE_SYSTEM fib64 5#if !defined(_TRACE_FIB6_H) || defined(TRACE_HEADER_MULTI_READ)6#define _TRACE_FIB6_H7 8#include <linux/in6.h>9#include <net/flow.h>10#include <net/ip6_fib.h>11#include <linux/tracepoint.h>12 13TRACE_EVENT(fib6_table_lookup,14 15	TP_PROTO(const struct net *net, const struct fib6_result *res,16		 struct fib6_table *table, const struct flowi6 *flp),17 18	TP_ARGS(net, res, table, flp),19 20	TP_STRUCT__entry(21		__field(	u32,	tb_id		)22		__field(	int,	err		)23		__field(	int,	oif		)24		__field(	int,	iif		)25		__field(	__u8,	tos		)26		__field(	__u8,	scope		)27		__field(	__u8,	flags		)28		__array(	__u8,	src,	16	)29		__array(	__u8,	dst,	16	)30		__field(        u16,	sport		)31		__field(        u16,	dport		)32		__field(        u8,	proto		)33		__field(        u8,	rt_type		)34		__array(		char,	name,	IFNAMSIZ )35		__array(		__u8,	gw,	16	 )36	),37 38	TP_fast_assign(39		struct in6_addr *in6;40 41		__entry->tb_id = table->tb6_id;42		__entry->err = ip6_rt_type_to_error(res->fib6_type);43		__entry->oif = flp->flowi6_oif;44		__entry->iif = flp->flowi6_iif;45		__entry->tos = ip6_tclass(flp->flowlabel);46		__entry->scope = flp->flowi6_scope;47		__entry->flags = flp->flowi6_flags;48 49		in6 = (struct in6_addr *)__entry->src;50		*in6 = flp->saddr;51 52		in6 = (struct in6_addr *)__entry->dst;53		*in6 = flp->daddr;54 55		__entry->proto = flp->flowi6_proto;56		if (__entry->proto == IPPROTO_TCP ||57		    __entry->proto == IPPROTO_UDP) {58			__entry->sport = ntohs(flp->fl6_sport);59			__entry->dport = ntohs(flp->fl6_dport);60		} else {61			__entry->sport = 0;62			__entry->dport = 0;63		}64 65		if (res->nh && res->nh->fib_nh_dev) {66			strscpy(__entry->name, res->nh->fib_nh_dev->name, IFNAMSIZ);67		} else {68			strcpy(__entry->name, "-");69		}70		if (res->f6i == net->ipv6.fib6_null_entry) {71			in6 = (struct in6_addr *)__entry->gw;72			*in6 = in6addr_any;73		} else if (res->nh) {74			in6 = (struct in6_addr *)__entry->gw;75			*in6 = res->nh->fib_nh_gw6;76		}77	),78 79	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",80		  __entry->tb_id, __entry->oif, __entry->iif, __entry->proto,81		  __entry->src, __entry->sport, __entry->dst, __entry->dport,82		  __entry->tos, __entry->scope, __entry->flags,83		  __entry->name, __entry->gw, __entry->err)84);85 86#endif /* _TRACE_FIB6_H */87 88/* This part must be outside protection */89#include <trace/define_trace.h>90