Struct libbpf_rs::Map

source ·
pub struct Map { /* private fields */ }
Expand description

Represents a libbpf-created map.

Some methods require working with raw bytes. You may find libraries such as plain helpful.

Implementations§

source§

impl Map

source

pub fn is_pinned(&self) -> bool

Returns whether map is pinned or not flag

source

pub fn get_pin_path(&self) -> Option<&OsStr>

Returns the pin_path if the map is pinned, otherwise, None is returned

source

pub fn pin<P: AsRef<Path>>(&mut self, path: P) -> Result<()>

Pin this map to bpffs.

source

pub fn unpin<P: AsRef<Path>>(&mut self, path: P) -> Result<()>

Unpin this map from bpffs.

source

pub fn attach_struct_ops(&self) -> Result<Link>

Attach a struct ops map

Methods from Deref<Target = MapHandle>§

source

pub fn info(&self) -> Result<MapInfo>

Fetch extra map information

source

pub fn name(&self) -> &str

Retrieve the Map’s name.

source

pub fn map_type(&self) -> MapType

Retrieve type of the map.

source

pub fn key_size(&self) -> u32

Key size in bytes

source

pub fn value_size(&self) -> u32

Value size in bytes

source

pub fn lookup(&self, key: &[u8], flags: MapFlags) -> Result<Option<Vec<u8>>>

Returns map value as Vec of u8.

key must have exactly MapHandle::key_size() elements.

If the map is one of the per-cpu data structures, the function MapHandle::lookup_percpu() must be used. If the map is of type bloom_filter the function MapHandle::lookup_bloom_filter() must be used

source

pub fn lookup_bloom_filter(&self, value: &[u8]) -> Result<bool>

Returns if the given value is likely present in bloom_filter as bool.

value must have exactly MapHandle::value_size() elements.

source

pub fn lookup_percpu( &self, key: &[u8], flags: MapFlags, ) -> Result<Option<Vec<Vec<u8>>>>

Returns one value per cpu as Vec of Vec of u8 for per per-cpu maps.

For normal maps, MapHandle::lookup() must be used.

source

pub fn delete(&self, key: &[u8]) -> Result<()>

Deletes an element from the map.

key must have exactly MapHandle::key_size() elements.

source

pub fn delete_batch( &self, keys: &[u8], count: u32, elem_flags: MapFlags, flags: MapFlags, ) -> Result<()>

Deletes many elements in batch mode from the map.

keys must have exactly [MapHandle::key_size() * count] elements.

source

pub fn lookup_and_delete(&self, key: &[u8]) -> Result<Option<Vec<u8>>>

Same as MapHandle::lookup() except this also deletes the key from the map.

Note that this operation is currently only implemented in the kernel for MapType::Queue and MapType::Stack.

key must have exactly MapHandle::key_size() elements.

source

pub fn update(&self, key: &[u8], value: &[u8], flags: MapFlags) -> Result<()>

Update an element.

key must have exactly MapHandle::key_size() elements. value must have exactly MapHandle::value_size() elements.

For per-cpu maps, MapHandle::update_percpu() must be used.

source

pub fn update_batch( &self, keys: &[u8], values: &[u8], count: u32, elem_flags: MapFlags, flags: MapFlags, ) -> Result<()>

Updates many elements in batch mode in the map

keys must have exactly [MapHandle::key_size() * count] elements. value must have exactly [MapHandle::key_size() * count] elements

source

pub fn update_percpu( &self, key: &[u8], values: &[Vec<u8>], flags: MapFlags, ) -> Result<()>

Update an element in an per-cpu map with one value per cpu.

key must have exactly MapHandle::key_size() elements. value must have one element per cpu (see num_possible_cpus) with exactly MapHandle::value_size() elements each.

For per-cpu maps, MapHandle::update_percpu() must be used.

source

pub fn freeze(&self) -> Result<()>

Freeze the map as read-only from user space.

Entries from a frozen map can no longer be updated or deleted with the bpf() system call. This operation is not reversible, and the map remains immutable from user space until its destruction. However, read and write permissions for BPF programs to the map remain unchanged.

source

pub fn keys(&self) -> MapKeyIter<'_>

Returns an iterator over keys in this map

Note that if the map is not stable (stable meaning no updates or deletes) during iteration, iteration can skip keys, restart from the beginning, or duplicate keys. In other words, iteration becomes unpredictable.

Trait Implementations§

source§

impl AsFd for Map

source§

fn as_fd(&self) -> BorrowedFd<'_>

Borrows the file descriptor. Read more
source§

impl AsRawLibbpf for Map

source§

fn as_libbpf_object(&self) -> NonNull<Self::LibbpfType>

Retrieve the underlying libbpf_sys::bpf_map.

§

type LibbpfType = bpf_map

The underlying libbpf type.
source§

impl Debug for Map

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Deref for Map

§

type Target = MapHandle

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl From<Map> for OwnedFd

source§

fn from(map: Map) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl Freeze for Map

§

impl RefUnwindSafe for Map

§

impl !Send for Map

§

impl !Sync for Map

§

impl Unpin for Map

§

impl UnwindSafe for Map

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> 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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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.