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