Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.14-rc7 202 lines 6.2 kB view raw
1/* 2 * Copyright (C) 2015, Wang Nan <wangnan0@huawei.com> 3 * Copyright (C) 2015, Huawei Inc. 4 */ 5#ifndef __BPF_LOADER_H 6#define __BPF_LOADER_H 7 8#include <linux/compiler.h> 9#include <linux/err.h> 10#include <string.h> 11#include <bpf/libbpf.h> 12#include "probe-event.h" 13#include "evlist.h" 14#include "debug.h" 15 16enum bpf_loader_errno { 17 __BPF_LOADER_ERRNO__START = __LIBBPF_ERRNO__START - 100, 18 /* Invalid config string */ 19 BPF_LOADER_ERRNO__CONFIG = __BPF_LOADER_ERRNO__START, 20 BPF_LOADER_ERRNO__GROUP, /* Invalid group name */ 21 BPF_LOADER_ERRNO__EVENTNAME, /* Event name is missing */ 22 BPF_LOADER_ERRNO__INTERNAL, /* BPF loader internal error */ 23 BPF_LOADER_ERRNO__COMPILE, /* Error when compiling BPF scriptlet */ 24 BPF_LOADER_ERRNO__PROGCONF_TERM,/* Invalid program config term in config string */ 25 BPF_LOADER_ERRNO__PROLOGUE, /* Failed to generate prologue */ 26 BPF_LOADER_ERRNO__PROLOGUE2BIG, /* Prologue too big for program */ 27 BPF_LOADER_ERRNO__PROLOGUEOOB, /* Offset out of bound for prologue */ 28 BPF_LOADER_ERRNO__OBJCONF_OPT, /* Invalid object config option */ 29 BPF_LOADER_ERRNO__OBJCONF_CONF, /* Config value not set (lost '=')) */ 30 BPF_LOADER_ERRNO__OBJCONF_MAP_OPT, /* Invalid object map config option */ 31 BPF_LOADER_ERRNO__OBJCONF_MAP_NOTEXIST, /* Target map not exist */ 32 BPF_LOADER_ERRNO__OBJCONF_MAP_VALUE, /* Incorrect value type for map */ 33 BPF_LOADER_ERRNO__OBJCONF_MAP_TYPE, /* Incorrect map type */ 34 BPF_LOADER_ERRNO__OBJCONF_MAP_KEYSIZE, /* Incorrect map key size */ 35 BPF_LOADER_ERRNO__OBJCONF_MAP_VALUESIZE,/* Incorrect map value size */ 36 BPF_LOADER_ERRNO__OBJCONF_MAP_NOEVT, /* Event not found for map setting */ 37 BPF_LOADER_ERRNO__OBJCONF_MAP_MAPSIZE, /* Invalid map size for event setting */ 38 BPF_LOADER_ERRNO__OBJCONF_MAP_EVTDIM, /* Event dimension too large */ 39 BPF_LOADER_ERRNO__OBJCONF_MAP_EVTINH, /* Doesn't support inherit event */ 40 BPF_LOADER_ERRNO__OBJCONF_MAP_EVTTYPE, /* Wrong event type for map */ 41 BPF_LOADER_ERRNO__OBJCONF_MAP_IDX2BIG, /* Index too large */ 42 __BPF_LOADER_ERRNO__END, 43}; 44 45struct bpf_object; 46struct parse_events_term; 47#define PERF_BPF_PROBE_GROUP "perf_bpf_probe" 48 49typedef int (*bpf_prog_iter_callback_t)(const char *group, const char *event, 50 int fd, void *arg); 51 52#ifdef HAVE_LIBBPF_SUPPORT 53struct bpf_object *bpf__prepare_load(const char *filename, bool source); 54int bpf__strerror_prepare_load(const char *filename, bool source, 55 int err, char *buf, size_t size); 56 57struct bpf_object *bpf__prepare_load_buffer(void *obj_buf, size_t obj_buf_sz, 58 const char *name); 59 60void bpf__clear(void); 61 62int bpf__probe(struct bpf_object *obj); 63int bpf__unprobe(struct bpf_object *obj); 64int bpf__strerror_probe(struct bpf_object *obj, int err, 65 char *buf, size_t size); 66 67int bpf__load(struct bpf_object *obj); 68int bpf__strerror_load(struct bpf_object *obj, int err, 69 char *buf, size_t size); 70int bpf__foreach_event(struct bpf_object *obj, 71 bpf_prog_iter_callback_t func, void *arg); 72 73int bpf__config_obj(struct bpf_object *obj, struct parse_events_term *term, 74 struct perf_evlist *evlist, int *error_pos); 75int bpf__strerror_config_obj(struct bpf_object *obj, 76 struct parse_events_term *term, 77 struct perf_evlist *evlist, 78 int *error_pos, int err, char *buf, 79 size_t size); 80int bpf__apply_obj_config(void); 81int bpf__strerror_apply_obj_config(int err, char *buf, size_t size); 82 83int bpf__setup_stdout(struct perf_evlist *evlist); 84int bpf__strerror_setup_stdout(struct perf_evlist *evlist, int err, 85 char *buf, size_t size); 86 87#else 88#include <errno.h> 89 90static inline struct bpf_object * 91bpf__prepare_load(const char *filename __maybe_unused, 92 bool source __maybe_unused) 93{ 94 pr_debug("ERROR: eBPF object loading is disabled during compiling.\n"); 95 return ERR_PTR(-ENOTSUP); 96} 97 98static inline struct bpf_object * 99bpf__prepare_load_buffer(void *obj_buf __maybe_unused, 100 size_t obj_buf_sz __maybe_unused) 101{ 102 return ERR_PTR(-ENOTSUP); 103} 104 105static inline void bpf__clear(void) { } 106 107static inline int bpf__probe(struct bpf_object *obj __maybe_unused) { return 0;} 108static inline int bpf__unprobe(struct bpf_object *obj __maybe_unused) { return 0;} 109static inline int bpf__load(struct bpf_object *obj __maybe_unused) { return 0; } 110 111static inline int 112bpf__foreach_event(struct bpf_object *obj __maybe_unused, 113 bpf_prog_iter_callback_t func __maybe_unused, 114 void *arg __maybe_unused) 115{ 116 return 0; 117} 118 119static inline int 120bpf__config_obj(struct bpf_object *obj __maybe_unused, 121 struct parse_events_term *term __maybe_unused, 122 struct perf_evlist *evlist __maybe_unused, 123 int *error_pos __maybe_unused) 124{ 125 return 0; 126} 127 128static inline int 129bpf__apply_obj_config(void) 130{ 131 return 0; 132} 133 134static inline int 135bpf__setup_stdout(struct perf_evlist *evlist __maybe_unused) 136{ 137 return 0; 138} 139 140static inline int 141__bpf_strerror(char *buf, size_t size) 142{ 143 if (!size) 144 return 0; 145 strncpy(buf, 146 "ERROR: eBPF object loading is disabled during compiling.\n", 147 size); 148 buf[size - 1] = '\0'; 149 return 0; 150} 151 152static inline 153int bpf__strerror_prepare_load(const char *filename __maybe_unused, 154 bool source __maybe_unused, 155 int err __maybe_unused, 156 char *buf, size_t size) 157{ 158 return __bpf_strerror(buf, size); 159} 160 161static inline int 162bpf__strerror_probe(struct bpf_object *obj __maybe_unused, 163 int err __maybe_unused, 164 char *buf, size_t size) 165{ 166 return __bpf_strerror(buf, size); 167} 168 169static inline int bpf__strerror_load(struct bpf_object *obj __maybe_unused, 170 int err __maybe_unused, 171 char *buf, size_t size) 172{ 173 return __bpf_strerror(buf, size); 174} 175 176static inline int 177bpf__strerror_config_obj(struct bpf_object *obj __maybe_unused, 178 struct parse_events_term *term __maybe_unused, 179 struct perf_evlist *evlist __maybe_unused, 180 int *error_pos __maybe_unused, 181 int err __maybe_unused, 182 char *buf, size_t size) 183{ 184 return __bpf_strerror(buf, size); 185} 186 187static inline int 188bpf__strerror_apply_obj_config(int err __maybe_unused, 189 char *buf, size_t size) 190{ 191 return __bpf_strerror(buf, size); 192} 193 194static inline int 195bpf__strerror_setup_stdout(struct perf_evlist *evlist __maybe_unused, 196 int err __maybe_unused, char *buf, 197 size_t size) 198{ 199 return __bpf_strerror(buf, size); 200} 201#endif 202#endif