• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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