diff --git a/aya/src/maps/mod.rs b/aya/src/maps/mod.rs index c5632808..f3841502 100644 --- a/aya/src/maps/mod.rs +++ b/aya/src/maps/mod.rs @@ -268,6 +268,27 @@ pub enum Map { Queue(MapData), } +impl Map { + /// Returns the low level map type. + fn map_type(&self) -> u32 { + match self { + Map::Array(map) => map.obj.map_type(), + Map::PerCpuArray(map) => map.obj.map_type(), + Map::ProgramArray(map) => map.obj.map_type(), + Map::HashMap(map) => map.obj.map_type(), + Map::PerCpuHashMap(map) => map.obj.map_type(), + Map::PerfEventArray(map) => map.obj.map_type(), + Map::SockHash(map) => map.obj.map_type(), + Map::SockMap(map) => map.obj.map_type(), + Map::BloomFilter(map) => map.obj.map_type(), + Map::LpmTrie(map) => map.obj.map_type(), + Map::Stack(map) => map.obj.map_type(), + Map::StackTraceMap(map) => map.obj.map_type(), + Map::Queue(map) => map.obj.map_type(), + } + } +} + macro_rules! impl_try_from_map { ($($tx:ident from Map::$ty:ident),+ $(,)?) => { $( @@ -279,7 +300,7 @@ macro_rules! impl_try_from_map { Map::$ty(m) => { $tx::new(m) }, - _ => Err(MapError::InvalidMapType{ map_type: map.into()}), + _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), } } } @@ -292,7 +313,7 @@ macro_rules! impl_try_from_map { Map::$ty(m) => { $tx::new(m) }, - _ => Err(MapError::InvalidMapType{ map_type: map.into()}), + _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), } } } @@ -305,7 +326,7 @@ macro_rules! impl_try_from_map { Map::$ty(m) => { $tx::new(m) }, - _ => Err(MapError::InvalidMapType{ map_type: map.into()}), + _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), } } } @@ -337,7 +358,7 @@ macro_rules! impl_try_from_map_generic_key_or_value { Map::$ty(m) => { $ty::new(m) }, - _ => Err(MapError::InvalidMapType{ map_type: map.into()}), + _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), } } } @@ -350,7 +371,7 @@ macro_rules! impl_try_from_map_generic_key_or_value { Map::$ty(m) => { $ty::new(m) }, - _ => Err(MapError::InvalidMapType{ map_type: map.into()}), + _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), } } } @@ -363,7 +384,7 @@ macro_rules! impl_try_from_map_generic_key_or_value { Map::$ty(m) => { $ty::new(m) }, - _ => Err(MapError::InvalidMapType{ map_type: map.into()}), + _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), } } } @@ -384,7 +405,7 @@ macro_rules! impl_try_from_map_generic_key_and_value { Map::$ty(m) => { $ty::new(m) }, - _ => Err(MapError::InvalidMapType{ map_type: map.into()}), + _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), } } } @@ -397,7 +418,7 @@ macro_rules! impl_try_from_map_generic_key_and_value { Map::$ty(m) => { $ty::new(m) }, - _ => Err(MapError::InvalidMapType{ map_type: map.into()}), + _ => Err(MapError::InvalidMapType{ map_type: map.map_type()}), } } } @@ -758,34 +779,6 @@ impl TryFrom for bpf_map_type { } } -macro_rules! impl_try_from_map_generic_key_or_value { - ($($typ:ty),+ $(,)?) => { - $( - impl From<$typ> for u32 { - fn from(map_type: $typ) -> u32 { - match map_type { - Map::Array(map) => map.obj.map_type(), - Map::PerCpuArray(map) => map.obj.map_type(), - Map::ProgramArray(map) => map.obj.map_type(), - Map::HashMap(map) => map.obj.map_type(), - Map::PerCpuHashMap(map) => map.obj.map_type(), - Map::PerfEventArray(map) => map.obj.map_type(), - Map::SockHash(map) => map.obj.map_type(), - Map::SockMap(map) => map.obj.map_type(), - Map::BloomFilter(map) => map.obj.map_type(), - Map::LpmTrie(map) => map.obj.map_type(), - Map::Stack(map) => map.obj.map_type(), - Map::StackTraceMap(map) => map.obj.map_type(), - Map::Queue(map) => map.obj.map_type(), - } - } - } - )+ - } -} - -impl_try_from_map_generic_key_or_value!(&Map, &mut Map, Map); - pub(crate) struct PerCpuKernelMem { bytes: Vec, }