1use bpf_rs_macros::Display;
2#[cfg(feature = "serde")]
3use bpf_rs_macros::SerializeFromDisplay;
4
5use crate::StaticName;
6use libbpf_sys::__BPF_FUNC_MAX_ID;
7use num_enum::{IntoPrimitive, TryFromPrimitive};
8use std::fmt::Debug;
9
10#[non_exhaustive]
20#[repr(u32)]
21#[derive(Display, Debug, Copy, Clone, Hash, PartialEq, Eq, TryFromPrimitive, IntoPrimitive)]
22#[cfg_attr(feature = "serde", derive(SerializeFromDisplay))]
23pub enum BpfHelper {
24 Unspec = 0,
25 MapLookupElem = 1,
26 MapUpdateElem = 2,
27 MapDeleteElem = 3,
28 ProbeRead = 4,
29 KtimeGetNs = 5,
30 TracePrintk = 6,
31 GetPrandomU32 = 7,
32 GetSmpProcessorId = 8,
33 SkbStoreBytes = 9,
34 L3CsumReplace = 10,
35 L4CsumReplace = 11,
36 TailCall = 12,
37 CloneRedirect = 13,
38 GetCurrentPidTgid = 14,
39 GetCurrentUidGid = 15,
40 GetCurrentComm = 16,
41 GetCgroupClassid = 17,
42 SkbVlanPush = 18,
43 SkbVlanPop = 19,
44 SkbGetTunnelKey = 20,
45 SkbSetTunnelKey = 21,
46 PerfEventRead = 22,
47 Redirect = 23,
48 GetRouteRealm = 24,
49 PerfEventOutput = 25,
50 SkbLoadBytes = 26,
51 GetStackid = 27,
52 CsumDiff = 28,
53 SkbGetTunnelOpt = 29,
54 SkbSetTunnelOpt = 30,
55 SkbChangeProto = 31,
56 SkbChangeType = 32,
57 SkbUnderCgroup = 33,
58 GetHashRecalc = 34,
59 GetCurrentTask = 35,
60 ProbeWriteUser = 36,
61 CurrentTaskUnderCgroup = 37,
62 SkbChangeTail = 38,
63 SkbPullData = 39,
64 CsumUpdate = 40,
65 SetHashInvalid = 41,
66 GetNumaNodeId = 42,
67 SkbChangeHead = 43,
68 XdpAdjustHead = 44,
69 ProbeReadStr = 45,
70 GetSocketCookie = 46,
71 GetSocketUid = 47,
72 SetHash = 48,
73 Setsockopt = 49,
74 SkbAdjustRoom = 50,
75 RedirectMap = 51,
76 SkRedirectMap = 52,
77 SockMapUpdate = 53,
78 XdpAdjustMeta = 54,
79 PerfEventReadValue = 55,
80 PerfProgReadValue = 56,
81 Getsockopt = 57,
82 OverrideReturn = 58,
83 SockOpsCbFlagsSet = 59,
84 MsgRedirectMap = 60,
85 MsgApplyBytes = 61,
86 MsgCorkBytes = 62,
87 MsgPullData = 63,
88 Bind = 64,
89 XdpAdjustTail = 65,
90 SkbGetXfrmState = 66,
91 GetStack = 67,
92 SkbLoadBytesRelative = 68,
93 FibLookup = 69,
94 SockHashUpdate = 70,
95 MsgRedirectHash = 71,
96 SkRedirectHash = 72,
97 LwtPushEncap = 73,
98 LwtSeg6StoreBytes = 74,
99 LwtSeg6AdjustSrh = 75,
100 LwtSeg6Action = 76,
101 RcRepeat = 77,
102 RcKeydown = 78,
103 SkbCgroupId = 79,
104 GetCurrentCgroupId = 80,
105 GetLocalStorage = 81,
106 SkSelectReuseport = 82,
107 SkbAncestorCgroupId = 83,
108 SkLookupTcp = 84,
109 SkLookupUdp = 85,
110 SkRelease = 86,
111 MapPushElem = 87,
112 MapPopElem = 88,
113 MapPeekElem = 89,
114 MsgPushData = 90,
115 MsgPopData = 91,
116 RcPointerRel = 92,
117 SpinLock = 93,
118 SpinUnlock = 94,
119 SkFullsock = 95,
120 TcpSock = 96,
121 SkbEcnSetCe = 97,
122 GetListenerSock = 98,
123 SkcLookupTcp = 99,
124 TcpCheckSyncookie = 100,
125 SysctlGetName = 101,
126 SysctlGetCurrentValue = 102,
127 SysctlGetNewValue = 103,
128 SysctlSetNewValue = 104,
129 Strtol = 105,
130 Strtoul = 106,
131 SkStorageGet = 107,
132 SkStorageDelete = 108,
133 SendSignal = 109,
134 TcpGenSyncookie = 110,
135 SkbOutput = 111,
136 ProbeReadUser = 112,
137 ProbeReadKernel = 113,
138 ProbeReadUserStr = 114,
139 ProbeReadKernelStr = 115,
140 TcpSendAck = 116,
141 SendSignalThread = 117,
142 Jiffies64 = 118,
143 ReadBranchRecords = 119,
144 GetNsCurrentPidTgid = 120,
145 XdpOutput = 121,
146 GetNetnsCookie = 122,
147 GetCurrentAncestorCgroupId = 123,
148 SkAssign = 124,
149 KtimeGetBootNs = 125,
150 SeqPrintf = 126,
151 SeqWrite = 127,
152 SkCgroupId = 128,
153 SkAncestorCgroupId = 129,
154 RingbufOutput = 130,
155 RingbufReserve = 131,
156 RingbufSubmit = 132,
157 RingbufDiscard = 133,
158 RingbufQuery = 134,
159 CsumLevel = 135,
160 SkcToTcp6Sock = 136,
161 SkcToTcpSock = 137,
162 SkcToTcpTimewaitSock = 138,
163 SkcToTcpRequestSock = 139,
164 SkcToUdp6Sock = 140,
165 GetTaskStack = 141,
166 LoadHdrOpt = 142,
167 StoreHdrOpt = 143,
168 ReserveHdrOpt = 144,
169 InodeStorageGet = 145,
170 InodeStorageDelete = 146,
171 DPath = 147,
172 CopyFromUser = 148,
173 SnprintfBtf = 149,
174 SeqPrintfBtf = 150,
175 SkbCgroupClassid = 151,
176 RedirectNeigh = 152,
177 PerCpuPtr = 153,
178 ThisCpuPtr = 154,
179 RedirectPeer = 155,
180 TaskStorageGet = 156,
181 TaskStorageDelete = 157,
182 GetCurrentTaskBtf = 158,
183 BprmOptsSet = 159,
184 KtimeGetCoarseNs = 160,
185 ImaInodeHash = 161,
186 SockFromFile = 162,
187 CheckMtu = 163,
188 ForEachMapElem = 164,
189 Snprintf = 165,
190 SysBpf = 166,
191 BtfFindByNameKind = 167,
192 SysClose = 168,
193 TimerInit = 169,
194 TimerSetCallback = 170,
195 TimerStart = 171,
196 TimerCancel = 172,
197 GetFuncIp = 173,
198 GetAttachCookie = 174,
199 TaskPtRegs = 175,
200 GetBranchSnapshot = 176,
201 TraceVprintk = 177,
202 SkcToUnixSock = 178,
203 KallsymsLookupName = 179,
204 FindVma = 180,
205 Loop = 181,
206 Strncmp = 182,
207 GetFuncArg = 183,
208 GetFuncRet = 184,
209 GetFuncArgCnt = 185,
210 GetRetval = 186,
211 SetRetval = 187,
212 XdpGetBuffLen = 188,
213 XdpLoadBytes = 189,
214 XdpStoreBytes = 190,
215 CopyFromUserTask = 191,
216 SkbSetTstamp = 192,
217 ImaFileHash = 193,
218 KptrXchg = 194,
219 MapLookupPercpuElem = 195,
220 SkcToMptcpSock = 196,
221 DynptrFromMem = 197,
222 RingbufReserveDynptr = 198,
223 RingbufSubmitDynptr = 199,
224 RingbufDiscardDynptr = 200,
225 DynptrRead = 201,
226 DynptrWrite = 202,
227 DynptrData = 203,
228 TcpRawGenSyncookieIpv4 = 204,
229 TcpRawGenSyncookieIpv6 = 205,
230 TcpRawCheckSyncookieIpv4 = 206,
231 TcpRawCheckSyncookieIpv6 = 207,
232 KtimeGetTaiNs = 208,
233}
234
235impl BpfHelper {
236 pub fn iter() -> impl Iterator<Item = BpfHelper> {
237 BpfHelperIter::new()
238 }
239}
240
241impl StaticName for BpfHelper {
242 fn name(&self) -> &'static str {
243 match *self {
244 BpfHelper::Unspec => "bpf_unspec",
245 BpfHelper::MapLookupElem => "bpf_map_lookup_elem",
246 BpfHelper::MapUpdateElem => "bpf_map_update_elem",
247 BpfHelper::MapDeleteElem => "bpf_map_delete_elem",
248 BpfHelper::ProbeRead => "bpf_probe_read",
249 BpfHelper::KtimeGetNs => "bpf_ktime_get_ns",
250 BpfHelper::TracePrintk => "bpf_trace_printk",
251 BpfHelper::GetPrandomU32 => "bpf_get_prandom_u32",
252 BpfHelper::GetSmpProcessorId => "bpf_get_smp_processor_id",
253 BpfHelper::SkbStoreBytes => "bpf_skb_store_bytes",
254 BpfHelper::L3CsumReplace => "bpf_l3_csum_replace",
255 BpfHelper::L4CsumReplace => "bpf_l4_csum_replace",
256 BpfHelper::TailCall => "bpf_tail_call",
257 BpfHelper::CloneRedirect => "bpf_clone_redirect",
258 BpfHelper::GetCurrentPidTgid => "bpf_get_current_pid_tgid",
259 BpfHelper::GetCurrentUidGid => "bpf_get_current_uid_gid",
260 BpfHelper::GetCurrentComm => "bpf_get_current_comm",
261 BpfHelper::GetCgroupClassid => "bpf_get_cgroup_classid",
262 BpfHelper::SkbVlanPush => "bpf_skb_vlan_push",
263 BpfHelper::SkbVlanPop => "bpf_skb_vlan_pop",
264 BpfHelper::SkbGetTunnelKey => "bpf_skb_get_tunnel_key",
265 BpfHelper::SkbSetTunnelKey => "bpf_skb_set_tunnel_key",
266 BpfHelper::PerfEventRead => "bpf_perf_event_read",
267 BpfHelper::Redirect => "bpf_redirect",
268 BpfHelper::GetRouteRealm => "bpf_get_route_realm",
269 BpfHelper::PerfEventOutput => "bpf_perf_event_output",
270 BpfHelper::SkbLoadBytes => "bpf_skb_load_bytes",
271 BpfHelper::GetStackid => "bpf_get_stackid",
272 BpfHelper::CsumDiff => "bpf_csum_diff",
273 BpfHelper::SkbGetTunnelOpt => "bpf_skb_get_tunnel_opt",
274 BpfHelper::SkbSetTunnelOpt => "bpf_skb_set_tunnel_opt",
275 BpfHelper::SkbChangeProto => "bpf_skb_change_proto",
276 BpfHelper::SkbChangeType => "bpf_skb_change_type",
277 BpfHelper::SkbUnderCgroup => "bpf_skb_under_cgroup",
278 BpfHelper::GetHashRecalc => "bpf_get_hash_recalc",
279 BpfHelper::GetCurrentTask => "bpf_get_current_task",
280 BpfHelper::ProbeWriteUser => "bpf_probe_write_user",
281 BpfHelper::CurrentTaskUnderCgroup => "bpf_current_task_under_cgroup",
282 BpfHelper::SkbChangeTail => "bpf_skb_change_tail",
283 BpfHelper::SkbPullData => "bpf_skb_pull_data",
284 BpfHelper::CsumUpdate => "bpf_csum_update",
285 BpfHelper::SetHashInvalid => "bpf_set_hash_invalid",
286 BpfHelper::GetNumaNodeId => "bpf_get_numa_node_id",
287 BpfHelper::SkbChangeHead => "bpf_skb_change_head",
288 BpfHelper::XdpAdjustHead => "bpf_xdp_adjust_head",
289 BpfHelper::ProbeReadStr => "bpf_probe_read_str",
290 BpfHelper::GetSocketCookie => "bpf_get_socket_cookie",
291 BpfHelper::GetSocketUid => "bpf_get_socket_uid",
292 BpfHelper::SetHash => "bpf_set_hash",
293 BpfHelper::Setsockopt => "bpf_setsockopt",
294 BpfHelper::SkbAdjustRoom => "bpf_skb_adjust_room",
295 BpfHelper::RedirectMap => "bpf_redirect_map",
296 BpfHelper::SkRedirectMap => "bpf_sk_redirect_map",
297 BpfHelper::SockMapUpdate => "bpf_sock_map_update",
298 BpfHelper::XdpAdjustMeta => "bpf_xdp_adjust_meta",
299 BpfHelper::PerfEventReadValue => "bpf_perf_event_read_value",
300 BpfHelper::PerfProgReadValue => "bpf_perf_prog_read_value",
301 BpfHelper::Getsockopt => "bpf_getsockopt",
302 BpfHelper::OverrideReturn => "bpf_override_return",
303 BpfHelper::SockOpsCbFlagsSet => "bpf_sock_ops_cb_flags_set",
304 BpfHelper::MsgRedirectMap => "bpf_msg_redirect_map",
305 BpfHelper::MsgApplyBytes => "bpf_msg_apply_bytes",
306 BpfHelper::MsgCorkBytes => "bpf_msg_cork_bytes",
307 BpfHelper::MsgPullData => "bpf_msg_pull_data",
308 BpfHelper::Bind => "bpf_bind",
309 BpfHelper::XdpAdjustTail => "bpf_xdp_adjust_tail",
310 BpfHelper::SkbGetXfrmState => "bpf_skb_get_xfrm_state",
311 BpfHelper::GetStack => "bpf_get_stack",
312 BpfHelper::SkbLoadBytesRelative => "bpf_skb_load_bytes_relative",
313 BpfHelper::FibLookup => "bpf_fib_lookup",
314 BpfHelper::SockHashUpdate => "bpf_sock_hash_update",
315 BpfHelper::MsgRedirectHash => "bpf_msg_redirect_hash",
316 BpfHelper::SkRedirectHash => "bpf_sk_redirect_hash",
317 BpfHelper::LwtPushEncap => "bpf_lwt_push_encap",
318 BpfHelper::LwtSeg6StoreBytes => "bpf_lwt_seg6_store_bytes",
319 BpfHelper::LwtSeg6AdjustSrh => "bpf_lwt_seg6_adjust_srh",
320 BpfHelper::LwtSeg6Action => "bpf_lwt_seg6_action",
321 BpfHelper::RcRepeat => "bpf_rc_repeat",
322 BpfHelper::RcKeydown => "bpf_rc_keydown",
323 BpfHelper::SkbCgroupId => "bpf_skb_cgroup_id",
324 BpfHelper::GetCurrentCgroupId => "bpf_get_current_cgroup_id",
325 BpfHelper::GetLocalStorage => "bpf_get_local_storage",
326 BpfHelper::SkSelectReuseport => "bpf_sk_select_reuseport",
327 BpfHelper::SkbAncestorCgroupId => "bpf_skb_ancestor_cgroup_id",
328 BpfHelper::SkLookupTcp => "bpf_sk_lookup_tcp",
329 BpfHelper::SkLookupUdp => "bpf_sk_lookup_udp",
330 BpfHelper::SkRelease => "bpf_sk_release",
331 BpfHelper::MapPushElem => "bpf_map_push_elem",
332 BpfHelper::MapPopElem => "bpf_map_pop_elem",
333 BpfHelper::MapPeekElem => "bpf_map_peek_elem",
334 BpfHelper::MsgPushData => "bpf_msg_push_data",
335 BpfHelper::MsgPopData => "bpf_msg_pop_data",
336 BpfHelper::RcPointerRel => "bpf_rc_pointer_rel",
337 BpfHelper::SpinLock => "bpf_spin_lock",
338 BpfHelper::SpinUnlock => "bpf_spin_unlock",
339 BpfHelper::SkFullsock => "bpf_sk_fullsock",
340 BpfHelper::TcpSock => "bpf_tcp_sock",
341 BpfHelper::SkbEcnSetCe => "bpf_skb_ecn_set_ce",
342 BpfHelper::GetListenerSock => "bpf_get_listener_sock",
343 BpfHelper::SkcLookupTcp => "bpf_skc_lookup_tcp",
344 BpfHelper::TcpCheckSyncookie => "bpf_tcp_check_syncookie",
345 BpfHelper::SysctlGetName => "bpf_sysctl_get_name",
346 BpfHelper::SysctlGetCurrentValue => "bpf_sysctl_get_current_value",
347 BpfHelper::SysctlGetNewValue => "bpf_sysctl_get_new_value",
348 BpfHelper::SysctlSetNewValue => "bpf_sysctl_set_new_value",
349 BpfHelper::Strtol => "bpf_strtol",
350 BpfHelper::Strtoul => "bpf_strtoul",
351 BpfHelper::SkStorageGet => "bpf_sk_storage_get",
352 BpfHelper::SkStorageDelete => "bpf_sk_storage_delete",
353 BpfHelper::SendSignal => "bpf_send_signal",
354 BpfHelper::TcpGenSyncookie => "bpf_tcp_gen_syncookie",
355 BpfHelper::SkbOutput => "bpf_skb_output",
356 BpfHelper::ProbeReadUser => "bpf_probe_read_user",
357 BpfHelper::ProbeReadKernel => "bpf_probe_read_kernel",
358 BpfHelper::ProbeReadUserStr => "bpf_probe_read_user_str",
359 BpfHelper::ProbeReadKernelStr => "bpf_probe_read_kernel_str",
360 BpfHelper::TcpSendAck => "bpf_tcp_send_ack",
361 BpfHelper::SendSignalThread => "bpf_send_signal_thread",
362 BpfHelper::Jiffies64 => "bpf_jiffies64",
363 BpfHelper::ReadBranchRecords => "bpf_read_branch_records",
364 BpfHelper::GetNsCurrentPidTgid => "bpf_get_ns_current_pid_tgid",
365 BpfHelper::XdpOutput => "bpf_xdp_output",
366 BpfHelper::GetNetnsCookie => "bpf_get_netns_cookie",
367 BpfHelper::GetCurrentAncestorCgroupId => "bpf_get_current_ancestor_cgroup_id",
368 BpfHelper::SkAssign => "bpf_sk_assign",
369 BpfHelper::KtimeGetBootNs => "bpf_ktime_get_boot_ns",
370 BpfHelper::SeqPrintf => "bpf_seq_printf",
371 BpfHelper::SeqWrite => "bpf_seq_write",
372 BpfHelper::SkCgroupId => "bpf_sk_cgroup_id",
373 BpfHelper::SkAncestorCgroupId => "bpf_sk_ancestor_cgroup_id",
374 BpfHelper::RingbufOutput => "bpf_ringbuf_output",
375 BpfHelper::RingbufReserve => "bpf_ringbuf_reserve",
376 BpfHelper::RingbufSubmit => "bpf_ringbuf_submit",
377 BpfHelper::RingbufDiscard => "bpf_ringbuf_discard",
378 BpfHelper::RingbufQuery => "bpf_ringbuf_query",
379 BpfHelper::CsumLevel => "bpf_csum_level",
380 BpfHelper::SkcToTcp6Sock => "bpf_skc_to_tcp6_sock",
381 BpfHelper::SkcToTcpSock => "bpf_skc_to_tcp_sock",
382 BpfHelper::SkcToTcpTimewaitSock => "bpf_skc_to_tcp_timewait_sock",
383 BpfHelper::SkcToTcpRequestSock => "bpf_skc_to_tcp_request_sock",
384 BpfHelper::SkcToUdp6Sock => "bpf_skc_to_udp6_sock",
385 BpfHelper::GetTaskStack => "bpf_get_task_stack",
386 BpfHelper::LoadHdrOpt => "bpf_load_hdr_opt",
387 BpfHelper::StoreHdrOpt => "bpf_store_hdr_opt",
388 BpfHelper::ReserveHdrOpt => "bpf_reserve_hdr_opt",
389 BpfHelper::InodeStorageGet => "bpf_inode_storage_get",
390 BpfHelper::InodeStorageDelete => "bpf_inode_storage_delete",
391 BpfHelper::DPath => "bpf_d_path",
392 BpfHelper::CopyFromUser => "bpf_copy_from_user",
393 BpfHelper::SnprintfBtf => "bpf_snprintf_btf",
394 BpfHelper::SeqPrintfBtf => "bpf_seq_printf_btf",
395 BpfHelper::SkbCgroupClassid => "bpf_skb_cgroup_classid",
396 BpfHelper::RedirectNeigh => "bpf_redirect_neigh",
397 BpfHelper::PerCpuPtr => "bpf_per_cpu_ptr",
398 BpfHelper::ThisCpuPtr => "bpf_this_cpu_ptr",
399 BpfHelper::RedirectPeer => "bpf_redirect_peer",
400 BpfHelper::TaskStorageGet => "bpf_task_storage_get",
401 BpfHelper::TaskStorageDelete => "bpf_task_storage_delete",
402 BpfHelper::GetCurrentTaskBtf => "bpf_get_current_task_btf",
403 BpfHelper::BprmOptsSet => "bpf_bprm_opts_set",
404 BpfHelper::KtimeGetCoarseNs => "bpf_ktime_get_coarse_ns",
405 BpfHelper::ImaInodeHash => "bpf_ima_inode_hash",
406 BpfHelper::SockFromFile => "bpf_sock_from_file",
407 BpfHelper::CheckMtu => "bpf_check_mtu",
408 BpfHelper::ForEachMapElem => "bpf_for_each_map_elem",
409 BpfHelper::Snprintf => "bpf_snprintf",
410 BpfHelper::SysBpf => "bpf_sys_bpf",
411 BpfHelper::BtfFindByNameKind => "bpf_btf_find_by_name_kind",
412 BpfHelper::SysClose => "bpf_sys_close",
413 BpfHelper::TimerInit => "bpf_timer_init",
414 BpfHelper::TimerSetCallback => "bpf_timer_set_callback",
415 BpfHelper::TimerStart => "bpf_timer_start",
416 BpfHelper::TimerCancel => "bpf_timer_cancel",
417 BpfHelper::GetFuncIp => "bpf_get_func_ip",
418 BpfHelper::GetAttachCookie => "bpf_get_attach_cookie",
419 BpfHelper::TaskPtRegs => "bpf_task_pt_regs",
420 BpfHelper::GetBranchSnapshot => "bpf_get_branch_snapshot",
421 BpfHelper::TraceVprintk => "bpf_trace_vprintk",
422 BpfHelper::SkcToUnixSock => "bpf_skc_to_unix_sock",
423 BpfHelper::KallsymsLookupName => "bpf_kallsyms_lookup_name",
424 BpfHelper::FindVma => "bpf_find_vma",
425 BpfHelper::Loop => "bpf_loop",
426 BpfHelper::Strncmp => "bpf_strncmp",
427 BpfHelper::GetFuncArg => "bpf_get_func_arg",
428 BpfHelper::GetFuncRet => "bpf_get_func_ret",
429 BpfHelper::GetFuncArgCnt => "bpf_get_func_arg_cnt",
430 BpfHelper::GetRetval => "bpf_get_retval",
431 BpfHelper::SetRetval => "bpf_set_retval",
432 BpfHelper::XdpGetBuffLen => "bpf_xdp_get_buff_len",
433 BpfHelper::XdpLoadBytes => "bpf_xdp_load_bytes",
434 BpfHelper::XdpStoreBytes => "bpf_xdp_store_bytes",
435 BpfHelper::CopyFromUserTask => "bpf_copy_from_user_task",
436 BpfHelper::SkbSetTstamp => "bpf_skb_set_tstamp",
437 BpfHelper::ImaFileHash => "bpf_ima_file_hash",
438 BpfHelper::KptrXchg => "bpf_kptr_xchg",
439 BpfHelper::MapLookupPercpuElem => "bpf_map_lookup_percpu_elem",
440 BpfHelper::SkcToMptcpSock => "skc_to_mptcp_sock",
441 BpfHelper::DynptrFromMem => "dynptr_from_mem",
442 BpfHelper::RingbufReserveDynptr => "ringbuf_reserve_dynptr",
443 BpfHelper::RingbufSubmitDynptr => "ringbuf_submit_dynptr",
444 BpfHelper::RingbufDiscardDynptr => "ringbuf_discard_dynptr",
445 BpfHelper::DynptrRead => "dynptr_read",
446 BpfHelper::DynptrWrite => "dynptr_write",
447 BpfHelper::DynptrData => "dynptr_data",
448 BpfHelper::TcpRawGenSyncookieIpv4 => "tcp_raw_gen_syncookie_ipv4",
449 BpfHelper::TcpRawGenSyncookieIpv6 => "tcp_raw_gen_syncookie_ipv6",
450 BpfHelper::TcpRawCheckSyncookieIpv4 => "tcp_raw_check_syncookie_ipv4",
451 BpfHelper::TcpRawCheckSyncookieIpv6 => "tcp_raw_check_syncookie_ipv6",
452 BpfHelper::KtimeGetTaiNs => "ktime_get_tai_ns",
453 }
454 }
455}
456
457struct BpfHelperIter(u32);
459
460impl BpfHelperIter {
461 pub fn new() -> Self {
469 Self(1)
470 }
471}
472
473impl Iterator for BpfHelperIter {
474 type Item = BpfHelper;
475
476 fn next(&mut self) -> Option<Self::Item> {
477 let next = self.0;
478 if next >= __BPF_FUNC_MAX_ID {
479 None
480 } else {
481 self.0 += 1;
482 BpfHelper::try_from_primitive(next).ok()
483 }
484 }
485}