linux/tools/testing/selftests/bpf/progs/test_global_func_args.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2
   3#include <linux/bpf.h>
   4
   5#include <bpf/bpf_helpers.h>
   6
   7struct S {
   8        int v;
   9};
  10
  11struct S global_variable = {};
  12
  13struct {
  14        __uint(type, BPF_MAP_TYPE_ARRAY);
  15        __uint(max_entries, 7);
  16        __type(key, __u32);
  17        __type(value, int);
  18} values SEC(".maps");
  19
  20static void save_value(__u32 index, int value)
  21{
  22        bpf_map_update_elem(&values, &index, &value, 0);
  23}
  24
  25__noinline int foo(__u32 index, struct S *s)
  26{
  27        if (s) {
  28                save_value(index, s->v);
  29                return ++s->v;
  30        }
  31
  32        save_value(index, 0);
  33
  34        return 1;
  35}
  36
  37__noinline int bar(__u32 index, volatile struct S *s)
  38{
  39        if (s) {
  40                save_value(index, s->v);
  41                return ++s->v;
  42        }
  43
  44        save_value(index, 0);
  45
  46        return 1;
  47}
  48
  49__noinline int baz(struct S **s)
  50{
  51        if (s)
  52                *s = 0;
  53
  54        return 0;
  55}
  56
  57SEC("cgroup_skb/ingress")
  58int test_cls(struct __sk_buff *skb)
  59{
  60        __u32 index = 0;
  61
  62        {
  63                const int v = foo(index++, 0);
  64
  65                save_value(index++, v);
  66        }
  67
  68        {
  69                struct S s = { .v = 100 };
  70
  71                foo(index++, &s);
  72                save_value(index++, s.v);
  73        }
  74
  75        {
  76                global_variable.v = 42;
  77                bar(index++, &global_variable);
  78                save_value(index++, global_variable.v);
  79        }
  80
  81        {
  82                struct S v, *p = &v;
  83
  84                baz(&p);
  85                save_value(index++, !p);
  86        }
  87
  88        return 0;
  89}
  90
  91char _license[] SEC("license") = "GPL";
  92