handle a couple more TODOs

reviewable/pr614/r9
Andrés Medina 2 years ago
parent c2c4095737
commit bfa365732e

@ -24,10 +24,9 @@
//! //!
//! let intercept_egress = SockMap::try_from(bpf.map_mut("INTERCEPT_EGRESS").unwrap())?; //! let intercept_egress = SockMap::try_from(bpf.map_mut("INTERCEPT_EGRESS").unwrap())?;
//! let map_fd = intercept_egress.fd()?; //! let map_fd = intercept_egress.fd()?;
//! // TODO (AM) figure out lifetimes //! let prog: &mut SkMsg = bpf.program_mut("intercept_egress_packet").unwrap().try_into()?;
//! // let prog: &mut SkMsg = bpf.program_mut("intercept_egress_packet").unwrap().try_into()?; //! prog.load()?;
//! // prog.load()?; //! prog.attach(map_fd)?;
//! // prog.attach(map_fd)?;
//! //!
//! # Ok::<(), aya::BpfError>(()) //! # Ok::<(), aya::BpfError>(())
//! ``` //! ```

@ -2,7 +2,7 @@ use std::{
ffi::c_void, ffi::c_void,
io, mem, io, mem,
os::{ os::{
fd::OwnedFd, fd::{AsFd, BorrowedFd, OwnedFd},
unix::io::{AsRawFd, RawFd}, unix::io::{AsRawFd, RawFd},
}, },
ptr, slice, ptr, slice,
@ -112,8 +112,7 @@ impl PerfBuffer {
size + page_size, size + page_size,
PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE,
MAP_SHARED, MAP_SHARED,
// TODO (AM) fd.as_fd(),
fd.as_raw_fd(),
0, 0,
) )
}; };
@ -130,8 +129,7 @@ impl PerfBuffer {
page_size, page_size,
}; };
// TODO (AM) perf_event_ioctl(perf_buf.fd.as_fd(), PERF_EVENT_IOC_ENABLE, 0)
perf_event_ioctl(perf_buf.fd.as_raw_fd(), PERF_EVENT_IOC_ENABLE, 0)
.map_err(|(_, io_error)| PerfBufferError::PerfEventEnableError { io_error })?; .map_err(|(_, io_error)| PerfBufferError::PerfEventEnableError { io_error })?;
Ok(perf_buf) Ok(perf_buf)
@ -271,8 +269,7 @@ impl AsRawFd for PerfBuffer {
impl Drop for PerfBuffer { impl Drop for PerfBuffer {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {
// TODO (AM) let _ = perf_event_ioctl(self.fd.as_fd(), PERF_EVENT_IOC_DISABLE, 0);
let _ = perf_event_ioctl(self.fd.as_raw_fd(), PERF_EVENT_IOC_DISABLE, 0);
munmap( munmap(
self.buf.load(Ordering::SeqCst) as *mut c_void, self.buf.load(Ordering::SeqCst) as *mut c_void,
self.size + self.page_size, self.size + self.page_size,
@ -287,11 +284,11 @@ unsafe fn mmap(
len: usize, len: usize,
prot: c_int, prot: c_int,
flags: c_int, flags: c_int,
fd: i32, fd: BorrowedFd<'_>,
offset: libc::off_t, offset: libc::off_t,
) -> *mut c_void { ) -> *mut c_void {
#[cfg(not(test))] #[cfg(not(test))]
return libc::mmap(addr, len, prot, flags, fd, offset); return libc::mmap(addr, len, prot, flags, fd.as_raw_fd(), offset);
#[cfg(test)] #[cfg(test)]
use crate::sys::TEST_MMAP_RET; use crate::sys::TEST_MMAP_RET;

@ -1,6 +1,6 @@
//! Perf attach links. //! Perf attach links.
use std::os::{ use std::os::{
fd::{AsRawFd, BorrowedFd, OwnedFd}, fd::{AsFd, AsRawFd, BorrowedFd, OwnedFd},
unix::io::RawFd, unix::io::RawFd,
}; };
@ -62,8 +62,7 @@ impl Link for PerfLink {
} }
fn detach(mut self) -> Result<(), ProgramError> { fn detach(mut self) -> Result<(), ProgramError> {
// TODO (AM) let _ = perf_event_ioctl(self.perf_fd.as_fd(), PERF_EVENT_IOC_DISABLE, 0);
let _ = perf_event_ioctl(self.perf_fd.as_raw_fd(), PERF_EVENT_IOC_DISABLE, 0);
if let Some(probe_kind) = self.probe_kind.take() { if let Some(probe_kind) = self.probe_kind.take() {
if let Some(event_alias) = self.event_alias.take() { if let Some(event_alias) = self.event_alias.take() {
@ -107,15 +106,13 @@ fn perf_attach_either(
probe_kind: Option<ProbeKind>, probe_kind: Option<ProbeKind>,
event_alias: Option<String>, event_alias: Option<String>,
) -> Result<PerfLinkInner, ProgramError> { ) -> Result<PerfLinkInner, ProgramError> {
// TODO (AM) perf_event_ioctl(fd.as_fd(), PERF_EVENT_IOC_SET_BPF, prog_fd.as_raw_fd()).map_err(
perf_event_ioctl(fd.as_raw_fd(), PERF_EVENT_IOC_SET_BPF, prog_fd.as_raw_fd()).map_err(
|(_, io_error)| ProgramError::SyscallError { |(_, io_error)| ProgramError::SyscallError {
call: "PERF_EVENT_IOC_SET_BPF".to_owned(), call: "PERF_EVENT_IOC_SET_BPF".to_owned(),
io_error, io_error,
}, },
)?; )?;
// TODO (AM) perf_event_ioctl(fd.as_fd(), PERF_EVENT_IOC_ENABLE, 0).map_err(|(_, io_error)| {
perf_event_ioctl(fd.as_raw_fd(), PERF_EVENT_IOC_ENABLE, 0).map_err(|(_, io_error)| {
ProgramError::SyscallError { ProgramError::SyscallError {
call: "PERF_EVENT_IOC_ENABLE".to_owned(), call: "PERF_EVENT_IOC_ENABLE".to_owned(),
io_error, io_error,

@ -6,10 +6,9 @@ mod perf_event;
mod fake; mod fake;
use std::io; use std::io;
use std::os::fd::BorrowedFd;
#[cfg(not(test))] #[cfg(not(test))]
use std::{ffi::CString, mem}; use std::{ffi::CString, fs::File, io::Read, mem, os::fd::AsRawFd};
#[cfg(not(test))]
use std::{fs::File, io::Read};
#[cfg(not(test))] #[cfg(not(test))]
use libc::utsname; use libc::utsname;
@ -39,7 +38,7 @@ pub(crate) enum Syscall<'a> {
flags: u32, flags: u32,
}, },
PerfEventIoctl { PerfEventIoctl {
fd: c_int, fd: BorrowedFd<'a>,
request: c_int, request: c_int,
arg: c_int, arg: c_int,
}, },
@ -68,7 +67,7 @@ unsafe fn syscall_impl(call: Syscall) -> SysResult {
flags, flags,
} => libc::syscall(SYS_perf_event_open, &attr, pid, cpu, group, flags), } => libc::syscall(SYS_perf_event_open, &attr, pid, cpu, group, flags),
PerfEventIoctl { fd, request, arg } => { PerfEventIoctl { fd, request, arg } => {
libc::ioctl(fd, request.try_into().unwrap(), arg) as libc::c_long libc::ioctl(fd.as_raw_fd(), request.try_into().unwrap(), arg) as libc::c_long
} }
}; };

@ -1,7 +1,7 @@
use std::{ use std::{
ffi::CString, ffi::CString,
io, mem, io, mem,
os::fd::{FromRawFd, OwnedFd, RawFd}, os::fd::{BorrowedFd, FromRawFd, OwnedFd, RawFd},
}; };
use libc::{c_int, pid_t}; use libc::{c_int, pid_t};
@ -126,7 +126,7 @@ pub(crate) fn perf_event_open_trace_point(id: u32, pid: Option<pid_t>) -> Result
Ok(unsafe { OwnedFd::from_raw_fd(fd) }) Ok(unsafe { OwnedFd::from_raw_fd(fd) })
} }
pub(crate) fn perf_event_ioctl(fd: c_int, request: c_int, arg: c_int) -> SysResult { pub(crate) fn perf_event_ioctl(fd: BorrowedFd<'_>, request: c_int, arg: c_int) -> SysResult {
let call = Syscall::PerfEventIoctl { fd, request, arg }; let call = Syscall::PerfEventIoctl { fd, request, arg };
#[cfg(not(test))] #[cfg(not(test))]
return syscall(call); return syscall(call);

Loading…
Cancel
Save