From b01b5c8a926d82d8d8b42075e20707dd6030a788 Mon Sep 17 00:00:00 2001 From: Neill Kapron Date: Fri, 15 Nov 2024 22:30:37 +0000 Subject: [PATCH] MOCK_BPF: Remove bpf mocking library Removing the bpf mocking system because we feel that it is not useful in properly testing bpf programs. There is currently only one real user of it (time_in_state_test.cpp), which has significant issues in that the tests are written in such a way that each one relies on the state of the previous test. Also, the per CPU mocking capability is limited in its capabilities. Removal simplifies the transition to libbpf, and reduces legacy tech debt. Bug: 359646531 Test: TH Change-Id: I402a6dec8e8b750161bf36fea2340cf54a1b7433 Signed-off-by: Neill Kapron --- progs/include/test/mock_bpf_helpers.h | 94 --------------------------- 1 file changed, 94 deletions(-) delete mode 100644 progs/include/test/mock_bpf_helpers.h diff --git a/progs/include/test/mock_bpf_helpers.h b/progs/include/test/mock_bpf_helpers.h deleted file mode 100644 index 141ee4f..0000000 --- a/progs/include/test/mock_bpf_helpers.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -/* Mock BPF helpers to be used for testing of BPF programs loaded by Android */ - -#include -#include -#include - -#include - -typedef void* mock_bpf_map_t; - -/* type safe macro to declare a map and related accessor functions */ -#define DEFINE_BPF_MAP_UGM(the_map, TYPE, TypeOfKey, TypeOfValue, num_entries, usr, grp, md) \ - mock_bpf_map_t mock_bpf_map_##the_map; \ - \ - mock_bpf_map_t get_mock_bpf_map_##the_map() { \ - if (mock_bpf_map_##the_map == 0) { \ - mock_bpf_map_##the_map = mock_bpf_map_create(sizeof(TypeOfKey), sizeof(TypeOfValue), \ - BPF_MAP_TYPE_##TYPE); \ - } \ - return mock_bpf_map_##the_map; \ - } \ - __unused TypeOfValue* bpf_##the_map##_lookup_elem(const TypeOfKey* k) { \ - return (TypeOfValue*)mock_bpf_lookup_elem(get_mock_bpf_map_##the_map(), (void*)k); \ - }; \ - \ - __unused int bpf_##the_map##_update_elem(const TypeOfKey* k, const TypeOfValue* v, \ - uint64_t flags) { \ - return mock_bpf_update_elem(get_mock_bpf_map_##the_map(), (void*)k, (void*)v, flags); \ - }; \ - \ - __unused int bpf_##the_map##_delete_elem(const TypeOfKey* k) { \ - return mock_bpf_delete_elem(get_mock_bpf_map_##the_map(), (void*)k); \ - }; - -#define DEFINE_BPF_MAP(the_map, TYPE, TypeOfKey, TypeOfValue, num_entries) \ - DEFINE_BPF_MAP_UGM(the_map, TYPE, TypeOfKey, TypeOfValue, num_entries, AID_ROOT, AID_ROOT, 0600) - -#define DEFINE_BPF_MAP_GWO(the_map, TYPE, TypeOfKey, TypeOfValue, num_entries, gid) \ - DEFINE_BPF_MAP_UGM(the_map, TYPE, TypeOfKey, TypeOfValue, num_entries, AID_ROOT, gid, 0620) - -#define DEFINE_BPF_MAP_GRO(the_map, TYPE, TypeOfKey, TypeOfValue, num_entries, gid) \ - DEFINE_BPF_MAP_UGM(the_map, TYPE, TypeOfKey, TypeOfValue, num_entries, AID_ROOT, gid, 0640) - -#define DEFINE_BPF_MAP_GRW(the_map, TYPE, TypeOfKey, TypeOfValue, num_entries, gid) \ - DEFINE_BPF_MAP_UGM(the_map, TYPE, TypeOfKey, TypeOfValue, num_entries, AID_ROOT, gid, 0660) - -#define DEFINE_BPF_PROG(section, owner, group, name) int name - -#ifdef __cplusplus -extern "C" { -#endif - -mock_bpf_map_t mock_bpf_map_create(uint32_t key_size, uint32_t value_size, uint32_t type); -void* mock_bpf_lookup_elem(mock_bpf_map_t map, void* key); -int mock_bpf_update_elem(mock_bpf_map_t map, void* key, void* value, uint64_t flags); -int mock_bpf_delete_elem(mock_bpf_map_t map, void* key); - -uint64_t bpf_ktime_get_ns(); -uint64_t bpf_get_smp_processor_id(); -uint64_t bpf_get_current_uid_gid(); -uint64_t bpf_get_current_pid_tgid(); - -void mock_bpf_set_ktime_ns(uint64_t time_ns); -void mock_bpf_set_smp_processor_id(uint32_t cpu); -void mock_bpf_set_current_uid_gid(uint32_t uid); -void mock_bpf_set_current_pid_tgid(uint64_t pid_tgid); - -#ifdef __cplusplus -} // extern "C" -#endif - -/* place things in different elf sections */ -#define SECTION(NAME) __attribute__((section(NAME), used)) - -/* Example use: LICENSE("GPL"); or LICENSE("Apache 2.0"); */ -#define LICENSE(NAME) char _license[] SECTION("license") = (NAME)