root/tools/testing/selftests/bpf/progs/test_global_data.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. SEC

   1 // SPDX-License-Identifier: GPL-2.0
   2 // Copyright (c) 2019 Isovalent, Inc.
   3 
   4 #include <linux/bpf.h>
   5 #include <linux/pkt_cls.h>
   6 #include <string.h>
   7 
   8 #include "bpf_helpers.h"
   9 
  10 struct {
  11         __uint(type, BPF_MAP_TYPE_ARRAY);
  12         __uint(max_entries, 11);
  13         __type(key, __u32);
  14         __type(value, __u64);
  15 } result_number SEC(".maps");
  16 
  17 struct {
  18         __uint(type, BPF_MAP_TYPE_ARRAY);
  19         __uint(max_entries, 5);
  20         __type(key, __u32);
  21         const char (*value)[32];
  22 } result_string SEC(".maps");
  23 
  24 struct foo {
  25         __u8  a;
  26         __u32 b;
  27         __u64 c;
  28 };
  29 
  30 struct {
  31         __uint(type, BPF_MAP_TYPE_ARRAY);
  32         __uint(max_entries, 5);
  33         __type(key, __u32);
  34         __type(value, struct foo);
  35 } result_struct SEC(".maps");
  36 
  37 /* Relocation tests for __u64s. */
  38 static       __u64 num0;
  39 static       __u64 num1 = 42;
  40 static const __u64 num2 = 24;
  41 static       __u64 num3 = 0;
  42 static       __u64 num4 = 0xffeeff;
  43 static const __u64 num5 = 0xabab;
  44 static const __u64 num6 = 0xab;
  45 
  46 /* Relocation tests for strings. */
  47 static const char str0[32] = "abcdefghijklmnopqrstuvwxyz";
  48 static       char str1[32] = "abcdefghijklmnopqrstuvwxyz";
  49 static       char str2[32];
  50 
  51 /* Relocation tests for structs. */
  52 static const struct foo struct0 = {
  53         .a = 42,
  54         .b = 0xfefeefef,
  55         .c = 0x1111111111111111ULL,
  56 };
  57 static struct foo struct1;
  58 static const struct foo struct2;
  59 static struct foo struct3 = {
  60         .a = 41,
  61         .b = 0xeeeeefef,
  62         .c = 0x2111111111111111ULL,
  63 };
  64 
  65 #define test_reloc(map, num, var)                                       \
  66         do {                                                            \
  67                 __u32 key = num;                                        \
  68                 bpf_map_update_elem(&result_##map, &key, var, 0);       \
  69         } while (0)
  70 
  71 SEC("static_data_load")
  72 int load_static_data(struct __sk_buff *skb)
  73 {
  74         static const __u64 bar = ~0;
  75 
  76         test_reloc(number, 0, &num0);
  77         test_reloc(number, 1, &num1);
  78         test_reloc(number, 2, &num2);
  79         test_reloc(number, 3, &num3);
  80         test_reloc(number, 4, &num4);
  81         test_reloc(number, 5, &num5);
  82         num4 = 1234;
  83         test_reloc(number, 6, &num4);
  84         test_reloc(number, 7, &num0);
  85         test_reloc(number, 8, &num6);
  86 
  87         test_reloc(string, 0, str0);
  88         test_reloc(string, 1, str1);
  89         test_reloc(string, 2, str2);
  90         str1[5] = 'x';
  91         test_reloc(string, 3, str1);
  92         __builtin_memcpy(&str2[2], "hello", sizeof("hello"));
  93         test_reloc(string, 4, str2);
  94 
  95         test_reloc(struct, 0, &struct0);
  96         test_reloc(struct, 1, &struct1);
  97         test_reloc(struct, 2, &struct2);
  98         test_reloc(struct, 3, &struct3);
  99 
 100         test_reloc(number,  9, &struct0.c);
 101         test_reloc(number, 10, &bar);
 102 
 103         return TC_ACT_OK;
 104 }
 105 
 106 char _license[] SEC("license") = "GPL";

/* [<][>][^][v][top][bottom][index][help] */