sync with latest bpf-next (#10)

sync with latest bpf-next. tested with fb internal testcase and bcc.

Signed-off-by: Yonghong Song <yhs@fb.com>
This commit is contained in:
yonghong-song
2019-02-07 21:58:07 -08:00
committed by GitHub
parent b19c6dcf62
commit f0bcba631d
9 changed files with 1866 additions and 63 deletions

View File

@@ -14,6 +14,7 @@
/* Extended instruction set based on top of classic BPF */ /* Extended instruction set based on top of classic BPF */
/* instruction classes */ /* instruction classes */
#define BPF_JMP32 0x06 /* jmp mode in word width */
#define BPF_ALU64 0x07 /* alu mode in double word width */ #define BPF_ALU64 0x07 /* alu mode in double word width */
/* ld/ldx fields */ /* ld/ldx fields */
@@ -266,6 +267,7 @@ enum bpf_attach_type {
#define BPF_ANY 0 /* create new element or update existing */ #define BPF_ANY 0 /* create new element or update existing */
#define BPF_NOEXIST 1 /* create new element if it didn't exist */ #define BPF_NOEXIST 1 /* create new element if it didn't exist */
#define BPF_EXIST 2 /* update existing element */ #define BPF_EXIST 2 /* update existing element */
#define BPF_F_LOCK 4 /* spin_lock-ed map_lookup/map_update */
/* flags for BPF_MAP_CREATE command */ /* flags for BPF_MAP_CREATE command */
#define BPF_F_NO_PREALLOC (1U << 0) #define BPF_F_NO_PREALLOC (1U << 0)
@@ -2421,7 +2423,9 @@ union bpf_attr {
FN(map_peek_elem), \ FN(map_peek_elem), \
FN(msg_push_data), \ FN(msg_push_data), \
FN(msg_pop_data), \ FN(msg_pop_data), \
FN(rc_pointer_rel), FN(rc_pointer_rel), \
FN(spin_lock), \
FN(spin_unlock),
/* integer value in 'imm' field of BPF_CALL instruction selects which helper /* integer value in 'imm' field of BPF_CALL instruction selects which helper
* function eBPF program intends to call * function eBPF program intends to call
@@ -2540,6 +2544,7 @@ struct __sk_buff {
__bpf_md_ptr(struct bpf_flow_keys *, flow_keys); __bpf_md_ptr(struct bpf_flow_keys *, flow_keys);
__u64 tstamp; __u64 tstamp;
__u32 wire_len; __u32 wire_len;
__u32 gso_segs;
}; };
struct bpf_tunnel_key { struct bpf_tunnel_key {
@@ -3054,4 +3059,7 @@ struct bpf_line_info {
__u32 line_col; __u32 line_col;
}; };
struct bpf_spin_lock {
__u32 val;
};
#endif /* _UAPI__LINUX_BPF_H__ */ #endif /* _UAPI__LINUX_BPF_H__ */

View File

@@ -288,6 +288,7 @@ enum {
IFLA_BR_MCAST_IGMP_VERSION, IFLA_BR_MCAST_IGMP_VERSION,
IFLA_BR_MCAST_MLD_VERSION, IFLA_BR_MCAST_MLD_VERSION,
IFLA_BR_VLAN_STATS_PER_PORT, IFLA_BR_VLAN_STATS_PER_PORT,
IFLA_BR_MULTI_BOOLOPT,
__IFLA_BR_MAX, __IFLA_BR_MAX,
}; };
@@ -533,6 +534,7 @@ enum {
IFLA_VXLAN_LABEL, IFLA_VXLAN_LABEL,
IFLA_VXLAN_GPE, IFLA_VXLAN_GPE,
IFLA_VXLAN_TTL_INHERIT, IFLA_VXLAN_TTL_INHERIT,
IFLA_VXLAN_DF,
__IFLA_VXLAN_MAX __IFLA_VXLAN_MAX
}; };
#define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1) #define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1)
@@ -542,6 +544,14 @@ struct ifla_vxlan_port_range {
__be16 high; __be16 high;
}; };
enum ifla_vxlan_df {
VXLAN_DF_UNSET = 0,
VXLAN_DF_SET,
VXLAN_DF_INHERIT,
__VXLAN_DF_END,
VXLAN_DF_MAX = __VXLAN_DF_END - 1,
};
/* GENEVE section */ /* GENEVE section */
enum { enum {
IFLA_GENEVE_UNSPEC, IFLA_GENEVE_UNSPEC,
@@ -557,10 +567,19 @@ enum {
IFLA_GENEVE_UDP_ZERO_CSUM6_RX, IFLA_GENEVE_UDP_ZERO_CSUM6_RX,
IFLA_GENEVE_LABEL, IFLA_GENEVE_LABEL,
IFLA_GENEVE_TTL_INHERIT, IFLA_GENEVE_TTL_INHERIT,
IFLA_GENEVE_DF,
__IFLA_GENEVE_MAX __IFLA_GENEVE_MAX
}; };
#define IFLA_GENEVE_MAX (__IFLA_GENEVE_MAX - 1) #define IFLA_GENEVE_MAX (__IFLA_GENEVE_MAX - 1)
enum ifla_geneve_df {
GENEVE_DF_UNSET = 0,
GENEVE_DF_SET,
GENEVE_DF_INHERIT,
__GENEVE_DF_END,
GENEVE_DF_MAX = __GENEVE_DF_END - 1,
};
/* PPP section */ /* PPP section */
enum { enum {
IFLA_PPP_UNSPEC, IFLA_PPP_UNSPEC,

View File

@@ -20,7 +20,7 @@ ALL_CFLAGS += $(CFLAGS)
OBJDIR ?= . OBJDIR ?= .
OBJS := $(addprefix $(OBJDIR)/,bpf.o btf.o libbpf.o libbpf_errno.o netlink.o \ OBJS := $(addprefix $(OBJDIR)/,bpf.o btf.o libbpf.o libbpf_errno.o netlink.o \
nlattr.o str_error.o) nlattr.o str_error.o libbpf_probes.o)
LIBS := $(OBJDIR)/libbpf.a LIBS := $(OBJDIR)/libbpf.a
ifdef BUILD_SHARED ifdef BUILD_SHARED

View File

@@ -22,6 +22,7 @@
*/ */
#include <stdlib.h> #include <stdlib.h>
#include <strings.h>
#include <memory.h> #include <memory.h>
#include <unistd.h> #include <unistd.h>
#include <asm/unistd.h> #include <asm/unistd.h>
@@ -214,10 +215,15 @@ int bpf_load_program_xattr(const struct bpf_load_program_attr *load_attr,
{ {
void *finfo = NULL, *linfo = NULL; void *finfo = NULL, *linfo = NULL;
union bpf_attr attr; union bpf_attr attr;
__u32 log_level;
__u32 name_len; __u32 name_len;
int fd; int fd;
if (!load_attr) if (!load_attr || !log_buf != !log_buf_sz)
return -EINVAL;
log_level = load_attr->log_level;
if (log_level > 2 || (log_level && !log_buf))
return -EINVAL; return -EINVAL;
name_len = load_attr->name ? strlen(load_attr->name) : 0; name_len = load_attr->name ? strlen(load_attr->name) : 0;
@@ -228,9 +234,16 @@ int bpf_load_program_xattr(const struct bpf_load_program_attr *load_attr,
attr.insn_cnt = (__u32)load_attr->insns_cnt; attr.insn_cnt = (__u32)load_attr->insns_cnt;
attr.insns = ptr_to_u64(load_attr->insns); attr.insns = ptr_to_u64(load_attr->insns);
attr.license = ptr_to_u64(load_attr->license); attr.license = ptr_to_u64(load_attr->license);
attr.log_buf = ptr_to_u64(NULL);
attr.log_size = 0; attr.log_level = log_level;
attr.log_level = 0; if (log_level) {
attr.log_buf = ptr_to_u64(log_buf);
attr.log_size = log_buf_sz;
} else {
attr.log_buf = ptr_to_u64(NULL);
attr.log_size = 0;
}
attr.kern_version = load_attr->kern_version; attr.kern_version = load_attr->kern_version;
attr.prog_ifindex = load_attr->prog_ifindex; attr.prog_ifindex = load_attr->prog_ifindex;
attr.prog_btf_fd = load_attr->prog_btf_fd; attr.prog_btf_fd = load_attr->prog_btf_fd;
@@ -286,7 +299,7 @@ int bpf_load_program_xattr(const struct bpf_load_program_attr *load_attr,
goto done; goto done;
} }
if (!log_buf || !log_buf_sz) if (log_level || !log_buf)
goto done; goto done;
/* Try again with log */ /* Try again with log */

View File

@@ -85,6 +85,7 @@ struct bpf_load_program_attr {
__u32 line_info_rec_size; __u32 line_info_rec_size;
const void *line_info; const void *line_info;
__u32 line_info_cnt; __u32 line_info_cnt;
__u32 log_level;
}; };
/* Flags to direct loading requirements */ /* Flags to direct loading requirements */

1858
src/btf.c

File diff suppressed because it is too large Load Diff

View File

@@ -59,14 +59,17 @@ LIBBPF_API void btf__free(struct btf *btf);
LIBBPF_API struct btf *btf__new(__u8 *data, __u32 size); LIBBPF_API struct btf *btf__new(__u8 *data, __u32 size);
LIBBPF_API __s32 btf__find_by_name(const struct btf *btf, LIBBPF_API __s32 btf__find_by_name(const struct btf *btf,
const char *type_name); const char *type_name);
LIBBPF_API __u32 btf__get_nr_types(const struct btf *btf);
LIBBPF_API const struct btf_type *btf__type_by_id(const struct btf *btf, LIBBPF_API const struct btf_type *btf__type_by_id(const struct btf *btf,
__u32 id); __u32 id);
LIBBPF_API __s64 btf__resolve_size(const struct btf *btf, __u32 type_id); LIBBPF_API __s64 btf__resolve_size(const struct btf *btf, __u32 type_id);
LIBBPF_API int btf__resolve_type(const struct btf *btf, __u32 type_id); LIBBPF_API int btf__resolve_type(const struct btf *btf, __u32 type_id);
LIBBPF_API int btf__fd(const struct btf *btf); LIBBPF_API int btf__fd(const struct btf *btf);
LIBBPF_API void btf__get_strings(const struct btf *btf, const char **strings,
__u32 *str_len);
LIBBPF_API const char *btf__name_by_offset(const struct btf *btf, __u32 offset); LIBBPF_API const char *btf__name_by_offset(const struct btf *btf, __u32 offset);
LIBBPF_API int btf__get_from_id(__u32 id, struct btf **btf); LIBBPF_API int btf__get_from_id(__u32 id, struct btf **btf);
LIBBPF_API int btf__get_map_kv_tids(const struct btf *btf, char *map_name, LIBBPF_API int btf__get_map_kv_tids(const struct btf *btf, const char *map_name,
__u32 expected_key_size, __u32 expected_key_size,
__u32 expected_value_size, __u32 expected_value_size,
__u32 *key_type_id, __u32 *value_type_id); __u32 *key_type_id, __u32 *value_type_id);
@@ -84,6 +87,13 @@ LIBBPF_API int btf_ext__reloc_line_info(const struct btf *btf,
LIBBPF_API __u32 btf_ext__func_info_rec_size(const struct btf_ext *btf_ext); LIBBPF_API __u32 btf_ext__func_info_rec_size(const struct btf_ext *btf_ext);
LIBBPF_API __u32 btf_ext__line_info_rec_size(const struct btf_ext *btf_ext); LIBBPF_API __u32 btf_ext__line_info_rec_size(const struct btf_ext *btf_ext);
struct btf_dedup_opts {
bool dont_resolve_fwds;
};
LIBBPF_API int btf__dedup(struct btf *btf, struct btf_ext *btf_ext,
const struct btf_dedup_opts *opts);
#ifdef __cplusplus #ifdef __cplusplus
} /* extern "C" */ } /* extern "C" */
#endif #endif

View File

@@ -18,6 +18,7 @@
#include <libgen.h> #include <libgen.h>
#include <inttypes.h> #include <inttypes.h>
#include <string.h> #include <string.h>
#include <strings.h>
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
#include <errno.h> #include <errno.h>

View File

@@ -133,7 +133,10 @@ LIBBPF_0.0.2 {
bpf_map_lookup_elem_flags; bpf_map_lookup_elem_flags;
bpf_object__find_map_fd_by_name; bpf_object__find_map_fd_by_name;
bpf_get_link_xdp_id; bpf_get_link_xdp_id;
btf__dedup;
btf__get_map_kv_tids; btf__get_map_kv_tids;
btf__get_nr_types;
btf__get_strings;
btf_ext__free; btf_ext__free;
btf_ext__func_info_rec_size; btf_ext__func_info_rec_size;
btf_ext__line_info_rec_size; btf_ext__line_info_rec_size;