Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
Alexei Starovoitov says: ==================== pull-request: bpf-next 2020-07-13 The following pull-request contains BPF updates for your *net-next* tree. We've added 36 non-merge commits during the last 7 day(s) which contain a total of 62 files changed, 2242 insertions(+), 468 deletions(-). The main changes are: 1) Avoid trace_printk warning banner by switching bpf_trace_printk to use its own tracing event, from Alan. 2) Better libbpf support on older kernels, from Andrii. 3) Additional AF_XDP stats, from Ciara. 4) build time resolution of BTF IDs, from Jiri. 5) BPF_CGROUP_INET_SOCK_RELEASE hook, from Stanislav. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
50
tools/testing/selftests/bpf/progs/btf_data.c
Normal file
50
tools/testing/selftests/bpf/progs/btf_data.c
Normal file
@@ -0,0 +1,50 @@
|
||||
// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
|
||||
|
||||
struct S {
|
||||
int a;
|
||||
int b;
|
||||
int c;
|
||||
};
|
||||
|
||||
union U {
|
||||
int a;
|
||||
int b;
|
||||
int c;
|
||||
};
|
||||
|
||||
struct S1 {
|
||||
int a;
|
||||
int b;
|
||||
int c;
|
||||
};
|
||||
|
||||
union U1 {
|
||||
int a;
|
||||
int b;
|
||||
int c;
|
||||
};
|
||||
|
||||
typedef int T;
|
||||
typedef int S;
|
||||
typedef int U;
|
||||
typedef int T1;
|
||||
typedef int S1;
|
||||
typedef int U1;
|
||||
|
||||
struct root_struct {
|
||||
S m_1;
|
||||
T m_2;
|
||||
U m_3;
|
||||
S1 m_4;
|
||||
T1 m_5;
|
||||
U1 m_6;
|
||||
struct S m_7;
|
||||
struct S1 m_8;
|
||||
union U m_9;
|
||||
union U1 m_10;
|
||||
};
|
||||
|
||||
int func(struct root_struct *root)
|
||||
{
|
||||
return 0;
|
||||
}
|
30
tools/testing/selftests/bpf/progs/test_core_retro.c
Normal file
30
tools/testing/selftests/bpf/progs/test_core_retro.c
Normal file
@@ -0,0 +1,30 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
// Copyright (c) 2020 Facebook
|
||||
#include <linux/bpf.h>
|
||||
#include <bpf/bpf_helpers.h>
|
||||
#include <bpf/bpf_core_read.h>
|
||||
|
||||
struct task_struct {
|
||||
int tgid;
|
||||
} __attribute__((preserve_access_index));
|
||||
|
||||
struct {
|
||||
__uint(type, BPF_MAP_TYPE_ARRAY);
|
||||
__uint(max_entries, 1);
|
||||
__type(key, int);
|
||||
__type(value, int);
|
||||
} results SEC(".maps");
|
||||
|
||||
SEC("tp/raw_syscalls/sys_enter")
|
||||
int handle_sys_enter(void *ctx)
|
||||
{
|
||||
struct task_struct *task = (void *)bpf_get_current_task();
|
||||
int tgid = BPF_CORE_READ(task, tgid);
|
||||
int zero = 0;
|
||||
|
||||
bpf_map_update_elem(&results, &zero, &tgid, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
char _license[] SEC("license") = "GPL";
|
@@ -12,8 +12,8 @@ struct {
|
||||
__uint(value_size, sizeof(int));
|
||||
} perf_buf_map SEC(".maps");
|
||||
|
||||
SEC("kprobe/sys_nanosleep")
|
||||
int BPF_KPROBE(handle_sys_nanosleep_entry)
|
||||
SEC("tp/raw_syscalls/sys_enter")
|
||||
int handle_sys_enter(void *ctx)
|
||||
{
|
||||
int cpu = bpf_get_smp_processor_id();
|
||||
|
||||
|
@@ -20,7 +20,9 @@ long long in4 __attribute__((aligned(64))) = 0;
|
||||
struct s in5 = {};
|
||||
|
||||
/* .rodata section */
|
||||
const volatile int in6 = 0;
|
||||
const volatile struct {
|
||||
const int in6;
|
||||
} in = {};
|
||||
|
||||
/* .data section */
|
||||
int out1 = -1;
|
||||
@@ -46,7 +48,7 @@ int handler(const void *ctx)
|
||||
out3 = in3;
|
||||
out4 = in4;
|
||||
out5 = in5;
|
||||
out6 = in6;
|
||||
out6 = in.in6;
|
||||
|
||||
bpf_syscall = CONFIG_BPF_SYSCALL;
|
||||
kern_ver = LINUX_KERNEL_VERSION;
|
||||
|
21
tools/testing/selftests/bpf/progs/trace_printk.c
Normal file
21
tools/testing/selftests/bpf/progs/trace_printk.c
Normal file
@@ -0,0 +1,21 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
// Copyright (c) 2020, Oracle and/or its affiliates.
|
||||
|
||||
#include "vmlinux.h"
|
||||
#include <bpf/bpf_helpers.h>
|
||||
#include <bpf/bpf_tracing.h>
|
||||
|
||||
char _license[] SEC("license") = "GPL";
|
||||
|
||||
int trace_printk_ret = 0;
|
||||
int trace_printk_ran = 0;
|
||||
|
||||
SEC("tp/raw_syscalls/sys_enter")
|
||||
int sys_enter(void *ctx)
|
||||
{
|
||||
static const char fmt[] = "testing,testing %d\n";
|
||||
|
||||
trace_printk_ret = bpf_trace_printk(fmt, sizeof(fmt),
|
||||
++trace_printk_ran);
|
||||
return 0;
|
||||
}
|
42
tools/testing/selftests/bpf/progs/udp_limit.c
Normal file
42
tools/testing/selftests/bpf/progs/udp_limit.c
Normal file
@@ -0,0 +1,42 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <linux/bpf.h>
|
||||
#include <bpf/bpf_helpers.h>
|
||||
|
||||
int invocations = 0, in_use = 0;
|
||||
|
||||
SEC("cgroup/sock_create")
|
||||
int sock(struct bpf_sock *ctx)
|
||||
{
|
||||
__u32 key;
|
||||
|
||||
if (ctx->type != SOCK_DGRAM)
|
||||
return 1;
|
||||
|
||||
__sync_fetch_and_add(&invocations, 1);
|
||||
|
||||
if (in_use > 0) {
|
||||
/* BPF_CGROUP_INET_SOCK_RELEASE is _not_ called
|
||||
* when we return an error from the BPF
|
||||
* program!
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
__sync_fetch_and_add(&in_use, 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
SEC("cgroup/sock_release")
|
||||
int sock_release(struct bpf_sock *ctx)
|
||||
{
|
||||
__u32 key;
|
||||
|
||||
if (ctx->type != SOCK_DGRAM)
|
||||
return 1;
|
||||
|
||||
__sync_fetch_and_add(&invocations, 1);
|
||||
__sync_fetch_and_add(&in_use, -1);
|
||||
return 1;
|
||||
}
|
Reference in New Issue
Block a user