brintos

brintos / linux-shallow public Read only

0
0
Text · 2.3 KiB · 719e314 Raw
107 lines · c
1// SPDX-License-Identifier: GPL-2.02// 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/bpf_helpers.h>9 10struct {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 17struct {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 24struct foo {25	__u8  a;26	__u32 b;27	__u64 c;28};29 30struct {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. */38static       __u64 num0;39static       __u64 num1 = 42;40static const __u64 num2 = 24;41static       __u64 num3 = 0;42static       __u64 num4 = 0xffeeff;43static const __u64 num5 = 0xabab;44static const __u64 num6 = 0xab;45 46/* Relocation tests for strings. */47static const char str0[32] = "abcdefghijklmnopqrstuvwxyz";48static       char str1[32] = "abcdefghijklmnopqrstuvwxyz";49static       char str2[32];50 51/* Relocation tests for structs. */52static const struct foo struct0 = {53	.a = 42,54	.b = 0xfefeefef,55	.c = 0x1111111111111111ULL,56};57static struct foo struct1;58static const struct foo struct2;59static 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 71SEC("tc")72int 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 106char _license[] SEC("license") = "GPL";107