Commit | Line | Data |
---|---|---|
b7cdc182 | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
b283666f PW |
2 | #undef TRACE_SYSTEM |
3 | #define TRACE_SYSTEM net | |
4 | ||
3bc29f0a MD |
5 | #if !defined(LTTNG_TRACE_NET_H) || defined(TRACE_HEADER_MULTI_READ) |
6 | #define LTTNG_TRACE_NET_H | |
b283666f | 7 | |
3b4aafcb | 8 | #include <lttng/tracepoint-event.h> |
b283666f PW |
9 | #include <linux/skbuff.h> |
10 | #include <linux/netdevice.h> | |
11 | #include <linux/ip.h> | |
e5990fd4 GB |
12 | #include <linux/ipv6.h> |
13 | #include <linux/tcp.h> | |
f6dd81c5 FW |
14 | #include <linux/udp.h> |
15 | #include <linux/icmp.h> | |
5f4c791e | 16 | #include <lttng/kernel-version.h> |
2df37e95 | 17 | #include <lttng/endian.h> |
e5990fd4 GB |
18 | #include <net/sock.h> |
19 | ||
20 | #ifndef ONCE_LTTNG_NET_H | |
21 | #define ONCE_LTTNG_NET_H | |
22 | ||
23 | static inline unsigned char __has_network_hdr(struct sk_buff *skb) | |
24 | { | |
25 | /* | |
aa900596 MD |
26 | * If the header is not set yet, the network header will point |
27 | * to the head. | |
e5990fd4 GB |
28 | */ |
29 | return skb_network_header(skb) != skb->head; | |
30 | } | |
31 | ||
9cf9736a | 32 | enum transport_header_types { |
0910ab71 MD |
33 | TH_NONE = 0, |
34 | TH_TCP = 1, | |
f6dd81c5 FW |
35 | TH_UDP = 2, |
36 | TH_ICMP = 3, | |
9cf9736a GB |
37 | }; |
38 | ||
f6dd81c5 FW |
39 | static inline enum transport_header_types __get_transport_header_type_ip(struct sk_buff *skb) |
40 | { | |
41 | switch (ip_hdr(skb)->protocol) { | |
42 | case IPPROTO_TCP: | |
43 | return TH_TCP; | |
44 | case IPPROTO_UDP: | |
45 | return TH_UDP; | |
46 | case IPPROTO_ICMP: | |
47 | return TH_ICMP; | |
48 | } | |
49 | return TH_NONE; | |
50 | } | |
51 | ||
52 | static inline enum transport_header_types __get_transport_header_type_ipv6(struct sk_buff *skb) | |
53 | { | |
54 | switch (ipv6_hdr(skb)->nexthdr) { | |
55 | case IPPROTO_TCP: | |
56 | return TH_TCP; | |
57 | case IPPROTO_UDP: | |
58 | return TH_UDP; | |
59 | case IPPROTO_ICMP: | |
60 | return TH_ICMP; | |
61 | } | |
62 | return TH_NONE; | |
63 | } | |
64 | ||
0910ab71 | 65 | static inline enum transport_header_types __get_transport_header_type(struct sk_buff *skb) |
9cf9736a GB |
66 | { |
67 | if (__has_network_hdr(skb)) { | |
68 | /* | |
aa900596 MD |
69 | * When both transport and network headers are set, |
70 | * transport header is greater than network header, | |
71 | * otherwise it points to head. | |
9cf9736a GB |
72 | */ |
73 | if (skb->transport_header > skb->network_header) { | |
74 | /* | |
aa900596 MD |
75 | * Get the transport protocol from the network |
76 | * header's data. This method works both for | |
77 | * sent and received packets. | |
9cf9736a | 78 | */ |
f6dd81c5 FW |
79 | if (skb->protocol == htons(ETH_P_IP)) { |
80 | return __get_transport_header_type_ip(skb); | |
81 | } else if(skb->protocol == htons(ETH_P_IPV6)) { | |
82 | return __get_transport_header_type_ipv6(skb); | |
83 | } | |
9cf9736a | 84 | } |
f6dd81c5 | 85 | /* Fallthrough for other cases where header is not recognized. */ |
9cf9736a GB |
86 | } |
87 | return TH_NONE; | |
88 | } | |
89 | ||
e5990fd4 GB |
90 | enum network_header_types { |
91 | NH_NONE, | |
92 | NH_IPV4, | |
93 | NH_IPV6, | |
94 | }; | |
95 | ||
96 | static inline unsigned char __get_network_header_type(struct sk_buff *skb) | |
97 | { | |
98 | if (__has_network_hdr(skb)) { | |
99 | if (skb->protocol == htons(ETH_P_IPV6)) | |
100 | return NH_IPV6; | |
101 | else if (skb->protocol == htons(ETH_P_IP)) | |
102 | return NH_IPV4; | |
103 | /* Fallthrough for other header types. */ | |
104 | } | |
105 | return NH_NONE; | |
106 | } | |
107 | ||
108 | #endif | |
109 | ||
437d5aa5 MD |
110 | #ifdef LTTNG_CREATE_FIELD_METADATA |
111 | ||
112 | static const struct lttng_kernel_event_field *emptyfields[] = { | |
113 | }; | |
114 | ||
115 | /* Structures for transport headers. */ | |
116 | ||
117 | static const struct lttng_kernel_event_field *tcpfields[] = { | |
118 | [0] = lttng_kernel_static_event_field("source_port", | |
119 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 10), | |
07aafa15 | 120 | false, false), |
437d5aa5 MD |
121 | [1] = lttng_kernel_static_event_field("dest_port", |
122 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 10), | |
07aafa15 | 123 | false, false), |
437d5aa5 MD |
124 | [2] = lttng_kernel_static_event_field("seq", |
125 | lttng_kernel_static_type_integer_from_type(uint32_t, __BIG_ENDIAN, 10), | |
07aafa15 | 126 | false, false), |
437d5aa5 MD |
127 | [3] = lttng_kernel_static_event_field("ack_seq", |
128 | lttng_kernel_static_type_integer_from_type(uint32_t, __BIG_ENDIAN, 10), | |
07aafa15 | 129 | false, false), |
437d5aa5 MD |
130 | [4] = lttng_kernel_static_event_field("data_offset", |
131 | lttng_kernel_static_type_integer(4, 4, 0, __BIG_ENDIAN, 10), | |
07aafa15 | 132 | false, false), |
437d5aa5 MD |
133 | [5] = lttng_kernel_static_event_field("reserved", |
134 | lttng_kernel_static_type_integer(3, 1, 0, __BIG_ENDIAN, 10), | |
07aafa15 | 135 | false, false), |
437d5aa5 MD |
136 | [6] = lttng_kernel_static_event_field("flags", |
137 | lttng_kernel_static_type_integer(9, 1, 0, __BIG_ENDIAN, 16), | |
07aafa15 | 138 | false, false), |
437d5aa5 MD |
139 | [7] = lttng_kernel_static_event_field("window_size", |
140 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 10), | |
07aafa15 | 141 | false, false), |
437d5aa5 MD |
142 | [8] = lttng_kernel_static_event_field("checksum", |
143 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 16), | |
07aafa15 | 144 | false, false), |
437d5aa5 MD |
145 | [9] = lttng_kernel_static_event_field("urg_ptr", |
146 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 10), | |
07aafa15 | 147 | false, false), |
437d5aa5 MD |
148 | }; |
149 | ||
150 | static const struct lttng_kernel_event_field *udpfields[] = { | |
151 | [0] = lttng_kernel_static_event_field("source_port", | |
152 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 10), | |
07aafa15 | 153 | false, false), |
437d5aa5 MD |
154 | [1] = lttng_kernel_static_event_field("dest_port", |
155 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 10), | |
07aafa15 | 156 | false, false), |
437d5aa5 MD |
157 | [2] = lttng_kernel_static_event_field("len", |
158 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 10), | |
07aafa15 | 159 | false, false), |
437d5aa5 MD |
160 | [3] = lttng_kernel_static_event_field("check", |
161 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 10), | |
07aafa15 | 162 | false, false), |
437d5aa5 MD |
163 | }; |
164 | ||
165 | static const struct lttng_kernel_event_field *icmpfields[] = { | |
166 | [0] = lttng_kernel_static_event_field("type", | |
167 | lttng_kernel_static_type_integer_from_type(uint8_t, __BIG_ENDIAN, 10), | |
07aafa15 | 168 | false, false), |
437d5aa5 MD |
169 | [1] = lttng_kernel_static_event_field("code", |
170 | lttng_kernel_static_type_integer_from_type(uint8_t, __BIG_ENDIAN, 10), | |
07aafa15 | 171 | false, false), |
437d5aa5 MD |
172 | [2] = lttng_kernel_static_event_field("checksum", |
173 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 10), | |
07aafa15 | 174 | false, false), |
437d5aa5 MD |
175 | [3] = lttng_kernel_static_event_field("gateway", |
176 | lttng_kernel_static_type_integer_from_type(uint32_t, __BIG_ENDIAN, 10), | |
07aafa15 | 177 | false, false), |
437d5aa5 MD |
178 | }; |
179 | ||
180 | static const struct lttng_kernel_event_field *transport_fields[] = { | |
181 | [0] = lttng_kernel_static_event_field("unknown", | |
182 | lttng_kernel_static_type_struct(ARRAY_SIZE(emptyfields), emptyfields, 0), | |
07aafa15 | 183 | false, true), |
437d5aa5 MD |
184 | [1] = lttng_kernel_static_event_field("tcp", |
185 | lttng_kernel_static_type_struct(ARRAY_SIZE(tcpfields), tcpfields, 0), | |
07aafa15 | 186 | false, true), |
437d5aa5 MD |
187 | [2] = lttng_kernel_static_event_field("udp", |
188 | lttng_kernel_static_type_struct(ARRAY_SIZE(udpfields), udpfields, 0), | |
07aafa15 | 189 | false, true), |
437d5aa5 MD |
190 | [3] = lttng_kernel_static_event_field("icmp", |
191 | lttng_kernel_static_type_struct(ARRAY_SIZE(icmpfields), icmpfields, 0), | |
07aafa15 | 192 | false, true), |
437d5aa5 MD |
193 | }; |
194 | ||
195 | #endif /* LTTNG_CREATE_FIELD_METADATA */ | |
196 | ||
197 | LTTNG_TRACEPOINT_ENUM(proto_transport_header_type, | |
198 | TP_ENUM_VALUES( | |
199 | ctf_enum_range("_unknown", 0, IPPROTO_ICMP - 1) | |
200 | ctf_enum_value("_icmp", IPPROTO_ICMP) | |
201 | ctf_enum_range("_unknown", IPPROTO_ICMP + 1, IPPROTO_TCP - 1) | |
202 | ctf_enum_value("_tcp", IPPROTO_TCP) | |
203 | ctf_enum_range("_unknown", IPPROTO_TCP + 1, IPPROTO_UDP - 1) | |
204 | ctf_enum_value("_udp", IPPROTO_UDP) | |
205 | ctf_enum_range("_unknown", IPPROTO_UDP + 1, 255) | |
206 | ) | |
207 | ) | |
208 | ||
209 | LTTNG_TRACEPOINT_ENUM(transport_header_type, | |
210 | TP_ENUM_VALUES( | |
211 | ctf_enum_value("_unknown", TH_NONE) | |
212 | ctf_enum_value("_tcp", TH_TCP) | |
213 | ctf_enum_value("_udp", TH_UDP) | |
214 | ctf_enum_value("_icmp", TH_ICMP) | |
215 | ) | |
216 | ) | |
217 | ||
218 | #ifdef LTTNG_CREATE_FIELD_METADATA | |
219 | ||
220 | /* Structures for network headers. */ | |
221 | ||
222 | static const struct lttng_kernel_event_field *ipv4fields[] = { | |
223 | [0] = lttng_kernel_static_event_field("version", | |
224 | lttng_kernel_static_type_integer(4, 4, 0, __BIG_ENDIAN, 10), | |
07aafa15 | 225 | false, false), |
437d5aa5 MD |
226 | [1] = lttng_kernel_static_event_field("ihl", |
227 | lttng_kernel_static_type_integer(4, 4, 0, __BIG_ENDIAN, 10), | |
07aafa15 | 228 | false, false), |
437d5aa5 MD |
229 | [2] = lttng_kernel_static_event_field("tos", |
230 | lttng_kernel_static_type_integer_from_type(uint8_t, __BIG_ENDIAN, 10), | |
07aafa15 | 231 | false, false), |
437d5aa5 MD |
232 | [3] = lttng_kernel_static_event_field("tot_len", |
233 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 10), | |
07aafa15 | 234 | false, false), |
437d5aa5 MD |
235 | [4] = lttng_kernel_static_event_field("id", |
236 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 16), | |
07aafa15 | 237 | false, false), |
437d5aa5 MD |
238 | [5] = lttng_kernel_static_event_field("frag_off", |
239 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 10), | |
07aafa15 | 240 | false, false), |
437d5aa5 MD |
241 | [6] = lttng_kernel_static_event_field("ttl", |
242 | lttng_kernel_static_type_integer_from_type(uint8_t, __BIG_ENDIAN, 10), | |
07aafa15 | 243 | false, false), |
437d5aa5 MD |
244 | [7] = lttng_kernel_static_event_field("protocol", |
245 | lttng_kernel_static_type_enum(&__enum_proto_transport_header_type, | |
246 | lttng_kernel_static_type_integer_from_type(uint8_t, __BIG_ENDIAN, 10)), | |
07aafa15 | 247 | false, false), |
437d5aa5 MD |
248 | [8] = lttng_kernel_static_event_field("checksum", |
249 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 16), | |
07aafa15 | 250 | false, false), |
437d5aa5 MD |
251 | [9] = lttng_kernel_static_event_field("saddr", |
252 | lttng_kernel_static_type_array(4, | |
253 | lttng_kernel_static_type_integer_from_type(uint8_t, __BIG_ENDIAN, 10), | |
254 | lttng_alignof(uint8_t), none), | |
07aafa15 | 255 | false, false), |
437d5aa5 MD |
256 | [10] = lttng_kernel_static_event_field("daddr", |
257 | lttng_kernel_static_type_array(4, | |
258 | lttng_kernel_static_type_integer_from_type(uint8_t, __BIG_ENDIAN, 10), | |
259 | lttng_alignof(uint8_t), none), | |
07aafa15 | 260 | false, false), |
437d5aa5 MD |
261 | [11] = lttng_kernel_static_event_field("transport_header_type", |
262 | lttng_kernel_static_type_enum(&__enum_transport_header_type, | |
263 | lttng_kernel_static_type_integer_from_type(uint8_t, __BYTE_ORDER, 10)), | |
07aafa15 | 264 | false, false), |
437d5aa5 MD |
265 | [12] = lttng_kernel_static_event_field("transport_header", |
266 | lttng_kernel_static_type_variant(ARRAY_SIZE(transport_fields), transport_fields, | |
f0039724 | 267 | NULL, 0), /* Previous field as tag. */ |
07aafa15 | 268 | false, false), |
437d5aa5 MD |
269 | }; |
270 | ||
271 | static const struct lttng_kernel_event_field *ipv6fields[] = { | |
272 | [0] = lttng_kernel_static_event_field("version", | |
273 | lttng_kernel_static_type_integer(4, 4, 0, __BIG_ENDIAN, 10), | |
07aafa15 | 274 | false, false), |
437d5aa5 MD |
275 | [1] = lttng_kernel_static_event_field("prio", |
276 | lttng_kernel_static_type_integer(4, 4, 0, __BIG_ENDIAN, 10), | |
07aafa15 | 277 | false, false), |
437d5aa5 MD |
278 | [2] = lttng_kernel_static_event_field("flow_lbl", |
279 | lttng_kernel_static_type_array(3, lttng_kernel_static_type_integer_from_type(uint8_t, __BIG_ENDIAN, 16), lttng_alignof(uint8_t), none), | |
07aafa15 | 280 | false, false), |
437d5aa5 MD |
281 | [3] = lttng_kernel_static_event_field("payload_len", |
282 | lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 10), | |
07aafa15 | 283 | false, false), |
437d5aa5 MD |
284 | [4] = lttng_kernel_static_event_field("nexthdr", |
285 | lttng_kernel_static_type_enum(&__enum_proto_transport_header_type, | |
286 | lttng_kernel_static_type_integer_from_type(uint8_t, __BIG_ENDIAN, 10)), | |
07aafa15 | 287 | false, false), |
437d5aa5 MD |
288 | [5] = lttng_kernel_static_event_field("hop_limit", |
289 | lttng_kernel_static_type_integer_from_type(uint8_t, __BIG_ENDIAN, 10), | |
07aafa15 | 290 | false, false), |
437d5aa5 MD |
291 | [6] = lttng_kernel_static_event_field("saddr", |
292 | lttng_kernel_static_type_array(8, lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 16), lttng_alignof(uint16_t), none), | |
07aafa15 | 293 | false, false), |
437d5aa5 MD |
294 | [7] = lttng_kernel_static_event_field("daddr", |
295 | lttng_kernel_static_type_array(8, lttng_kernel_static_type_integer_from_type(uint16_t, __BIG_ENDIAN, 16), lttng_alignof(uint16_t), none), | |
07aafa15 | 296 | false, false), |
437d5aa5 MD |
297 | [8] = lttng_kernel_static_event_field("transport_header_type", |
298 | lttng_kernel_static_type_enum(&__enum_transport_header_type, | |
299 | lttng_kernel_static_type_integer_from_type(uint8_t, __BYTE_ORDER, 10)), | |
07aafa15 | 300 | false, false), |
437d5aa5 MD |
301 | [9] = lttng_kernel_static_event_field("transport_header", |
302 | lttng_kernel_static_type_variant(ARRAY_SIZE(transport_fields), | |
f0039724 | 303 | transport_fields, NULL, 0), /* Previous field as tag. */ |
07aafa15 | 304 | false, false), |
437d5aa5 MD |
305 | }; |
306 | ||
307 | static const struct lttng_kernel_event_field *network_fields[] = { | |
308 | [0] = lttng_kernel_static_event_field("unknown", | |
309 | lttng_kernel_static_type_struct(0, emptyfields, 0), | |
07aafa15 | 310 | false, false), |
437d5aa5 MD |
311 | [1] = lttng_kernel_static_event_field("ipv4", |
312 | lttng_kernel_static_type_struct(ARRAY_SIZE(ipv4fields), ipv4fields, 0), | |
07aafa15 | 313 | false, false), |
437d5aa5 MD |
314 | [2] = lttng_kernel_static_event_field("ipv6", |
315 | lttng_kernel_static_type_struct(ARRAY_SIZE(ipv6fields), ipv6fields, 0), | |
07aafa15 | 316 | false, false), |
437d5aa5 MD |
317 | }; |
318 | ||
319 | #endif /* LTTNG_CREATE_FIELD_METADATA */ | |
320 | ||
e5990fd4 GB |
321 | LTTNG_TRACEPOINT_ENUM(net_network_header, |
322 | TP_ENUM_VALUES( | |
323 | ctf_enum_value("_unknown", NH_NONE) | |
324 | ctf_enum_value("_ipv4", NH_IPV4) | |
325 | ctf_enum_value("_ipv6", NH_IPV6) | |
326 | ) | |
327 | ) | |
b283666f | 328 | |
3bc29f0a | 329 | LTTNG_TRACEPOINT_EVENT(net_dev_xmit, |
b283666f PW |
330 | |
331 | TP_PROTO(struct sk_buff *skb, | |
332 | int rc, | |
333 | struct net_device *dev, | |
334 | unsigned int skb_len), | |
335 | ||
336 | TP_ARGS(skb, rc, dev, skb_len), | |
337 | ||
f127e61e | 338 | TP_FIELDS( |
fa91fcac | 339 | ctf_integer_hex(void *, skbaddr, skb) |
f127e61e | 340 | ctf_integer(int, rc, rc) |
974c0969 | 341 | ctf_integer(unsigned int, len, skb_len) |
f127e61e | 342 | ctf_string(name, dev->name) |
f127e61e | 343 | ) |
b283666f PW |
344 | ) |
345 | ||
3bc29f0a | 346 | LTTNG_TRACEPOINT_EVENT_CLASS(net_dev_template, |
b283666f PW |
347 | |
348 | TP_PROTO(struct sk_buff *skb), | |
349 | ||
350 | TP_ARGS(skb), | |
351 | ||
f127e61e | 352 | TP_FIELDS( |
fa91fcac | 353 | ctf_integer_hex(void *, skbaddr, skb) |
f127e61e MD |
354 | ctf_integer(unsigned int, len, skb->len) |
355 | ctf_string(name, skb->dev->name) | |
e5990fd4 GB |
356 | ctf_enum(net_network_header, unsigned char, |
357 | network_header_type, __get_network_header_type(skb)) | |
358 | ctf_custom_field( | |
359 | ctf_custom_type( | |
437d5aa5 | 360 | lttng_kernel_static_type_variant(ARRAY_SIZE(network_fields), |
f0039724 | 361 | network_fields, NULL, 0) /* Previous field as tag. */ |
e5990fd4 GB |
362 | ), |
363 | network_header, | |
364 | ctf_custom_code( | |
0910ab71 MD |
365 | bool has_network_header = false; |
366 | ||
aa900596 | 367 | /* Copy the network header. */ |
e5990fd4 GB |
368 | switch (__get_network_header_type(skb)) { |
369 | case NH_IPV4: { | |
370 | ctf_align(uint16_t) | |
371 | ctf_array_type(uint8_t, ip_hdr(skb), | |
372 | sizeof(struct iphdr)) | |
0910ab71 | 373 | has_network_header = true; |
e5990fd4 GB |
374 | break; |
375 | } | |
376 | case NH_IPV6: { | |
377 | ctf_align(uint16_t) | |
378 | ctf_array_type(uint8_t, ipv6_hdr(skb), | |
379 | sizeof(struct ipv6hdr)) | |
0910ab71 | 380 | has_network_header = true; |
e5990fd4 GB |
381 | break; |
382 | } | |
383 | default: | |
aa900596 MD |
384 | /* |
385 | * For any other network header | |
386 | * type, there is nothing to do. | |
387 | */ | |
e5990fd4 GB |
388 | break; |
389 | } | |
9cf9736a | 390 | |
0910ab71 MD |
391 | if (has_network_header) { |
392 | enum transport_header_types th_type = | |
393 | __get_transport_header_type(skb); | |
394 | ||
395 | /* Transport header type field. */ | |
396 | ctf_integer_type(unsigned char, th_type) | |
397 | ||
398 | /* Copy the transport header. */ | |
f6dd81c5 FW |
399 | switch (th_type) { |
400 | case TH_TCP: { | |
0910ab71 MD |
401 | ctf_align(uint32_t) |
402 | ctf_array_type(uint8_t, tcp_hdr(skb), | |
403 | sizeof(struct tcphdr)) | |
f6dd81c5 FW |
404 | break; |
405 | } | |
406 | case TH_UDP: { | |
407 | ctf_align(uint32_t) | |
408 | ctf_array_type(uint8_t, udp_hdr(skb), | |
409 | sizeof(struct udphdr)) | |
410 | break; | |
411 | } | |
412 | case TH_ICMP: { | |
413 | ctf_align(uint32_t) | |
414 | ctf_array_type(uint8_t, icmp_hdr(skb), | |
415 | sizeof(struct icmphdr)) | |
416 | break; | |
417 | } | |
418 | default: | |
419 | /* | |
420 | * For any other transport header type, | |
421 | * there is nothing to do. | |
422 | */ | |
423 | break; | |
0910ab71 | 424 | } |
9cf9736a | 425 | } |
e5990fd4 GB |
426 | ) |
427 | ) | |
f127e61e | 428 | ) |
b283666f PW |
429 | ) |
430 | ||
3bc29f0a | 431 | LTTNG_TRACEPOINT_EVENT_INSTANCE(net_dev_template, net_dev_queue, |
b283666f PW |
432 | |
433 | TP_PROTO(struct sk_buff *skb), | |
434 | ||
435 | TP_ARGS(skb) | |
436 | ) | |
437 | ||
b7f5408a MD |
438 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_template, |
439 | ||
440 | netif_receive_skb, | |
441 | ||
442 | net_if_receive_skb, | |
b283666f PW |
443 | |
444 | TP_PROTO(struct sk_buff *skb), | |
445 | ||
446 | TP_ARGS(skb) | |
447 | ) | |
448 | ||
b7f5408a MD |
449 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_template, |
450 | ||
451 | netif_rx, | |
452 | ||
453 | net_if_rx, | |
b283666f PW |
454 | |
455 | TP_PROTO(struct sk_buff *skb), | |
456 | ||
457 | TP_ARGS(skb) | |
458 | ) | |
e9d818b9 | 459 | |
5f4c791e | 460 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,14,0)) |
e9d818b9 GB |
461 | |
462 | /* Trace events for the receive entry points */ | |
463 | LTTNG_TRACEPOINT_EVENT_CLASS(net_dev_receive_entry_template, | |
464 | ||
465 | TP_PROTO(const struct sk_buff *skb), | |
466 | ||
467 | TP_ARGS(skb), | |
468 | ||
469 | TP_FIELDS( | |
470 | ctf_integer_hex(const void *, skbaddr, skb) | |
471 | ) | |
472 | ) | |
473 | ||
474 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_receive_entry_template, | |
475 | ||
476 | napi_gro_frags_entry, | |
477 | ||
478 | net_napi_gro_frags_entry, | |
479 | ||
480 | TP_PROTO(const struct sk_buff *skb), | |
481 | ||
482 | TP_ARGS(skb) | |
483 | ) | |
484 | ||
485 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_receive_entry_template, | |
486 | ||
487 | napi_gro_receive_entry, | |
488 | ||
489 | net_napi_gro_receive_entry, | |
490 | ||
491 | TP_PROTO(const struct sk_buff *skb), | |
492 | ||
493 | TP_ARGS(skb) | |
494 | ) | |
495 | ||
496 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_receive_entry_template, | |
497 | ||
498 | netif_receive_skb_entry, | |
499 | ||
500 | net_if_receive_skb_entry, | |
501 | ||
502 | TP_PROTO(const struct sk_buff *skb), | |
503 | ||
504 | TP_ARGS(skb) | |
505 | ) | |
506 | ||
507 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_receive_entry_template, | |
508 | ||
509 | netif_rx_entry, | |
510 | ||
511 | net_if_rx_entry, | |
512 | ||
513 | TP_PROTO(const struct sk_buff *skb), | |
514 | ||
515 | TP_ARGS(skb) | |
516 | ) | |
517 | ||
518 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_receive_entry_template, | |
519 | ||
520 | netif_rx_ni_entry, | |
521 | ||
522 | net_if_rx_ni_entry, | |
523 | ||
524 | TP_PROTO(const struct sk_buff *skb), | |
525 | ||
526 | TP_ARGS(skb) | |
527 | ) | |
528 | ||
529 | #endif /* kernel > 3.14 */ | |
530 | ||
5f4c791e | 531 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,19,0)) |
e9d818b9 GB |
532 | |
533 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_receive_entry_template, | |
534 | ||
535 | netif_receive_skb_list_entry, | |
536 | ||
537 | net_if_receive_skb_list_entry, | |
538 | ||
539 | TP_PROTO(const struct sk_buff *skb), | |
540 | ||
541 | TP_ARGS(skb) | |
542 | ) | |
543 | ||
544 | #endif /* kernel > 4.19 */ | |
545 | ||
5f4c791e | 546 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,0,0)) |
e9d818b9 GB |
547 | |
548 | /* Trace events for the receive exit points */ | |
549 | LTTNG_TRACEPOINT_EVENT_CLASS(net_dev_receive_exit_template, | |
550 | ||
551 | TP_PROTO(int ret), | |
552 | ||
553 | TP_ARGS(ret), | |
554 | ||
555 | TP_FIELDS( | |
556 | ctf_integer(int, ret, ret) | |
557 | ) | |
558 | ) | |
559 | ||
560 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_receive_exit_template, | |
561 | ||
562 | napi_gro_frags_exit, | |
563 | ||
564 | net_napi_gro_frags_exit, | |
565 | ||
566 | TP_PROTO(int ret), | |
567 | ||
568 | TP_ARGS(ret) | |
569 | ) | |
570 | ||
571 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_receive_exit_template, | |
572 | ||
573 | napi_gro_receive_exit, | |
574 | ||
575 | net_napi_gro_receive_exit, | |
576 | ||
577 | TP_PROTO(int ret), | |
578 | ||
579 | TP_ARGS(ret) | |
580 | ) | |
581 | ||
582 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_receive_exit_template, | |
583 | ||
584 | netif_receive_skb_exit, | |
585 | ||
586 | net_if_receive_skb_exit, | |
587 | ||
588 | TP_PROTO(int ret), | |
589 | ||
590 | TP_ARGS(ret) | |
591 | ) | |
592 | ||
593 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_receive_exit_template, | |
594 | ||
595 | netif_rx_exit, | |
596 | ||
597 | net_if_rx_exit, | |
598 | ||
599 | TP_PROTO(int ret), | |
600 | ||
601 | TP_ARGS(ret) | |
602 | ) | |
603 | ||
604 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_receive_exit_template, | |
605 | ||
606 | netif_rx_ni_exit, | |
607 | ||
608 | net_if_rx_ni_exit, | |
609 | ||
610 | TP_PROTO(int ret), | |
611 | ||
612 | TP_ARGS(ret) | |
613 | ) | |
614 | ||
615 | LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(net_dev_receive_exit_template, | |
616 | ||
617 | netif_receive_skb_list_exit, | |
618 | ||
619 | net_if_receive_skb_list_exit, | |
620 | ||
621 | TP_PROTO(int ret), | |
622 | ||
623 | TP_ARGS(ret) | |
624 | ) | |
625 | ||
626 | #endif /* kernel > 5.0.0 */ | |
627 | ||
3bc29f0a | 628 | #endif /* LTTNG_TRACE_NET_H */ |
b283666f PW |
629 | |
630 | /* This part must be outside protection */ | |
3b4aafcb | 631 | #include <lttng/define_trace.h> |