1 /* SPDX-License-Identifier: GPL-2.0 */
2 #undef TRACE_SYSTEM
3 #define TRACE_SYSTEM sctp
4 
5 #if !defined(_TRACE_SCTP_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_SCTP_H
7 
8 #include <net/sctp/structs.h>
9 #include <linux/tracepoint.h>
10 
11 TRACE_EVENT(sctp_probe_path,
12 
13 	TP_PROTO(struct sctp_transport *sp,
14 		 const struct sctp_association *asoc),
15 
16 	TP_ARGS(sp, asoc),
17 
18 	TP_STRUCT__entry(
19 		__field(__u64, asoc)
20 		__field(__u32, primary)
21 		__array(__u8, ipaddr, sizeof(union sctp_addr))
22 		__field(__u32, state)
23 		__field(__u32, cwnd)
24 		__field(__u32, ssthresh)
25 		__field(__u32, flight_size)
26 		__field(__u32, partial_bytes_acked)
27 		__field(__u32, pathmtu)
28 	),
29 
30 	TP_fast_assign(
31 		__entry->asoc = (unsigned long)asoc;
32 		__entry->primary = (sp == asoc->peer.primary_path);
33 		memcpy(__entry->ipaddr, &sp->ipaddr, sizeof(union sctp_addr));
34 		__entry->state = sp->state;
35 		__entry->cwnd = sp->cwnd;
36 		__entry->ssthresh = sp->ssthresh;
37 		__entry->flight_size = sp->flight_size;
38 		__entry->partial_bytes_acked = sp->partial_bytes_acked;
39 		__entry->pathmtu = sp->pathmtu;
40 	),
41 
42 	TP_printk("asoc=%#llx%s ipaddr=%pISpc state=%u cwnd=%u ssthresh=%u "
43 		  "flight_size=%u partial_bytes_acked=%u pathmtu=%u",
44 		  __entry->asoc, __entry->primary ? "(*)" : "",
45 		  __entry->ipaddr, __entry->state, __entry->cwnd,
46 		  __entry->ssthresh, __entry->flight_size,
47 		  __entry->partial_bytes_acked, __entry->pathmtu)
48 );
49 
50 TRACE_EVENT(sctp_probe,
51 
52 	TP_PROTO(const struct sctp_endpoint *ep,
53 		 const struct sctp_association *asoc,
54 		 struct sctp_chunk *chunk),
55 
56 	TP_ARGS(ep, asoc, chunk),
57 
58 	TP_STRUCT__entry(
59 		__field(__u64, asoc)
60 		__field(__u32, mark)
61 		__field(__u16, bind_port)
62 		__field(__u16, peer_port)
63 		__field(__u32, pathmtu)
64 		__field(__u32, rwnd)
65 		__field(__u16, unack_data)
66 	),
67 
68 	TP_fast_assign(
69 		struct sk_buff *skb = chunk->skb;
70 
71 		__entry->asoc = (unsigned long)asoc;
72 		__entry->mark = skb->mark;
73 		__entry->bind_port = ep->base.bind_addr.port;
74 		__entry->peer_port = asoc->peer.port;
75 		__entry->pathmtu = asoc->pathmtu;
76 		__entry->rwnd = asoc->peer.rwnd;
77 		__entry->unack_data = asoc->unack_data;
78 	),
79 
80 	TP_printk("asoc=%#llx mark=%#x bind_port=%d peer_port=%d pathmtu=%d "
81 		  "rwnd=%u unack_data=%d",
82 		  __entry->asoc, __entry->mark, __entry->bind_port,
83 		  __entry->peer_port, __entry->pathmtu, __entry->rwnd,
84 		  __entry->unack_data)
85 );
86 
87 #endif /* _TRACE_SCTP_H */
88 
89 /* This part must be outside protection */
90 #include <trace/define_trace.h>
91