diff --git a/aya/src/maps/xdp/cpu_map.rs b/aya/src/maps/xdp/cpu_map.rs index 3fb4934f..a3c0a585 100644 --- a/aya/src/maps/xdp/cpu_map.rs +++ b/aya/src/maps/xdp/cpu_map.rs @@ -3,13 +3,14 @@ use std::{ borrow::{Borrow, BorrowMut}, num::NonZeroU32, - os::fd::AsRawFd, + os::fd::{AsFd, AsRawFd}, }; use aya_obj::generated::{bpf_cpumap_val, bpf_cpumap_val__bindgen_ty_1}; use crate::{ maps::{check_bounds, check_kv_size, IterableMap, MapData, MapError}, + programs::ProgramFd, sys::{bpf_map_lookup_elem, bpf_map_update_elem, SyscallError}, Pod, }; @@ -36,7 +37,7 @@ use crate::{ /// let flags = 0; /// let queue_size = 2048; /// for i in 0u32..8u32 { -/// cpumap.set(i, queue_size, None::, flags); +/// cpumap.set(i, queue_size, None, flags); /// } /// /// # Ok::<(), aya::BpfError>(()) @@ -115,7 +116,7 @@ impl> CpuMap { &mut self, cpu_index: u32, queue_size: u32, - program: Option, + program: Option<&ProgramFd>, flags: u64, ) -> Result<(), MapError> { let data = self.inner.borrow_mut(); @@ -127,7 +128,9 @@ impl> CpuMap { bpf_prog: bpf_cpumap_val__bindgen_ty_1 { // Default is valid as the kernel will only consider fd > 0: // https://github.com/torvalds/linux/blob/2dde18cd1d8fac735875f2e4987f11817cc0bc2c/kernel/bpf/cpumap.c#L466 - fd: program.map(|prog| prog.as_raw_fd()).unwrap_or_default(), + fd: program + .map(|prog| prog.as_fd().as_raw_fd()) + .unwrap_or_default(), }, }; bpf_map_update_elem(fd, Some(&cpu_index), &value, flags).map_err(|(_, io_error)| { diff --git a/aya/src/maps/xdp/dev_map.rs b/aya/src/maps/xdp/dev_map.rs index 2a2797e8..e7a487d4 100644 --- a/aya/src/maps/xdp/dev_map.rs +++ b/aya/src/maps/xdp/dev_map.rs @@ -3,13 +3,14 @@ use std::{ borrow::{Borrow, BorrowMut}, num::NonZeroU32, - os::fd::AsRawFd, + os::fd::{AsFd, AsRawFd}, }; use aya_obj::generated::{bpf_devmap_val, bpf_devmap_val__bindgen_ty_1}; use crate::{ maps::{check_bounds, check_kv_size, IterableMap, MapData, MapError}, + programs::ProgramFd, sys::{bpf_map_lookup_elem, bpf_map_update_elem, SyscallError}, Pod, }; @@ -31,7 +32,7 @@ use crate::{ /// let mut devmap = DevMap::try_from(bpf.map_mut("IFACES").unwrap())?; /// let source = 32u32; /// let dest = 42u32; -/// devmap.set(source, dest, None::, 0); +/// devmap.set(source, dest, None, 0); /// /// # Ok::<(), aya::BpfError>(()) /// ``` @@ -108,7 +109,7 @@ impl> DevMap { &mut self, index: u32, ifindex: u32, - program: Option, + program: Option<&ProgramFd>, flags: u64, ) -> Result<(), MapError> { let data = self.inner.borrow_mut(); @@ -121,7 +122,9 @@ impl> DevMap { // Default is valid as the kernel will only consider fd > 0: // https://github.com/torvalds/linux/blob/2dde18cd1d8fac735875f2e4987f11817cc0bc2c/kernel/bpf/devmap.c#L866 // https://github.com/torvalds/linux/blob/2dde18cd1d8fac735875f2e4987f11817cc0bc2c/kernel/bpf/devmap.c#L918 - fd: program.map(|prog| prog.as_raw_fd()).unwrap_or_default(), + fd: program + .map(|prog| prog.as_fd().as_raw_fd()) + .unwrap_or_default(), }, }; bpf_map_update_elem(fd, Some(&index), &value, flags).map_err(|(_, io_error)| { diff --git a/aya/src/maps/xdp/dev_map_hash.rs b/aya/src/maps/xdp/dev_map_hash.rs index 34ad39ac..e5c91dde 100644 --- a/aya/src/maps/xdp/dev_map_hash.rs +++ b/aya/src/maps/xdp/dev_map_hash.rs @@ -3,13 +3,14 @@ use std::{ borrow::{Borrow, BorrowMut}, num::NonZeroU32, - os::fd::AsRawFd, + os::fd::{AsFd, AsRawFd}, }; use aya_obj::generated::{bpf_devmap_val, bpf_devmap_val__bindgen_ty_1}; use crate::{ maps::{check_kv_size, hash_map, IterableMap, MapData, MapError, MapIter, MapKeys}, + programs::ProgramFd, sys::{bpf_map_lookup_elem, SyscallError}, }; @@ -32,7 +33,7 @@ use super::dev_map::DevMapValue; /// let mut devmap = DevMapHash::try_from(bpf.map_mut("IFACES").unwrap())?; /// let flags = 0; /// let ifindex = 32u32; -/// devmap.insert(ifindex, ifindex, None::, flags); +/// devmap.insert(ifindex, ifindex, None, flags); /// /// # Ok::<(), aya::BpfError>(()) /// ``` @@ -100,7 +101,7 @@ impl> DevMapHash { &mut self, key: u32, ifindex: u32, - program: Option, + program: Option<&ProgramFd>, flags: u64, ) -> Result<(), MapError> { let value = bpf_devmap_val { @@ -109,7 +110,9 @@ impl> DevMapHash { // Default is valid as the kernel will only consider fd > 0: // https://github.com/torvalds/linux/blob/2dde18cd1d8fac735875f2e4987f11817cc0bc2c/kernel/bpf/devmap.c#L866 // https://github.com/torvalds/linux/blob/2dde18cd1d8fac735875f2e4987f11817cc0bc2c/kernel/bpf/devmap.c#L918 - fd: program.map(|prog| prog.as_raw_fd()).unwrap_or_default(), + fd: program + .map(|prog| prog.as_fd().as_raw_fd()) + .unwrap_or_default(), }, }; hash_map::insert(self.inner.borrow_mut(), &key, &value, flags) diff --git a/test/integration-test/src/tests/xdp.rs b/test/integration-test/src/tests/xdp.rs index b0c25bff..88423fe9 100644 --- a/test/integration-test/src/tests/xdp.rs +++ b/test/integration-test/src/tests/xdp.rs @@ -1,4 +1,4 @@ -use std::{net::UdpSocket, os::fd::AsFd, time::Duration}; +use std::{net::UdpSocket, time::Duration}; use aya::{ maps::{Array, CpuMap}, @@ -75,7 +75,7 @@ fn cpumap_chain() { xdp.load().unwrap(); xdp.fd().unwrap() }; - cpus.set(0, 2048, Some(xdp_chain_fd.as_fd()), 0).unwrap(); + cpus.set(0, 2048, Some(xdp_chain_fd), 0).unwrap(); // Load the main program let xdp: &mut Xdp = bpf.program_mut("redirect_cpu").unwrap().try_into().unwrap();