Skip to content

Commit 47a727d

Browse files
d-e-s-odanielocfb
authored andcommitted
Adjust gen_bpf_object_iter to use const* bpf_object
There is seemingly no need for the gen_bpf_object_iter macro to work with a mutable bpf_object pointer. Use a const one instead and simplify a bunch of code in the process. Signed-off-by: Daniel Müller <[email protected]>
1 parent 373de77 commit 47a727d

File tree

1 file changed

+51
-60
lines changed

1 file changed

+51
-60
lines changed

libbpf-cargo/src/gen/mod.rs

Lines changed: 51 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ pub(crate) struct BpfObj(ptr::NonNull<libbpf_sys::bpf_object>);
7676

7777
impl BpfObj {
7878
#[inline]
79-
pub fn as_mut_ptr(&mut self) -> *mut libbpf_sys::bpf_object {
79+
pub fn as_ptr(&self) -> *const libbpf_sys::bpf_object {
8080
self.0.as_ptr()
8181
}
8282
}
@@ -92,7 +92,7 @@ impl Deref for BpfObj {
9292

9393
impl Drop for BpfObj {
9494
fn drop(&mut self) {
95-
unsafe { libbpf_sys::bpf_object__close(self.as_mut_ptr()) }
95+
unsafe { libbpf_sys::bpf_object__close(self.0.as_ptr()) }
9696
}
9797
}
9898

@@ -109,12 +109,12 @@ pub enum OutputDest<'a> {
109109
macro_rules! gen_bpf_object_iter {
110110
($name:ident, $iter_ty:ty, $next_fn:expr) => {
111111
struct $name {
112-
obj: *mut libbpf_sys::bpf_object,
112+
obj: *const libbpf_sys::bpf_object,
113113
last: *mut $iter_ty,
114114
}
115115

116116
impl $name {
117-
fn new(obj: *mut libbpf_sys::bpf_object) -> $name {
117+
fn new(obj: *const libbpf_sys::bpf_object) -> $name {
118118
$name {
119119
obj,
120120
last: ptr::null_mut(),
@@ -278,7 +278,7 @@ fn map_is_readonly(map: *const libbpf_sys::bpf_map) -> bool {
278278
(unsafe { libbpf_sys::bpf_map__map_flags(map) } & libbpf_sys::BPF_F_RDONLY_PROG) > 0
279279
}
280280

281-
fn gen_skel_c_skel_constructor(skel: &mut String, object: &mut BpfObj, name: &str) -> Result<()> {
281+
fn gen_skel_c_skel_constructor(skel: &mut String, object: &BpfObj, name: &str) -> Result<()> {
282282
write!(
283283
skel,
284284
r#"
@@ -290,7 +290,7 @@ fn gen_skel_c_skel_constructor(skel: &mut String, object: &mut BpfObj, name: &st
290290
"#,
291291
)?;
292292

293-
for map in MapIter::new(object.as_mut_ptr()) {
293+
for map in MapIter::new(object.as_ptr()) {
294294
let raw_name = get_raw_map_name(map)?;
295295
let mmaped = if map_is_mmapable(map) {
296296
"true"
@@ -306,7 +306,7 @@ fn gen_skel_c_skel_constructor(skel: &mut String, object: &mut BpfObj, name: &st
306306
)?;
307307
}
308308

309-
for prog in ProgIter::new(object.as_mut_ptr()) {
309+
for prog in ProgIter::new(object.as_ptr()) {
310310
let name = get_prog_name(prog)?;
311311

312312
write!(
@@ -330,14 +330,9 @@ fn gen_skel_c_skel_constructor(skel: &mut String, object: &mut BpfObj, name: &st
330330
Ok(())
331331
}
332332

333-
fn gen_skel_map_defs(
334-
skel: &mut String,
335-
object: &mut BpfObj,
336-
obj_name: &str,
337-
open: bool,
338-
) -> Result<()> {
333+
fn gen_skel_map_defs(skel: &mut String, object: &BpfObj, obj_name: &str, open: bool) -> Result<()> {
339334
let mut gen = |mutable| -> Result<()> {
340-
if MapIter::new(object.as_mut_ptr()).next().is_none() {
335+
if MapIter::new(object.as_ptr()).next().is_none() {
341336
return Ok(());
342337
}
343338

@@ -372,7 +367,7 @@ fn gen_skel_map_defs(
372367
"#,
373368
)?;
374369

375-
for map in MapIter::new(object.as_mut_ptr()) {
370+
for map in MapIter::new(object.as_ptr()) {
376371
let map_name = match get_map_name(map)? {
377372
Some(n) => n,
378373
None => continue,
@@ -405,12 +400,12 @@ fn gen_skel_map_defs(
405400

406401
fn gen_skel_prog_defs(
407402
skel: &mut String,
408-
object: &mut BpfObj,
403+
object: &BpfObj,
409404
obj_name: &str,
410405
open: bool,
411406
mutable: bool,
412407
) -> Result<()> {
413-
if ProgIter::new(object.as_mut_ptr()).next().is_none() {
408+
if ProgIter::new(object.as_ptr()).next().is_none() {
414409
return Ok(());
415410
}
416411

@@ -445,7 +440,7 @@ fn gen_skel_prog_defs(
445440
"#,
446441
)?;
447442

448-
for prog in ProgIter::new(object.as_mut_ptr()) {
443+
for prog in ProgIter::new(object.as_ptr()) {
449444
write!(
450445
skel,
451446
r#"
@@ -515,12 +510,12 @@ pub struct struct_ops {{}}
515510

516511
fn gen_skel_map_getters(
517512
skel: &mut String,
518-
object: &mut BpfObj,
513+
object: &BpfObj,
519514
obj_name: &str,
520515
open: bool,
521516
) -> Result<()> {
522517
let mut gen = |mutable| -> Result<()> {
523-
if MapIter::new(object.as_mut_ptr()).next().is_none() {
518+
if MapIter::new(object.as_ptr()).next().is_none() {
524519
return Ok(());
525520
}
526521

@@ -555,12 +550,8 @@ fn gen_skel_map_getters(
555550
Ok(())
556551
}
557552

558-
fn gen_skel_struct_ops_getters(
559-
skel: &mut String,
560-
object: &mut BpfObj,
561-
obj_name: &str,
562-
) -> Result<()> {
563-
if MapIter::new(object.as_mut_ptr()).next().is_none() {
553+
fn gen_skel_struct_ops_getters(skel: &mut String, object: &BpfObj, obj_name: &str) -> Result<()> {
554+
if MapIter::new(object.as_ptr()).next().is_none() {
564555
return Ok(());
565556
}
566557

@@ -582,12 +573,12 @@ fn gen_skel_struct_ops_getters(
582573

583574
fn gen_skel_prog_getters(
584575
skel: &mut String,
585-
object: &mut BpfObj,
576+
object: &BpfObj,
586577
obj_name: &str,
587578
open: bool,
588579
) -> Result<()> {
589580
let mut gen = |mutable| -> Result<()> {
590-
if ProgIter::new(object.as_mut_ptr()).next().is_none() {
581+
if ProgIter::new(object.as_ptr()).next().is_none() {
591582
return Ok(());
592583
}
593584

@@ -624,11 +615,11 @@ fn gen_skel_prog_getters(
624615

625616
fn gen_skel_datasec_getters(
626617
skel: &mut String,
627-
object: &mut BpfObj,
618+
object: &BpfObj,
628619
obj_name: &str,
629620
loaded: bool,
630621
) -> Result<()> {
631-
for (idx, map) in MapIter::new(object.as_mut_ptr()).enumerate() {
622+
for (idx, map) in MapIter::new(object.as_ptr()).enumerate() {
632623
if !map_is_datasec(map) {
633624
continue;
634625
}
@@ -670,8 +661,8 @@ fn gen_skel_datasec_getters(
670661
Ok(())
671662
}
672663

673-
fn gen_skel_link_defs(skel: &mut String, object: &mut BpfObj, obj_name: &str) -> Result<()> {
674-
if ProgIter::new(object.as_mut_ptr()).next().is_none() {
664+
fn gen_skel_link_defs(skel: &mut String, object: &BpfObj, obj_name: &str) -> Result<()> {
665+
if ProgIter::new(object.as_ptr()).next().is_none() {
675666
return Ok(());
676667
}
677668

@@ -683,7 +674,7 @@ fn gen_skel_link_defs(skel: &mut String, object: &mut BpfObj, obj_name: &str) ->
683674
"#,
684675
)?;
685676

686-
for prog in ProgIter::new(object.as_mut_ptr()) {
677+
for prog in ProgIter::new(object.as_ptr()) {
687678
write!(
688679
skel,
689680
r#"pub {}: Option<libbpf_rs::Link>,
@@ -697,8 +688,8 @@ fn gen_skel_link_defs(skel: &mut String, object: &mut BpfObj, obj_name: &str) ->
697688
Ok(())
698689
}
699690

700-
fn gen_skel_link_getter(skel: &mut String, object: &mut BpfObj, obj_name: &str) -> Result<()> {
701-
if ProgIter::new(object.as_mut_ptr()).next().is_none() {
691+
fn gen_skel_link_getter(skel: &mut String, object: &BpfObj, obj_name: &str) -> Result<()> {
692+
if ProgIter::new(object.as_ptr()).next().is_none() {
702693
return Ok(());
703694
}
704695

@@ -730,8 +721,8 @@ fn open_bpf_object(name: &str, data: &[u8]) -> Result<BpfObj> {
730721
Ok(BpfObj(ptr::NonNull::new(object).unwrap()))
731722
}
732723

733-
fn gen_skel_attach(skel: &mut String, object: &mut BpfObj, obj_name: &str) -> Result<()> {
734-
if ProgIter::new(object.as_mut_ptr()).next().is_none() {
724+
fn gen_skel_attach(skel: &mut String, object: &BpfObj, obj_name: &str) -> Result<()> {
725+
if ProgIter::new(object.as_ptr()).next().is_none() {
735726
return Ok(());
736727
}
737728

@@ -748,7 +739,7 @@ fn gen_skel_attach(skel: &mut String, object: &mut BpfObj, obj_name: &str) -> Re
748739
"#,
749740
)?;
750741

751-
for (idx, prog) in ProgIter::new(object.as_mut_ptr()).enumerate() {
742+
for (idx, prog) in ProgIter::new(object.as_ptr()).enumerate() {
752743
let prog_name = get_prog_name(prog)?;
753744

754745
write!(
@@ -772,10 +763,10 @@ fn gen_skel_attach(skel: &mut String, object: &mut BpfObj, obj_name: &str) -> Re
772763
Ok(())
773764
}
774765

775-
fn gen_skel_struct_ops_init(object: &mut BpfObj) -> Result<String> {
766+
fn gen_skel_struct_ops_init(object: &BpfObj) -> Result<String> {
776767
let mut def = String::new();
777768

778-
for map in MapIter::new(object.as_mut_ptr()) {
769+
for map in MapIter::new(object.as_ptr()) {
779770
let type_ = unsafe { libbpf_sys::bpf_map__type(map) };
780771
if type_ != libbpf_sys::BPF_MAP_TYPE_STRUCT_OPS {
781772
continue;
@@ -833,9 +824,9 @@ fn gen_skel_contents(_debug: bool, raw_obj_name: &str, obj_file_path: &Path) ->
833824
let file = File::open(obj_file_path)
834825
.with_context(|| format!("failed to open BPF object `{}`", obj_file_path.display()))?;
835826
let mmap = unsafe { Mmap::map(&file)? };
836-
let mut object = open_bpf_object(&libbpf_obj_name, &mmap)?;
827+
let object = open_bpf_object(&libbpf_obj_name, &mmap)?;
837828

838-
gen_skel_c_skel_constructor(&mut skel, &mut object, &libbpf_obj_name)?;
829+
gen_skel_c_skel_constructor(&mut skel, &object, &libbpf_obj_name)?;
839830

840831
#[allow(clippy::uninlined_format_args)]
841832
write!(
@@ -886,12 +877,12 @@ fn gen_skel_contents(_debug: bool, raw_obj_name: &str, obj_file_path: &Path) ->
886877
}}
887878
"#,
888879
name = obj_name,
889-
struct_ops_init = gen_skel_struct_ops_init(&mut object)?,
880+
struct_ops_init = gen_skel_struct_ops_init(&object)?,
890881
)?;
891882

892-
gen_skel_map_defs(&mut skel, &mut object, &obj_name, true)?;
893-
gen_skel_prog_defs(&mut skel, &mut object, &obj_name, true, false)?;
894-
gen_skel_prog_defs(&mut skel, &mut object, &obj_name, true, true)?;
883+
gen_skel_map_defs(&mut skel, &object, &obj_name, true)?;
884+
gen_skel_prog_defs(&mut skel, &object, &obj_name, true, false)?;
885+
gen_skel_prog_defs(&mut skel, &object, &obj_name, true, true)?;
895886
write!(
896887
skel,
897888
r#"
@@ -941,7 +932,7 @@ fn gen_skel_contents(_debug: bool, raw_obj_name: &str, obj_file_path: &Path) ->
941932
}}
942933
"#,
943934
name = &obj_name,
944-
links = if ProgIter::new(object.as_mut_ptr()).next().is_some() {
935+
links = if ProgIter::new(object.as_ptr()).next().is_some() {
945936
format!(r#"links: {obj_name}Links::default()"#)
946937
} else {
947938
"".to_string()
@@ -950,15 +941,15 @@ fn gen_skel_contents(_debug: bool, raw_obj_name: &str, obj_file_path: &Path) ->
950941
writeln!(skel, "}}")?;
951942
writeln!(skel, "impl Open{name}Skel<'_> {{", name = &obj_name)?;
952943

953-
gen_skel_prog_getters(&mut skel, &mut object, &obj_name, true)?;
954-
gen_skel_map_getters(&mut skel, &mut object, &obj_name, true)?;
955-
gen_skel_datasec_getters(&mut skel, &mut object, raw_obj_name, false)?;
944+
gen_skel_prog_getters(&mut skel, &object, &obj_name, true)?;
945+
gen_skel_map_getters(&mut skel, &object, &obj_name, true)?;
946+
gen_skel_datasec_getters(&mut skel, &object, raw_obj_name, false)?;
956947
writeln!(skel, "}}")?;
957948

958-
gen_skel_map_defs(&mut skel, &mut object, &obj_name, false)?;
959-
gen_skel_prog_defs(&mut skel, &mut object, &obj_name, false, false)?;
960-
gen_skel_prog_defs(&mut skel, &mut object, &obj_name, false, true)?;
961-
gen_skel_link_defs(&mut skel, &mut object, &obj_name)?;
949+
gen_skel_map_defs(&mut skel, &object, &obj_name, false)?;
950+
gen_skel_prog_defs(&mut skel, &object, &obj_name, false, false)?;
951+
gen_skel_prog_defs(&mut skel, &object, &obj_name, false, true)?;
952+
gen_skel_link_defs(&mut skel, &object, &obj_name)?;
962953

963954
write!(
964955
skel,
@@ -970,7 +961,7 @@ fn gen_skel_contents(_debug: bool, raw_obj_name: &str, obj_file_path: &Path) ->
970961
"#,
971962
name = &obj_name,
972963
)?;
973-
gen_skel_link_getter(&mut skel, &mut object, &obj_name)?;
964+
gen_skel_link_getter(&mut skel, &object, &obj_name)?;
974965
write!(
975966
skel,
976967
r#"
@@ -990,14 +981,14 @@ fn gen_skel_contents(_debug: bool, raw_obj_name: &str, obj_file_path: &Path) ->
990981
"#,
991982
name = &obj_name,
992983
)?;
993-
gen_skel_attach(&mut skel, &mut object, &obj_name)?;
984+
gen_skel_attach(&mut skel, &object, &obj_name)?;
994985
writeln!(skel, "}}")?;
995986

996987
write!(skel, "impl {name}Skel<'_> {{", name = &obj_name)?;
997-
gen_skel_prog_getters(&mut skel, &mut object, &obj_name, false)?;
998-
gen_skel_map_getters(&mut skel, &mut object, &obj_name, false)?;
999-
gen_skel_struct_ops_getters(&mut skel, &mut object, raw_obj_name)?;
1000-
gen_skel_datasec_getters(&mut skel, &mut object, raw_obj_name, true)?;
988+
gen_skel_prog_getters(&mut skel, &object, &obj_name, false)?;
989+
gen_skel_map_getters(&mut skel, &object, &obj_name, false)?;
990+
gen_skel_struct_ops_getters(&mut skel, &object, raw_obj_name)?;
991+
gen_skel_datasec_getters(&mut skel, &object, raw_obj_name, true)?;
1001992
writeln!(skel, "}}")?;
1002993

1003994
// Coerce to &[u8] just to be safe, as we'll be using debug formatting

0 commit comments

Comments
 (0)