lttng_circuit.inc (12335B)
1 /* Copyright (c) 2020, The Tor Project, Inc. */ 2 /* See LICENSE for licensing information */ 3 4 /** 5 * \file lttng_circuit.inc 6 * \brief LTTng tracing probe declaration for the circuit subsystem. It is in 7 * this .inc file due to the non C standard syntax and the way we guard 8 * the header with the LTTng specific TRACEPOINT_HEADER_MULTI_READ. 9 **/ 10 11 #include "orconfig.h" 12 13 /* We only build the following if LTTng instrumentation has been enabled. */ 14 #ifdef USE_TRACING_INSTRUMENTATION_LTTNG 15 16 /* The following defines are LTTng-UST specific. */ 17 #undef TRACEPOINT_PROVIDER 18 #define TRACEPOINT_PROVIDER tor_circuit 19 20 #undef TRACEPOINT_INCLUDE 21 #define TRACEPOINT_INCLUDE "./src/core/or/lttng_circuit.inc" 22 23 #if !defined(LTTNG_CIRCUIT_INC) || defined(TRACEPOINT_HEADER_MULTI_READ) 24 #define LTTNG_CIRCUIT_INC 25 26 #include <lttng/tracepoint.h> 27 28 /* 29 * Circuit Purposes 30 * 31 * The following defines an enumeration of all possible circuit purposes so 32 * they appear in the trace with the define name (first parameter of 33 * ctf_enum_value) instead of the numerical value. 34 */ 35 TRACEPOINT_ENUM(tor_circuit, purpose, 36 TP_ENUM_VALUES( 37 /* Initializing. */ 38 ctf_enum_value("<UNSET>", 0) 39 40 /* OR Side. */ 41 ctf_enum_value("OR", CIRCUIT_PURPOSE_OR) 42 ctf_enum_value("OR_INTRO_POINT", CIRCUIT_PURPOSE_INTRO_POINT) 43 ctf_enum_value("OR_REND_POINT_WAITING", 44 CIRCUIT_PURPOSE_REND_POINT_WAITING) 45 ctf_enum_value("OR_REND_ESTABLISHED", CIRCUIT_PURPOSE_REND_ESTABLISHED) 46 47 /* Client Side. */ 48 ctf_enum_value("C_GENERAL", CIRCUIT_PURPOSE_C_GENERAL) 49 ctf_enum_value("C_INTRODUCING", CIRCUIT_PURPOSE_C_INTRODUCING) 50 ctf_enum_value("C_INTRODUCE_ACK_WAIT", 51 CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) 52 ctf_enum_value("C_INTRODUCE_ACKED", CIRCUIT_PURPOSE_C_INTRODUCE_ACKED) 53 ctf_enum_value("C_ESTABLISH_REND", CIRCUIT_PURPOSE_C_ESTABLISH_REND) 54 ctf_enum_value("C_REND_READY", CIRCUIT_PURPOSE_C_REND_READY) 55 ctf_enum_value("C_REND_READY_INTRO_ACKED", 56 CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED) 57 ctf_enum_value("C_REND_JOINED", CIRCUIT_PURPOSE_C_REND_JOINED) 58 ctf_enum_value("C_HSDIR_GET", CIRCUIT_PURPOSE_C_HSDIR_GET) 59 60 /* CBT and Padding. */ 61 ctf_enum_value("C_MEASURE_TIMEOUT", CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) 62 ctf_enum_value("C_CIRCUIT_PADDING", CIRCUIT_PURPOSE_C_CIRCUIT_PADDING) 63 64 /* Service Side. */ 65 ctf_enum_value("S_ESTABLISH_INTRO", CIRCUIT_PURPOSE_S_ESTABLISH_INTRO) 66 ctf_enum_value("S_INTRO", CIRCUIT_PURPOSE_S_INTRO) 67 ctf_enum_value("S_CONNECT_REND", CIRCUIT_PURPOSE_S_CONNECT_REND) 68 ctf_enum_value("S_REND_JOINED", CIRCUIT_PURPOSE_S_REND_JOINED) 69 ctf_enum_value("S_HSDIR_POST", CIRCUIT_PURPOSE_S_HSDIR_POST) 70 71 /* Misc. */ 72 ctf_enum_value("TESTING", CIRCUIT_PURPOSE_TESTING) 73 ctf_enum_value("CONTROLLER", CIRCUIT_PURPOSE_CONTROLLER) 74 ctf_enum_value("PATH_BIAS_TESTING", CIRCUIT_PURPOSE_PATH_BIAS_TESTING) 75 76 /* VanGuard */ 77 ctf_enum_value("HS_VANGUARDS", CIRCUIT_PURPOSE_HS_VANGUARDS) 78 ) 79 ) 80 81 /* 82 * Circuit End Reasons 83 * 84 * The following defines an enumeration of all possible circuit end reasons so 85 * they appear in the trace with the define name (first parameter of 86 * ctf_enum_value) instead of the numerical value. 87 */ 88 TRACEPOINT_ENUM(tor_circuit, end_reason, 89 TP_ENUM_VALUES( 90 /* Local reasons. */ 91 ctf_enum_value("IP_NOW_REDUNDANT", END_CIRC_REASON_IP_NOW_REDUNDANT) 92 ctf_enum_value("MEASUREMENT_EXPIRED", END_CIRC_REASON_MEASUREMENT_EXPIRED) 93 ctf_enum_value("REASON_NOPATH", END_CIRC_REASON_NOPATH) 94 ctf_enum_value("AT_ORIGIN", END_CIRC_AT_ORIGIN) 95 ctf_enum_value("NONE", END_CIRC_REASON_NONE) 96 ctf_enum_value("TORPROTOCOL", END_CIRC_REASON_TORPROTOCOL) 97 ctf_enum_value("INTERNAL", END_CIRC_REASON_INTERNAL) 98 ctf_enum_value("REQUESTED", END_CIRC_REASON_REQUESTED) 99 ctf_enum_value("HIBERNATING", END_CIRC_REASON_HIBERNATING) 100 ctf_enum_value("RESOURCELIMIT", END_CIRC_REASON_RESOURCELIMIT) 101 ctf_enum_value("CONNECTFAILED", END_CIRC_REASON_CONNECTFAILED) 102 ctf_enum_value("OR_IDENTITY", END_CIRC_REASON_OR_IDENTITY) 103 ctf_enum_value("CHANNEL_CLOSED", END_CIRC_REASON_CHANNEL_CLOSED) 104 ctf_enum_value("FINISHED", END_CIRC_REASON_FINISHED) 105 ctf_enum_value("TIMEOUT", END_CIRC_REASON_TIMEOUT) 106 ctf_enum_value("DESTROYED", END_CIRC_REASON_DESTROYED) 107 ctf_enum_value("NOSUCHSERVICE", END_CIRC_REASON_NOSUCHSERVICE) 108 109 /* Remote reasons. */ 110 ctf_enum_value("FLAG_REMOTE", END_CIRC_REASON_FLAG_REMOTE) 111 ctf_enum_value("REMOTE_TORPROTOCOL", 112 END_CIRC_REASON_FLAG_REMOTE | END_CIRC_REASON_TORPROTOCOL) 113 ctf_enum_value("REMOTE_INTERNAL", 114 END_CIRC_REASON_FLAG_REMOTE | END_CIRC_REASON_INTERNAL) 115 ctf_enum_value("REMOTE_REQUESTED", 116 END_CIRC_REASON_FLAG_REMOTE | END_CIRC_REASON_REQUESTED) 117 ctf_enum_value("REMOTE_HIBERNATING", 118 END_CIRC_REASON_FLAG_REMOTE | END_CIRC_REASON_HIBERNATING) 119 ctf_enum_value("REMOTE_RESOURCELIMIT", 120 END_CIRC_REASON_FLAG_REMOTE | END_CIRC_REASON_RESOURCELIMIT) 121 ctf_enum_value("REMOTE_CONNECTFAILED", 122 END_CIRC_REASON_FLAG_REMOTE | END_CIRC_REASON_CONNECTFAILED) 123 ctf_enum_value("REMOTE_OR_IDENTITY", 124 END_CIRC_REASON_FLAG_REMOTE | END_CIRC_REASON_OR_IDENTITY) 125 ctf_enum_value("REMOTE_CHANNEL_CLOSED", 126 END_CIRC_REASON_FLAG_REMOTE | END_CIRC_REASON_CHANNEL_CLOSED) 127 ctf_enum_value("REMOTE_FINISHED", 128 END_CIRC_REASON_FLAG_REMOTE | END_CIRC_REASON_FINISHED) 129 ctf_enum_value("REMOTE_TIMEOUT", 130 END_CIRC_REASON_FLAG_REMOTE | END_CIRC_REASON_TIMEOUT) 131 ctf_enum_value("REMOTE_DESTROYED", 132 END_CIRC_REASON_FLAG_REMOTE | END_CIRC_REASON_DESTROYED) 133 ctf_enum_value("REMOTE_NOSUCHSERVICE", 134 END_CIRC_REASON_FLAG_REMOTE | END_CIRC_REASON_NOSUCHSERVICE) 135 ) 136 ) 137 138 /* 139 * Circuit State 140 * 141 * The following defines an enumeration of all possible circuit state so they 142 * appear in the trace with the define name (first parameter of 143 * ctf_enum_value) instead of the numerical value. 144 */ 145 TRACEPOINT_ENUM(tor_circuit, state, 146 TP_ENUM_VALUES( 147 ctf_enum_value("BUILDING", CIRCUIT_STATE_BUILDING) 148 ctf_enum_value("ONIONSKIN_PENDING", CIRCUIT_STATE_ONIONSKIN_PENDING) 149 ctf_enum_value("CHAN_WAIT", CIRCUIT_STATE_CHAN_WAIT) 150 ctf_enum_value("GUARD_WAIT", CIRCUIT_STATE_GUARD_WAIT) 151 ctf_enum_value("OPEN", CIRCUIT_STATE_OPEN) 152 ) 153 ) 154 155 /* 156 * Event Class 157 * 158 * A tracepoint class is a class of tracepoints which share the same output 159 * event field definitions. They are then used by the 160 * TRACEPOINT_EVENT_INSTANCE() macro as a base field definition. 161 */ 162 163 /* Class for origin circuit. */ 164 TRACEPOINT_EVENT_CLASS(tor_circuit, origin_circuit_t_class, 165 TP_ARGS(const origin_circuit_t *, circ), 166 TP_FIELDS( 167 ctf_integer(uint32_t, circ_id, circ->global_identifier) 168 ctf_enum(tor_circuit, purpose, int, purpose, TO_CIRCUIT(circ)->purpose) 169 ctf_enum(tor_circuit, state, int, state, TO_CIRCUIT(circ)->state) 170 ) 171 ) 172 173 /* Class for or circuit. */ 174 TRACEPOINT_EVENT_CLASS(tor_circuit, or_circuit_t_class, 175 TP_ARGS(const or_circuit_t *, circ), 176 TP_FIELDS( 177 ctf_enum(tor_circuit, purpose, int, purpose, TO_CIRCUIT(circ)->purpose) 178 ctf_enum(tor_circuit, state, int, state, TO_CIRCUIT(circ)->state) 179 ) 180 ) 181 182 /* 183 * Origin circuit events. 184 * 185 * Tracepoint use the origin_circuit_t object. 186 */ 187 188 /* Tracepoint emitted when a new origin circuit has been created. */ 189 TRACEPOINT_EVENT_INSTANCE(tor_circuit, origin_circuit_t_class, new_origin, 190 TP_ARGS(const origin_circuit_t *, circ) 191 ) 192 193 /* Tracepoint emitted when an origin circuit has opened. */ 194 TRACEPOINT_EVENT_INSTANCE(tor_circuit, origin_circuit_t_class, opened, 195 TP_ARGS(const origin_circuit_t *, circ) 196 ) 197 198 /* Tracepoint emitted when an origin circuit has established. */ 199 TRACEPOINT_EVENT_INSTANCE(tor_circuit, origin_circuit_t_class, establish, 200 TP_ARGS(const origin_circuit_t *, circ) 201 ) 202 203 /* Tracepoint emitted when an origin circuit has been cannibalized. */ 204 TRACEPOINT_EVENT_INSTANCE(tor_circuit, origin_circuit_t_class, cannibalized, 205 TP_ARGS(const origin_circuit_t *, circ) 206 ) 207 208 /* Tracepoint emitted when an origin circuit has timed out. This is called 209 * when circuit_expire_building() as selected the circuit and is about to 210 * close it for timeout. */ 211 TRACEPOINT_EVENT_INSTANCE(tor_circuit, origin_circuit_t_class, timeout, 212 TP_ARGS(const origin_circuit_t *, circ) 213 ) 214 215 /* Tracepoint emitted when an origin circuit has timed out due to idleness. 216 * This is when the circuit is closed after MaxCircuitDirtiness. */ 217 TRACEPOINT_EVENT_INSTANCE(tor_circuit, origin_circuit_t_class, idle_timeout, 218 TP_ARGS(const origin_circuit_t *, circ) 219 ) 220 221 /* Tracepoint emitted when an origin circuit sends out its first onion skin. */ 222 TRACEPOINT_EVENT(tor_circuit, first_onion_skin, 223 TP_ARGS(const origin_circuit_t *, circ, const crypt_path_t *, hop), 224 TP_FIELDS( 225 ctf_integer(uint32_t, circ_id, circ->global_identifier) 226 ctf_enum(tor_circuit, purpose, int, purpose, TO_CIRCUIT(circ)->purpose) 227 ctf_enum(tor_circuit, state, int, state, TO_CIRCUIT(circ)->state) 228 ctf_array_hex(char, fingerprint, hop->extend_info->identity_digest, 229 DIGEST_LEN) 230 ) 231 ) 232 233 /* Tracepoint emitted when an origin circuit sends out an intermediate onion 234 * skin. */ 235 TRACEPOINT_EVENT(tor_circuit, intermediate_onion_skin, 236 TP_ARGS(const origin_circuit_t *, circ, const crypt_path_t *, hop), 237 TP_FIELDS( 238 ctf_integer(uint32_t, circ_id, circ->global_identifier) 239 ctf_enum(tor_circuit, purpose, int, purpose, TO_CIRCUIT(circ)->purpose) 240 ctf_enum(tor_circuit, state, int, state, TO_CIRCUIT(circ)->state) 241 ctf_array_hex(char, fingerprint, hop->extend_info->identity_digest, 242 DIGEST_LEN) 243 ) 244 ) 245 246 /* 247 * OR circuit events. 248 * 249 * Tracepoint use the or_circuit_t object. 250 */ 251 252 /* Tracepoint emitted when a new or circuit has been created. */ 253 TRACEPOINT_EVENT_INSTANCE(tor_circuit, or_circuit_t_class, new_or, 254 TP_ARGS(const or_circuit_t *, circ) 255 ) 256 257 /* 258 * General circuit events. 259 * 260 * Tracepoint use the circuit_t object. 261 */ 262 263 /* Tracepoint emitted when a circuit is freed. */ 264 TRACEPOINT_EVENT(tor_circuit, free, 265 TP_ARGS(const circuit_t *, circ), 266 TP_FIELDS( 267 ctf_integer(uint32_t, circ_id, 268 (CIRCUIT_IS_ORIGIN(circ) ? 269 TO_ORIGIN_CIRCUIT(circ)->global_identifier : 0)) 270 ctf_enum(tor_circuit, purpose, int, purpose, circ->purpose) 271 ctf_enum(tor_circuit, state, int, state, circ->state) 272 ) 273 ) 274 275 /* Tracepoint emitted when a circuit is marked for close. */ 276 TRACEPOINT_EVENT(tor_circuit, mark_for_close, 277 TP_ARGS(const circuit_t *, circ), 278 TP_FIELDS( 279 ctf_integer(uint32_t, circ_id, 280 (CIRCUIT_IS_ORIGIN(circ) ? 281 TO_ORIGIN_CIRCUIT(circ)->global_identifier : 0)) 282 ctf_enum(tor_circuit, purpose, int, purpose, circ->purpose) 283 ctf_enum(tor_circuit, state, int, state, circ->state) 284 ctf_enum(tor_circuit, end_reason, int, close_reason, 285 circ->marked_for_close_reason) 286 ctf_enum(tor_circuit, end_reason, int, orig_close_reason, 287 circ->marked_for_close_orig_reason) 288 ) 289 ) 290 291 /* Tracepoint emitted when a circuit changes purpose. */ 292 TRACEPOINT_EVENT(tor_circuit, change_purpose, 293 TP_ARGS(const circuit_t *, circ, int, old_purpose, int, new_purpose), 294 TP_FIELDS( 295 ctf_integer(uint32_t, circ_id, 296 (CIRCUIT_IS_ORIGIN(circ) ? 297 TO_ORIGIN_CIRCUIT(circ)->global_identifier : 0)) 298 ctf_enum(tor_circuit, state, int, state, circ->state) 299 ctf_enum(tor_circuit, purpose, int, purpose, old_purpose) 300 ctf_enum(tor_circuit, purpose, int, new, new_purpose) 301 ) 302 ) 303 304 /* Tracepoint emitted when a circuit changes state. */ 305 TRACEPOINT_EVENT(tor_circuit, change_state, 306 TP_ARGS(const circuit_t *, circ, int, old_state, int, new_state), 307 TP_FIELDS( 308 ctf_integer(uint32_t, circ_id, 309 (CIRCUIT_IS_ORIGIN(circ) ? 310 TO_ORIGIN_CIRCUIT(circ)->global_identifier : 0)) 311 ctf_enum(tor_circuit, purpose, int, purpose, circ->purpose) 312 ctf_enum(tor_circuit, state, int, old, old_state) 313 ctf_enum(tor_circuit, state, int, new, new_state) 314 ) 315 ) 316 317 #endif /* LTTNG_CIRCUIT_INC || TRACEPOINT_HEADER_MULTI_READ */ 318 319 /* Must be included after the probes declaration. */ 320 #include <lttng/tracepoint-event.h> 321 322 #endif /* USE_TRACING_INSTRUMENTATION_LTTNG */