Warning: This file is not a C or C++ file. It does not have highlighting.
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 | 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 | __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 |
Warning: This file is not a C or C++ file. It does not have highlighting.