1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #pragma once 18 19 /* This file is separate because it's included both by eBPF programs (via include 20 * in bpf_helpers.h) and directly by the boot time bpfloader (Loader.cpp). 21 */ 22 23 #include <linux/bpf.h> 24 25 // Pull in AID_* constants from //system/core/libcutils/include/private/android_filesystem_config.h 26 #define EXCLUDE_FS_CONFIG_STRUCTURES 27 #include <private/android_filesystem_config.h> 28 29 /* 30 * Map structure to be used by Android eBPF C programs. The Android eBPF loader 31 * uses this structure from eBPF object to create maps at boot time. 32 * 33 * The eBPF C program should define structure in the maps section using 34 * SEC("maps") otherwise it will be ignored by the eBPF loader. 35 * 36 * For example: 37 * const struct bpf_map_def SEC("maps") mymap { .type=... , .key_size=... } 38 * 39 * See 'bpf_helpers.h' for helpful macros for eBPF program use. 40 */ 41 struct bpf_map_def { 42 enum bpf_map_type type; 43 unsigned int key_size; 44 unsigned int value_size; 45 unsigned int max_entries; 46 unsigned int map_flags; 47 48 // The following are not supported by the Android bpfloader: 49 // unsigned int inner_map_idx; 50 // unsigned int numa_node; 51 52 unsigned int uid; // uid_t 53 unsigned int gid; // gid_t 54 unsigned int mode; // mode_t 55 }; 56 57 struct bpf_prog_def { 58 unsigned int uid; 59 unsigned int gid; 60 61 unsigned int min_kver; // KERNEL_MAJOR * 65536 + KERNEL_MINOR * 256 + KERNEL_SUB 62 unsigned int max_kver; // ie. 0x40900 for Linux 4.9 - but beware of hexadecimal for >= 10 63 64 bool optional; // program section (ie. function) may fail to load, continue onto next func. 65 }; 66