xref: /aosp_15_r20/system/bpf/loader/include/libbpf_android.h (revision 55039e042b8390f50b0bdd70c11a2419f6d8fd50)
1*55039e04SAndroid Build Coastguard Worker /*
2*55039e04SAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
3*55039e04SAndroid Build Coastguard Worker  * Android BPF library - public API
4*55039e04SAndroid Build Coastguard Worker  *
5*55039e04SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*55039e04SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*55039e04SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
8*55039e04SAndroid Build Coastguard Worker  *
9*55039e04SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
10*55039e04SAndroid Build Coastguard Worker  *
11*55039e04SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*55039e04SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*55039e04SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*55039e04SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*55039e04SAndroid Build Coastguard Worker  * limitations under the License.
16*55039e04SAndroid Build Coastguard Worker  */
17*55039e04SAndroid Build Coastguard Worker 
18*55039e04SAndroid Build Coastguard Worker #pragma once
19*55039e04SAndroid Build Coastguard Worker 
20*55039e04SAndroid Build Coastguard Worker #ifdef __cplusplus
21*55039e04SAndroid Build Coastguard Worker 
22*55039e04SAndroid Build Coastguard Worker #include <linux/bpf.h>
23*55039e04SAndroid Build Coastguard Worker 
24*55039e04SAndroid Build Coastguard Worker #include <fstream>
25*55039e04SAndroid Build Coastguard Worker 
26*55039e04SAndroid Build Coastguard Worker namespace android {
27*55039e04SAndroid Build Coastguard Worker namespace bpf {
28*55039e04SAndroid Build Coastguard Worker 
29*55039e04SAndroid Build Coastguard Worker struct Location {
30*55039e04SAndroid Build Coastguard Worker     const char* const dir = "";
31*55039e04SAndroid Build Coastguard Worker     const char* const prefix = "";
32*55039e04SAndroid Build Coastguard Worker     const bpf_prog_type* allowedProgTypes = nullptr;
33*55039e04SAndroid Build Coastguard Worker     size_t allowedProgTypesLength = 0;
34*55039e04SAndroid Build Coastguard Worker };
35*55039e04SAndroid Build Coastguard Worker 
36*55039e04SAndroid Build Coastguard Worker // BPF loader implementation. Loads an eBPF ELF object
37*55039e04SAndroid Build Coastguard Worker int loadProg(const char* elfPath, bool* isCritical, const Location &location = {});
38*55039e04SAndroid Build Coastguard Worker 
39*55039e04SAndroid Build Coastguard Worker // Exposed for testing
40*55039e04SAndroid Build Coastguard Worker unsigned int readSectionUint(const char* name, std::ifstream& elfFile, unsigned int defVal);
41*55039e04SAndroid Build Coastguard Worker 
42*55039e04SAndroid Build Coastguard Worker }  // namespace bpf
43*55039e04SAndroid Build Coastguard Worker }  // namespace android
44*55039e04SAndroid Build Coastguard Worker 
45*55039e04SAndroid Build Coastguard Worker extern "C" {
46*55039e04SAndroid Build Coastguard Worker #else // __cplusplus
47*55039e04SAndroid Build Coastguard Worker #define __noreturn
48*55039e04SAndroid Build Coastguard Worker #endif // __cplusplus
49*55039e04SAndroid Build Coastguard Worker 
50*55039e04SAndroid Build Coastguard Worker // The C++ portion of the BpfLoader is exposed as 3 functions to be called in order.
51*55039e04SAndroid Build Coastguard Worker void initLogging();
52*55039e04SAndroid Build Coastguard Worker void createBpfFsSubDirectories();
53*55039e04SAndroid Build Coastguard Worker void legacyBpfLoader();
54*55039e04SAndroid Build Coastguard Worker __noreturn void execNetBpfLoadDone();
55*55039e04SAndroid Build Coastguard Worker 
56*55039e04SAndroid Build Coastguard Worker #ifdef __cplusplus
57*55039e04SAndroid Build Coastguard Worker }  // extern C
58*55039e04SAndroid Build Coastguard Worker #endif
59