P4C
The P4 Compiler
Loading...
Searching...
No Matches
ebpf_test.h
1/*
2Copyright 2018 VMware, Inc.
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15*/
16
22#ifndef BACKENDS_EBPF_RUNTIME_EBPF_USER_H_
23#define BACKENDS_EBPF_RUNTIME_EBPF_USER_H_
24
25#include "ebpf_registry.h"
26#include "ebpf_common.h"
27
28#include <endian.h>
29
31#define htonll(x) htobe64(x)
32#define ntohll(x) be64toh(x)
33
34#define bpf_htons(x) htobe16(x)
35#define bpf_ntohs(x) be16toh(x)
36#define bpf_htonl(x) htobe32(x)
37#define bpf_ntohl(x) be32toh(x)
38#define bpf_cpu_to_be64(x) htobe64(x)
39#define bpf_be64_to_cpu(x) be64toh(x)
40
41#define load_byte(data, b) (*(((u8*)(data)) + (b)))
42#define load_half(data, b) bpf_ntohs(*(u16 *)((u8*)(data) + (b)))
43#define load_word(data, b) bpf_ntohl(*(u32 *)((u8*)(data) + (b)))
44#define load_dword(data, b) bpf_be64_to_cpu(*(u64 *)((u8*)(data) + (b)))
45
46
47
48#define bpf_printk(fmt, ...) \
49 ({ \
50 char ____fmt[] = fmt; \
51 printf(____fmt, sizeof(____fmt), \
52 ##__VA_ARGS__); \
53 })
54
59#define SEC(NAME)
60
62struct sk_buff {
63 void *data;
64 u16 len;
65 u32 ifindex;
66};
67
69#define BPF_ANY 0
70#define BPF_NOEXIST 1
71#define BPF_EXIST 2
72#define BPF_F_LOCK 4
73
75enum bpf_map_type {
76 BPF_MAP_TYPE_HASH,
77 BPF_MAP_TYPE_ARRAY,
78};
79
80
81
82#define SK_BUFF struct sk_buff
83#define REGISTER_START() \
84struct bpf_table tables[] = {
85#define REGISTER_TABLE(NAME, TYPE, KEY_SIZE, VALUE_SIZE, MAX_ENTRIES) \
86 { MAP_PATH"/"#NAME, TYPE, KEY_SIZE, VALUE_SIZE, MAX_ENTRIES, NULL },
87#define REGISTER_END() \
88 { 0, 0, 0, 0, 0 } \
89};
90
91#define BPF_MAP_LOOKUP_ELEM(table, key) \
92 registry_lookup_table_elem(MAP_PATH"/"#table, key)
93#define BPF_MAP_UPDATE_ELEM(table, key, value, flags) \
94 registry_update_table(MAP_PATH"/"#table, key, value, flags)
95#define BPF_MAP_DELETE_ELEM(table, key) \
96 registry_delete_table_elem(MAP_PATH"/"#table, key)
97#define BPF_USER_MAP_UPDATE_ELEM(index, key, value, flags)\
98 registry_update_table_id(index, key, value, flags)
99#define BPF_OBJ_PIN(table, name) registry_add(table)
100#define BPF_OBJ_GET(name) registry_get_id(name)
101
102
104extern struct bpf_table tables[];
105extern int ebpf_filter(struct sk_buff *skb);
106
107
108#endif // BACKENDS_EBPF_RUNTIME_EBPF_USER_H_
A helper structure used to describe attributes.
Definition ebpf_registry.h:36
simple descriptor which replaces the kernel sk_buff structure.
Definition ebpf_test.h:62