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
11TRACE_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
50TRACE_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