aya-log: Implement `AsFd` for `EbpfLogger`

This change implements the `AsFd` trait for the `EbpfLogger` struct.
This allows obtaining a `BorrowedFd` from an `EbpfLogger` instance, which is safer than using `AsRawFd`.

This improves the ergonomics of using `EbpfLogger` with APIs that accept file descriptors.

Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
main
Xiaobo Liu 4 days ago committed by Tamir Duberstein
parent f635d80708
commit 44ec978bd3

@ -61,7 +61,7 @@ use std::{
fmt::{LowerHex, UpperHex}, fmt::{LowerHex, UpperHex},
mem, mem,
net::{Ipv4Addr, Ipv6Addr}, net::{Ipv4Addr, Ipv6Addr},
os::fd::AsRawFd, os::fd::{AsFd, AsRawFd},
ptr, str, ptr, str,
}; };
@ -98,6 +98,16 @@ pub struct EbpfLogger<T> {
logger: T, logger: T,
} }
impl<T> AsFd for EbpfLogger<T> {
fn as_fd(&self) -> std::os::fd::BorrowedFd<'_> {
let Self {
ring_buf,
logger: _,
} = self;
ring_buf.as_fd()
}
}
impl<T> AsRawFd for EbpfLogger<T> { impl<T> AsRawFd for EbpfLogger<T> {
fn as_raw_fd(&self) -> std::os::unix::prelude::RawFd { fn as_raw_fd(&self) -> std::os::unix::prelude::RawFd {
let Self { let Self {

@ -71,6 +71,8 @@ impl<T: log::Log> aya_log::EbpfLogger<T>
pub fn aya_log::EbpfLogger<T>::flush(&mut self) pub fn aya_log::EbpfLogger<T>::flush(&mut self)
pub fn aya_log::EbpfLogger<T>::init_from_id_with_logger(program_id: u32, logger: T) -> core::result::Result<Self, aya_log::Error> pub fn aya_log::EbpfLogger<T>::init_from_id_with_logger(program_id: u32, logger: T) -> core::result::Result<Self, aya_log::Error>
pub fn aya_log::EbpfLogger<T>::init_with_logger(bpf: &mut aya::bpf::Ebpf, logger: T) -> core::result::Result<Self, aya_log::Error> pub fn aya_log::EbpfLogger<T>::init_with_logger(bpf: &mut aya::bpf::Ebpf, logger: T) -> core::result::Result<Self, aya_log::Error>
impl<T> std::os::fd::owned::AsFd for aya_log::EbpfLogger<T>
pub fn aya_log::EbpfLogger<T>::as_fd(&self) -> std::os::fd::owned::BorrowedFd<'_>
impl<T> std::os::fd::raw::AsRawFd for aya_log::EbpfLogger<T> impl<T> std::os::fd::raw::AsRawFd for aya_log::EbpfLogger<T>
pub fn aya_log::EbpfLogger<T>::as_raw_fd(&self) -> std::os::fd::raw::RawFd pub fn aya_log::EbpfLogger<T>::as_raw_fd(&self) -> std::os::fd::raw::RawFd
impl<T> core::marker::Freeze for aya_log::EbpfLogger<T> where T: core::marker::Freeze impl<T> core::marker::Freeze for aya_log::EbpfLogger<T> where T: core::marker::Freeze

Loading…
Cancel
Save