Skip to main content

EbpfBufferPtr

Struct EbpfBufferPtr 

Source
pub struct EbpfBufferPtr<'a> { /* private fields */ }
Expand description

Wraps a pointer to buffer used in eBPF runtime, such as an eBPF maps entry. The referenced data may be access from multiple threads in parallel, which makes it unsafe to access it using standard Rust types. EbpfBufferPtr allows to access these buffers safely. It may be used to reference either a whole VMO allocated for and eBPF map or individual elements of that VMO (see slice()). The address and the size of the buffer are always 8-byte aligned.

Implementations§

Source§

impl<'a> EbpfBufferPtr<'a>

Source

pub const ALIGNMENT: usize

Source

pub unsafe fn new(ptr: *mut u8, size: usize) -> Self

Creates a new EbpfBufferPtr from the specified pointer.

§Safety

Caller must ensure that the buffer referenced by ptr is valid for lifetime 'a.

Source

pub fn len(&self) -> usize

Size of the buffer in bytes.

Source

pub fn raw_ptr(&self) -> *mut u8

Raw pointer to the start of the buffer.

Source

pub fn get_ptr<T>(&self, offset: usize) -> Option<EbpfPtr<'a, T>>

Returns a pointer to a value of type T at the specified offset.

Source

pub fn slice(&self, range: impl RangeBounds<usize>) -> Option<Self>

Returns pointer to the specified range in the buffer.

Source

pub fn load_to_slice(&self, dst: &mut [MaybeUninit<u8>])

Loads contents of the buffer into the specified slice, dst must be of the same size as self.

Source

pub fn load<const N: usize>(&self) -> SmallVec<[u8; N]>

Loads all buffer contents into a SmallVec.

Source

pub fn store(&self, data: &[u8])

Stores data in the buffer. data must not be larger than the buffer.

Source

pub fn copy(&self, src: &EbpfBufferPtr<'_>)

Copies the data from another EbpfBufferPtr. src may be smaller than self. In this case it’s copied to the beginning of self.

Trait Implementations§

Source§

impl<'a> Clone for EbpfBufferPtr<'a>

Source§

fn clone(&self) -> EbpfBufferPtr<'a>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> From<&'a mut [u8]> for EbpfBufferPtr<'a>

Source§

fn from(value: &'a mut [u8]) -> Self

Converts to this type from the input type.
Source§

impl<'a, const N: usize> From<&'a mut [u8; N]> for EbpfBufferPtr<'a>

Source§

fn from(value: &'a mut [u8; N]) -> Self

Converts to this type from the input type.
Source§

impl<'a> From<&'a mut Vec<u8>> for EbpfBufferPtr<'a>

Source§

fn from(value: &'a mut Vec<u8>) -> Self

Converts to this type from the input type.
Source§

impl<'a> Copy for EbpfBufferPtr<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for EbpfBufferPtr<'a>

§

impl<'a> RefUnwindSafe for EbpfBufferPtr<'a>

§

impl<'a> !Send for EbpfBufferPtr<'a>

§

impl<'a> !Sync for EbpfBufferPtr<'a>

§

impl<'a> Unpin for EbpfBufferPtr<'a>

§

impl<'a> UnsafeUnpin for EbpfBufferPtr<'a>

§

impl<'a> UnwindSafe for EbpfBufferPtr<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.