1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | #undef TRACE_SYSTEM |
3 | #define TRACE_SYSTEM l2tp |
4 | |
5 | #if !defined(_TRACE_L2TP_H) || defined(TRACE_HEADER_MULTI_READ) |
6 | #define _TRACE_L2TP_H |
7 | |
8 | #include <linux/tracepoint.h> |
9 | #include <linux/l2tp.h> |
10 | #include "l2tp_core.h" |
11 | |
12 | #define encap_type_name(e) { L2TP_ENCAPTYPE_##e, #e } |
13 | #define show_encap_type_name(val) \ |
14 | __print_symbolic(val, \ |
15 | encap_type_name(UDP), \ |
16 | encap_type_name(IP)) |
17 | |
18 | #define pw_type_name(p) { L2TP_PWTYPE_##p, #p } |
19 | #define show_pw_type_name(val) \ |
20 | __print_symbolic(val, \ |
21 | pw_type_name(ETH_VLAN), \ |
22 | pw_type_name(ETH), \ |
23 | pw_type_name(PPP), \ |
24 | pw_type_name(PPP_AC), \ |
25 | pw_type_name(IP)) |
26 | |
27 | DECLARE_EVENT_CLASS(tunnel_only_evt, |
28 | TP_PROTO(struct l2tp_tunnel *tunnel), |
29 | TP_ARGS(tunnel), |
30 | TP_STRUCT__entry( |
31 | __array(char, name, L2TP_TUNNEL_NAME_MAX) |
32 | ), |
33 | TP_fast_assign( |
34 | memcpy(__entry->name, tunnel->name, L2TP_TUNNEL_NAME_MAX); |
35 | ), |
36 | TP_printk("%s" , __entry->name) |
37 | ); |
38 | |
39 | DECLARE_EVENT_CLASS(session_only_evt, |
40 | TP_PROTO(struct l2tp_session *session), |
41 | TP_ARGS(session), |
42 | TP_STRUCT__entry( |
43 | __array(char, name, L2TP_SESSION_NAME_MAX) |
44 | ), |
45 | TP_fast_assign( |
46 | memcpy(__entry->name, session->name, L2TP_SESSION_NAME_MAX); |
47 | ), |
48 | TP_printk("%s" , __entry->name) |
49 | ); |
50 | |
51 | TRACE_EVENT(register_tunnel, |
52 | TP_PROTO(struct l2tp_tunnel *tunnel), |
53 | TP_ARGS(tunnel), |
54 | TP_STRUCT__entry( |
55 | __array(char, name, L2TP_TUNNEL_NAME_MAX) |
56 | __field(int, fd) |
57 | __field(u32, tid) |
58 | __field(u32, ptid) |
59 | __field(int, version) |
60 | __field(enum l2tp_encap_type, encap) |
61 | ), |
62 | TP_fast_assign( |
63 | memcpy(__entry->name, tunnel->name, L2TP_TUNNEL_NAME_MAX); |
64 | __entry->fd = tunnel->fd; |
65 | __entry->tid = tunnel->tunnel_id; |
66 | __entry->ptid = tunnel->peer_tunnel_id; |
67 | __entry->version = tunnel->version; |
68 | __entry->encap = tunnel->encap; |
69 | ), |
70 | TP_printk("%s: type=%s encap=%s version=L2TPv%d tid=%u ptid=%u fd=%d" , |
71 | __entry->name, |
72 | __entry->fd > 0 ? "managed" : "unmanaged" , |
73 | show_encap_type_name(__entry->encap), |
74 | __entry->version, |
75 | __entry->tid, |
76 | __entry->ptid, |
77 | __entry->fd) |
78 | ); |
79 | |
80 | DEFINE_EVENT(tunnel_only_evt, delete_tunnel, |
81 | TP_PROTO(struct l2tp_tunnel *tunnel), |
82 | TP_ARGS(tunnel) |
83 | ); |
84 | |
85 | DEFINE_EVENT(tunnel_only_evt, free_tunnel, |
86 | TP_PROTO(struct l2tp_tunnel *tunnel), |
87 | TP_ARGS(tunnel) |
88 | ); |
89 | |
90 | TRACE_EVENT(register_session, |
91 | TP_PROTO(struct l2tp_session *session), |
92 | TP_ARGS(session), |
93 | TP_STRUCT__entry( |
94 | __array(char, name, L2TP_SESSION_NAME_MAX) |
95 | __field(u32, tid) |
96 | __field(u32, ptid) |
97 | __field(u32, sid) |
98 | __field(u32, psid) |
99 | __field(enum l2tp_pwtype, pwtype) |
100 | ), |
101 | TP_fast_assign( |
102 | memcpy(__entry->name, session->name, L2TP_SESSION_NAME_MAX); |
103 | __entry->tid = session->tunnel ? session->tunnel->tunnel_id : 0; |
104 | __entry->ptid = session->tunnel ? session->tunnel->peer_tunnel_id : 0; |
105 | __entry->sid = session->session_id; |
106 | __entry->psid = session->peer_session_id; |
107 | __entry->pwtype = session->pwtype; |
108 | ), |
109 | TP_printk("%s: pseudowire=%s sid=%u psid=%u tid=%u ptid=%u" , |
110 | __entry->name, |
111 | show_pw_type_name(__entry->pwtype), |
112 | __entry->sid, |
113 | __entry->psid, |
114 | __entry->sid, |
115 | __entry->psid) |
116 | ); |
117 | |
118 | DEFINE_EVENT(session_only_evt, delete_session, |
119 | TP_PROTO(struct l2tp_session *session), |
120 | TP_ARGS(session) |
121 | ); |
122 | |
123 | DEFINE_EVENT(session_only_evt, free_session, |
124 | TP_PROTO(struct l2tp_session *session), |
125 | TP_ARGS(session) |
126 | ); |
127 | |
128 | DEFINE_EVENT(session_only_evt, session_seqnum_lns_enable, |
129 | TP_PROTO(struct l2tp_session *session), |
130 | TP_ARGS(session) |
131 | ); |
132 | |
133 | DEFINE_EVENT(session_only_evt, session_seqnum_lns_disable, |
134 | TP_PROTO(struct l2tp_session *session), |
135 | TP_ARGS(session) |
136 | ); |
137 | |
138 | DECLARE_EVENT_CLASS(session_seqnum_evt, |
139 | TP_PROTO(struct l2tp_session *session), |
140 | TP_ARGS(session), |
141 | TP_STRUCT__entry( |
142 | __array(char, name, L2TP_SESSION_NAME_MAX) |
143 | __field(u32, ns) |
144 | __field(u32, nr) |
145 | ), |
146 | TP_fast_assign( |
147 | memcpy(__entry->name, session->name, L2TP_SESSION_NAME_MAX); |
148 | __entry->ns = session->ns; |
149 | __entry->nr = session->nr; |
150 | ), |
151 | TP_printk("%s: ns=%u nr=%u" , |
152 | __entry->name, |
153 | __entry->ns, |
154 | __entry->nr) |
155 | ); |
156 | |
157 | DEFINE_EVENT(session_seqnum_evt, session_seqnum_update, |
158 | TP_PROTO(struct l2tp_session *session), |
159 | TP_ARGS(session) |
160 | ); |
161 | |
162 | DEFINE_EVENT(session_seqnum_evt, session_seqnum_reset, |
163 | TP_PROTO(struct l2tp_session *session), |
164 | TP_ARGS(session) |
165 | ); |
166 | |
167 | DECLARE_EVENT_CLASS(session_pkt_discard_evt, |
168 | TP_PROTO(struct l2tp_session *session, u32 pkt_ns), |
169 | TP_ARGS(session, pkt_ns), |
170 | TP_STRUCT__entry( |
171 | __array(char, name, L2TP_SESSION_NAME_MAX) |
172 | __field(u32, pkt_ns) |
173 | __field(u32, my_nr) |
174 | __field(u32, reorder_q_len) |
175 | ), |
176 | TP_fast_assign( |
177 | memcpy(__entry->name, session->name, L2TP_SESSION_NAME_MAX); |
178 | __entry->pkt_ns = pkt_ns, |
179 | __entry->my_nr = session->nr; |
180 | __entry->reorder_q_len = skb_queue_len(&session->reorder_q); |
181 | ), |
182 | TP_printk("%s: pkt_ns=%u my_nr=%u reorder_q_len=%u" , |
183 | __entry->name, |
184 | __entry->pkt_ns, |
185 | __entry->my_nr, |
186 | __entry->reorder_q_len) |
187 | ); |
188 | |
189 | DEFINE_EVENT(session_pkt_discard_evt, session_pkt_expired, |
190 | TP_PROTO(struct l2tp_session *session, u32 pkt_ns), |
191 | TP_ARGS(session, pkt_ns) |
192 | ); |
193 | |
194 | DEFINE_EVENT(session_pkt_discard_evt, session_pkt_outside_rx_window, |
195 | TP_PROTO(struct l2tp_session *session, u32 pkt_ns), |
196 | TP_ARGS(session, pkt_ns) |
197 | ); |
198 | |
199 | DEFINE_EVENT(session_pkt_discard_evt, session_pkt_oos, |
200 | TP_PROTO(struct l2tp_session *session, u32 pkt_ns), |
201 | TP_ARGS(session, pkt_ns) |
202 | ); |
203 | |
204 | #endif /* _TRACE_L2TP_H */ |
205 | |
206 | /* This part must be outside protection */ |
207 | #undef TRACE_INCLUDE_PATH |
208 | #define TRACE_INCLUDE_PATH . |
209 | #undef TRACE_INCLUDE_FILE |
210 | #define TRACE_INCLUDE_FILE trace |
211 | #include <trace/define_trace.h> |
212 | |