fn init_ebpf_lib()

in proxy_agent/src/redirector/windows/bpf_api.rs [46:113]


fn init_ebpf_lib() -> Option<Library> {
    let program_files_dir = env::var("ProgramFiles").unwrap_or("C:\\Program Files".to_string());
    let program_files_dir = PathBuf::from(program_files_dir);
    let ebpf_for_windows_dir = program_files_dir.join("ebpf-for-windows");
    let bpf_api_file_path = ebpf_for_windows_dir.join(EBPF_API_FILE_NAME);
    logger::write_information(format!(
        "Try to load ebpf api file from: {}",
        misc_helpers::path_to_string(&bpf_api_file_path)
    ));
    match load_ebpf_api(&bpf_api_file_path) {
        Ok(ebpf_lib) => {
            if !EBPF_API_VERSION.initialized() {
                // fetch the product version of this dll
                match proxy_agent_shared::windows::get_file_product_version(&bpf_api_file_path) {
                    Ok(v) => {
                        if let Err(e) = EBPF_API_VERSION.set(v) {
                            event_logger::write_event(
                                LoggerLevel::Error,
                                format!("{}", e),
                                "EBPF_API_VERSION.set",
                                "redirector",
                                logger::AGENT_LOGGER_KEY,
                            );
                        }
                    }
                    Err(e) => {
                        event_logger::write_event(
                            LoggerLevel::Warn,
                            format!("{}", e),
                            "get_file_product_version",
                            "redirector",
                            logger::AGENT_LOGGER_KEY,
                        );
                    }
                }
            }

            return Some(ebpf_lib);
        }
        Err(e) => {
            event_logger::write_event(
                LoggerLevel::Warn,
                format!("{}", e),
                "load_ebpf_api",
                "redirector",
                logger::AGENT_LOGGER_KEY,
            );
        }
    }

    logger::write_warning("Try to load ebpf api file from default system path".to_string());
    match load_ebpf_api(&PathBuf::from(EBPF_API_FILE_NAME)) {
        Ok(ebpf_lib) => {
            return Some(ebpf_lib);
        }
        Err(e) => {
            event_logger::write_event(
                LoggerLevel::Warn,
                format!("{}", e),
                "load_ebpf_api",
                "redirector",
                logger::AGENT_LOGGER_KEY,
            );
        }
    }

    None
}