0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef __LIBBPF_LIBBPF_COMMON_H
0010 #define __LIBBPF_LIBBPF_COMMON_H
0011
0012 #include <string.h>
0013 #include "libbpf_version.h"
0014
0015 #ifndef LIBBPF_API
0016 #define LIBBPF_API __attribute__((visibility("default")))
0017 #endif
0018
0019 #define LIBBPF_DEPRECATED(msg) __attribute__((deprecated(msg)))
0020
0021
0022 #define LIBBPF_DEPRECATED_SINCE(major, minor, msg) \
0023 __LIBBPF_MARK_DEPRECATED_ ## major ## _ ## minor \
0024 (LIBBPF_DEPRECATED("libbpf v" # major "." # minor "+: " msg))
0025
0026 #define __LIBBPF_CURRENT_VERSION_GEQ(major, minor) \
0027 (LIBBPF_MAJOR_VERSION > (major) || \
0028 (LIBBPF_MAJOR_VERSION == (major) && LIBBPF_MINOR_VERSION >= (minor)))
0029
0030
0031
0032
0033 #if __LIBBPF_CURRENT_VERSION_GEQ(1, 0)
0034 #define __LIBBPF_MARK_DEPRECATED_1_0(X) X
0035 #else
0036 #define __LIBBPF_MARK_DEPRECATED_1_0(X)
0037 #endif
0038
0039
0040
0041
0042
0043
0044
0045 #define ___libbpf_cat(A, B) A ## B
0046 #define ___libbpf_select(NAME, NUM) ___libbpf_cat(NAME, NUM)
0047 #define ___libbpf_nth(_1, _2, _3, _4, _5, _6, N, ...) N
0048 #define ___libbpf_cnt(...) ___libbpf_nth(__VA_ARGS__, 6, 5, 4, 3, 2, 1)
0049 #define ___libbpf_overload(NAME, ...) ___libbpf_select(NAME, ___libbpf_cnt(__VA_ARGS__))(__VA_ARGS__)
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064 #define LIBBPF_OPTS(TYPE, NAME, ...) \
0065 struct TYPE NAME = ({ \
0066 memset(&NAME, 0, sizeof(struct TYPE)); \
0067 (struct TYPE) { \
0068 .sz = sizeof(struct TYPE), \
0069 __VA_ARGS__ \
0070 }; \
0071 })
0072
0073 #endif