aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/bpf/progs/kfree_skb.c
diff options
context:
space:
mode:
authorMartin KaFai Lau <kafai@fb.com>2019-11-23 12:25:04 -0800
committerAlexei Starovoitov <ast@kernel.org>2019-11-24 17:12:11 -0800
commitf9a7cf6eb17cd0110c8c47d9e7969fc2716e5772 (patch)
tree9db74c8c6aaa198f2d163d066abe228f24bb22d5 /tools/testing/selftests/bpf/progs/kfree_skb.c
parentbpf: Add bpf_jit_blinding_enabled for !CONFIG_BPF_JIT (diff)
downloadlinux-dev-f9a7cf6eb17cd0110c8c47d9e7969fc2716e5772.tar.xz
linux-dev-f9a7cf6eb17cd0110c8c47d9e7969fc2716e5772.zip
bpf: Introduce BPF_TRACE_x helper for the tracing tests
For BPF_PROG_TYPE_TRACING, the bpf_prog's ctx is an array of u64. This patch borrows the idea from BPF_CALL_x in filter.h to convert a u64 to the arg type of the traced function. The new BPF_TRACE_x has an arg to specify the return type of a bpf_prog. It will be used in the future TCP-ops bpf_prog that may return "void". The new macros are defined in the new header file "bpf_trace_helpers.h". It is under selftests/bpf/ for now. It could be moved to libbpf later after seeing more upcoming non-tracing use cases. The tests are changed to use these new macros also. Hence, the k[s]u8/16/32/64 are no longer needed and they are removed from the bpf_helpers.h. Signed-off-by: Martin KaFai Lau <kafai@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20191123202504.1502696-1-kafai@fb.com
Diffstat (limited to 'tools/testing/selftests/bpf/progs/kfree_skb.c')
-rw-r--r--tools/testing/selftests/bpf/progs/kfree_skb.c43
1 files changed, 13 insertions, 30 deletions
diff --git a/tools/testing/selftests/bpf/progs/kfree_skb.c b/tools/testing/selftests/bpf/progs/kfree_skb.c
index dcc9feac8338..974d6f3bb319 100644
--- a/tools/testing/selftests/bpf/progs/kfree_skb.c
+++ b/tools/testing/selftests/bpf/progs/kfree_skb.c
@@ -4,6 +4,7 @@
#include <stdbool.h>
#include "bpf_helpers.h"
#include "bpf_endian.h"
+#include "bpf_trace_helpers.h"
char _license[] SEC("license") = "GPL";
struct {
@@ -47,28 +48,18 @@ struct sk_buff {
char cb[48];
};
-/* copy arguments from
- * include/trace/events/skb.h:
- * TRACE_EVENT(kfree_skb,
- * TP_PROTO(struct sk_buff *skb, void *location),
- *
- * into struct below:
- */
-struct trace_kfree_skb {
- struct sk_buff *skb;
- void *location;
-};
-
struct meta {
int ifindex;
__u32 cb32_0;
__u8 cb8_0;
};
-SEC("tp_btf/kfree_skb")
-int trace_kfree_skb(struct trace_kfree_skb *ctx)
+/* TRACE_EVENT(kfree_skb,
+ * TP_PROTO(struct sk_buff *skb, void *location),
+ */
+BPF_TRACE_2("tp_btf/kfree_skb", trace_kfree_skb,
+ struct sk_buff *, skb, void *, location)
{
- struct sk_buff *skb = ctx->skb;
struct net_device *dev;
struct callback_head *ptr;
void *func;
@@ -123,17 +114,10 @@ static volatile struct {
bool fexit_test_ok;
} result;
-struct eth_type_trans_args {
- struct sk_buff *skb;
- struct net_device *dev;
- unsigned short protocol; /* return value available to fexit progs */
-};
-
-SEC("fentry/eth_type_trans")
-int fentry_eth_type_trans(struct eth_type_trans_args *ctx)
+BPF_TRACE_3("fentry/eth_type_trans", fentry_eth_type_trans,
+ struct sk_buff *, skb, struct net_device *, dev,
+ unsigned short, protocol)
{
- struct sk_buff *skb = ctx->skb;
- struct net_device *dev = ctx->dev;
int len, ifindex;
__builtin_preserve_access_index(({
@@ -148,11 +132,10 @@ int fentry_eth_type_trans(struct eth_type_trans_args *ctx)
return 0;
}
-SEC("fexit/eth_type_trans")
-int fexit_eth_type_trans(struct eth_type_trans_args *ctx)
+BPF_TRACE_3("fexit/eth_type_trans", fexit_eth_type_trans,
+ struct sk_buff *, skb, struct net_device *, dev,
+ unsigned short, protocol)
{
- struct sk_buff *skb = ctx->skb;
- struct net_device *dev = ctx->dev;
int len, ifindex;
__builtin_preserve_access_index(({
@@ -163,7 +146,7 @@ int fexit_eth_type_trans(struct eth_type_trans_args *ctx)
/* fexit sees packet without L2 header that eth_type_trans should have
* consumed.
*/
- if (len != 60 || ctx->protocol != bpf_htons(0x86dd) || ifindex != 1)
+ if (len != 60 || protocol != bpf_htons(0x86dd) || ifindex != 1)
return 0;
result.fexit_test_ok = true;
return 0;