]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
f6d3c192 DA |
2 | #undef TRACE_SYSTEM |
3 | #define TRACE_SYSTEM fib | |
4 | ||
5 | #if !defined(_TRACE_FIB_H) || defined(TRACE_HEADER_MULTI_READ) | |
6 | #define _TRACE_FIB_H | |
7 | ||
8 | #include <linux/skbuff.h> | |
9 | #include <linux/netdevice.h> | |
10 | #include <net/ip_fib.h> | |
11 | #include <linux/tracepoint.h> | |
12 | ||
13 | TRACE_EVENT(fib_table_lookup, | |
14 | ||
9f323973 | 15 | TP_PROTO(u32 tb_id, const struct flowi4 *flp, |
0af7e7c1 | 16 | const struct fib_nh_common *nhc, int err), |
f6d3c192 | 17 | |
0af7e7c1 | 18 | TP_ARGS(tb_id, flp, nhc, err), |
f6d3c192 DA |
19 | |
20 | TP_STRUCT__entry( | |
9b8ff518 | 21 | __field( u32, tb_id ) |
9f323973 | 22 | __field( int, err ) |
f6d3c192 DA |
23 | __field( int, oif ) |
24 | __field( int, iif ) | |
0192e7d4 | 25 | __field( u8, proto ) |
f6d3c192 DA |
26 | __field( __u8, tos ) |
27 | __field( __u8, scope ) | |
28 | __field( __u8, flags ) | |
29 | __array( __u8, src, 4 ) | |
30 | __array( __u8, dst, 4 ) | |
0af7e7c1 DA |
31 | __array( __u8, gw4, 4 ) |
32 | __array( __u8, gw6, 16 ) | |
9f323973 DA |
33 | __field( u16, sport ) |
34 | __field( u16, dport ) | |
9f323973 | 35 | __dynamic_array(char, name, IFNAMSIZ ) |
f6d3c192 DA |
36 | ), |
37 | ||
38 | TP_fast_assign( | |
0af7e7c1 DA |
39 | struct in6_addr in6_zero = {}; |
40 | struct net_device *dev; | |
41 | struct in6_addr *in6; | |
f6d3c192 DA |
42 | __be32 *p32; |
43 | ||
44 | __entry->tb_id = tb_id; | |
9f323973 | 45 | __entry->err = err; |
f6d3c192 DA |
46 | __entry->oif = flp->flowi4_oif; |
47 | __entry->iif = flp->flowi4_iif; | |
48 | __entry->tos = flp->flowi4_tos; | |
49 | __entry->scope = flp->flowi4_scope; | |
50 | __entry->flags = flp->flowi4_flags; | |
51 | ||
52 | p32 = (__be32 *) __entry->src; | |
53 | *p32 = flp->saddr; | |
54 | ||
55 | p32 = (__be32 *) __entry->dst; | |
56 | *p32 = flp->daddr; | |
f6d3c192 | 57 | |
9f323973 DA |
58 | __entry->proto = flp->flowi4_proto; |
59 | if (__entry->proto == IPPROTO_TCP || | |
60 | __entry->proto == IPPROTO_UDP) { | |
61 | __entry->sport = ntohs(flp->fl4_sport); | |
62 | __entry->dport = ntohs(flp->fl4_dport); | |
63 | } else { | |
64 | __entry->sport = 0; | |
65 | __entry->dport = 0; | |
66 | } | |
67 | ||
0af7e7c1 DA |
68 | dev = nhc ? nhc->nhc_dev : NULL; |
69 | __assign_str(name, dev ? dev->name : "-"); | |
b75ed8b1 | 70 | |
0af7e7c1 | 71 | if (nhc) { |
bdf00467 | 72 | if (nhc->nhc_gw_family == AF_INET) { |
0af7e7c1 DA |
73 | p32 = (__be32 *) __entry->gw4; |
74 | *p32 = nhc->nhc_gw.ipv4; | |
9f323973 | 75 | |
0af7e7c1 DA |
76 | in6 = (struct in6_addr *)__entry->gw6; |
77 | *in6 = in6_zero; | |
bdf00467 | 78 | } else if (nhc->nhc_gw_family == AF_INET6) { |
0af7e7c1 DA |
79 | p32 = (__be32 *) __entry->gw4; |
80 | *p32 = 0; | |
9f323973 | 81 | |
0af7e7c1 DA |
82 | in6 = (struct in6_addr *)__entry->gw6; |
83 | *in6 = nhc->nhc_gw.ipv6; | |
84 | } | |
9f323973 | 85 | } else { |
0af7e7c1 | 86 | p32 = (__be32 *) __entry->gw4; |
9f323973 DA |
87 | *p32 = 0; |
88 | ||
0af7e7c1 DA |
89 | in6 = (struct in6_addr *)__entry->gw6; |
90 | *in6 = in6_zero; | |
9f323973 | 91 | } |
f6d3c192 DA |
92 | ), |
93 | ||
0af7e7c1 | 94 | 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", |
9f323973 DA |
95 | __entry->tb_id, __entry->oif, __entry->iif, __entry->proto, |
96 | __entry->src, __entry->sport, __entry->dst, __entry->dport, | |
97 | __entry->tos, __entry->scope, __entry->flags, | |
0af7e7c1 | 98 | __get_str(name), __entry->gw4, __entry->gw6, __entry->err) |
f6d3c192 | 99 | ); |
f6d3c192 DA |
100 | #endif /* _TRACE_FIB_H */ |
101 | ||
102 | /* This part must be outside protection */ | |
103 | #include <trace/define_trace.h> |