1
2
3#include <stddef.h>
4#include <linux/bpf.h>
5#include <linux/types.h>
6#include "bpf_helpers.h"
7
8struct bpf_map_def SEC("maps") mim_array = {
9 .type = BPF_MAP_TYPE_ARRAY_OF_MAPS,
10 .key_size = sizeof(int),
11
12 .value_size = sizeof(__u32),
13 .max_entries = 1,
14 .map_flags = 0,
15};
16
17struct bpf_map_def SEC("maps") mim_hash = {
18 .type = BPF_MAP_TYPE_HASH_OF_MAPS,
19 .key_size = sizeof(int),
20
21 .value_size = sizeof(__u32),
22 .max_entries = 1,
23 .map_flags = 0,
24};
25
26SEC("xdp_mimtest")
27int xdp_mimtest0(struct xdp_md *ctx)
28{
29 int value = 123;
30 int *value_p;
31 int key = 0;
32 void *map;
33
34 map = bpf_map_lookup_elem(&mim_array, &key);
35 if (!map)
36 return XDP_DROP;
37
38 bpf_map_update_elem(map, &key, &value, 0);
39 value_p = bpf_map_lookup_elem(map, &key);
40 if (!value_p || *value_p != 123)
41 return XDP_DROP;
42
43 map = bpf_map_lookup_elem(&mim_hash, &key);
44 if (!map)
45 return XDP_DROP;
46
47 bpf_map_update_elem(map, &key, &value, 0);
48
49 return XDP_PASS;
50}
51
52int _version SEC("version") = 1;
53char _license[] SEC("license") = "GPL";
54