trace.h 5.3 KB

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