aya,aya-obj: fix dupe map enum & add display for map type enum

Removes duplicate u32 conversion for  map type
`BPF_MAP_TYPE_BLOOM_FILTER` and `BPF_MAP_TYPE_CGRP_STORAGE`, and adds
`BPF_MAP_TYPE_CGRP_STORAGE`. Also implements display for map type.
pull/979/head
tyrone-wu
parent 17e99fd4ae
commit 1e972cb7a5
No known key found for this signature in database
GPG Key ID: 978B1A1B79210AD6

@ -5,7 +5,7 @@ use core::mem;
#[cfg(not(feature = "std"))]
use crate::std;
use crate::EbpfSectionKind;
use crate::{generated::bpf_map_type::*, EbpfSectionKind};
/// Invalid map type encontered
pub struct InvalidMapTypeError {
@ -17,7 +17,6 @@ impl TryFrom<u32> for crate::generated::bpf_map_type {
type Error = InvalidMapTypeError;
fn try_from(map_type: u32) -> Result<Self, Self::Error> {
use crate::generated::bpf_map_type::*;
Ok(match map_type {
x if x == BPF_MAP_TYPE_UNSPEC as u32 => BPF_MAP_TYPE_UNSPEC,
x if x == BPF_MAP_TYPE_HASH as u32 => BPF_MAP_TYPE_HASH,
@ -31,7 +30,6 @@ impl TryFrom<u32> for crate::generated::bpf_map_type {
x if x == BPF_MAP_TYPE_LRU_HASH as u32 => BPF_MAP_TYPE_LRU_HASH,
x if x == BPF_MAP_TYPE_LRU_PERCPU_HASH as u32 => BPF_MAP_TYPE_LRU_PERCPU_HASH,
x if x == BPF_MAP_TYPE_LPM_TRIE as u32 => BPF_MAP_TYPE_LPM_TRIE,
x if x == BPF_MAP_TYPE_BLOOM_FILTER as u32 => BPF_MAP_TYPE_BLOOM_FILTER,
x if x == BPF_MAP_TYPE_ARRAY_OF_MAPS as u32 => BPF_MAP_TYPE_ARRAY_OF_MAPS,
x if x == BPF_MAP_TYPE_HASH_OF_MAPS as u32 => BPF_MAP_TYPE_HASH_OF_MAPS,
x if x == BPF_MAP_TYPE_DEVMAP as u32 => BPF_MAP_TYPE_DEVMAP,
@ -42,7 +40,6 @@ impl TryFrom<u32> for crate::generated::bpf_map_type {
x if x == BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED as u32 => {
BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED
}
x if x == BPF_MAP_TYPE_CGRP_STORAGE as u32 => BPF_MAP_TYPE_CGRP_STORAGE,
x if x == BPF_MAP_TYPE_REUSEPORT_SOCKARRAY as u32 => BPF_MAP_TYPE_REUSEPORT_SOCKARRAY,
x if x == BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE_DEPRECATED as u32 => {
BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE_DEPRECATED
@ -58,6 +55,7 @@ impl TryFrom<u32> for crate::generated::bpf_map_type {
x if x == BPF_MAP_TYPE_BLOOM_FILTER as u32 => BPF_MAP_TYPE_BLOOM_FILTER,
x if x == BPF_MAP_TYPE_USER_RINGBUF as u32 => BPF_MAP_TYPE_USER_RINGBUF,
x if x == BPF_MAP_TYPE_CGRP_STORAGE as u32 => BPF_MAP_TYPE_CGRP_STORAGE,
x if x == BPF_MAP_TYPE_ARENA as u32 => BPF_MAP_TYPE_ARENA,
_ => return Err(InvalidMapTypeError { map_type }),
})
}
@ -290,3 +288,49 @@ pub struct BtfMap {
pub(crate) symbol_index: usize,
pub(crate) data: Vec<u8>,
}
impl core::fmt::Display for crate::generated::bpf_map_type {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(
f,
"{}",
match self {
BPF_MAP_TYPE_UNSPEC => "Unspec",
BPF_MAP_TYPE_HASH => "Hash",
BPF_MAP_TYPE_ARRAY => "Array",
BPF_MAP_TYPE_PROG_ARRAY => "ProgArray",
BPF_MAP_TYPE_PERF_EVENT_ARRAY => "PerfEventArray",
BPF_MAP_TYPE_PERCPU_HASH => "PerCpuHash",
BPF_MAP_TYPE_PERCPU_ARRAY => "PerCpuArray",
BPF_MAP_TYPE_STACK_TRACE => "StackTrace",
BPF_MAP_TYPE_CGROUP_ARRAY => "CgroupArray",
BPF_MAP_TYPE_LRU_HASH => "LruHash",
BPF_MAP_TYPE_LRU_PERCPU_HASH => "LruPerCpuHash",
BPF_MAP_TYPE_LPM_TRIE => "LpmTrie",
BPF_MAP_TYPE_ARRAY_OF_MAPS => "ArrayOfMaps",
BPF_MAP_TYPE_HASH_OF_MAPS => "HashOfMaps",
BPF_MAP_TYPE_DEVMAP => "DevMap",
BPF_MAP_TYPE_SOCKMAP => "SockMap",
BPF_MAP_TYPE_CPUMAP => "CpuMap",
BPF_MAP_TYPE_XSKMAP => "XskMap",
BPF_MAP_TYPE_SOCKHASH => "SockHash",
BPF_MAP_TYPE_CGROUP_STORAGE_DEPRECATED => "CgroupStorageDeprecated",
BPF_MAP_TYPE_REUSEPORT_SOCKARRAY => "ReusePortSockArray",
BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE_DEPRECATED => "PerCpuCgroupStorageDeprecated",
BPF_MAP_TYPE_QUEUE => "Queue",
BPF_MAP_TYPE_STACK => "Stack",
BPF_MAP_TYPE_SK_STORAGE => "SkStorage",
BPF_MAP_TYPE_DEVMAP_HASH => "DevMapHash",
BPF_MAP_TYPE_STRUCT_OPS => "StructOps",
BPF_MAP_TYPE_RINGBUF => "RingBuf",
BPF_MAP_TYPE_INODE_STORAGE => "InodeStorage",
BPF_MAP_TYPE_TASK_STORAGE => "TaskStorage",
BPF_MAP_TYPE_BLOOM_FILTER => "BloomFilter",
BPF_MAP_TYPE_USER_RINGBUF => "UserRingBuf",
BPF_MAP_TYPE_CGRP_STORAGE => "CgrpStorage",
BPF_MAP_TYPE_ARENA => "Arena",
__MAX_BPF_MAP_TYPE => "MaxMapType",
}
)
}
}

@ -59,6 +59,7 @@ use std::{
ptr,
};
use aya_obj::generated::bpf_map_type;
use libc::{getrlimit, rlim_t, rlimit, RLIMIT_MEMLOCK, RLIM_INFINITY};
use log::warn;
use obj::maps::InvalidMapTypeError;
@ -962,6 +963,12 @@ impl MapInfo {
self.0.type_
}
/// The map type as defined by the linux kernel enum
/// [`bpf_map_type`](https://elixir.bootlin.com/linux/v6.4.4/source/include/uapi/linux/bpf.h#L905).
pub fn map_type_enum(&self) -> bpf_map_type {
bpf_map_type::try_from(self.0.type_).unwrap_or(bpf_map_type::__MAX_BPF_MAP_TYPE)
}
/// The key size for this map.
pub fn key_size(&self) -> u32 {
self.0.key_size

@ -1798,6 +1798,7 @@ pub fn aya::maps::MapInfo::id(&self) -> u32
pub fn aya::maps::MapInfo::key_size(&self) -> u32
pub fn aya::maps::MapInfo::map_flags(&self) -> u32
pub fn aya::maps::MapInfo::map_type(&self) -> u32
pub fn aya::maps::MapInfo::map_type_enum(&self) -> aya_obj::generated::linux_bindings_x86_64::bpf_map_type
pub fn aya::maps::MapInfo::max_entries(&self) -> u32
pub fn aya::maps::MapInfo::name(&self) -> &[u8]
pub fn aya::maps::MapInfo::name_as_str(&self) -> core::option::Option<&str>

Loading…
Cancel
Save