|  |  |  | @ -1,16 +1,16 @@ | 
		
	
		
			
				|  |  |  |  | use std::path::{Path, PathBuf}; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | use anyhow::anyhow; | 
		
	
		
			
				|  |  |  |  | use anyhow::{Context as _, Result}; | 
		
	
		
			
				|  |  |  |  | use aya_tool::{bindgen, write_to_file}; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | use crate::codegen::{Architecture, SysrootOptions}; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | pub fn codegen(opts: &SysrootOptions, libbpf_dir: &Path) -> Result<(), anyhow::Error> { | 
		
	
		
			
				|  |  |  |  | pub fn codegen(opts: &SysrootOptions, libbpf_dir: &Path) -> Result<()> { | 
		
	
		
			
				|  |  |  |  |     codegen_internal_btf_bindings(libbpf_dir)?; | 
		
	
		
			
				|  |  |  |  |     codegen_bindings(opts, libbpf_dir) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | fn codegen_internal_btf_bindings(libbpf_dir: &Path) -> Result<(), anyhow::Error> { | 
		
	
		
			
				|  |  |  |  | fn codegen_internal_btf_bindings(libbpf_dir: &Path) -> Result<()> { | 
		
	
		
			
				|  |  |  |  |     let dir = PathBuf::from("aya-obj"); | 
		
	
		
			
				|  |  |  |  |     let generated = dir.join("src/generated"); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -26,10 +26,7 @@ fn codegen_internal_btf_bindings(libbpf_dir: &Path) -> Result<(), anyhow::Error> | 
		
	
		
			
				|  |  |  |  |         bindgen = bindgen.allowlist_type(x); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     let bindings = bindgen | 
		
	
		
			
				|  |  |  |  |         .generate() | 
		
	
		
			
				|  |  |  |  |         .map_err(|op| anyhow!("bindgen failed - {op}"))? | 
		
	
		
			
				|  |  |  |  |         .to_string(); | 
		
	
		
			
				|  |  |  |  |     let bindings = bindgen.generate().context("bindgen failed")?.to_string(); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     // write the bindings, with the original helpers removed
 | 
		
	
		
			
				|  |  |  |  |     write_to_file(generated.join("btf_internal_bindings.rs"), &bindings)?; | 
		
	
	
		
			
				
					|  |  |  | @ -37,7 +34,7 @@ fn codegen_internal_btf_bindings(libbpf_dir: &Path) -> Result<(), anyhow::Error> | 
		
	
		
			
				|  |  |  |  |     Ok(()) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | fn codegen_bindings(opts: &SysrootOptions, libbpf_dir: &Path) -> Result<(), anyhow::Error> { | 
		
	
		
			
				|  |  |  |  | fn codegen_bindings(opts: &SysrootOptions, libbpf_dir: &Path) -> Result<()> { | 
		
	
		
			
				|  |  |  |  |     let SysrootOptions { | 
		
	
		
			
				|  |  |  |  |         x86_64_sysroot, | 
		
	
		
			
				|  |  |  |  |         aarch64_sysroot, | 
		
	
	
		
			
				
					|  |  |  | @ -47,130 +44,151 @@ fn codegen_bindings(opts: &SysrootOptions, libbpf_dir: &Path) -> Result<(), anyh | 
		
	
		
			
				|  |  |  |  |         s390x_sysroot, | 
		
	
		
			
				|  |  |  |  |         mips_sysroot, | 
		
	
		
			
				|  |  |  |  |     } = opts; | 
		
	
		
			
				|  |  |  |  |     let types = [ | 
		
	
		
			
				|  |  |  |  |         // BPF
 | 
		
	
		
			
				|  |  |  |  |         "BPF_TYPES", | 
		
	
		
			
				|  |  |  |  |         "bpf_cmd", | 
		
	
		
			
				|  |  |  |  |         "bpf_insn", | 
		
	
		
			
				|  |  |  |  |         "bpf_attr", | 
		
	
		
			
				|  |  |  |  |         "bpf_map_type", | 
		
	
		
			
				|  |  |  |  |         "bpf_prog_type", | 
		
	
		
			
				|  |  |  |  |         "bpf_attach_type", | 
		
	
		
			
				|  |  |  |  |         "bpf_prog_info", | 
		
	
		
			
				|  |  |  |  |         "bpf_map_info", | 
		
	
		
			
				|  |  |  |  |         "bpf_link_info", | 
		
	
		
			
				|  |  |  |  |         "bpf_link_type", | 
		
	
		
			
				|  |  |  |  |         "bpf_btf_info", | 
		
	
		
			
				|  |  |  |  |         "bpf_func_id", | 
		
	
		
			
				|  |  |  |  |         "bpf_func_info", | 
		
	
		
			
				|  |  |  |  |         "bpf_line_info", | 
		
	
		
			
				|  |  |  |  |         "bpf_lpm_trie_key", | 
		
	
		
			
				|  |  |  |  |         "bpf_cpumap_val", | 
		
	
		
			
				|  |  |  |  |         "bpf_devmap_val", | 
		
	
		
			
				|  |  |  |  |         "bpf_stats_type", | 
		
	
		
			
				|  |  |  |  |         "bpf_perf_event_type", | 
		
	
		
			
				|  |  |  |  |         "bpf_task_fd_type", | 
		
	
		
			
				|  |  |  |  |         // BTF
 | 
		
	
		
			
				|  |  |  |  |         "btf_header", | 
		
	
		
			
				|  |  |  |  |         "btf_ext_info", | 
		
	
		
			
				|  |  |  |  |         "btf_ext_info_sec", | 
		
	
		
			
				|  |  |  |  |         "btf_type", | 
		
	
		
			
				|  |  |  |  |         "btf_enum", | 
		
	
		
			
				|  |  |  |  |         "btf_array", | 
		
	
		
			
				|  |  |  |  |         "btf_member", | 
		
	
		
			
				|  |  |  |  |         "btf_param", | 
		
	
		
			
				|  |  |  |  |         "btf_var", | 
		
	
		
			
				|  |  |  |  |         "btf_var_secinfo", | 
		
	
		
			
				|  |  |  |  |         "btf_func_linkage", | 
		
	
		
			
				|  |  |  |  |         "btf_decl_tag", | 
		
	
		
			
				|  |  |  |  |         // PERF
 | 
		
	
		
			
				|  |  |  |  |         "perf_event_attr", | 
		
	
		
			
				|  |  |  |  |         "perf_sw_ids", | 
		
	
		
			
				|  |  |  |  |         "perf_hw_id", | 
		
	
		
			
				|  |  |  |  |         "perf_hw_cache_id", | 
		
	
		
			
				|  |  |  |  |         "perf_hw_cache_op_id", | 
		
	
		
			
				|  |  |  |  |         "perf_hw_cache_op_result_id", | 
		
	
		
			
				|  |  |  |  |         "perf_event_sample_format", | 
		
	
		
			
				|  |  |  |  |         "perf_event_mmap_page", | 
		
	
		
			
				|  |  |  |  |         "perf_event_header", | 
		
	
		
			
				|  |  |  |  |         "perf_type_id", | 
		
	
		
			
				|  |  |  |  |         "perf_event_type", | 
		
	
		
			
				|  |  |  |  |         // NETLINK
 | 
		
	
		
			
				|  |  |  |  |         "ifinfomsg", | 
		
	
		
			
				|  |  |  |  |         "tcmsg", | 
		
	
		
			
				|  |  |  |  |         "nlmsgerr_attrs", | 
		
	
		
			
				|  |  |  |  |         // ITER
 | 
		
	
		
			
				|  |  |  |  |         "bpf_cgroup_iter_order", | 
		
	
		
			
				|  |  |  |  |         // NETFILTER
 | 
		
	
		
			
				|  |  |  |  |         "nf_inet_hooks", | 
		
	
		
			
				|  |  |  |  |     ]; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     let vars = [ | 
		
	
		
			
				|  |  |  |  |         // BPF
 | 
		
	
		
			
				|  |  |  |  |         "BPF_PSEUDO_.*", | 
		
	
		
			
				|  |  |  |  |         "BPF_ALU", | 
		
	
		
			
				|  |  |  |  |         "BPF_ALU64", | 
		
	
		
			
				|  |  |  |  |         "BPF_LDX", | 
		
	
		
			
				|  |  |  |  |         "BPF_ST", | 
		
	
		
			
				|  |  |  |  |         "BPF_STX", | 
		
	
		
			
				|  |  |  |  |         "BPF_LD", | 
		
	
		
			
				|  |  |  |  |         "BPF_K", | 
		
	
		
			
				|  |  |  |  |         "BPF_X", | 
		
	
		
			
				|  |  |  |  |         "BPF_DW", | 
		
	
		
			
				|  |  |  |  |         "BPF_W", | 
		
	
		
			
				|  |  |  |  |         "BPF_H", | 
		
	
		
			
				|  |  |  |  |         "BPF_B", | 
		
	
		
			
				|  |  |  |  |         "BPF_IMM", | 
		
	
		
			
				|  |  |  |  |         "BPF_MEM", | 
		
	
		
			
				|  |  |  |  |         "BPF_SUB", | 
		
	
		
			
				|  |  |  |  |         "BPF_MOV", | 
		
	
		
			
				|  |  |  |  |         "BPF_F_.*", | 
		
	
		
			
				|  |  |  |  |         "BPF_JMP", | 
		
	
		
			
				|  |  |  |  |         "BPF_CALL", | 
		
	
		
			
				|  |  |  |  |         "BPF_EXIT", | 
		
	
		
			
				|  |  |  |  |         "SO_ATTACH_BPF", | 
		
	
		
			
				|  |  |  |  |         "SO_DETACH_BPF", | 
		
	
		
			
				|  |  |  |  |         // BTF
 | 
		
	
		
			
				|  |  |  |  |         "BTF_INT_.*", | 
		
	
		
			
				|  |  |  |  |         "BTF_KIND_.*", | 
		
	
		
			
				|  |  |  |  |         "BTF_VAR_.*", | 
		
	
		
			
				|  |  |  |  |         // PERF
 | 
		
	
		
			
				|  |  |  |  |         "PERF_FLAG_.*", | 
		
	
		
			
				|  |  |  |  |         "PERF_EVENT_.*", | 
		
	
		
			
				|  |  |  |  |         "PERF_MAX_.*", | 
		
	
		
			
				|  |  |  |  |         // NETLINK
 | 
		
	
		
			
				|  |  |  |  |         "NLMSG_ALIGNTO", | 
		
	
		
			
				|  |  |  |  |         "IFLA_XDP_FD", | 
		
	
		
			
				|  |  |  |  |         "TCA_KIND", | 
		
	
		
			
				|  |  |  |  |         "TCA_OPTIONS", | 
		
	
		
			
				|  |  |  |  |         "TCA_BPF_FD", | 
		
	
		
			
				|  |  |  |  |         "TCA_BPF_NAME", | 
		
	
		
			
				|  |  |  |  |         "TCA_BPF_FLAGS", | 
		
	
		
			
				|  |  |  |  |         "TCA_BPF_FLAG_ACT_DIRECT", | 
		
	
		
			
				|  |  |  |  |         "XDP_FLAGS_.*", | 
		
	
		
			
				|  |  |  |  |         "TC_H_MAJ_MASK", | 
		
	
		
			
				|  |  |  |  |         "TC_H_MIN_MASK", | 
		
	
		
			
				|  |  |  |  |         "TC_H_UNSPEC", | 
		
	
		
			
				|  |  |  |  |         "TC_H_ROOT", | 
		
	
		
			
				|  |  |  |  |         "TC_H_INGRESS", | 
		
	
		
			
				|  |  |  |  |         "TC_H_CLSACT", | 
		
	
		
			
				|  |  |  |  |         "TC_H_MIN_PRIORITY", | 
		
	
		
			
				|  |  |  |  |         "TC_H_MIN_INGRESS", | 
		
	
		
			
				|  |  |  |  |         "TC_H_MIN_EGRESS", | 
		
	
		
			
				|  |  |  |  |         // Ringbuf
 | 
		
	
		
			
				|  |  |  |  |         "BPF_RINGBUF_.*", | 
		
	
		
			
				|  |  |  |  |         // NETFILTER
 | 
		
	
		
			
				|  |  |  |  |         "NFPROTO_.*", | 
		
	
		
			
				|  |  |  |  |     ]; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     let dir = PathBuf::from("aya-obj"); | 
		
	
		
			
				|  |  |  |  |     let generated = dir.join("src/generated"); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     let builder = || { | 
		
	
		
			
				|  |  |  |  |         bindgen::user_builder() | 
		
	
		
			
				|  |  |  |  |         let mut bindgen = bindgen::user_builder() | 
		
	
		
			
				|  |  |  |  |             .header(dir.join("include/linux_wrapper.h").to_str().unwrap()) | 
		
	
		
			
				|  |  |  |  |             .clang_args(["-I", libbpf_dir.join("include/uapi").to_str().unwrap()]) | 
		
	
		
			
				|  |  |  |  |             .clang_args(["-I", libbpf_dir.join("include").to_str().unwrap()]) | 
		
	
		
			
				|  |  |  |  |             // BPF_F_LINK is defined twice. Once in an anonymous enum
 | 
		
	
		
			
				|  |  |  |  |             // which bindgen will constify, and once via #define macro
 | 
		
	
		
			
				|  |  |  |  |             // which generates a duplicate const.
 | 
		
	
		
			
				|  |  |  |  |             .blocklist_var("BPF_F_LINK") | 
		
	
		
			
				|  |  |  |  |             .constified_enum("BPF_F_.*") | 
		
	
		
			
				|  |  |  |  |             .constified_enum("BTF_KIND_.*") | 
		
	
		
			
				|  |  |  |  |             .constified_enum("BTF_VAR_.*") | 
		
	
		
			
				|  |  |  |  |             .constified_enum("IFLA_.*") | 
		
	
		
			
				|  |  |  |  |             .constified_enum("TCA_.*") | 
		
	
		
			
				|  |  |  |  |             .constified_enum("BPF_RINGBUF_.*") | 
		
	
		
			
				|  |  |  |  |             // NETFILTER
 | 
		
	
		
			
				|  |  |  |  |             .constified_enum("NFPROTO_.*"); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         let types = [ | 
		
	
		
			
				|  |  |  |  |             // BPF
 | 
		
	
		
			
				|  |  |  |  |             "bpf_cmd", | 
		
	
		
			
				|  |  |  |  |             "bpf_insn", | 
		
	
		
			
				|  |  |  |  |             "bpf_attr", | 
		
	
		
			
				|  |  |  |  |             "bpf_map_type", | 
		
	
		
			
				|  |  |  |  |             "bpf_prog_type", | 
		
	
		
			
				|  |  |  |  |             "bpf_attach_type", | 
		
	
		
			
				|  |  |  |  |             "bpf_prog_info", | 
		
	
		
			
				|  |  |  |  |             "bpf_map_info", | 
		
	
		
			
				|  |  |  |  |             "bpf_link_info", | 
		
	
		
			
				|  |  |  |  |             "bpf_link_type", | 
		
	
		
			
				|  |  |  |  |             "bpf_btf_info", | 
		
	
		
			
				|  |  |  |  |             "bpf_func_id", | 
		
	
		
			
				|  |  |  |  |             "bpf_func_info", | 
		
	
		
			
				|  |  |  |  |             "bpf_line_info", | 
		
	
		
			
				|  |  |  |  |             "bpf_lpm_trie_key", | 
		
	
		
			
				|  |  |  |  |             "bpf_cpumap_val", | 
		
	
		
			
				|  |  |  |  |             "bpf_devmap_val", | 
		
	
		
			
				|  |  |  |  |             "bpf_stats_type", | 
		
	
		
			
				|  |  |  |  |             "bpf_perf_event_type", | 
		
	
		
			
				|  |  |  |  |             "bpf_task_fd_type", | 
		
	
		
			
				|  |  |  |  |             // BTF
 | 
		
	
		
			
				|  |  |  |  |             "btf_header", | 
		
	
		
			
				|  |  |  |  |             "btf_ext_info", | 
		
	
		
			
				|  |  |  |  |             "btf_ext_info_sec", | 
		
	
		
			
				|  |  |  |  |             "btf_type", | 
		
	
		
			
				|  |  |  |  |             "btf_enum", | 
		
	
		
			
				|  |  |  |  |             "btf_array", | 
		
	
		
			
				|  |  |  |  |             "btf_member", | 
		
	
		
			
				|  |  |  |  |             "btf_param", | 
		
	
		
			
				|  |  |  |  |             "btf_var", | 
		
	
		
			
				|  |  |  |  |             "btf_var_secinfo", | 
		
	
		
			
				|  |  |  |  |             "btf_func_linkage", | 
		
	
		
			
				|  |  |  |  |             "btf_decl_tag", | 
		
	
		
			
				|  |  |  |  |             // PERF
 | 
		
	
		
			
				|  |  |  |  |             "perf_event_attr", | 
		
	
		
			
				|  |  |  |  |             "perf_sw_ids", | 
		
	
		
			
				|  |  |  |  |             "perf_hw_id", | 
		
	
		
			
				|  |  |  |  |             "perf_hw_cache_id", | 
		
	
		
			
				|  |  |  |  |             "perf_hw_cache_op_id", | 
		
	
		
			
				|  |  |  |  |             "perf_hw_cache_op_result_id", | 
		
	
		
			
				|  |  |  |  |             "perf_event_sample_format", | 
		
	
		
			
				|  |  |  |  |             "perf_event_mmap_page", | 
		
	
		
			
				|  |  |  |  |             "perf_event_header", | 
		
	
		
			
				|  |  |  |  |             "perf_type_id", | 
		
	
		
			
				|  |  |  |  |             "perf_event_type", | 
		
	
		
			
				|  |  |  |  |             // NETLINK
 | 
		
	
		
			
				|  |  |  |  |             "ifinfomsg", | 
		
	
		
			
				|  |  |  |  |             "tcmsg", | 
		
	
		
			
				|  |  |  |  |             "nlmsgerr_attrs", | 
		
	
		
			
				|  |  |  |  |             // ITER
 | 
		
	
		
			
				|  |  |  |  |             "bpf_cgroup_iter_order", | 
		
	
		
			
				|  |  |  |  |             // NETFILTER
 | 
		
	
		
			
				|  |  |  |  |             "nf_inet_hooks", | 
		
	
		
			
				|  |  |  |  |         ]; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         let vars = [ | 
		
	
		
			
				|  |  |  |  |             // BPF
 | 
		
	
		
			
				|  |  |  |  |             "BPF_PSEUDO_.*", | 
		
	
		
			
				|  |  |  |  |             "BPF_ALU", | 
		
	
		
			
				|  |  |  |  |             "BPF_ALU64", | 
		
	
		
			
				|  |  |  |  |             "BPF_LDX", | 
		
	
		
			
				|  |  |  |  |             "BPF_ST", | 
		
	
		
			
				|  |  |  |  |             "BPF_STX", | 
		
	
		
			
				|  |  |  |  |             "BPF_LD", | 
		
	
		
			
				|  |  |  |  |             "BPF_K", | 
		
	
		
			
				|  |  |  |  |             "BPF_X", | 
		
	
		
			
				|  |  |  |  |             "BPF_DW", | 
		
	
		
			
				|  |  |  |  |             "BPF_W", | 
		
	
		
			
				|  |  |  |  |             "BPF_H", | 
		
	
		
			
				|  |  |  |  |             "BPF_B", | 
		
	
		
			
				|  |  |  |  |             "BPF_IMM", | 
		
	
		
			
				|  |  |  |  |             "BPF_MEM", | 
		
	
		
			
				|  |  |  |  |             "BPF_SUB", | 
		
	
		
			
				|  |  |  |  |             "BPF_MOV", | 
		
	
		
			
				|  |  |  |  |             "BPF_F_.*", | 
		
	
		
			
				|  |  |  |  |             "BPF_JMP", | 
		
	
		
			
				|  |  |  |  |             "BPF_CALL", | 
		
	
		
			
				|  |  |  |  |             "BPF_EXIT", | 
		
	
		
			
				|  |  |  |  |             "SO_ATTACH_BPF", | 
		
	
		
			
				|  |  |  |  |             "SO_DETACH_BPF", | 
		
	
		
			
				|  |  |  |  |             // BTF
 | 
		
	
		
			
				|  |  |  |  |             "BTF_INT_.*", | 
		
	
		
			
				|  |  |  |  |             "BTF_KIND_.*", | 
		
	
		
			
				|  |  |  |  |             "BTF_VAR_.*", | 
		
	
		
			
				|  |  |  |  |             // PERF
 | 
		
	
		
			
				|  |  |  |  |             "PERF_FLAG_.*", | 
		
	
		
			
				|  |  |  |  |             "PERF_EVENT_.*", | 
		
	
		
			
				|  |  |  |  |             "PERF_MAX_.*", | 
		
	
		
			
				|  |  |  |  |             // NETLINK
 | 
		
	
		
			
				|  |  |  |  |             "NLMSG_ALIGNTO", | 
		
	
		
			
				|  |  |  |  |             "IFLA_XDP_FD", | 
		
	
		
			
				|  |  |  |  |             "TCA_KIND", | 
		
	
		
			
				|  |  |  |  |             "TCA_OPTIONS", | 
		
	
		
			
				|  |  |  |  |             "TCA_BPF_FD", | 
		
	
		
			
				|  |  |  |  |             "TCA_BPF_NAME", | 
		
	
		
			
				|  |  |  |  |             "TCA_BPF_FLAGS", | 
		
	
		
			
				|  |  |  |  |             "TCA_BPF_FLAG_ACT_DIRECT", | 
		
	
		
			
				|  |  |  |  |             "XDP_FLAGS_.*", | 
		
	
		
			
				|  |  |  |  |             "TC_H_MAJ_MASK", | 
		
	
		
			
				|  |  |  |  |             "TC_H_MIN_MASK", | 
		
	
		
			
				|  |  |  |  |             "TC_H_UNSPEC", | 
		
	
		
			
				|  |  |  |  |             "TC_H_ROOT", | 
		
	
		
			
				|  |  |  |  |             "TC_H_INGRESS", | 
		
	
		
			
				|  |  |  |  |             "TC_H_CLSACT", | 
		
	
		
			
				|  |  |  |  |             "TC_H_MIN_PRIORITY", | 
		
	
		
			
				|  |  |  |  |             "TC_H_MIN_INGRESS", | 
		
	
		
			
				|  |  |  |  |             "TC_H_MIN_EGRESS", | 
		
	
		
			
				|  |  |  |  |             // Ringbuf
 | 
		
	
		
			
				|  |  |  |  |             "BPF_RINGBUF_.*", | 
		
	
		
			
				|  |  |  |  |             // NETFILTER
 | 
		
	
		
			
				|  |  |  |  |             "NFPROTO_.*", | 
		
	
		
			
				|  |  |  |  |         ]; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         for x in &types { | 
		
	
		
			
				|  |  |  |  |             bindgen = bindgen.allowlist_type(x); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         for x in &vars { | 
		
	
		
			
				|  |  |  |  |             bindgen = bindgen.allowlist_var(x); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         bindgen | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     for arch in Architecture::supported() { | 
		
	
	
		
			
				
					|  |  |  | @ -202,38 +220,7 @@ fn codegen_bindings(opts: &SysrootOptions, libbpf_dir: &Path) -> Result<(), anyh | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         bindgen = bindgen.clang_args(["-I", sysroot.to_str().unwrap()]); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         for x in &types { | 
		
	
		
			
				|  |  |  |  |             bindgen = bindgen.allowlist_type(x); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         for x in &vars { | 
		
	
		
			
				|  |  |  |  |             bindgen = bindgen | 
		
	
		
			
				|  |  |  |  |                 .allowlist_var(x) | 
		
	
		
			
				|  |  |  |  |                 // BPF_F_LINK is defined twice. Once in an anonymous enum
 | 
		
	
		
			
				|  |  |  |  |                 // which bindgen will constify, and once via #define macro
 | 
		
	
		
			
				|  |  |  |  |                 // which generates a duplicate const.
 | 
		
	
		
			
				|  |  |  |  |                 .blocklist_var("BPF_F_LINK") | 
		
	
		
			
				|  |  |  |  |                 .constified_enum("BPF_F_.*") | 
		
	
		
			
				|  |  |  |  |                 .constified_enum("BTF_KIND_.*") | 
		
	
		
			
				|  |  |  |  |                 .constified_enum("BTF_VAR_.*") | 
		
	
		
			
				|  |  |  |  |                 .constified_enum("IFLA_.*") | 
		
	
		
			
				|  |  |  |  |                 .constified_enum("TCA_.*") | 
		
	
		
			
				|  |  |  |  |                 .constified_enum("BPF_RINGBUF_.*") | 
		
	
		
			
				|  |  |  |  |                 // NETFILTER
 | 
		
	
		
			
				|  |  |  |  |                 .constified_enum("NFPROTO_.*"); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         for x in &types { | 
		
	
		
			
				|  |  |  |  |             bindgen = bindgen.allowlist_type(x); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         for x in &vars { | 
		
	
		
			
				|  |  |  |  |             bindgen = bindgen.allowlist_var(x); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         let bindings = bindgen | 
		
	
		
			
				|  |  |  |  |             .generate() | 
		
	
		
			
				|  |  |  |  |             .map_err(|op| anyhow!("bindgen failed - {op}"))? | 
		
	
		
			
				|  |  |  |  |             .to_string(); | 
		
	
		
			
				|  |  |  |  |         let bindings = bindgen.generate().context("bindgen failed")?.to_string(); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         // write the bindings, with the original helpers removed
 | 
		
	
		
			
				|  |  |  |  |         write_to_file( | 
		
	
	
		
			
				
					|  |  |  | 
 |