| xj | b04a402 | 2021-11-25 15:01:52 +0800 | [diff] [blame] | 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 | if (trace_sctp_probe_path_enabled()) { | 
|  | 80 | struct sctp_transport *sp; | 
|  | 81 |  | 
|  | 82 | list_for_each_entry(sp, &asoc->peer.transport_addr_list, | 
|  | 83 | transports) { | 
|  | 84 | trace_sctp_probe_path(sp, asoc); | 
|  | 85 | } | 
|  | 86 | } | 
|  | 87 | ), | 
|  | 88 |  | 
|  | 89 | TP_printk("asoc=%#llx mark=%#x bind_port=%d peer_port=%d pathmtu=%d " | 
|  | 90 | "rwnd=%u unack_data=%d", | 
|  | 91 | __entry->asoc, __entry->mark, __entry->bind_port, | 
|  | 92 | __entry->peer_port, __entry->pathmtu, __entry->rwnd, | 
|  | 93 | __entry->unack_data) | 
|  | 94 | ); | 
|  | 95 |  | 
|  | 96 | #endif /* _TRACE_SCTP_H */ | 
|  | 97 |  | 
|  | 98 | /* This part must be outside protection */ | 
|  | 99 | #include <trace/define_trace.h> |