1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (c) 2021 Facebook */
3 #include <linux/types.h>
4 #include <bpf/bpf_helpers.h>
8 #define TWFW_MAX_TIERS (64)
11 * #define TWFW_MAX_TIERS (64u)$
14 struct twfw_tier_value {
15 unsigned long mask[1];
23 __uint(type, BPF_MAP_TYPE_ARRAY);
25 __type(value, struct rule);
26 __uint(max_entries, 1);
30 __uint(type, BPF_MAP_TYPE_ARRAY);
32 __type(value, struct twfw_tier_value);
33 __uint(max_entries, 1);
36 struct rules_map rules SEC(".maps");
37 struct tiers_map tiers SEC(".maps");
39 SEC("cgroup_skb/ingress")
40 int twfw_verifier(struct __sk_buff* skb)
42 const uint32_t key = 0;
43 const struct twfw_tier_value* tier = bpf_map_lookup_elem(&tiers, &key);
47 struct rule* rule = bpf_map_lookup_elem(&rules, &key);
51 if (rule && rule->seqnum < TWFW_MAX_TIERS) {
52 /* rule->seqnum / 64 should always be 0 */
53 unsigned long mask = tier->mask[rule->seqnum / 64];