@ -409,8 +409,6 @@ pub(crate) fn check_v_size<V>(map: &MapData) -> Result<(), MapError> {
pub struct MapData {
obj : obj ::Map ,
fd : MapFd ,
/// Indicates if this map has been pinned to bpffs
pub pinned : bool ,
}
impl MapData {
@ -439,11 +437,7 @@ impl MapData {
}
} ) ? ;
let fd = MapFd ( fd ) ;
Ok ( Self {
obj ,
fd ,
pinned : false ,
} )
Ok ( Self { obj , fd } )
}
pub ( crate ) fn create_pinned < P : AsRef < Path > > (
@ -471,11 +465,7 @@ impl MapData {
} ) {
Ok ( fd ) = > {
let fd = MapFd ( fd ) ;
Ok ( Self {
obj ,
fd ,
pinned : false ,
} )
Ok ( Self { obj , fd } )
}
Err ( _ ) = > {
let mut map = Self ::create ( obj , name , btf_fd ) ? ;
@ -489,7 +479,7 @@ impl MapData {
}
pub ( crate ) fn finalize ( & mut self ) -> Result < ( ) , MapError > {
let Self { obj , fd , pinned : _ } = self ;
let Self { obj , fd } = self ;
if ! obj . data ( ) . is_empty ( ) & & obj . section_kind ( ) ! = BpfSectionKind ::Bss {
bpf_map_update_elem_ptr ( fd . as_fd ( ) , & 0 as * const _ , obj . data_mut ( ) . as_mut_ptr ( ) , 0 )
. map_err ( | ( _ , io_error ) | SyscallError {
@ -534,7 +524,6 @@ impl MapData {
Ok ( Self {
obj : parse_map_info ( info , PinningType ::ByName ) ,
fd ,
pinned : true ,
} )
}
@ -550,44 +539,35 @@ impl MapData {
Ok ( Self {
obj : parse_map_info ( info , PinningType ::None ) ,
fd ,
pinned : false ,
} )
}
pub ( crate ) fn pin < P : AsRef < Path > > ( & mut self , name : & str , path : P ) -> Result < ( ) , PinError > {
use std ::os ::unix ::ffi ::OsStrExt as _ ;
let Self { fd , pinned , obj : _ } = self ;
if * pinned {
return Err ( PinError ::AlreadyPinned { name : name . into ( ) } ) ;
}
let Self { fd , obj : _ } = self ;
let path = path . as_ref ( ) . join ( name ) ;
let path_string = CString ::new ( path . as_os_str ( ) . as_bytes ( ) )
. map_err ( | error | PinError ::InvalidPinPath { path , error } ) ? ;
let path_string = CString ::new ( path . as_os_str ( ) . as_bytes ( ) ) . map_err ( | error | {
PinError ::InvalidPinPath {
path : path . clone ( ) ,
error ,
}
} ) ? ;
bpf_pin_object ( fd . as_fd ( ) , & path_string ) . map_err ( | ( _ , io_error ) | SyscallError {
call : "BPF_OBJ_PIN" ,
io_error ,
} ) ? ;
* pinned = true ;
Ok ( ( ) )
}
/// Returns the file descriptor of the map.
pub fn fd ( & self ) -> & MapFd {
let Self {
obj : _ ,
fd ,
pinned : _ ,
} = self ;
let Self { obj : _ , fd } = self ;
fd
}
pub ( crate ) fn obj ( & self ) -> & obj ::Map {
let Self {
obj ,
fd : _ ,
pinned : _ ,
} = self ;
let Self { obj , fd : _ } = self ;
obj
}
}
@ -825,7 +805,6 @@ mod tests {
Ok ( MapData {
obj : _ ,
fd ,
pinned : false
} ) = > assert_eq! ( fd . as_fd ( ) . as_raw_fd ( ) , 42 )
) ;
}