18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci#undef TRACE_SYSTEM 38c2ecf20Sopenharmony_ci#define TRACE_SYSTEM l2tp 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#if !defined(_TRACE_L2TP_H) || defined(TRACE_HEADER_MULTI_READ) 68c2ecf20Sopenharmony_ci#define _TRACE_L2TP_H 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <linux/tracepoint.h> 98c2ecf20Sopenharmony_ci#include <linux/l2tp.h> 108c2ecf20Sopenharmony_ci#include "l2tp_core.h" 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#define encap_type_name(e) { L2TP_ENCAPTYPE_##e, #e } 138c2ecf20Sopenharmony_ci#define show_encap_type_name(val) \ 148c2ecf20Sopenharmony_ci __print_symbolic(val, \ 158c2ecf20Sopenharmony_ci encap_type_name(UDP), \ 168c2ecf20Sopenharmony_ci encap_type_name(IP)) 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci#define pw_type_name(p) { L2TP_PWTYPE_##p, #p } 198c2ecf20Sopenharmony_ci#define show_pw_type_name(val) \ 208c2ecf20Sopenharmony_ci __print_symbolic(val, \ 218c2ecf20Sopenharmony_ci pw_type_name(ETH_VLAN), \ 228c2ecf20Sopenharmony_ci pw_type_name(ETH), \ 238c2ecf20Sopenharmony_ci pw_type_name(PPP), \ 248c2ecf20Sopenharmony_ci pw_type_name(PPP_AC), \ 258c2ecf20Sopenharmony_ci pw_type_name(IP)) 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(tunnel_only_evt, 288c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_tunnel *tunnel), 298c2ecf20Sopenharmony_ci TP_ARGS(tunnel), 308c2ecf20Sopenharmony_ci TP_STRUCT__entry( 318c2ecf20Sopenharmony_ci __array(char, name, L2TP_TUNNEL_NAME_MAX) 328c2ecf20Sopenharmony_ci ), 338c2ecf20Sopenharmony_ci TP_fast_assign( 348c2ecf20Sopenharmony_ci memcpy(__entry->name, tunnel->name, L2TP_TUNNEL_NAME_MAX); 358c2ecf20Sopenharmony_ci ), 368c2ecf20Sopenharmony_ci TP_printk("%s", __entry->name) 378c2ecf20Sopenharmony_ci); 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(session_only_evt, 408c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_session *session), 418c2ecf20Sopenharmony_ci TP_ARGS(session), 428c2ecf20Sopenharmony_ci TP_STRUCT__entry( 438c2ecf20Sopenharmony_ci __array(char, name, L2TP_SESSION_NAME_MAX) 448c2ecf20Sopenharmony_ci ), 458c2ecf20Sopenharmony_ci TP_fast_assign( 468c2ecf20Sopenharmony_ci memcpy(__entry->name, session->name, L2TP_SESSION_NAME_MAX); 478c2ecf20Sopenharmony_ci ), 488c2ecf20Sopenharmony_ci TP_printk("%s", __entry->name) 498c2ecf20Sopenharmony_ci); 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ciTRACE_EVENT(register_tunnel, 528c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_tunnel *tunnel), 538c2ecf20Sopenharmony_ci TP_ARGS(tunnel), 548c2ecf20Sopenharmony_ci TP_STRUCT__entry( 558c2ecf20Sopenharmony_ci __array(char, name, L2TP_TUNNEL_NAME_MAX) 568c2ecf20Sopenharmony_ci __field(int, fd) 578c2ecf20Sopenharmony_ci __field(u32, tid) 588c2ecf20Sopenharmony_ci __field(u32, ptid) 598c2ecf20Sopenharmony_ci __field(int, version) 608c2ecf20Sopenharmony_ci __field(enum l2tp_encap_type, encap) 618c2ecf20Sopenharmony_ci ), 628c2ecf20Sopenharmony_ci TP_fast_assign( 638c2ecf20Sopenharmony_ci memcpy(__entry->name, tunnel->name, L2TP_TUNNEL_NAME_MAX); 648c2ecf20Sopenharmony_ci __entry->fd = tunnel->fd; 658c2ecf20Sopenharmony_ci __entry->tid = tunnel->tunnel_id; 668c2ecf20Sopenharmony_ci __entry->ptid = tunnel->peer_tunnel_id; 678c2ecf20Sopenharmony_ci __entry->version = tunnel->version; 688c2ecf20Sopenharmony_ci __entry->encap = tunnel->encap; 698c2ecf20Sopenharmony_ci ), 708c2ecf20Sopenharmony_ci TP_printk("%s: type=%s encap=%s version=L2TPv%d tid=%u ptid=%u fd=%d", 718c2ecf20Sopenharmony_ci __entry->name, 728c2ecf20Sopenharmony_ci __entry->fd > 0 ? "managed" : "unmanaged", 738c2ecf20Sopenharmony_ci show_encap_type_name(__entry->encap), 748c2ecf20Sopenharmony_ci __entry->version, 758c2ecf20Sopenharmony_ci __entry->tid, 768c2ecf20Sopenharmony_ci __entry->ptid, 778c2ecf20Sopenharmony_ci __entry->fd) 788c2ecf20Sopenharmony_ci); 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_ciDEFINE_EVENT(tunnel_only_evt, delete_tunnel, 818c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_tunnel *tunnel), 828c2ecf20Sopenharmony_ci TP_ARGS(tunnel) 838c2ecf20Sopenharmony_ci); 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_ciDEFINE_EVENT(tunnel_only_evt, free_tunnel, 868c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_tunnel *tunnel), 878c2ecf20Sopenharmony_ci TP_ARGS(tunnel) 888c2ecf20Sopenharmony_ci); 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ciTRACE_EVENT(register_session, 918c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_session *session), 928c2ecf20Sopenharmony_ci TP_ARGS(session), 938c2ecf20Sopenharmony_ci TP_STRUCT__entry( 948c2ecf20Sopenharmony_ci __array(char, name, L2TP_SESSION_NAME_MAX) 958c2ecf20Sopenharmony_ci __field(u32, tid) 968c2ecf20Sopenharmony_ci __field(u32, ptid) 978c2ecf20Sopenharmony_ci __field(u32, sid) 988c2ecf20Sopenharmony_ci __field(u32, psid) 998c2ecf20Sopenharmony_ci __field(enum l2tp_pwtype, pwtype) 1008c2ecf20Sopenharmony_ci ), 1018c2ecf20Sopenharmony_ci TP_fast_assign( 1028c2ecf20Sopenharmony_ci memcpy(__entry->name, session->name, L2TP_SESSION_NAME_MAX); 1038c2ecf20Sopenharmony_ci __entry->tid = session->tunnel ? session->tunnel->tunnel_id : 0; 1048c2ecf20Sopenharmony_ci __entry->ptid = session->tunnel ? session->tunnel->peer_tunnel_id : 0; 1058c2ecf20Sopenharmony_ci __entry->sid = session->session_id; 1068c2ecf20Sopenharmony_ci __entry->psid = session->peer_session_id; 1078c2ecf20Sopenharmony_ci __entry->pwtype = session->pwtype; 1088c2ecf20Sopenharmony_ci ), 1098c2ecf20Sopenharmony_ci TP_printk("%s: pseudowire=%s sid=%u psid=%u tid=%u ptid=%u", 1108c2ecf20Sopenharmony_ci __entry->name, 1118c2ecf20Sopenharmony_ci show_pw_type_name(__entry->pwtype), 1128c2ecf20Sopenharmony_ci __entry->sid, 1138c2ecf20Sopenharmony_ci __entry->psid, 1148c2ecf20Sopenharmony_ci __entry->sid, 1158c2ecf20Sopenharmony_ci __entry->psid) 1168c2ecf20Sopenharmony_ci); 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_ciDEFINE_EVENT(session_only_evt, delete_session, 1198c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_session *session), 1208c2ecf20Sopenharmony_ci TP_ARGS(session) 1218c2ecf20Sopenharmony_ci); 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ciDEFINE_EVENT(session_only_evt, free_session, 1248c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_session *session), 1258c2ecf20Sopenharmony_ci TP_ARGS(session) 1268c2ecf20Sopenharmony_ci); 1278c2ecf20Sopenharmony_ci 1288c2ecf20Sopenharmony_ciDEFINE_EVENT(session_only_evt, session_seqnum_lns_enable, 1298c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_session *session), 1308c2ecf20Sopenharmony_ci TP_ARGS(session) 1318c2ecf20Sopenharmony_ci); 1328c2ecf20Sopenharmony_ci 1338c2ecf20Sopenharmony_ciDEFINE_EVENT(session_only_evt, session_seqnum_lns_disable, 1348c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_session *session), 1358c2ecf20Sopenharmony_ci TP_ARGS(session) 1368c2ecf20Sopenharmony_ci); 1378c2ecf20Sopenharmony_ci 1388c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(session_seqnum_evt, 1398c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_session *session), 1408c2ecf20Sopenharmony_ci TP_ARGS(session), 1418c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1428c2ecf20Sopenharmony_ci __array(char, name, L2TP_SESSION_NAME_MAX) 1438c2ecf20Sopenharmony_ci __field(u32, ns) 1448c2ecf20Sopenharmony_ci __field(u32, nr) 1458c2ecf20Sopenharmony_ci ), 1468c2ecf20Sopenharmony_ci TP_fast_assign( 1478c2ecf20Sopenharmony_ci memcpy(__entry->name, session->name, L2TP_SESSION_NAME_MAX); 1488c2ecf20Sopenharmony_ci __entry->ns = session->ns; 1498c2ecf20Sopenharmony_ci __entry->nr = session->nr; 1508c2ecf20Sopenharmony_ci ), 1518c2ecf20Sopenharmony_ci TP_printk("%s: ns=%u nr=%u", 1528c2ecf20Sopenharmony_ci __entry->name, 1538c2ecf20Sopenharmony_ci __entry->ns, 1548c2ecf20Sopenharmony_ci __entry->nr) 1558c2ecf20Sopenharmony_ci); 1568c2ecf20Sopenharmony_ci 1578c2ecf20Sopenharmony_ciDEFINE_EVENT(session_seqnum_evt, session_seqnum_update, 1588c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_session *session), 1598c2ecf20Sopenharmony_ci TP_ARGS(session) 1608c2ecf20Sopenharmony_ci); 1618c2ecf20Sopenharmony_ci 1628c2ecf20Sopenharmony_ciDEFINE_EVENT(session_seqnum_evt, session_seqnum_reset, 1638c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_session *session), 1648c2ecf20Sopenharmony_ci TP_ARGS(session) 1658c2ecf20Sopenharmony_ci); 1668c2ecf20Sopenharmony_ci 1678c2ecf20Sopenharmony_ciDECLARE_EVENT_CLASS(session_pkt_discard_evt, 1688c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_session *session, u32 pkt_ns), 1698c2ecf20Sopenharmony_ci TP_ARGS(session, pkt_ns), 1708c2ecf20Sopenharmony_ci TP_STRUCT__entry( 1718c2ecf20Sopenharmony_ci __array(char, name, L2TP_SESSION_NAME_MAX) 1728c2ecf20Sopenharmony_ci __field(u32, pkt_ns) 1738c2ecf20Sopenharmony_ci __field(u32, my_nr) 1748c2ecf20Sopenharmony_ci __field(u32, reorder_q_len) 1758c2ecf20Sopenharmony_ci ), 1768c2ecf20Sopenharmony_ci TP_fast_assign( 1778c2ecf20Sopenharmony_ci memcpy(__entry->name, session->name, L2TP_SESSION_NAME_MAX); 1788c2ecf20Sopenharmony_ci __entry->pkt_ns = pkt_ns, 1798c2ecf20Sopenharmony_ci __entry->my_nr = session->nr; 1808c2ecf20Sopenharmony_ci __entry->reorder_q_len = skb_queue_len(&session->reorder_q); 1818c2ecf20Sopenharmony_ci ), 1828c2ecf20Sopenharmony_ci TP_printk("%s: pkt_ns=%u my_nr=%u reorder_q_len=%u", 1838c2ecf20Sopenharmony_ci __entry->name, 1848c2ecf20Sopenharmony_ci __entry->pkt_ns, 1858c2ecf20Sopenharmony_ci __entry->my_nr, 1868c2ecf20Sopenharmony_ci __entry->reorder_q_len) 1878c2ecf20Sopenharmony_ci); 1888c2ecf20Sopenharmony_ci 1898c2ecf20Sopenharmony_ciDEFINE_EVENT(session_pkt_discard_evt, session_pkt_expired, 1908c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_session *session, u32 pkt_ns), 1918c2ecf20Sopenharmony_ci TP_ARGS(session, pkt_ns) 1928c2ecf20Sopenharmony_ci); 1938c2ecf20Sopenharmony_ci 1948c2ecf20Sopenharmony_ciDEFINE_EVENT(session_pkt_discard_evt, session_pkt_outside_rx_window, 1958c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_session *session, u32 pkt_ns), 1968c2ecf20Sopenharmony_ci TP_ARGS(session, pkt_ns) 1978c2ecf20Sopenharmony_ci); 1988c2ecf20Sopenharmony_ci 1998c2ecf20Sopenharmony_ciDEFINE_EVENT(session_pkt_discard_evt, session_pkt_oos, 2008c2ecf20Sopenharmony_ci TP_PROTO(struct l2tp_session *session, u32 pkt_ns), 2018c2ecf20Sopenharmony_ci TP_ARGS(session, pkt_ns) 2028c2ecf20Sopenharmony_ci); 2038c2ecf20Sopenharmony_ci 2048c2ecf20Sopenharmony_ci#endif /* _TRACE_L2TP_H */ 2058c2ecf20Sopenharmony_ci 2068c2ecf20Sopenharmony_ci/* This part must be outside protection */ 2078c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_PATH 2088c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_PATH . 2098c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_FILE 2108c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_FILE trace 2118c2ecf20Sopenharmony_ci#include <trace/define_trace.h> 212