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        libbpf_sys::bpf_tracepoint_opts {
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        libbpf_sys::bpf_raw_tracepoint_opts {
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            TracepointCategory::P9 => "9p",
394            TracepointCategory::Afs => "afs",
395            TracepointCategory::Alarmtimer => "alarmtimer",
396            TracepointCategory::Asoc => "asoc",
397            TracepointCategory::Avc => "avc",
398            TracepointCategory::Bcache => "bcache",
399            TracepointCategory::Block => "block",
400            TracepointCategory::BpfTestRun => "bpf_test_run",
401            TracepointCategory::BpfTrace => "bpf_trace",
402            TracepointCategory::Bridge => "bridge",
403            TracepointCategory::Btrfs => "btrfs",
404            TracepointCategory::Cachefiles => "cachefiles",
405            TracepointCategory::Cgroup => "cgroup",
406            TracepointCategory::Clk => "clk",
407            TracepointCategory::Cma => "cma",
408            TracepointCategory::Compaction => "compaction",
409            TracepointCategory::ContextTracking => "context_tracking",
410            TracepointCategory::Cpuhp => "cpuhp",
411            TracepointCategory::Csd => "csd",
412            TracepointCategory::Damon => "damon",
413            TracepointCategory::Devfreq => "devfreq",
414            TracepointCategory::Devlink => "devlink",
415            TracepointCategory::Dlm => "dlm",
416            TracepointCategory::Dma => "dma",
417            TracepointCategory::DmaFence => "dma_fence",
418            TracepointCategory::Erofs => "erofs",
419            TracepointCategory::ErrorReport => "error_report",
420            TracepointCategory::Ext4 => "ext4",
421            TracepointCategory::F2Fs => "f2fs",
422            TracepointCategory::Fib => "fib",
423            TracepointCategory::Fib6 => "fib6",
424            TracepointCategory::Filelock => "filelock",
425            TracepointCategory::Filemap => "filemap",
426            TracepointCategory::Fscache => "fscache",
427            TracepointCategory::FsDax => "fs_dax",
428            TracepointCategory::Fsi => "fsi",
429            TracepointCategory::FsiMasterAspeed => "fsi_master_aspeed",
430            TracepointCategory::FsiMasterAstCf => "fsi_master_ast_cf",
431            TracepointCategory::FsiMasterGpio => "fsi_master_gpio",
432            TracepointCategory::FsiMasterI2Cr => "fsi_master_i2cr",
433            TracepointCategory::Gpio => "gpio",
434            TracepointCategory::GpuMem => "gpu_mem",
435            TracepointCategory::Habanalabs => "habanalabs",
436            TracepointCategory::Handshake => "handshake",
437            TracepointCategory::Host1X => "host1x",
438            TracepointCategory::HugeMemory => "huge_memory",
439            TracepointCategory::Hugetlbfs => "hugetlbfs",
440            TracepointCategory::Hwmon => "hwmon",
441            TracepointCategory::HwPressure => "hw_pressure",
442            TracepointCategory::I2C => "i2c",
443            TracepointCategory::I2CSlave => "i2c_slave",
444            TracepointCategory::IbMad => "ib_mad",
445            TracepointCategory::IbUmad => "ib_umad",
446            TracepointCategory::Icmp => "icmp",
447            TracepointCategory::Initcall => "initcall",
448            TracepointCategory::IntelIfs => "intel_ifs",
449            TracepointCategory::IntelIsh => "intel_ish",
450            TracepointCategory::IntelSst => "intel-sst",
451            TracepointCategory::Iocost => "iocost",
452            TracepointCategory::Iommu => "iommu",
453            TracepointCategory::IoUring => "io_uring",
454            TracepointCategory::Ipi => "ipi",
455            TracepointCategory::Irq => "irq",
456            TracepointCategory::IrqMatrix => "irq_matrix",
457            TracepointCategory::Iscsi => "iscsi",
458            TracepointCategory::Jbd2 => "jbd2",
459            TracepointCategory::Kmem => "kmem",
460            TracepointCategory::Ksm => "ksm",
461            TracepointCategory::Kvm => "kvm",
462            TracepointCategory::Kyber => "kyber",
463            TracepointCategory::Libata => "libata",
464            TracepointCategory::Lock => "lock",
465            TracepointCategory::MapleTree => "maple_tree",
466            TracepointCategory::Mce => "mce",
467            TracepointCategory::Mctp => "mctp",
468            TracepointCategory::Mdio => "mdio",
469            TracepointCategory::Memcg => "memcg",
470            TracepointCategory::Migrate => "migrate",
471            TracepointCategory::Mlxsw => "mlxsw",
472            TracepointCategory::Mmap => "mmap",
473            TracepointCategory::MmapLock => "mmap_lock",
474            TracepointCategory::Mmc => "mmc",
475            TracepointCategory::Module => "module",
476            TracepointCategory::Mptcp => "mptcp",
477            TracepointCategory::Napi => "napi",
478            TracepointCategory::Nbd => "nbd",
479            TracepointCategory::Neigh => "neigh",
480            TracepointCategory::Net => "net",
481            TracepointCategory::Netfs => "netfs",
482            TracepointCategory::Netlink => "netlink",
483            TracepointCategory::Nilfs2 => "nilfs2",
484            TracepointCategory::Nmi => "nmi",
485            TracepointCategory::Notifier => "notifier",
486            TracepointCategory::Objagg => "objagg",
487            TracepointCategory::Oom => "oom",
488            TracepointCategory::Osnoise => "osnoise",
489            TracepointCategory::PageIsolation => "page_isolation",
490            TracepointCategory::Pagemap => "pagemap",
491            TracepointCategory::PagePool => "page_pool",
492            TracepointCategory::PageRef => "page_ref",
493            TracepointCategory::Percpu => "percpu",
494            TracepointCategory::Power => "power",
495            TracepointCategory::Preemptirq => "preemptirq",
496            TracepointCategory::Printk => "printk",
497            TracepointCategory::Pwc => "pwc",
498            TracepointCategory::Pwm => "pwm",
499            TracepointCategory::Qdisc => "qdisc",
500            TracepointCategory::Qla => "qla",
501            TracepointCategory::Qrtr => "qrtr",
502            TracepointCategory::RawSyscalls => "raw_syscalls",
503            TracepointCategory::Rcu => "rcu",
504            TracepointCategory::RdmaCore => "rdma_core",
505            TracepointCategory::Regulator => "regulator",
506            TracepointCategory::Rpcgss => "rpcgss",
507            TracepointCategory::Rpcrdma => "rpcrdma",
508            TracepointCategory::Rpm => "rpm",
509            TracepointCategory::Rseq => "rseq",
510            TracepointCategory::Rtc => "rtc",
511            TracepointCategory::RustSample => "rust_sample",
512            TracepointCategory::Rv => "rv",
513            TracepointCategory::Rwmmio => "rwmmio",
514            TracepointCategory::Rxrpc => "rxrpc",
515            TracepointCategory::Sched => "sched",
516            TracepointCategory::SchedExt => "sched_ext",
517            TracepointCategory::Scmi => "scmi",
518            TracepointCategory::Scsi => "scsi",
519            TracepointCategory::Sctp => "sctp",
520            TracepointCategory::Signal => "signal",
521            TracepointCategory::Siox => "siox",
522            TracepointCategory::Skb => "skb",
523            TracepointCategory::Smbus => "smbus",
524            TracepointCategory::Sock => "sock",
525            TracepointCategory::Sof => "sof",
526            TracepointCategory::SofIntel => "sof_intel",
527            TracepointCategory::Spi => "spi",
528            TracepointCategory::Spmi => "spmi",
529            TracepointCategory::Sunrpc => "sunrpc",
530            TracepointCategory::Sunvnet => "sunvnet",
531            TracepointCategory::Swiotlb => "swiotlb",
532            TracepointCategory::Syscalls => "syscalls",
533            TracepointCategory::Target => "target",
534            TracepointCategory::Task => "task",
535            TracepointCategory::Tcp => "tcp",
536            TracepointCategory::TegraApbDma => "tegra_apb_dma",
537            TracepointCategory::Thp => "thp",
538            TracepointCategory::Timer => "timer",
539            TracepointCategory::TimerMigration => "timer_migration",
540            TracepointCategory::Timestamp => "timestamp",
541            TracepointCategory::Tlb => "tlb",
542            TracepointCategory::Udp => "udp",
543            TracepointCategory::V4L2 => "v4l2",
544            TracepointCategory::Vb2 => "vb2",
545            TracepointCategory::Vmalloc => "vmalloc",
546            TracepointCategory::Vmscan => "vmscan",
547            TracepointCategory::Vsock => "vsock",
548            TracepointCategory::Watchdog => "watchdog",
549            TracepointCategory::Wbt => "wbt",
550            TracepointCategory::Workqueue => "workqueue",
551            TracepointCategory::Writeback => "writeback",
552            TracepointCategory::Xdp => "xdp",
553            TracepointCategory::Xen => "xen",
554            TracepointCategory::Custom(category) => category,
555        }
556    }
557}