1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #undef TRACE_SYSTEM |
3 | #define TRACE_SYSTEM skb |
4 | |
5 | #if !defined(_TRACE_SKB_H) || defined(TRACE_HEADER_MULTI_READ) |
6 | #define _TRACE_SKB_H |
7 | |
8 | #include <linux/skbuff.h> |
9 | #include <linux/netdevice.h> |
10 | #include <linux/tracepoint.h> |
11 | |
12 | #undef FN |
13 | #define FN(reason) TRACE_DEFINE_ENUM(SKB_DROP_REASON_##reason); |
14 | DEFINE_DROP_REASON(FN, FN) |
15 | |
16 | #undef FN |
17 | #undef FNe |
18 | #define FN(reason) { SKB_DROP_REASON_##reason, #reason }, |
19 | #define FNe(reason) { SKB_DROP_REASON_##reason, #reason } |
20 | |
21 | /* |
22 | * Tracepoint for free an sk_buff: |
23 | */ |
24 | TRACE_EVENT(kfree_skb, |
25 | |
26 | TP_PROTO(struct sk_buff *skb, void *location, |
27 | enum skb_drop_reason reason, struct sock *rx_sk), |
28 | |
29 | TP_ARGS(skb, location, reason, rx_sk), |
30 | |
31 | TP_STRUCT__entry( |
32 | __field(void *, skbaddr) |
33 | __field(void *, location) |
34 | __field(void *, rx_sk) |
35 | __field(unsigned short, protocol) |
36 | __field(enum skb_drop_reason, reason) |
37 | ), |
38 | |
39 | TP_fast_assign( |
40 | __entry->skbaddr = skb; |
41 | __entry->location = location; |
42 | __entry->rx_sk = rx_sk; |
43 | __entry->protocol = ntohs(skb->protocol); |
44 | __entry->reason = reason; |
45 | ), |
46 | |
47 | TP_printk("skbaddr=%p rx_sk=%p protocol=%u location=%pS reason: %s" , |
48 | __entry->skbaddr, __entry->rx_sk, __entry->protocol, |
49 | __entry->location, |
50 | __print_symbolic(__entry->reason, |
51 | DEFINE_DROP_REASON(FN, FNe))) |
52 | ); |
53 | |
54 | #undef FN |
55 | #undef FNe |
56 | |
57 | TRACE_EVENT(consume_skb, |
58 | |
59 | TP_PROTO(struct sk_buff *skb, void *location), |
60 | |
61 | TP_ARGS(skb, location), |
62 | |
63 | TP_STRUCT__entry( |
64 | __field( void *, skbaddr) |
65 | __field( void *, location) |
66 | ), |
67 | |
68 | TP_fast_assign( |
69 | __entry->skbaddr = skb; |
70 | __entry->location = location; |
71 | ), |
72 | |
73 | TP_printk("skbaddr=%p location=%pS" , __entry->skbaddr, __entry->location) |
74 | ); |
75 | |
76 | TRACE_EVENT(skb_copy_datagram_iovec, |
77 | |
78 | TP_PROTO(const struct sk_buff *skb, int len), |
79 | |
80 | TP_ARGS(skb, len), |
81 | |
82 | TP_STRUCT__entry( |
83 | __field( const void *, skbaddr ) |
84 | __field( int, len ) |
85 | ), |
86 | |
87 | TP_fast_assign( |
88 | __entry->skbaddr = skb; |
89 | __entry->len = len; |
90 | ), |
91 | |
92 | TP_printk("skbaddr=%p len=%d" , __entry->skbaddr, __entry->len) |
93 | ); |
94 | |
95 | #endif /* _TRACE_SKB_H */ |
96 | |
97 | /* This part must be outside protection */ |
98 | #include <trace/define_trace.h> |
99 | |