Skip to content

Commit

Permalink
aya: tidy bpf syscalls and feature support functions into submodules
Browse files Browse the repository at this point in the history
Organize bpf syscalls and feature support functions in
aya/src/sys/bpf.rs into submodules: btf, link, map, object, program,
utils, and feature_support. This is to help make development slightly
less daunting to parse and expand on. This also updates all the imports
that involve these submodules.
  • Loading branch information
tyrone-wu committed May 31, 2024
1 parent 0ec87f6 commit bda7c51
Show file tree
Hide file tree
Showing 48 changed files with 1,388 additions and 1,209 deletions.
17 changes: 10 additions & 7 deletions aya/src/bpf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ use thiserror::Error;

use crate::{
generated::{
bpf_map_type, bpf_map_type::*, AYA_PERF_EVENT_IOC_DISABLE, AYA_PERF_EVENT_IOC_ENABLE,
AYA_PERF_EVENT_IOC_SET_BPF,
bpf_map_type::{self, *},
AYA_PERF_EVENT_IOC_DISABLE, AYA_PERF_EVENT_IOC_ENABLE, AYA_PERF_EVENT_IOC_SET_BPF,
},
maps::{Map, MapData, MapError},
obj::{
Expand All @@ -36,11 +36,14 @@ use crate::{
SkMsg, SkSkb, SkSkbKind, SockOps, SocketFilter, TracePoint, UProbe, Xdp,
},
sys::{
bpf_load_btf, is_bpf_cookie_supported, is_bpf_global_data_supported,
is_btf_datasec_supported, is_btf_decl_tag_supported, is_btf_enum64_supported,
is_btf_float_supported, is_btf_func_global_supported, is_btf_func_supported,
is_btf_supported, is_btf_type_tag_supported, is_perf_link_supported,
is_probe_read_kernel_supported, is_prog_id_supported, is_prog_name_supported,
btf::bpf_load_btf,
feature_support::{
is_bpf_cookie_supported, is_bpf_global_data_supported, is_btf_datasec_supported,
is_btf_decl_tag_supported, is_btf_enum64_supported, is_btf_float_supported,
is_btf_func_global_supported, is_btf_func_supported, is_btf_supported,
is_btf_type_tag_supported, is_perf_link_supported, is_probe_read_kernel_supported,
is_prog_id_supported, is_prog_name_supported,
},
retry_with_verifier_logs,
},
util::{bytes_of, bytes_of_slice, page_size, possible_cpus, POSSIBLE_CPUS},
Expand Down
5 changes: 4 additions & 1 deletion aya/src/maps/array/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ use std::{

use crate::{
maps::{check_bounds, check_kv_size, IterableMap, MapData, MapError},
sys::{bpf_map_lookup_elem, bpf_map_update_elem, SyscallError},
sys::{
map::{bpf_map_lookup_elem, bpf_map_update_elem},
SyscallError,
},
Pod,
};

Expand Down
5 changes: 4 additions & 1 deletion aya/src/maps/array/per_cpu_array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ use std::{

use crate::{
maps::{check_bounds, check_kv_size, IterableMap, MapData, MapError, PerCpuValues},
sys::{bpf_map_lookup_elem_per_cpu, bpf_map_update_elem_per_cpu, SyscallError},
sys::{
map::{bpf_map_lookup_elem_per_cpu, bpf_map_update_elem_per_cpu},
SyscallError,
},
Pod,
};

Expand Down
5 changes: 4 additions & 1 deletion aya/src/maps/array/program_array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ use std::{
use crate::{
maps::{check_bounds, check_kv_size, MapData, MapError, MapKeys},
programs::ProgramFd,
sys::{bpf_map_delete_elem, bpf_map_update_elem, SyscallError},
sys::{
map::{bpf_map_delete_elem, bpf_map_update_elem},
SyscallError,
},
};

/// An array of eBPF program file descriptors used as a jump table.
Expand Down
5 changes: 4 additions & 1 deletion aya/src/maps/bloom_filter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ use std::{

use crate::{
maps::{check_v_size, MapData, MapError},
sys::{bpf_map_lookup_elem_ptr, bpf_map_push_elem, SyscallError},
sys::{
map::{bpf_map_lookup_elem_ptr, bpf_map_push_elem},
SyscallError,
},
Pod,
};

Expand Down
2 changes: 1 addition & 1 deletion aya/src/maps/hash_map/hash_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use std::{

use crate::{
maps::{check_kv_size, hash_map, IterableMap, MapData, MapError, MapIter, MapKeys},
sys::{bpf_map_lookup_elem, SyscallError},
sys::{map::bpf_map_lookup_elem, SyscallError},
Pod,
};

Expand Down
5 changes: 4 additions & 1 deletion aya/src/maps/hash_map/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ use std::os::fd::AsFd as _;

use crate::{
maps::MapError,
sys::{bpf_map_delete_elem, bpf_map_update_elem, SyscallError},
sys::{
map::{bpf_map_delete_elem, bpf_map_update_elem},
SyscallError,
},
Pod,
};

Expand Down
5 changes: 4 additions & 1 deletion aya/src/maps/hash_map/per_cpu_hash_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ use crate::{
maps::{
check_kv_size, hash_map, IterableMap, MapData, MapError, MapIter, MapKeys, PerCpuValues,
},
sys::{bpf_map_lookup_elem_per_cpu, bpf_map_update_elem_per_cpu, SyscallError},
sys::{
map::{bpf_map_lookup_elem_per_cpu, bpf_map_update_elem_per_cpu},
SyscallError,
},
Pod,
};

Expand Down
5 changes: 4 additions & 1 deletion aya/src/maps/lpm_trie.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ use std::{

use crate::{
maps::{check_kv_size, IterableMap, MapData, MapError, MapIter, MapKeys},
sys::{bpf_map_delete_elem, bpf_map_lookup_elem, bpf_map_update_elem, SyscallError},
sys::{
map::{bpf_map_delete_elem, bpf_map_lookup_elem, bpf_map_update_elem},
SyscallError,
},
Pod,
};

Expand Down
9 changes: 6 additions & 3 deletions aya/src/maps/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,12 @@ use crate::{
obj::{self, parse_map_info, EbpfSectionKind},
pin::PinError,
sys::{
bpf_create_map, bpf_get_object, bpf_map_freeze, bpf_map_get_fd_by_id,
bpf_map_get_info_by_fd, bpf_map_get_next_key, bpf_map_update_elem_ptr, bpf_pin_object,
iter_map_ids, SyscallError,
map::{
bpf_create_map, bpf_map_freeze, bpf_map_get_fd_by_id, bpf_map_get_info_by_fd,
bpf_map_get_next_key, bpf_map_update_elem_ptr, iter_map_ids,
},
object::{bpf_get_object, bpf_pin_object},
SyscallError,
},
util::{bytes_of_bpf_name, nr_cpus, KernelVersion},
PinningType, Pod,
Expand Down
2 changes: 1 addition & 1 deletion aya/src/maps/perf/perf_event_array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use crate::{
perf::{Events, PerfBuffer, PerfBufferError},
MapData, MapError, PinError,
},
sys::bpf_map_update_elem,
sys::map::bpf_map_update_elem,
util::page_size,
};

Expand Down
5 changes: 4 additions & 1 deletion aya/src/maps/queue.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ use std::{

use crate::{
maps::{check_kv_size, MapData, MapError},
sys::{bpf_map_lookup_and_delete_elem, bpf_map_push_elem, SyscallError},
sys::{
map::{bpf_map_lookup_and_delete_elem, bpf_map_push_elem},
SyscallError,
},
Pod,
};

Expand Down
2 changes: 1 addition & 1 deletion aya/src/maps/sock/sock_hash.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use crate::{
check_kv_size, hash_map, sock::SockMapFd, IterableMap, MapData, MapError, MapFd, MapIter,
MapKeys,
},
sys::{bpf_map_lookup_elem, SyscallError},
sys::{map::bpf_map_lookup_elem, SyscallError},
Pod,
};

Expand Down
5 changes: 4 additions & 1 deletion aya/src/maps/sock/sock_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ use std::{

use crate::{
maps::{check_bounds, check_kv_size, sock::SockMapFd, MapData, MapError, MapFd, MapKeys},
sys::{bpf_map_delete_elem, bpf_map_update_elem, SyscallError},
sys::{
map::{bpf_map_delete_elem, bpf_map_update_elem},
SyscallError,
},
};

/// An array of TCP or UDP sockets.
Expand Down
5 changes: 4 additions & 1 deletion aya/src/maps/stack.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ use std::{

use crate::{
maps::{check_kv_size, MapData, MapError},
sys::{bpf_map_lookup_and_delete_elem, bpf_map_update_elem, SyscallError},
sys::{
map::{bpf_map_lookup_and_delete_elem, bpf_map_update_elem},
SyscallError,
},
Pod,
};

Expand Down
5 changes: 4 additions & 1 deletion aya/src/maps/stack_trace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ use std::{

use crate::{
maps::{IterableMap, MapData, MapError, MapIter, MapKeys},
sys::{bpf_map_delete_elem, bpf_map_lookup_elem_ptr, SyscallError},
sys::{
map::{bpf_map_delete_elem, bpf_map_lookup_elem_ptr},
SyscallError,
},
};

/// A hash map of kernel or user space stack traces.
Expand Down
5 changes: 4 additions & 1 deletion aya/src/maps/xdp/cpu_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@ use super::XdpMapError;
use crate::{
maps::{check_bounds, check_kv_size, IterableMap, MapData, MapError},
programs::ProgramFd,
sys::{bpf_map_lookup_elem, bpf_map_update_elem, SyscallError},
sys::{
map::{bpf_map_lookup_elem, bpf_map_update_elem},
SyscallError,
},
Pod, FEATURES,
};

Expand Down
5 changes: 4 additions & 1 deletion aya/src/maps/xdp/dev_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@ use super::XdpMapError;
use crate::{
maps::{check_bounds, check_kv_size, IterableMap, MapData, MapError},
programs::ProgramFd,
sys::{bpf_map_lookup_elem, bpf_map_update_elem, SyscallError},
sys::{
map::{bpf_map_lookup_elem, bpf_map_update_elem},
SyscallError,
},
Pod, FEATURES,
};

Expand Down
2 changes: 1 addition & 1 deletion aya/src/maps/xdp/dev_map_hash.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use super::{dev_map::DevMapValue, XdpMapError};
use crate::{
maps::{check_kv_size, hash_map, IterableMap, MapData, MapError, MapIter, MapKeys},
programs::ProgramFd,
sys::{bpf_map_lookup_elem, SyscallError},
sys::{map::bpf_map_lookup_elem, SyscallError},
FEATURES,
};

Expand Down
2 changes: 1 addition & 1 deletion aya/src/maps/xdp/xsk_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use std::{

use crate::{
maps::{check_bounds, check_kv_size, MapData, MapError},
sys::{bpf_map_update_elem, SyscallError},
sys::{map::bpf_map_update_elem, SyscallError},
};

/// An array of AF_XDP sockets.
Expand Down
10 changes: 7 additions & 3 deletions aya/src/programs/cgroup_device.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,14 @@ use std::os::fd::AsFd;
use crate::{
generated::{bpf_attach_type::BPF_CGROUP_DEVICE, bpf_prog_type::BPF_PROG_TYPE_CGROUP_DEVICE},
programs::{
bpf_prog_get_fd_by_id, define_link_wrapper, load_program, query, FdLink, Link,
ProgAttachLink, ProgramData, ProgramError, ProgramFd,
define_link_wrapper, load_program, query, FdLink, Link, ProgAttachLink, ProgramData,
ProgramError, ProgramFd,
},
sys::{
link::{bpf_link_create, LinkTarget},
program::bpf_prog_get_fd_by_id,
SyscallError,
},
sys::{bpf_link_create, LinkTarget, SyscallError},
util::KernelVersion,
};

Expand Down
5 changes: 4 additions & 1 deletion aya/src/programs/cgroup_skb.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ use crate::{
programs::{
define_link_wrapper, load_program, FdLink, Link, ProgAttachLink, ProgramData, ProgramError,
},
sys::{bpf_link_create, LinkTarget, SyscallError},
sys::{
link::{bpf_link_create, LinkTarget},
SyscallError,
},
util::KernelVersion,
VerifierLogLevel,
};
Expand Down
5 changes: 4 additions & 1 deletion aya/src/programs/cgroup_sock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ use crate::{
programs::{
define_link_wrapper, load_program, FdLink, Link, ProgAttachLink, ProgramData, ProgramError,
},
sys::{bpf_link_create, LinkTarget, SyscallError},
sys::{
link::{bpf_link_create, LinkTarget},
SyscallError,
},
util::KernelVersion,
VerifierLogLevel,
};
Expand Down
5 changes: 4 additions & 1 deletion aya/src/programs/cgroup_sock_addr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ use crate::{
programs::{
define_link_wrapper, load_program, FdLink, Link, ProgAttachLink, ProgramData, ProgramError,
},
sys::{bpf_link_create, LinkTarget, SyscallError},
sys::{
link::{bpf_link_create, LinkTarget},
SyscallError,
},
util::KernelVersion,
VerifierLogLevel,
};
Expand Down
5 changes: 4 additions & 1 deletion aya/src/programs/cgroup_sockopt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ use crate::{
programs::{
define_link_wrapper, load_program, FdLink, Link, ProgAttachLink, ProgramData, ProgramError,
},
sys::{bpf_link_create, LinkTarget, SyscallError},
sys::{
link::{bpf_link_create, LinkTarget},
SyscallError,
},
util::KernelVersion,
VerifierLogLevel,
};
Expand Down
5 changes: 4 additions & 1 deletion aya/src/programs/cgroup_sysctl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ use crate::{
programs::{
define_link_wrapper, load_program, FdLink, Link, ProgAttachLink, ProgramData, ProgramError,
},
sys::{bpf_link_create, LinkTarget, SyscallError},
sys::{
link::{bpf_link_create, LinkTarget},
SyscallError,
},
util::KernelVersion,
};

Expand Down
14 changes: 10 additions & 4 deletions aya/src/programs/extension.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,13 @@ use crate::{
programs::{
define_link_wrapper, load_program, FdLink, FdLinkId, ProgramData, ProgramError, ProgramFd,
},
sys::{self, bpf_link_create, LinkTarget, SyscallError},
sys::{
btf::bpf_btf_get_fd_by_id,
link::{bpf_link_create, LinkTarget},
object::btf_obj_get_info_by_fd,
program::bpf_prog_get_info_by_fd,
SyscallError,
},
Btf,
};

Expand Down Expand Up @@ -171,21 +177,21 @@ impl Extension {
/// with the name `func_name` within that BTF object.
fn get_btf_info(prog_fd: BorrowedFd<'_>, func_name: &str) -> Result<(OwnedFd, u32), ProgramError> {
// retrieve program information
let info = sys::bpf_prog_get_info_by_fd(prog_fd, &mut [])?;
let info = bpf_prog_get_info_by_fd(prog_fd, &mut [])?;

// btf_id refers to the ID of the program btf that was loaded with bpf(BPF_BTF_LOAD)
if info.btf_id == 0 {
return Err(ProgramError::ExtensionError(ExtensionError::NoBTF));
}

// the bpf fd of the BTF object
let btf_fd = sys::bpf_btf_get_fd_by_id(info.btf_id)?;
let btf_fd = bpf_btf_get_fd_by_id(info.btf_id)?;

// we need to read the btf bytes into a buffer but we don't know the size ahead of time.
// assume 4kb. if this is too small we can resize based on the size obtained in the response.
let mut buf = vec![0u8; 4096];
loop {
let info = sys::btf_obj_get_info_by_fd(btf_fd.as_fd(), &mut buf)?;
let info = btf_obj_get_info_by_fd(btf_fd.as_fd(), &mut buf)?;
let btf_size = info.btf_size as usize;
if btf_size > buf.len() {
buf.resize(btf_size, 0u8);
Expand Down
2 changes: 1 addition & 1 deletion aya/src/programs/kprobe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use crate::{
probe::{attach, ProbeKind},
FdLink, LinkError, ProgramData, ProgramError,
},
sys::bpf_link_get_info_by_fd,
sys::link::bpf_link_get_info_by_fd,
VerifierLogLevel,
};

Expand Down
6 changes: 5 additions & 1 deletion aya/src/programs/links.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ use crate::{
generated::bpf_attach_type,
pin::PinError,
programs::{ProgramError, ProgramFd},
sys::{bpf_get_object, bpf_pin_object, bpf_prog_attach, bpf_prog_detach, SyscallError},
sys::{
object::{bpf_get_object, bpf_pin_object},
program::{bpf_prog_attach, bpf_prog_detach},
SyscallError,
},
};

/// A Link.
Expand Down
2 changes: 1 addition & 1 deletion aya/src/programs/lirc_mode2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use std::os::fd::{AsFd, AsRawFd as _, OwnedFd, RawFd};
use crate::{
generated::{bpf_attach_type::BPF_LIRC_MODE2, bpf_prog_type::BPF_PROG_TYPE_LIRC_MODE2},
programs::{load_program, query, Link, ProgramData, ProgramError, ProgramFd, ProgramInfo},
sys::{bpf_prog_attach, bpf_prog_detach, bpf_prog_get_fd_by_id},
sys::program::{bpf_prog_attach, bpf_prog_detach, bpf_prog_get_fd_by_id},
};

/// A program used to decode IR into key events for a lirc device.
Expand Down
Loading

0 comments on commit bda7c51

Please sign in to comment.