linux/tools/testing/selftests/bpf/progs/linked_maps2.c
<<
>>
Prefs
   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";
  77