pub struct Map { /* private fields */ }
Expand description
Represents a created map.
Some methods require working with raw bytes. You may find libraries such as
plain
helpful.
Implementations§
source§impl Map
impl Map
sourcepub fn from_pinned_path<P: AsRef<Path>>(path: P) -> Result<Self>
pub fn from_pinned_path<P: AsRef<Path>>(path: P) -> Result<Self>
sourcepub fn from_map_id(id: u32) -> Result<Self>
pub fn from_map_id(id: u32) -> Result<Self>
Open a loaded map from its map id.
sourcepub fn value_size(&self) -> u32
pub fn value_size(&self) -> u32
Value size in bytes
sourcepub fn lookup(&self, key: &[u8], flags: MapFlags) -> Result<Option<Vec<u8>>>
pub fn lookup(&self, key: &[u8], flags: MapFlags) -> Result<Option<Vec<u8>>>
Returns map value as Vec
of u8
.
key
must have exactly Map::key_size()
elements.
If the map is one of the per-cpu data structures, the function Map::lookup_percpu()
must be used.
sourcepub fn lookup_percpu(
&self,
key: &[u8],
flags: MapFlags
) -> Result<Option<Vec<Vec<u8>>>>
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, Map::lookup()
must be used.
sourcepub fn delete(&self, key: &[u8]) -> Result<()>
pub fn delete(&self, key: &[u8]) -> Result<()>
Deletes an element from the map.
key
must have exactly Map::key_size()
elements.
sourcepub fn lookup_and_delete(&self, key: &[u8]) -> Result<Option<Vec<u8>>>
pub fn lookup_and_delete(&self, key: &[u8]) -> Result<Option<Vec<u8>>>
Same as Map::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 Map::key_size()
elements.
sourcepub fn update(&self, key: &[u8], value: &[u8], flags: MapFlags) -> Result<()>
pub fn update(&self, key: &[u8], value: &[u8], flags: MapFlags) -> Result<()>
Update an element.
key
must have exactly Map::key_size()
elements. value
must have exactly
Map::value_size()
elements.
For per-cpu maps, Map::update_percpu()
must be used.
sourcepub fn update_percpu(
&self,
key: &[u8],
values: &[Vec<u8>],
flags: MapFlags
) -> Result<()>
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 Map::key_size()
elements. value
must have one
element per cpu (see num_possible_cpus
)
with exactly Map::value_size()
elements each.
For per-cpu maps, Map::update_percpu()
must be used.
sourcepub fn freeze(&self) -> Result<()>
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.
sourcepub fn keys(&self) -> MapKeyIter<'_>
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.
sourcepub fn create<T: AsRef<str>>(
map_type: MapType,
name: Option<T>,
key_size: u32,
value_size: u32,
max_entries: u32,
opts: &bpf_map_create_opts
) -> Result<Map>
pub fn create<T: AsRef<str>>( map_type: MapType, name: Option<T>, key_size: u32, value_size: u32, max_entries: u32, opts: &bpf_map_create_opts ) -> Result<Map>
Create the bpf map standalone.
sourcepub fn attach_struct_ops(&self) -> Result<Link>
pub fn attach_struct_ops(&self) -> Result<Link>
Attach a struct ops map
sourcepub fn as_libbpf_bpf_map_ptr(&self) -> Option<NonNull<bpf_map>>
pub fn as_libbpf_bpf_map_ptr(&self) -> Option<NonNull<bpf_map>>
Retrieve the underlying libbpf_sys::bpf_map
.