From 46aad360b53145c73c8af861c48bd44be7aa71f7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 13 Nov 2025 17:40:55 +0000 Subject: [PATCH 1/4] Initial plan From 169363b9ae5cf1333a5d68a063b9c5db26aa0054 Mon Sep 17 00:00:00 2001 From: GitHub Copilot Date: Wed, 7 Jan 2026 17:07:00 +0000 Subject: [PATCH 2/4] Add BPF_F_TEST_XDP_LIVE_FRAMES flag support for XDP programs - Added compile-time check for flags field in bpf_test_run_opts structure - Set BPF_F_TEST_XDP_LIVE_FRAMES flag when running XDP programs on Linux - Fixed issue where programs fail with -EINVAL on latest upstream kernel - Similar approach to existing HAS_BPF_TEST_RUN_OPTS_BATCH_SIZE flag Signed-off-by: GitHub Copilot --- runner/CMakeLists.txt | 5 +++++ runner/runner.cc | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/runner/CMakeLists.txt b/runner/CMakeLists.txt index 05c7cd4..9dde04d 100644 --- a/runner/CMakeLists.txt +++ b/runner/CMakeLists.txt @@ -29,6 +29,11 @@ if (HAS_BPF_TEST_RUN_OPTS_BATCH_SIZE) add_compile_definitions(HAS_BPF_TEST_RUN_OPTS_BATCH_SIZE) endif() +Check_struct_has_member("bpf_test_run_opts" "flags" ${EBPF_INC_PATH}/bpf/bpf.h HAS_BPF_TEST_RUN_OPTS_FLAGS LANGUAGE CXX) +if (HAS_BPF_TEST_RUN_OPTS_FLAGS) + add_compile_definitions(HAS_BPF_TEST_RUN_OPTS_FLAGS) +endif() + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) diff --git a/runner/runner.cc b/runner/runner.cc index 81c0ec9..cc7fb21 100644 --- a/runner/runner.cc +++ b/runner/runner.cc @@ -14,6 +14,14 @@ #include #include +#if defined(__linux__) +#include +// Define BPF_F_TEST_XDP_LIVE_FRAMES if not already defined +#ifndef BPF_F_TEST_XDP_LIVE_FRAMES +#define BPF_F_TEST_XDP_LIVE_FRAMES (1U << 1) +#endif +#endif + // Define unique_ptr to call bpf_object__close on destruction struct bpf_object_deleter { @@ -209,6 +217,7 @@ main(int argc, char** argv) std::string elf_file = test["elf_file"].as(); int iteration_count = test["iteration_count"].as(); std::optional program_type; + bpf_prog_type actual_prog_type = DEFAULT_PROG_TYPE; int batch_size; bool pass_data = DEFAULT_PASS_DATA; bool pass_context = DEFAULT_PASS_CONTEXT; @@ -289,6 +298,7 @@ main(int argc, char** argv) prog_type = DEFAULT_PROG_TYPE; attach_type = DEFAULT_ATTACH_TYPE; } + actual_prog_type = prog_type; (void)bpf_program__set_type(program, prog_type); } @@ -344,6 +354,12 @@ main(int argc, char** argv) opts.ctx_size_in = static_cast(data_in.size()); opts.ctx_size_out = static_cast(data_out.size()); } +#if defined(HAS_BPF_TEST_RUN_OPTS_FLAGS) && defined(__linux__) + // Set BPF_F_TEST_XDP_LIVE_FRAMES flag for XDP programs on Linux + if (actual_prog_type == BPF_PROG_TYPE_XDP) { + opts.flags = BPF_F_TEST_XDP_LIVE_FRAMES; + } +#endif if (bpf_prog_test_run_opts(bpf_program__fd(map_state_preparation_program), &opts)) { throw std::runtime_error("Failed to run map_state_preparation program " + prep_program_name); @@ -458,6 +474,12 @@ main(int argc, char** argv) #if defined(HAS_BPF_TEST_RUN_OPTS_BATCH_SIZE) opt.batch_size = batch_size; #endif +#if defined(HAS_BPF_TEST_RUN_OPTS_FLAGS) && defined(__linux__) + // Set BPF_F_TEST_XDP_LIVE_FRAMES flag for XDP programs on Linux + if (actual_prog_type == BPF_PROG_TYPE_XDP) { + opt.flags = BPF_F_TEST_XDP_LIVE_FRAMES; + } +#endif int result = bpf_prog_test_run_opts(program, &opt); if (result < 0) { From 61ddb2c6c9cde34464b6bc1e3035ed8d3c1f6c8a Mon Sep 17 00:00:00 2001 From: GitHub Copilot Date: Wed, 7 Jan 2026 17:09:41 +0000 Subject: [PATCH 3/4] Use bitwise OR for flags field to preserve existing flags Addressed code review feedback to use |= operator instead of direct assignment for better future-proofing. Signed-off-by: GitHub Copilot --- runner/runner.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runner/runner.cc b/runner/runner.cc index cc7fb21..80252c8 100644 --- a/runner/runner.cc +++ b/runner/runner.cc @@ -357,7 +357,7 @@ main(int argc, char** argv) #if defined(HAS_BPF_TEST_RUN_OPTS_FLAGS) && defined(__linux__) // Set BPF_F_TEST_XDP_LIVE_FRAMES flag for XDP programs on Linux if (actual_prog_type == BPF_PROG_TYPE_XDP) { - opts.flags = BPF_F_TEST_XDP_LIVE_FRAMES; + opts.flags |= BPF_F_TEST_XDP_LIVE_FRAMES; } #endif @@ -477,7 +477,7 @@ main(int argc, char** argv) #if defined(HAS_BPF_TEST_RUN_OPTS_FLAGS) && defined(__linux__) // Set BPF_F_TEST_XDP_LIVE_FRAMES flag for XDP programs on Linux if (actual_prog_type == BPF_PROG_TYPE_XDP) { - opt.flags = BPF_F_TEST_XDP_LIVE_FRAMES; + opt.flags |= BPF_F_TEST_XDP_LIVE_FRAMES; } #endif From b9a9a04a91a9ee54f76fd1e0d12d8bfa2c5c7b70 Mon Sep 17 00:00:00 2001 From: GitHub Copilot Date: Wed, 7 Jan 2026 17:14:04 +0000 Subject: [PATCH 4/4] Update gitignore to exclude CodeQL build artifacts Signed-off-by: GitHub Copilot --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2bcde78..bc3cf27 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,6 @@ # SPDX-License-Identifier: MIT .vscode -build \ No newline at end of file +build +_codeql_build_dir +_codeql_detected_source_root \ No newline at end of file