File Index
Files and directories
Sign in
FILE

bench_sockmap_prog.c

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/bpf/progs/bench_sockmap_prog.c C
 1// SPDX-License-Identifier: GPL-2.0
 2#include <linux/bpf.h>
 3#include <bpf/bpf_helpers.h>
 4#include <bpf/bpf_endian.h>
 5
 6long process_byte = 0;
 7int  verdict_dir = 0;
 8int  dropped = 0;
 9int  pkt_size = 0;
10struct {
11	__uint(type, BPF_MAP_TYPE_SOCKMAP);
12	__uint(max_entries, 20);
13	__type(key, int);
14	__type(value, int);
15} sock_map_rx SEC(".maps");
16
17struct {
18	__uint(type, BPF_MAP_TYPE_SOCKMAP);
19	__uint(max_entries, 20);
20	__type(key, int);
21	__type(value, int);
22} sock_map_tx SEC(".maps");
23
24SEC("sk_skb/stream_parser")
25int prog_skb_parser(struct __sk_buff *skb)
26{
27	return pkt_size;
28}
29
30SEC("sk_skb/stream_verdict")
31int prog_skb_verdict(struct __sk_buff *skb)
32{
33	int one = 1;
34	int ret =  bpf_sk_redirect_map(skb, &sock_map_rx, one, verdict_dir);
35
36	if (ret == SK_DROP)
37		dropped++;
38	__sync_fetch_and_add(&process_byte, skb->len);
39	return ret;
40}
41
42SEC("sk_skb/stream_verdict")
43int prog_skb_pass(struct __sk_buff *skb)
44{
45	__sync_fetch_and_add(&process_byte, skb->len);
46	return SK_PASS;
47}
48
49SEC("sk_msg")
50int prog_skmsg_verdict(struct sk_msg_md *msg)
51{
52	int one = 1;
53
54	__sync_fetch_and_add(&process_byte, msg->size);
55	return bpf_msg_redirect_map(msg, &sock_map_tx, one, verdict_dir);
56}
57
58SEC("sk_msg")
59int prog_skmsg_pass(struct sk_msg_md *msg)
60{
61	__sync_fetch_and_add(&process_byte, msg->size);
62	return SK_PASS;
63}
64
65char _license[] SEC("license") = "GPL";
~/ Read-only file preview.