// SPDX-License-Identifier: GPL-2.0
// Copyright (c) 2019 Isovalent, Inc.
#include <linux/bpf.h>
#include <linux/pkt_cls.h>
#include <string.h>
#include <bpf/bpf_helpers.h>
struct {
__uint(type, BPF_MAP_TYPE_ARRAY);
__uint(max_entries, 11 );
__type(key, __u32);
__type(value, __u64);
} result_number SEC(".maps" );
struct {
__uint(type, BPF_MAP_TYPE_ARRAY);
__uint(max_entries, 5 );
__type(key, __u32);
const char (*value)[32 ];
} result_string SEC(".maps" );
struct foo {
__u8 a;
__u32 b;
__u64 c;
};
struct {
__uint(type, BPF_MAP_TYPE_ARRAY);
__uint(max_entries, 5 );
__type(key, __u32);
__type(value, struct foo);
} result_struct SEC(".maps" );
/* Relocation tests for __u64s. */
static __u64 num0;
static __u64 num1 = 42 ;
static const __u64 num2 = 24 ;
static __u64 num3 = 0 ;
static __u64 num4 = 0 xffeeff;
static const __u64 num5 = 0 xabab;
static const __u64 num6 = 0 xab;
/* Relocation tests for strings. */
static const char str0[32 ] = "abcdefghijklmnopqrstuvwxyz" ;
static char str1[32 ] = "abcdefghijklmnopqrstuvwxyz" ;
static char str2[32 ];
/* Relocation tests for structs. */
static const struct foo struct0 = {
.a = 42 ,
.b = 0 xfefeefef,
.c = 0 x1111111111111111ULL,
};
static struct foo struct1;
static const struct foo struct2;
static struct foo struct3 = {
.a = 41 ,
.b = 0 xeeeeefef,
.c = 0 x2111111111111111ULL,
};
#define test_reloc(map, num, var) \
do { \
__u32 key = num; \
bpf_map_update_elem(&result_## map, &key, var, 0 ); \
} while (0 )
SEC("tc" )
int load_static_data(struct __sk_buff *skb)
{
static const __u64 bar = ~0 ;
test_reloc(number, 0 , &num0);
test_reloc(number, 1 , &num1);
test_reloc(number, 2 , &num2);
test_reloc(number, 3 , &num3);
test_reloc(number, 4 , &num4);
test_reloc(number, 5 , &num5);
num4 = 1234 ;
test_reloc(number, 6 , &num4);
test_reloc(number, 7 , &num0);
test_reloc(number, 8 , &num6);
test_reloc(string, 0 , str0);
test_reloc(string, 1 , str1);
test_reloc(string, 2 , str2);
str1[5 ] = 'x' ;
test_reloc(string, 3 , str1);
__builtin_memcpy(&str2[2 ], "hello" , sizeof ("hello" ));
test_reloc(string, 4 , str2);
test_reloc(struct , 0 , &struct0);
test_reloc(struct , 1 , &struct1);
test_reloc(struct , 2 , &struct2);
test_reloc(struct , 3 , &struct3);
test_reloc(number, 9 , &struct0.c);
test_reloc(number, 10 , &bar);
return TC_ACT_OK;
}
char _license[] SEC("license" ) = "GPL" ;
Messung V0.5 in Prozent C=96 H=88 G=91
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-08)
¤
*© Formatika GbR, Deutschland