Skip to main content

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}