ebpf_kern/
helpers.rs

1use core::{mem, ffi::{c_void, c_long}};
2
3#[allow(non_camel_case_types)]
4type uint64_t = u64;
5#[allow(non_camel_case_types)]
6type uint32_t = u32;
7
8#[inline(always)]
9pub unsafe fn map_lookup_elem(map: *mut c_void, key: *const c_void) -> *mut c_void {
10    let f: unsafe extern "C" fn(*mut c_void, *const c_void) -> *mut c_void =
11        mem::transmute(1usize);
12
13    f(map, key)
14}
15
16#[inline(always)]
17pub unsafe fn map_update_elem(
18    map: *mut c_void,
19    key: *const c_void,
20    value: *const c_void,
21    flags: uint64_t,
22) -> c_long {
23    let f: unsafe extern "C" fn(
24        *mut c_void,
25        *const c_void,
26        *const c_void,
27        uint64_t,
28    ) -> c_long = mem::transmute(2usize);
29
30    f(map, key, value, flags)
31}
32
33#[inline(always)]
34pub unsafe fn map_delete_elem(map: *mut c_void, key: *const c_void) -> c_long {
35    let f: unsafe extern "C" fn(*mut c_void, *const c_void) -> c_long =
36        mem::transmute(3usize);
37
38    f(map, key)
39}
40
41#[inline(always)]
42pub unsafe fn ktime_get_ns() -> uint64_t {
43    let f: unsafe extern "C" fn() -> uint64_t = mem::transmute(5usize);
44
45    f()
46}
47
48#[inline(always)]
49pub unsafe fn get_current_pid_tgid() -> uint64_t {
50    let f: unsafe extern "C" fn() -> uint64_t = mem::transmute(14usize);
51
52    f()
53}
54
55#[inline(always)]
56pub unsafe fn get_current_comm(buf: *mut c_void, size_of_buf: uint32_t) -> c_long {
57    let f: unsafe extern "C" fn(*mut c_void, uint32_t) -> c_long =
58        mem::transmute(16usize);
59
60    f(buf, size_of_buf)
61}
62
63#[inline(always)]
64pub unsafe fn get_stack(
65    ctx: *mut c_void,
66    buf: *mut c_void,
67    size: uint32_t,
68    flags: uint64_t,
69) -> c_long {
70    let f: unsafe extern "C" fn(
71        *mut c_void,
72        *mut c_void,
73        uint32_t,
74        uint64_t,
75    ) -> c_long = mem::transmute(67usize);
76
77    f(ctx, buf, size, flags)
78}
79
80#[inline(always)]
81pub unsafe fn probe_read_user(
82    dst: *mut c_void,
83    size: uint32_t,
84    unsafe_ptr: *const c_void,
85) -> c_long {
86    let f: unsafe extern "C" fn(
87        *mut c_void,
88        uint32_t,
89        *const c_void,
90    ) -> c_long = mem::transmute(112usize);
91
92    f(dst, size, unsafe_ptr)
93}
94
95#[inline(always)]
96pub unsafe fn probe_read_kernel(
97    dst: *mut c_void,
98    size: uint32_t,
99    unsafe_ptr: *const c_void,
100) -> c_long {
101    let f: unsafe extern "C" fn(
102        *mut c_void,
103        uint32_t,
104        *const c_void,
105    ) -> c_long = mem::transmute(113usize);
106
107    f(dst, size, unsafe_ptr)
108}
109
110#[inline(always)]
111pub unsafe fn probe_read_user_str(
112    dst: *mut c_void,
113    size: uint32_t,
114    unsafe_ptr: *const c_void,
115) -> c_long {
116    let f: unsafe extern "C" fn(
117        *mut c_void,
118        uint32_t,
119        *const c_void,
120    ) -> c_long = mem::transmute(114usize);
121
122    f(dst, size, unsafe_ptr)
123}
124
125#[inline(always)]
126pub unsafe fn probe_read_kernel_str(
127    dst: *mut c_void,
128    size: uint32_t,
129    unsafe_ptr: *const c_void,
130) -> c_long {
131    let f: unsafe extern "C" fn(
132        *mut c_void,
133        uint32_t,
134        *const c_void,
135    ) -> c_long = mem::transmute(115usize);
136
137    f(dst, size, unsafe_ptr)
138}
139
140#[inline(always)]
141pub unsafe fn ringbuf_output(
142    ringbuf: *mut c_void,
143    data: *mut c_void,
144    size: uint64_t,
145    flags: uint64_t,
146) -> c_long {
147    let f: unsafe extern "C" fn(
148        *mut c_void,
149        *mut c_void,
150        uint64_t,
151        uint64_t,
152    ) -> c_long = mem::transmute(130usize);
153
154    f(ringbuf, data, size, flags)
155}
156
157#[inline(always)]
158pub unsafe fn ringbuf_reserve(
159    ringbuf: *mut c_void,
160    size: uint64_t,
161    flags: uint64_t,
162) -> *mut c_void {
163    let f: unsafe extern "C" fn(
164        *mut c_void,
165        uint64_t,
166        uint64_t,
167    ) -> *mut c_void = mem::transmute(131usize);
168
169    f(ringbuf, size, flags)
170}
171
172#[inline(always)]
173pub unsafe fn ringbuf_submit(data: *mut c_void, flags: uint64_t) {
174    let f: unsafe extern "C" fn(*mut c_void, uint64_t) = mem::transmute(132usize);
175
176    f(data, flags)
177}
178
179#[inline(always)]
180pub unsafe fn ringbuf_discard(data: *mut c_void, flags: uint64_t) {
181    let f: unsafe extern "C" fn(*mut c_void, uint64_t) = mem::transmute(133usize);
182
183    f(data, flags)
184}