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