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