Skip to main content

EbpfPtr

Struct EbpfPtr 

Source
pub struct EbpfPtr<'a, T> { /* private fields */ }
Expand description

Pointer to a buffer that may be shared between eBPF programs. It allows to safely pass around pointers to the data stored in eBPF maps and access the data referenced by the pointer.

Implementations§

Source§

impl<'a, T> EbpfPtr<'a, T>
where T: Sized,

Source

pub unsafe fn new(ptr: *mut T) -> Self

Creates a new EbpfPtr from the specified pointer.

§Safety

Caller must ensure that the buffer referenced by ptr is valid for lifetime 'a and there are no other mutable references to the same memory.

Source

pub unsafe fn deref(&self) -> &'a T

§Safety

Caller must ensure that the value cannot be updated by other threads while the returned reference is live.

Source

pub unsafe fn deref_mut(&self) -> &'a mut T

§Safety

Caller must ensure that the value is not being used by other threads.

Source

pub fn get_field<F, const OFFSET: usize>(&self) -> EbpfPtr<'a, F>

Source

pub fn ptr(&self) -> *mut T

Source§

impl EbpfPtr<'_, u64>

Source

pub fn load_relaxed(&self) -> u64

Loads the value referenced by the pointer. Atomicity is guaranteed if and only if the pointer is 8-byte aligned.

Source

pub fn store_relaxed(&self, value: u64)

Stores the value at the memory referenced by the pointer. Atomicity is guaranteed if and only if the pointer is 8-byte aligned.

Source§

impl EbpfPtr<'_, u32>

Source

pub fn load_relaxed(&self) -> u32

Loads the value referenced by the pointer. Atomicity is guaranteed if and only if the pointer is 4-byte aligned.

Source

pub fn store_relaxed(&self, value: u32)

Stores the value at the memory referenced by the pointer. Atomicity is guaranteed if and only if the pointer is 4-byte aligned.

Source§

impl EbpfPtr<'_, i32>

Source

pub fn load_relaxed(&self) -> i32

Loads the value referenced by the pointer. Atomicity is guaranteed if and only if the pointer is 4-byte aligned.

Source

pub fn store_relaxed(&self, value: i32)

Stores the value at the memory referenced by the pointer. Atomicity is guaranteed if and only if the pointer is 4-byte aligned.

Trait Implementations§

Source§

impl<'a, T> Clone for EbpfPtr<'a, T>

Source§

fn clone(&self) -> Self

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, T> From<&'a mut T> for EbpfPtr<'a, T>
where T: IntoBytes + FromBytes + Sized,

Source§

fn from(value: &'a mut T) -> Self

Converts to this type from the input type.
Source§

impl<'a, T> From<EbpfPtr<'a, T>> for BpfValue

Source§

fn from(value: EbpfPtr<'a, T>) -> Self

Converts to this type from the input type.
Source§

impl<'a, T> ProgramArgument for EbpfPtr<'a, T>

Implements ProgramArgument for EbpfPtr when it’s implemented for &'a mut T.

Source§

fn get_type() -> &'static Type

Returns eBPF type that corresponds to Self. Used when program argument types are checked statically.
Source§

fn field_mappings() -> &'static [FieldMapping]

Returns the list of field mappings that should be applied with this argument. If not empty then get_type() must be a PtrToStruct.
Source§

fn struct_mapping() -> Option<StructMapping>

Returns the StructMapping that should be applied with this argument. Implementations should override field_mappings() and keep default implementation of struct_mapping().
Source§

fn get_value_type(&self) -> Type

Returns eBPF type for a specific value of Self. For most types this is the same type that’s returned by get_type(), but that’s not always the case. In particular for scalar values this will return Type::ScalarValue with the actual value of the scalar and with unknown_mask = 0.
Source§

impl<'a, T> Copy for EbpfPtr<'a, T>

Source§

impl<'a, T> Send for EbpfPtr<'a, T>

Source§

impl<'a, T> Sync for EbpfPtr<'a, T>

Auto Trait Implementations§

§

impl<'a, T> Freeze for EbpfPtr<'a, T>

§

impl<'a, T> RefUnwindSafe for EbpfPtr<'a, T>
where T: RefUnwindSafe,

§

impl<'a, T> Unpin for EbpfPtr<'a, T>

§

impl<'a, T> UnsafeUnpin for EbpfPtr<'a, T>

§

impl<'a, T> UnwindSafe for EbpfPtr<'a, T>
where T: RefUnwindSafe,

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.