linked_maps2.c (1735B)
1// SPDX-License-Identifier: GPL-2.0 2/* Copyright (c) 2021 Facebook */ 3 4#include "vmlinux.h" 5#include <bpf/bpf_helpers.h> 6#include <bpf/bpf_tracing.h> 7 8/* modifiers and typedefs are ignored when comparing key/value types */ 9typedef struct my_key { long x; } key_type; 10typedef struct my_value { long x; } value_type; 11 12extern struct { 13 __uint(max_entries, 16); 14 __type(key, key_type); 15 __type(value, value_type); 16 __uint(type, BPF_MAP_TYPE_HASH); 17} map1 SEC(".maps"); 18 19struct { 20 __uint(type, BPF_MAP_TYPE_ARRAY); 21 __type(key, int); 22 __type(value, int); 23 __uint(max_entries, 8); 24} map2 SEC(".maps"); 25 26/* this definition will lose, but it has to exactly match the winner */ 27struct { 28 __uint(type, BPF_MAP_TYPE_ARRAY); 29 __type(key, int); 30 __type(value, int); 31 __uint(max_entries, 16); 32} map_weak __weak SEC(".maps"); 33 34int output_first2; 35int output_second2; 36int output_weak2; 37 38SEC("raw_tp/sys_enter") 39int BPF_PROG(handler_enter2) 40{ 41 /* update values with key = 2 */ 42 int key = 2, val = 2; 43 key_type key_struct = { .x = 2 }; 44 value_type val_struct = { .x = 2000 }; 45 46 bpf_map_update_elem(&map1, &key_struct, &val_struct, 0); 47 bpf_map_update_elem(&map2, &key, &val, 0); 48 bpf_map_update_elem(&map_weak, &key, &val, 0); 49 50 return 0; 51} 52 53SEC("raw_tp/sys_exit") 54int BPF_PROG(handler_exit2) 55{ 56 /* lookup values with key = 1, set in another file */ 57 int key = 1, *val; 58 key_type key_struct = { .x = 1 }; 59 value_type *value_struct; 60 61 value_struct = bpf_map_lookup_elem(&map1, &key_struct); 62 if (value_struct) 63 output_first2 = value_struct->x; 64 65 val = bpf_map_lookup_elem(&map2, &key); 66 if (val) 67 output_second2 = *val; 68 69 val = bpf_map_lookup_elem(&map_weak, &key); 70 if (val) 71 output_weak2 = *val; 72 73 return 0; 74} 75 76char LICENSE[] SEC("license") = "GPL";