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