libbpf_rs/tracepoint.rs
1use std::mem::size_of;
2
3
4/// Options to optionally be provided when attaching to a tracepoint.
5#[derive(Clone, Debug, Default)]
6pub struct TracepointOpts {
7 /// Custom user-provided value accessible through `bpf_get_attach_cookie`.
8 pub cookie: u64,
9 #[doc(hidden)]
10 pub _non_exhaustive: (),
11}
12
13impl From<TracepointOpts> for libbpf_sys::bpf_tracepoint_opts {
14 fn from(opts: TracepointOpts) -> Self {
15 let TracepointOpts {
16 cookie,
17 _non_exhaustive,
18 } = opts;
19
20 #[allow(clippy::needless_update)]
21 Self {
22 sz: size_of::<Self>() as _,
23 bpf_cookie: cookie,
24 // bpf_tracepoint_opts might have padding fields on some platform
25 ..Default::default()
26 }
27 }
28}
29
30/// Options to optionally be provided when attaching to a raw tracepoint.
31#[derive(Clone, Debug, Default)]
32pub struct RawTracepointOpts {
33 /// Custom user-provided value accessible through `bpf_get_attach_cookie`.
34 pub cookie: u64,
35 #[doc(hidden)]
36 pub _non_exhaustive: (),
37}
38
39impl From<RawTracepointOpts> for libbpf_sys::bpf_raw_tracepoint_opts {
40 fn from(opts: RawTracepointOpts) -> Self {
41 let RawTracepointOpts {
42 cookie,
43 _non_exhaustive,
44 } = opts;
45
46 #[allow(clippy::needless_update)]
47 Self {
48 sz: size_of::<Self>() as _,
49 cookie,
50 // bpf_raw_tracepoint_opts might have padding fields on some platform
51 ..Default::default()
52 }
53 }
54}
55
56
57/// Represents categories of Linux kernel tracepoints.
58///
59/// This enum provides a list of tracepoint categories that can be used with
60/// BPF programs to attach to various kernel events.
61#[non_exhaustive]
62#[derive(Debug, Clone)]
63pub enum TracepointCategory {
64 /// 9P protocol events.
65 P9,
66 /// Andrew File System events.
67 Afs,
68 /// Alarm timer events.
69 Alarmtimer,
70 /// ALSA System-on-Chip audio events.
71 Asoc,
72 /// Access Vector Cache events.
73 Avc,
74 /// Bcache events.
75 Bcache,
76 /// Block layer events.
77 Block,
78 /// BPF test run events.
79 BpfTestRun,
80 /// BPF trace events.
81 BpfTrace,
82 /// Bridge events.
83 Bridge,
84 /// Btrfs filesystem events.
85 Btrfs,
86 /// Cachefiles events.
87 Cachefiles,
88 /// Control groups events.
89 Cgroup,
90 /// Clock subsystem events.
91 Clk,
92 /// CMA events.
93 Cma,
94 /// Memory compaction events.
95 Compaction,
96 /// Context tracking events.
97 ContextTracking,
98 /// CPU hotplug events.
99 Cpuhp,
100 /// CSD events.
101 Csd,
102 /// Damon events.
103 Damon,
104 /// Devfreq events.
105 Devfreq,
106 /// Device link events.
107 Devlink,
108 /// Distributed lock manager events.
109 Dlm,
110 /// DMA events.
111 Dma,
112 /// DMA fence events.
113 DmaFence,
114 /// EROFS filesystem events.
115 Erofs,
116 /// Error reporting events.
117 ErrorReport,
118 /// Ext4 filesystem events.
119 Ext4,
120 /// F2FS filesystem events.
121 F2Fs,
122 /// FIB events.
123 Fib,
124 /// IPv6 FIB events.
125 Fib6,
126 /// File lock events.
127 Filelock,
128 /// File mapping events.
129 Filemap,
130 /// FS-Cache events.
131 Fscache,
132 /// DAX filesystem events.
133 FsDax,
134 /// FSI events.
135 Fsi,
136 /// FSI master Aspeed events.
137 FsiMasterAspeed,
138 /// FSI master AST-CF events.
139 FsiMasterAstCf,
140 /// FSI master GPIO events.
141 FsiMasterGpio,
142 /// FSI master I2CR events.
143 FsiMasterI2Cr,
144 /// GPIO events.
145 Gpio,
146 /// GPU memory events.
147 GpuMem,
148 /// Habana Labs events.
149 Habanalabs,
150 /// Handshake events.
151 Handshake,
152 /// Host1X events.
153 Host1X,
154 /// Huge memory events.
155 HugeMemory,
156 /// HugeTLB filesystem events.
157 Hugetlbfs,
158 /// Hardware monitoring events.
159 Hwmon,
160 /// Hardware pressure events.
161 HwPressure,
162 /// I2C events.
163 I2C,
164 /// I2C slave events.
165 I2CSlave,
166 /// InfiniBand MAD events.
167 IbMad,
168 /// InfiniBand UMAD events.
169 IbUmad,
170 /// ICMP events.
171 Icmp,
172 /// Initialization call events.
173 Initcall,
174 /// Intel IFS events.
175 IntelIfs,
176 /// Intel ISH events.
177 IntelIsh,
178 /// Intel SST events.
179 IntelSst,
180 /// IO cost events.
181 Iocost,
182 /// IOMMU events.
183 Iommu,
184 /// IO uring events.
185 IoUring,
186 /// Inter-processor interrupt events.
187 Ipi,
188 /// IRQ events.
189 Irq,
190 /// IRQ matrix events.
191 IrqMatrix,
192 /// iSCSI events.
193 Iscsi,
194 /// JBD2 events.
195 Jbd2,
196 /// Kernel memory events.
197 Kmem,
198 /// Kernel same-page merging events.
199 Ksm,
200 /// KVM events.
201 Kvm,
202 /// Kyber events.
203 Kyber,
204 /// Libata events.
205 Libata,
206 /// Lock events.
207 Lock,
208 /// Maple tree events.
209 MapleTree,
210 /// Machine Check Exception events.
211 Mce,
212 /// MCTP events.
213 Mctp,
214 /// MDIO events.
215 Mdio,
216 /// Memory controller events.
217 Memcg,
218 /// Memory migration events.
219 Migrate,
220 /// Mellanox switch events.
221 Mlxsw,
222 /// Memory mapping events.
223 Mmap,
224 /// Memory map lock events.
225 MmapLock,
226 /// MMC events.
227 Mmc,
228 /// Module events.
229 Module,
230 /// Multipath TCP events.
231 Mptcp,
232 /// NAPI events.
233 Napi,
234 /// Network block device events.
235 Nbd,
236 /// Neighbor events.
237 Neigh,
238 /// Networking events.
239 Net,
240 /// Network filesystem events.
241 Netfs,
242 /// Netlink events.
243 Netlink,
244 /// NILFS2 filesystem events.
245 Nilfs2,
246 /// Non-maskable interrupt events.
247 Nmi,
248 /// Notifier events.
249 Notifier,
250 /// Object aggregation events.
251 Objagg,
252 /// Out of memory events.
253 Oom,
254 /// OS noise events.
255 Osnoise,
256 /// Page isolation events.
257 PageIsolation,
258 /// Pagemap events.
259 Pagemap,
260 /// Page pool events.
261 PagePool,
262 /// Page reference events.
263 PageRef,
264 /// Per-CPU events.
265 Percpu,
266 /// Power management events.
267 Power,
268 /// Preemption and IRQ events.
269 Preemptirq,
270 /// Printk events.
271 Printk,
272 /// PWC events.
273 Pwc,
274 /// PWM events.
275 Pwm,
276 /// Queueing discipline events.
277 Qdisc,
278 /// QLogic adapter events.
279 Qla,
280 /// QRTR events.
281 Qrtr,
282 /// Raw syscalls events.
283 RawSyscalls,
284 /// Read-copy-update events.
285 Rcu,
286 /// RDMA core events.
287 RdmaCore,
288 /// Regulator events.
289 Regulator,
290 /// RPC GSS events.
291 Rpcgss,
292 /// RPC RDMA events.
293 Rpcrdma,
294 /// Runtime Power Management events.
295 Rpm,
296 /// Restartable sequences events.
297 Rseq,
298 /// Real-time clock events.
299 Rtc,
300 /// Rust sample events.
301 RustSample,
302 /// Reduced Virtualization events.
303 Rv,
304 /// Read-write memory-mapped I/O events.
305 Rwmmio,
306 /// RxRPC events.
307 Rxrpc,
308 /// Scheduler events.
309 Sched,
310 /// Scheduler extensions events.
311 SchedExt,
312 /// SCMI events.
313 Scmi,
314 /// SCSI events.
315 Scsi,
316 /// SCTP protocol events.
317 Sctp,
318 /// Signal events.
319 Signal,
320 /// SIOX events.
321 Siox,
322 /// Socket buffer events.
323 Skb,
324 /// SMBus events.
325 Smbus,
326 /// Socket events.
327 Sock,
328 /// Sound Open Firmware events.
329 Sof,
330 /// Sound Open Firmware Intel events.
331 SofIntel,
332 /// SPI events.
333 Spi,
334 /// System Power Management Interface events.
335 Spmi,
336 /// SunRPC events.
337 Sunrpc,
338 /// Sunvnet events.
339 Sunvnet,
340 /// Software I/O translation buffer events.
341 Swiotlb,
342 /// System call events.
343 Syscalls,
344 /// Target events.
345 Target,
346 /// Task events.
347 Task,
348 /// TCP (Transmission Control Protocol) events.
349 Tcp,
350 /// Tegra APB DMA events.
351 TegraApbDma,
352 /// Transparent Huge Pages events.
353 Thp,
354 /// Timer events.
355 Timer,
356 /// Timer migration events.
357 TimerMigration,
358 /// Timestamp events.
359 Timestamp,
360 /// Translation Lookaside Buffer events.
361 Tlb,
362 /// UDP (User Datagram Protocol) events.
363 Udp,
364 /// Video4Linux2 events.
365 V4L2,
366 /// Video buffer events.
367 Vb2,
368 /// Virtual memory allocation events.
369 Vmalloc,
370 /// Virtual memory scanning events.
371 Vmscan,
372 /// Virtual socket events.
373 Vsock,
374 /// Watchdog events.
375 Watchdog,
376 /// Writeback throttling events.
377 Wbt,
378 /// Workqueue events.
379 Workqueue,
380 /// Writeback events.
381 Writeback,
382 /// XDP events.
383 Xdp,
384 /// Xen hypervisor events.
385 Xen,
386 /// Custom type. Tracepoint category that is not predefined.
387 Custom(String),
388}
389
390impl AsRef<str> for TracepointCategory {
391 fn as_ref(&self) -> &str {
392 match self {
393 Self::P9 => "9p",
394 Self::Afs => "afs",
395 Self::Alarmtimer => "alarmtimer",
396 Self::Asoc => "asoc",
397 Self::Avc => "avc",
398 Self::Bcache => "bcache",
399 Self::Block => "block",
400 Self::BpfTestRun => "bpf_test_run",
401 Self::BpfTrace => "bpf_trace",
402 Self::Bridge => "bridge",
403 Self::Btrfs => "btrfs",
404 Self::Cachefiles => "cachefiles",
405 Self::Cgroup => "cgroup",
406 Self::Clk => "clk",
407 Self::Cma => "cma",
408 Self::Compaction => "compaction",
409 Self::ContextTracking => "context_tracking",
410 Self::Cpuhp => "cpuhp",
411 Self::Csd => "csd",
412 Self::Damon => "damon",
413 Self::Devfreq => "devfreq",
414 Self::Devlink => "devlink",
415 Self::Dlm => "dlm",
416 Self::Dma => "dma",
417 Self::DmaFence => "dma_fence",
418 Self::Erofs => "erofs",
419 Self::ErrorReport => "error_report",
420 Self::Ext4 => "ext4",
421 Self::F2Fs => "f2fs",
422 Self::Fib => "fib",
423 Self::Fib6 => "fib6",
424 Self::Filelock => "filelock",
425 Self::Filemap => "filemap",
426 Self::Fscache => "fscache",
427 Self::FsDax => "fs_dax",
428 Self::Fsi => "fsi",
429 Self::FsiMasterAspeed => "fsi_master_aspeed",
430 Self::FsiMasterAstCf => "fsi_master_ast_cf",
431 Self::FsiMasterGpio => "fsi_master_gpio",
432 Self::FsiMasterI2Cr => "fsi_master_i2cr",
433 Self::Gpio => "gpio",
434 Self::GpuMem => "gpu_mem",
435 Self::Habanalabs => "habanalabs",
436 Self::Handshake => "handshake",
437 Self::Host1X => "host1x",
438 Self::HugeMemory => "huge_memory",
439 Self::Hugetlbfs => "hugetlbfs",
440 Self::Hwmon => "hwmon",
441 Self::HwPressure => "hw_pressure",
442 Self::I2C => "i2c",
443 Self::I2CSlave => "i2c_slave",
444 Self::IbMad => "ib_mad",
445 Self::IbUmad => "ib_umad",
446 Self::Icmp => "icmp",
447 Self::Initcall => "initcall",
448 Self::IntelIfs => "intel_ifs",
449 Self::IntelIsh => "intel_ish",
450 Self::IntelSst => "intel-sst",
451 Self::Iocost => "iocost",
452 Self::Iommu => "iommu",
453 Self::IoUring => "io_uring",
454 Self::Ipi => "ipi",
455 Self::Irq => "irq",
456 Self::IrqMatrix => "irq_matrix",
457 Self::Iscsi => "iscsi",
458 Self::Jbd2 => "jbd2",
459 Self::Kmem => "kmem",
460 Self::Ksm => "ksm",
461 Self::Kvm => "kvm",
462 Self::Kyber => "kyber",
463 Self::Libata => "libata",
464 Self::Lock => "lock",
465 Self::MapleTree => "maple_tree",
466 Self::Mce => "mce",
467 Self::Mctp => "mctp",
468 Self::Mdio => "mdio",
469 Self::Memcg => "memcg",
470 Self::Migrate => "migrate",
471 Self::Mlxsw => "mlxsw",
472 Self::Mmap => "mmap",
473 Self::MmapLock => "mmap_lock",
474 Self::Mmc => "mmc",
475 Self::Module => "module",
476 Self::Mptcp => "mptcp",
477 Self::Napi => "napi",
478 Self::Nbd => "nbd",
479 Self::Neigh => "neigh",
480 Self::Net => "net",
481 Self::Netfs => "netfs",
482 Self::Netlink => "netlink",
483 Self::Nilfs2 => "nilfs2",
484 Self::Nmi => "nmi",
485 Self::Notifier => "notifier",
486 Self::Objagg => "objagg",
487 Self::Oom => "oom",
488 Self::Osnoise => "osnoise",
489 Self::PageIsolation => "page_isolation",
490 Self::Pagemap => "pagemap",
491 Self::PagePool => "page_pool",
492 Self::PageRef => "page_ref",
493 Self::Percpu => "percpu",
494 Self::Power => "power",
495 Self::Preemptirq => "preemptirq",
496 Self::Printk => "printk",
497 Self::Pwc => "pwc",
498 Self::Pwm => "pwm",
499 Self::Qdisc => "qdisc",
500 Self::Qla => "qla",
501 Self::Qrtr => "qrtr",
502 Self::RawSyscalls => "raw_syscalls",
503 Self::Rcu => "rcu",
504 Self::RdmaCore => "rdma_core",
505 Self::Regulator => "regulator",
506 Self::Rpcgss => "rpcgss",
507 Self::Rpcrdma => "rpcrdma",
508 Self::Rpm => "rpm",
509 Self::Rseq => "rseq",
510 Self::Rtc => "rtc",
511 Self::RustSample => "rust_sample",
512 Self::Rv => "rv",
513 Self::Rwmmio => "rwmmio",
514 Self::Rxrpc => "rxrpc",
515 Self::Sched => "sched",
516 Self::SchedExt => "sched_ext",
517 Self::Scmi => "scmi",
518 Self::Scsi => "scsi",
519 Self::Sctp => "sctp",
520 Self::Signal => "signal",
521 Self::Siox => "siox",
522 Self::Skb => "skb",
523 Self::Smbus => "smbus",
524 Self::Sock => "sock",
525 Self::Sof => "sof",
526 Self::SofIntel => "sof_intel",
527 Self::Spi => "spi",
528 Self::Spmi => "spmi",
529 Self::Sunrpc => "sunrpc",
530 Self::Sunvnet => "sunvnet",
531 Self::Swiotlb => "swiotlb",
532 Self::Syscalls => "syscalls",
533 Self::Target => "target",
534 Self::Task => "task",
535 Self::Tcp => "tcp",
536 Self::TegraApbDma => "tegra_apb_dma",
537 Self::Thp => "thp",
538 Self::Timer => "timer",
539 Self::TimerMigration => "timer_migration",
540 Self::Timestamp => "timestamp",
541 Self::Tlb => "tlb",
542 Self::Udp => "udp",
543 Self::V4L2 => "v4l2",
544 Self::Vb2 => "vb2",
545 Self::Vmalloc => "vmalloc",
546 Self::Vmscan => "vmscan",
547 Self::Vsock => "vsock",
548 Self::Watchdog => "watchdog",
549 Self::Wbt => "wbt",
550 Self::Workqueue => "workqueue",
551 Self::Writeback => "writeback",
552 Self::Xdp => "xdp",
553 Self::Xen => "xen",
554 Self::Custom(category) => category,
555 }
556 }
557}