brintos

brintos / linux-shallow public Read only

0
0
Text · 1.6 KiB · b295f9b Raw
77 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright (c) 2018 Facebook */3#include <stddef.h>4#include <linux/bpf.h>5#include <linux/types.h>6#include <bpf/bpf_helpers.h>7 8struct {9	__uint(type, BPF_MAP_TYPE_ARRAY_OF_MAPS);10	__uint(max_entries, 1);11	__uint(map_flags, 0);12	__type(key, __u32);13	__type(value, __u32);14} mim_array SEC(".maps");15 16struct {17	__uint(type, BPF_MAP_TYPE_HASH_OF_MAPS);18	__uint(max_entries, 1);19	__uint(map_flags, 0);20	__type(key, int);21	__type(value, __u32);22} mim_hash SEC(".maps");23 24/* The following three maps are used to test25 * perf_event_array map can be an inner26 * map of hash/array_of_maps.27 */28struct perf_event_array {29	__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);30	__type(key, __u32);31	__type(value, __u32);32} inner_map0 SEC(".maps");33 34struct {35	__uint(type, BPF_MAP_TYPE_ARRAY_OF_MAPS);36	__uint(max_entries, 1);37	__type(key, __u32);38	__array(values, struct perf_event_array);39} mim_array_pe SEC(".maps") = {40	.values = {&inner_map0}};41 42struct {43	__uint(type, BPF_MAP_TYPE_HASH_OF_MAPS);44	__uint(max_entries, 1);45	__type(key, __u32);46	__array(values, struct perf_event_array);47} mim_hash_pe SEC(".maps") = {48	.values = {&inner_map0}};49 50SEC("xdp")51int xdp_mimtest0(struct xdp_md *ctx)52{53	int value = 123;54	int *value_p;55	int key = 0;56	void *map;57 58	map = bpf_map_lookup_elem(&mim_array, &key);59	if (!map)60		return XDP_DROP;61 62	bpf_map_update_elem(map, &key, &value, 0);63	value_p = bpf_map_lookup_elem(map, &key);64	if (!value_p || *value_p != 123)65		return XDP_DROP;66 67	map = bpf_map_lookup_elem(&mim_hash, &key);68	if (!map)69		return XDP_DROP;70 71	bpf_map_update_elem(map, &key, &value, 0);72 73	return XDP_PASS;74}75 76char _license[] SEC("license") = "GPL";77