Skip to main content

aya_obj/programs/
types.rs

1//! Program type bindings.
2
3use crate::{InvalidTypeBinding, generated::bpf_prog_type};
4
5impl TryFrom<u32> for bpf_prog_type {
6    type Error = InvalidTypeBinding<u32>;
7
8    fn try_from(prog_type: u32) -> Result<Self, Self::Error> {
9        Ok(match prog_type {
10            x if x == Self::BPF_PROG_TYPE_UNSPEC as u32 => Self::BPF_PROG_TYPE_UNSPEC,
11            x if x == Self::BPF_PROG_TYPE_SOCKET_FILTER as u32 => Self::BPF_PROG_TYPE_SOCKET_FILTER,
12            x if x == Self::BPF_PROG_TYPE_KPROBE as u32 => Self::BPF_PROG_TYPE_KPROBE,
13            x if x == Self::BPF_PROG_TYPE_SCHED_CLS as u32 => Self::BPF_PROG_TYPE_SCHED_CLS,
14            x if x == Self::BPF_PROG_TYPE_SCHED_ACT as u32 => Self::BPF_PROG_TYPE_SCHED_ACT,
15            x if x == Self::BPF_PROG_TYPE_TRACEPOINT as u32 => Self::BPF_PROG_TYPE_TRACEPOINT,
16            x if x == Self::BPF_PROG_TYPE_XDP as u32 => Self::BPF_PROG_TYPE_XDP,
17            x if x == Self::BPF_PROG_TYPE_PERF_EVENT as u32 => Self::BPF_PROG_TYPE_PERF_EVENT,
18            x if x == Self::BPF_PROG_TYPE_CGROUP_SKB as u32 => Self::BPF_PROG_TYPE_CGROUP_SKB,
19            x if x == Self::BPF_PROG_TYPE_CGROUP_SOCK as u32 => Self::BPF_PROG_TYPE_CGROUP_SOCK,
20            x if x == Self::BPF_PROG_TYPE_LWT_IN as u32 => Self::BPF_PROG_TYPE_LWT_IN,
21            x if x == Self::BPF_PROG_TYPE_LWT_OUT as u32 => Self::BPF_PROG_TYPE_LWT_OUT,
22            x if x == Self::BPF_PROG_TYPE_LWT_XMIT as u32 => Self::BPF_PROG_TYPE_LWT_XMIT,
23            x if x == Self::BPF_PROG_TYPE_SOCK_OPS as u32 => Self::BPF_PROG_TYPE_SOCK_OPS,
24            x if x == Self::BPF_PROG_TYPE_SK_SKB as u32 => Self::BPF_PROG_TYPE_SK_SKB,
25            x if x == Self::BPF_PROG_TYPE_CGROUP_DEVICE as u32 => Self::BPF_PROG_TYPE_CGROUP_DEVICE,
26            x if x == Self::BPF_PROG_TYPE_SK_MSG as u32 => Self::BPF_PROG_TYPE_SK_MSG,
27            x if x == Self::BPF_PROG_TYPE_RAW_TRACEPOINT as u32 => {
28                Self::BPF_PROG_TYPE_RAW_TRACEPOINT
29            }
30            x if x == Self::BPF_PROG_TYPE_CGROUP_SOCK_ADDR as u32 => {
31                Self::BPF_PROG_TYPE_CGROUP_SOCK_ADDR
32            }
33            x if x == Self::BPF_PROG_TYPE_LWT_SEG6LOCAL as u32 => Self::BPF_PROG_TYPE_LWT_SEG6LOCAL,
34            x if x == Self::BPF_PROG_TYPE_LIRC_MODE2 as u32 => Self::BPF_PROG_TYPE_LIRC_MODE2,
35            x if x == Self::BPF_PROG_TYPE_SK_REUSEPORT as u32 => Self::BPF_PROG_TYPE_SK_REUSEPORT,
36            x if x == Self::BPF_PROG_TYPE_FLOW_DISSECTOR as u32 => {
37                Self::BPF_PROG_TYPE_FLOW_DISSECTOR
38            }
39            x if x == Self::BPF_PROG_TYPE_CGROUP_SYSCTL as u32 => Self::BPF_PROG_TYPE_CGROUP_SYSCTL,
40            x if x == Self::BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE as u32 => {
41                Self::BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE
42            }
43            x if x == Self::BPF_PROG_TYPE_CGROUP_SOCKOPT as u32 => {
44                Self::BPF_PROG_TYPE_CGROUP_SOCKOPT
45            }
46            x if x == Self::BPF_PROG_TYPE_TRACING as u32 => Self::BPF_PROG_TYPE_TRACING,
47            x if x == Self::BPF_PROG_TYPE_STRUCT_OPS as u32 => Self::BPF_PROG_TYPE_STRUCT_OPS,
48            x if x == Self::BPF_PROG_TYPE_EXT as u32 => Self::BPF_PROG_TYPE_EXT,
49            x if x == Self::BPF_PROG_TYPE_LSM as u32 => Self::BPF_PROG_TYPE_LSM,
50            x if x == Self::BPF_PROG_TYPE_SK_LOOKUP as u32 => Self::BPF_PROG_TYPE_SK_LOOKUP,
51            x if x == Self::BPF_PROG_TYPE_SYSCALL as u32 => Self::BPF_PROG_TYPE_SYSCALL,
52            x if x == Self::BPF_PROG_TYPE_NETFILTER as u32 => Self::BPF_PROG_TYPE_NETFILTER,
53            _ => return Err(InvalidTypeBinding { value: prog_type }),
54        })
55    }
56}