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