1bd4aed0eSJiong Wang // SPDX-License-Identifier: GPL-2.0 2bd4aed0eSJiong Wang /* Copyright (c) 2018 Facebook */ 3bd4aed0eSJiong Wang #include <stddef.h> 4bd4aed0eSJiong Wang #include <linux/bpf.h> 5bd4aed0eSJiong Wang #include <linux/types.h> 6bd4aed0eSJiong Wang #include "bpf_helpers.h" 7bd4aed0eSJiong Wang 81639b17cSAndrii Nakryiko struct { 91639b17cSAndrii Nakryiko __uint(type, BPF_MAP_TYPE_ARRAY_OF_MAPS); 101639b17cSAndrii Nakryiko __uint(max_entries, 1); 111639b17cSAndrii Nakryiko __uint(map_flags, 0); 121639b17cSAndrii Nakryiko __uint(key_size, sizeof(__u32)); 13bd4aed0eSJiong Wang /* must be sizeof(__u32) for map in map */ 141639b17cSAndrii Nakryiko __uint(value_size, sizeof(__u32)); 151639b17cSAndrii Nakryiko } mim_array SEC(".maps"); 16bd4aed0eSJiong Wang 171639b17cSAndrii Nakryiko struct { 181639b17cSAndrii Nakryiko __uint(type, BPF_MAP_TYPE_HASH_OF_MAPS); 191639b17cSAndrii Nakryiko __uint(max_entries, 1); 201639b17cSAndrii Nakryiko __uint(map_flags, 0); 211639b17cSAndrii Nakryiko __uint(key_size, sizeof(int)); 22bd4aed0eSJiong Wang /* must be sizeof(__u32) for map in map */ 231639b17cSAndrii Nakryiko __uint(value_size, sizeof(__u32)); 241639b17cSAndrii Nakryiko } mim_hash SEC(".maps"); 25bd4aed0eSJiong Wang 26bd4aed0eSJiong Wang SEC("xdp_mimtest") 27bd4aed0eSJiong Wang int xdp_mimtest0(struct xdp_md *ctx) 28bd4aed0eSJiong Wang { 29bd4aed0eSJiong Wang int value = 123; 309eca5083SYonghong Song int *value_p; 31bd4aed0eSJiong Wang int key = 0; 32bd4aed0eSJiong Wang void *map; 33bd4aed0eSJiong Wang 34bd4aed0eSJiong Wang map = bpf_map_lookup_elem(&mim_array, &key); 35bd4aed0eSJiong Wang if (!map) 36bd4aed0eSJiong Wang return XDP_DROP; 37bd4aed0eSJiong Wang 38bd4aed0eSJiong Wang bpf_map_update_elem(map, &key, &value, 0); 399eca5083SYonghong Song value_p = bpf_map_lookup_elem(map, &key); 409eca5083SYonghong Song if (!value_p || *value_p != 123) 419eca5083SYonghong Song return XDP_DROP; 42bd4aed0eSJiong Wang 43bd4aed0eSJiong Wang map = bpf_map_lookup_elem(&mim_hash, &key); 44bd4aed0eSJiong Wang if (!map) 45bd4aed0eSJiong Wang return XDP_DROP; 46bd4aed0eSJiong Wang 47bd4aed0eSJiong Wang bpf_map_update_elem(map, &key, &value, 0); 48bd4aed0eSJiong Wang 49bd4aed0eSJiong Wang return XDP_PASS; 50bd4aed0eSJiong Wang } 51bd4aed0eSJiong Wang 52bd4aed0eSJiong Wang int _version SEC("version") = 1; 53bd4aed0eSJiong Wang char _license[] SEC("license") = "GPL"; 54