0001
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM l2tp
0004
0005 #if !defined(_TRACE_L2TP_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define _TRACE_L2TP_H
0007
0008 #include <linux/tracepoint.h>
0009 #include <linux/l2tp.h>
0010 #include "l2tp_core.h"
0011
0012 #define encap_type_name(e) { L2TP_ENCAPTYPE_##e, #e }
0013 #define show_encap_type_name(val) \
0014 __print_symbolic(val, \
0015 encap_type_name(UDP), \
0016 encap_type_name(IP))
0017
0018 #define pw_type_name(p) { L2TP_PWTYPE_##p, #p }
0019 #define show_pw_type_name(val) \
0020 __print_symbolic(val, \
0021 pw_type_name(ETH_VLAN), \
0022 pw_type_name(ETH), \
0023 pw_type_name(PPP), \
0024 pw_type_name(PPP_AC), \
0025 pw_type_name(IP))
0026
0027 DECLARE_EVENT_CLASS(tunnel_only_evt,
0028 TP_PROTO(struct l2tp_tunnel *tunnel),
0029 TP_ARGS(tunnel),
0030 TP_STRUCT__entry(
0031 __array(char, name, L2TP_TUNNEL_NAME_MAX)
0032 ),
0033 TP_fast_assign(
0034 memcpy(__entry->name, tunnel->name, L2TP_TUNNEL_NAME_MAX);
0035 ),
0036 TP_printk("%s", __entry->name)
0037 );
0038
0039 DECLARE_EVENT_CLASS(session_only_evt,
0040 TP_PROTO(struct l2tp_session *session),
0041 TP_ARGS(session),
0042 TP_STRUCT__entry(
0043 __array(char, name, L2TP_SESSION_NAME_MAX)
0044 ),
0045 TP_fast_assign(
0046 memcpy(__entry->name, session->name, L2TP_SESSION_NAME_MAX);
0047 ),
0048 TP_printk("%s", __entry->name)
0049 );
0050
0051 TRACE_EVENT(register_tunnel,
0052 TP_PROTO(struct l2tp_tunnel *tunnel),
0053 TP_ARGS(tunnel),
0054 TP_STRUCT__entry(
0055 __array(char, name, L2TP_TUNNEL_NAME_MAX)
0056 __field(int, fd)
0057 __field(u32, tid)
0058 __field(u32, ptid)
0059 __field(int, version)
0060 __field(enum l2tp_encap_type, encap)
0061 ),
0062 TP_fast_assign(
0063 memcpy(__entry->name, tunnel->name, L2TP_TUNNEL_NAME_MAX);
0064 __entry->fd = tunnel->fd;
0065 __entry->tid = tunnel->tunnel_id;
0066 __entry->ptid = tunnel->peer_tunnel_id;
0067 __entry->version = tunnel->version;
0068 __entry->encap = tunnel->encap;
0069 ),
0070 TP_printk("%s: type=%s encap=%s version=L2TPv%d tid=%u ptid=%u fd=%d",
0071 __entry->name,
0072 __entry->fd > 0 ? "managed" : "unmanaged",
0073 show_encap_type_name(__entry->encap),
0074 __entry->version,
0075 __entry->tid,
0076 __entry->ptid,
0077 __entry->fd)
0078 );
0079
0080 DEFINE_EVENT(tunnel_only_evt, delete_tunnel,
0081 TP_PROTO(struct l2tp_tunnel *tunnel),
0082 TP_ARGS(tunnel)
0083 );
0084
0085 DEFINE_EVENT(tunnel_only_evt, free_tunnel,
0086 TP_PROTO(struct l2tp_tunnel *tunnel),
0087 TP_ARGS(tunnel)
0088 );
0089
0090 TRACE_EVENT(register_session,
0091 TP_PROTO(struct l2tp_session *session),
0092 TP_ARGS(session),
0093 TP_STRUCT__entry(
0094 __array(char, name, L2TP_SESSION_NAME_MAX)
0095 __field(u32, tid)
0096 __field(u32, ptid)
0097 __field(u32, sid)
0098 __field(u32, psid)
0099 __field(enum l2tp_pwtype, pwtype)
0100 ),
0101 TP_fast_assign(
0102 memcpy(__entry->name, session->name, L2TP_SESSION_NAME_MAX);
0103 __entry->tid = session->tunnel ? session->tunnel->tunnel_id : 0;
0104 __entry->ptid = session->tunnel ? session->tunnel->peer_tunnel_id : 0;
0105 __entry->sid = session->session_id;
0106 __entry->psid = session->peer_session_id;
0107 __entry->pwtype = session->pwtype;
0108 ),
0109 TP_printk("%s: pseudowire=%s sid=%u psid=%u tid=%u ptid=%u",
0110 __entry->name,
0111 show_pw_type_name(__entry->pwtype),
0112 __entry->sid,
0113 __entry->psid,
0114 __entry->sid,
0115 __entry->psid)
0116 );
0117
0118 DEFINE_EVENT(session_only_evt, delete_session,
0119 TP_PROTO(struct l2tp_session *session),
0120 TP_ARGS(session)
0121 );
0122
0123 DEFINE_EVENT(session_only_evt, free_session,
0124 TP_PROTO(struct l2tp_session *session),
0125 TP_ARGS(session)
0126 );
0127
0128 DEFINE_EVENT(session_only_evt, session_seqnum_lns_enable,
0129 TP_PROTO(struct l2tp_session *session),
0130 TP_ARGS(session)
0131 );
0132
0133 DEFINE_EVENT(session_only_evt, session_seqnum_lns_disable,
0134 TP_PROTO(struct l2tp_session *session),
0135 TP_ARGS(session)
0136 );
0137
0138 DECLARE_EVENT_CLASS(session_seqnum_evt,
0139 TP_PROTO(struct l2tp_session *session),
0140 TP_ARGS(session),
0141 TP_STRUCT__entry(
0142 __array(char, name, L2TP_SESSION_NAME_MAX)
0143 __field(u32, ns)
0144 __field(u32, nr)
0145 ),
0146 TP_fast_assign(
0147 memcpy(__entry->name, session->name, L2TP_SESSION_NAME_MAX);
0148 __entry->ns = session->ns;
0149 __entry->nr = session->nr;
0150 ),
0151 TP_printk("%s: ns=%u nr=%u",
0152 __entry->name,
0153 __entry->ns,
0154 __entry->nr)
0155 );
0156
0157 DEFINE_EVENT(session_seqnum_evt, session_seqnum_update,
0158 TP_PROTO(struct l2tp_session *session),
0159 TP_ARGS(session)
0160 );
0161
0162 DEFINE_EVENT(session_seqnum_evt, session_seqnum_reset,
0163 TP_PROTO(struct l2tp_session *session),
0164 TP_ARGS(session)
0165 );
0166
0167 DECLARE_EVENT_CLASS(session_pkt_discard_evt,
0168 TP_PROTO(struct l2tp_session *session, u32 pkt_ns),
0169 TP_ARGS(session, pkt_ns),
0170 TP_STRUCT__entry(
0171 __array(char, name, L2TP_SESSION_NAME_MAX)
0172 __field(u32, pkt_ns)
0173 __field(u32, my_nr)
0174 __field(u32, reorder_q_len)
0175 ),
0176 TP_fast_assign(
0177 memcpy(__entry->name, session->name, L2TP_SESSION_NAME_MAX);
0178 __entry->pkt_ns = pkt_ns,
0179 __entry->my_nr = session->nr;
0180 __entry->reorder_q_len = skb_queue_len(&session->reorder_q);
0181 ),
0182 TP_printk("%s: pkt_ns=%u my_nr=%u reorder_q_len=%u",
0183 __entry->name,
0184 __entry->pkt_ns,
0185 __entry->my_nr,
0186 __entry->reorder_q_len)
0187 );
0188
0189 DEFINE_EVENT(session_pkt_discard_evt, session_pkt_expired,
0190 TP_PROTO(struct l2tp_session *session, u32 pkt_ns),
0191 TP_ARGS(session, pkt_ns)
0192 );
0193
0194 DEFINE_EVENT(session_pkt_discard_evt, session_pkt_outside_rx_window,
0195 TP_PROTO(struct l2tp_session *session, u32 pkt_ns),
0196 TP_ARGS(session, pkt_ns)
0197 );
0198
0199 DEFINE_EVENT(session_pkt_discard_evt, session_pkt_oos,
0200 TP_PROTO(struct l2tp_session *session, u32 pkt_ns),
0201 TP_ARGS(session, pkt_ns)
0202 );
0203
0204 #endif
0205
0206
0207 #undef TRACE_INCLUDE_PATH
0208 #define TRACE_INCLUDE_PATH .
0209 #undef TRACE_INCLUDE_FILE
0210 #define TRACE_INCLUDE_FILE trace
0211 #include <trace/define_trace.h>