1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (c) 2020 Cloudflare
8 #include <bpf/bpf_helpers.h>
11 __uint(type, BPF_MAP_TYPE_SOCKMAP);
12 __uint(max_entries, 2);
15 } sock_map SEC(".maps");
18 __uint(type, BPF_MAP_TYPE_SOCKHASH);
19 __uint(max_entries, 2);
22 } sock_hash SEC(".maps");
25 __uint(type, BPF_MAP_TYPE_ARRAY);
26 __uint(max_entries, 2);
28 __type(value, unsigned int);
29 } verdict_map SEC(".maps");
31 static volatile bool test_sockmap; /* toggled by user-space */
33 SEC("sk_skb/stream_parser")
34 int prog_stream_parser(struct __sk_buff *skb)
39 SEC("sk_skb/stream_verdict")
40 int prog_stream_verdict(struct __sk_buff *skb)
47 verdict = bpf_sk_redirect_map(skb, &sock_map, zero, 0);
49 verdict = bpf_sk_redirect_hash(skb, &sock_hash, &zero, 0);
51 count = bpf_map_lookup_elem(&verdict_map, &verdict);
59 int prog_msg_verdict(struct sk_msg_md *msg)
66 verdict = bpf_msg_redirect_map(msg, &sock_map, zero, 0);
68 verdict = bpf_msg_redirect_hash(msg, &sock_hash, &zero, 0);
70 count = bpf_map_lookup_elem(&verdict_map, &verdict);
78 int prog_reuseport(struct sk_reuseport_md *reuse)
85 err = bpf_sk_select_reuseport(reuse, &sock_map, &zero, 0);
87 err = bpf_sk_select_reuseport(reuse, &sock_hash, &zero, 0);
88 verdict = err ? SK_DROP : SK_PASS;
90 count = bpf_map_lookup_elem(&verdict_map, &verdict);
97 int _version SEC("version") = 1;
98 char _license[] SEC("license") = "GPL";