Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */
2 : : #undef TRACE_SYSTEM
3 : : #define TRACE_SYSTEM fib6
4 : :
5 : : #if !defined(_TRACE_FIB6_H) || defined(TRACE_HEADER_MULTI_READ)
6 : : #define _TRACE_FIB6_H
7 : :
8 : : #include <linux/in6.h>
9 : : #include <net/flow.h>
10 : : #include <net/ip6_fib.h>
11 : : #include <linux/tracepoint.h>
12 : :
13 [ - + - - : 6 : TRACE_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 : : __dynamic_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 : : __assign_str(name, res->nh->fib_nh_dev);
67 : : } else {
68 : : __assign_str(name, "-");
69 : : }
70 : : if (res->f6i == net->ipv6.fib6_null_entry) {
71 : : struct in6_addr in6_zero = {};
72 : :
73 : : in6 = (struct in6_addr *)__entry->gw;
74 : : *in6 = in6_zero;
75 : :
76 : : } else if (res->nh) {
77 : : in6 = (struct in6_addr *)__entry->gw;
78 : : *in6 = res->nh->fib_nh_gw6;
79 : : }
80 : : ),
81 : :
82 : : 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",
83 : : __entry->tb_id, __entry->oif, __entry->iif, __entry->proto,
84 : : __entry->src, __entry->sport, __entry->dst, __entry->dport,
85 : : __entry->tos, __entry->scope, __entry->flags,
86 : : __get_str(name), __entry->gw, __entry->err)
87 : : );
88 : :
89 : : #endif /* _TRACE_FIB6_H */
90 : :
91 : : /* This part must be outside protection */
92 : : #include <trace/define_trace.h>
|