eBPF for Windows
Loading...
Searching...
No Matches
ebpf_extension.h
Go to the documentation of this file.
1// Copyright (c) eBPF for Windows contributors
2// SPDX-License-Identifier: MIT
3#pragma once
4
5#include "ebpf_result.h"
6#include "ebpf_structs.h"
7#include "ebpf_windows.h"
8
9#define EBPF_MAP_OPERATION_HELPER \
10 0x01 /* Called by a BPF program. When this flag is not set, the provider function is \
11 * called in the context of the original user mode process, so the provider may \
12 * implicitly use the current process's handle table (e.g., to resolve file \
13 * descriptors passed as map values). */
14#define EBPF_MAP_OPERATION_UPDATE 0x02 /* Update operation. */
15#define EBPF_MAP_OPERATION_MAP_CLEANUP 0x04 /* Map cleanup operation. */
19typedef uint64_t epoch_state_t[4];
23 uint16_t version;
24 uint16_t count;
27
41 _In_ const void* extension_client_binding_context, _Inout_ void* program_context, _Out_ uint32_t* result);
42
55 size_t state_size, _Out_writes_(state_size) void* state);
56
69 _In_ const void* extension_client_binding_context,
70 _Inout_ void* program_context,
71 _Out_ uint32_t* result,
72 _In_ const void* state);
73
81typedef ebpf_result_t (*ebpf_program_batch_end_invoke_function_t)(_Inout_ void* state);
90#define EBPF_LINK_DISPATCH_TABLE_FUNCTION_COUNT_1 4
91#define EBPF_LINK_DISPATCH_TABLE_FUNCTION_COUNT_CURRENT \
92 EBPF_LINK_DISPATCH_TABLE_FUNCTION_COUNT_1
96 uint16_t version;
97 uint16_t count;
108 size_t data_size;
119
120/***
121 * The state of the execution context when the eBPF program was invoked.
122 * This is used to cache state that won't change during the execution of
123 * the eBPF program and is expensive to query.
124 */
126{
128 union
130 uint64_t thread;
131 uint32_t cpu;
132 } id;
134 struct
136 const void* next_program;
137 uint32_t count;
140
141#define EBPF_CONTEXT_HEADER uint64_t context_header[8]
142#define EBPF_CONTEXT_HEADER_SIZE (sizeof(uint64_t) * 8)
143
168 _In_ void* binding_context,
169 uint32_t map_type,
170 uint32_t key_size,
171 uint32_t value_size,
172 uint32_t max_entries,
173 _Out_ uint32_t* actual_value_size,
174 _Outptr_ void** map_context);
175
182typedef void (*ebpf_process_map_delete_t)(_In_ void* binding_context, _In_ _Post_invalid_ void* map_context);
183
209 _In_ void* binding_context,
210 _In_ void* map_context,
211 size_t key_size,
212 _In_reads_opt_(key_size) const uint8_t* key,
213 size_t in_value_size,
214 _In_reads_(in_value_size) const uint8_t* in_value,
215 size_t out_value_size,
216 _Out_writes_opt_(out_value_size) uint8_t* out_value,
217 uint32_t flags);
218
252 _In_ void* binding_context,
253 _In_ void* map_context,
254 size_t key_size,
255 _In_reads_opt_(key_size) const uint8_t* key,
256 size_t in_value_size,
257 _In_reads_(in_value_size) const uint8_t* in_value,
258 size_t out_value_size,
259 _Out_writes_opt_(out_value_size) uint8_t* out_value,
260 uint32_t flags);
261
291 _In_ void* binding_context,
292 _In_ void* map_context,
293 size_t key_size,
294 _In_reads_opt_(key_size) const uint8_t* key,
295 size_t value_size,
296 _In_reads_(value_size) const uint8_t* value,
297 uint32_t flags);
298
310 _In_ void* binding_context, _In_ void* map_context, _In_ const ebpf_program_type_t* program_type);
313{
315 bool updates_original_value; // Whether the provider updates the original value during map operations, which
316 // controls whether BPF programs can perform map CRUD operations.
318
333
342typedef _Ret_writes_maybenull_(size) void* (*ebpf_epoch_allocate_with_tag_t)(size_t size, uint32_t tag);
343
352typedef _Ret_writes_maybenull_(size) void* (*ebpf_epoch_allocate_cache_aligned_with_tag_t)(size_t size, uint32_t tag);
353
358typedef void (*ebpf_epoch_free_t)(_In_opt_ _Post_invalid_ void* memory);
359
364typedef void (*ebpf_epoch_free_cache_aligned_t)(_In_opt_ _Post_invalid_ void* pointer);
365
370typedef void (*ebpf_epoch_enter_t)(_Out_ void* epoch_state);
371
376typedef void (*ebpf_epoch_exit_t)(_In_ void* epoch_state);
377
390 _In_ const void* map, _In_ const uint8_t* key, _Outptr_ uint8_t** value);
391
423 ebpf_epoch_allocate_with_tag_t epoch_allocate_with_tag;
424 ebpf_epoch_allocate_cache_aligned_with_tag_t epoch_allocate_cache_aligned_with_tag;
428
435 uint32_t map_type;
436 uint32_t base_map_type;
440
447 uint64_t map_context_offset;
450
451#define MAP_CONTEXT(map_pointer, offset) ((void**)(((uint8_t*)(map_pointer)) + (offset)))
struct _ebpf_base_map_provider_properties ebpf_base_map_provider_properties_t
ebpf_result_t(* ebpf_program_batch_begin_invoke_function_t)(size_t state_size, _Out_writes_(state_size) void *state)
Prepare the eBPF program for batch invocation.
Definition ebpf_extension.h:51
struct _ebpf_attach_provider_data ebpf_attach_provider_data_t
ebpf_result_t(* ebpf_process_map_create_t)(void *binding_context, uint32_t map_type, uint32_t key_size, uint32_t value_size, uint32_t max_entries, uint32_t *actual_value_size, void **map_context)
Process map creation notification.
Definition ebpf_extension.h:164
ebpf_result_t(* ebpf_map_find_element_t)(const void *map, const uint8_t *key, uint8_t **value)
Find an element in an eBPF map (client/runtime helper version).
Definition ebpf_extension.h:386
struct _ebpf_map_provider_dispatch_table ebpf_base_map_provider_dispatch_table_t
struct _ebpf_extension_dispatch_table ebpf_extension_dispatch_table_t
void(* ebpf_epoch_exit_t)(void *epoch_state)
Exit an epoch-protected region.
Definition ebpf_extension.h:373
void(* ebpf_epoch_free_t)(void *memory)
Free memory under epoch control.
Definition ebpf_extension.h:355
struct _ebpf_map_client_data ebpf_map_client_data_t
Custom map client data.
struct _ebpf_extension_data ebpf_extension_data_t
struct _ebpf_extension_program_dispatch_table ebpf_extension_program_dispatch_table_t
enum _ebpf_link_dispatch_table_version ebpf_link_dispatch_table_version_t
ebpf_result_t(* _ebpf_extension_dispatch_function)()
Definition ebpf_extension.h:14
typedef _Ret_writes_maybenull_(size) void *(*ebpf_epoch_allocate_with_tag_t)(size_t size
Allocate memory under epoch control.
struct _ebpf_map_client_dispatch_table ebpf_base_map_client_dispatch_table_t
ebpf_result_t(* ebpf_program_batch_invoke_function_t)(const void *extension_client_binding_context, _Inout_ void *program_context, uint32_t *result, const void *state)
Invoke the eBPF program in batch mode.
Definition ebpf_extension.h:65
uint32_t tag
Definition ebpf_extension.h:339
struct _ebpf_map_provider_data ebpf_map_provider_data_t
Custom map provider data.
ebpf_result_t(* ebpf_preprocess_map_update_element_t)(void *binding_context, void *map_context, size_t key_size, _In_reads_opt_(key_size) const uint8_t *key, size_t in_value_size, _In_reads_(in_value_size) const uint8_t *in_value, size_t out_value_size, _Out_writes_opt_(out_value_size) uint8_t *out_value, uint32_t flags)
Pre-process an element update in a provider-backed map (called before the core update).
Definition ebpf_extension.h:248
ebpf_result_t(* ebpf_preprocess_map_delete_element_t)(void *binding_context, void *map_context, size_t key_size, _In_reads_opt_(key_size) const uint8_t *key, size_t value_size, _In_reads_(value_size) const uint8_t *value, uint32_t flags)
Pre-process an element deletion from a provider-backed map (called before the core delete).
Definition ebpf_extension.h:287
void(* ebpf_process_map_delete_t)(void *binding_context, void *map_context)
Process a map delete notification.
Definition ebpf_extension.h:179
struct _ebpf_execution_context_state ebpf_execution_context_state_t
void(* ebpf_epoch_enter_t)(void *epoch_state)
Enter an epoch-protected region.
Definition ebpf_extension.h:367
ebpf_result_t(* ebpf_postprocess_map_find_element_t)(void *binding_context, void *map_context, size_t key_size, _In_reads_opt_(key_size) const uint8_t *key, size_t in_value_size, _In_reads_(in_value_size) const uint8_t *in_value, size_t out_value_size, _Out_writes_opt_(out_value_size) uint8_t *out_value, uint32_t flags)
Post-process a found element in a provider-backed map (called after the core lookup).
Definition ebpf_extension.h:205
ebpf_result_t(* ebpf_program_batch_end_invoke_function_t)(_Inout_ void *state)
Clean up the eBPF program after batch invocation.
Definition ebpf_extension.h:78
uint64_t epoch_state_t[4]
Definition ebpf_extension.h:16
ebpf_result_t(* ebpf_map_associate_program_type_t)(void *binding_context, void *map_context, const ebpf_program_type_t *program_type)
Associate a program type with the map, which allows the map to be used by programs of that type.
Definition ebpf_extension.h:306
ebpf_result_t(* ebpf_program_invoke_function_t)(const void *extension_client_binding_context, _Inout_ void *program_context, uint32_t *result)
Invoke the eBPF program.
Definition ebpf_extension.h:37
_ebpf_link_dispatch_table_version
Definition ebpf_extension.h:81
@ EBPF_LINK_DISPATCH_TABLE_VERSION_1
Initial version of the dispatch table.
Definition ebpf_extension.h:82
@ EBPF_LINK_DISPATCH_TABLE_VERSION_CURRENT
Current version of the dispatch table.
Definition ebpf_extension.h:83
void(* ebpf_epoch_free_cache_aligned_t)(void *pointer)
Free memory under epoch control.
Definition ebpf_extension.h:361
enum ebpf_result ebpf_result_t
This file contains eBPF definitions common to eBPF programs, core execution engine as well as eBPF AP...
bpf_link_type
Definition ebpf_structs.h:272
enum bpf_attach_type bpf_attach_type_t
Definition ebpf_structs.h:353
GUID ebpf_program_type_t
Definition ebpf_windows.h:61
Definition ebpf_extension.h:110
ebpf_extension_header_t header
Definition ebpf_extension.h:111
ebpf_program_type_t supported_program_type
Definition ebpf_extension.h:112
bpf_attach_type_t bpf_attach_type
Definition ebpf_extension.h:113
enum bpf_link_type link_type
Definition ebpf_extension.h:114
Definition ebpf_extension.h:310
bool updates_original_value
Definition ebpf_extension.h:312
ebpf_extension_header_t header
Definition ebpf_extension.h:311
Definition ebpf_extension.h:123
union _ebpf_execution_context_state::@6 id
struct _ebpf_execution_context_state::@7 tail_call_state
uint8_t current_irql
Definition ebpf_extension.h:130
uint32_t count
Definition ebpf_extension.h:134
epoch_state_t epoch_state
Definition ebpf_extension.h:124
uint64_t thread
Definition ebpf_extension.h:127
const void * next_program
Definition ebpf_extension.h:133
uint32_t cpu
Definition ebpf_extension.h:128
Definition ebpf_extension.h:102
uint64_t prog_attach_flags
Definition ebpf_extension.h:106
ebpf_extension_header_t header
Definition ebpf_extension.h:103
const void * data
Definition ebpf_extension.h:104
size_t data_size
Definition ebpf_extension.h:105
Definition ebpf_extension.h:19
uint16_t version
Version of the dispatch table.
Definition ebpf_extension.h:20
uint16_t count
Number of entries in the dispatch table.
Definition ebpf_extension.h:21
_Field_size_(count) _ebpf_extension_dispatch_function function[1]
Header of an eBPF extension data structure. Every eBPF extension data structure must start with this ...
Definition ebpf_windows.h:196
Definition ebpf_extension.h:92
ebpf_program_invoke_function_t ebpf_program_invoke_function
Definition ebpf_extension.h:95
ebpf_program_batch_begin_invoke_function_t ebpf_program_batch_begin_invoke_function
Definition ebpf_extension.h:96
ebpf_program_batch_end_invoke_function_t ebpf_program_batch_end_invoke_function
Definition ebpf_extension.h:98
uint16_t version
Version of the dispatch table.
Definition ebpf_extension.h:93
ebpf_program_batch_invoke_function_t ebpf_program_batch_invoke_function
Definition ebpf_extension.h:97
uint16_t count
Number of entries in the dispatch table.
Definition ebpf_extension.h:94
Custom map client data.
Definition ebpf_extension.h:442
ebpf_base_map_client_dispatch_table_t * base_client_table
Pointer to base map client dispatch table.
Definition ebpf_extension.h:445
uint64_t map_context_offset
Offset within the map structure where the provider context data is stored.
Definition ebpf_extension.h:444
ebpf_extension_header_t header
Standard extension header containing version and size information.
Definition ebpf_extension.h:443
Definition ebpf_extension.h:415
ebpf_epoch_free_cache_aligned_t epoch_free_cache_aligned
Definition ebpf_extension.h:423
ebpf_epoch_allocate_cache_aligned_with_tag_t epoch_allocate_cache_aligned_with_tag
Definition ebpf_extension.h:421
ebpf_epoch_exit_t epoch_exit
Definition ebpf_extension.h:419
ebpf_epoch_enter_t epoch_enter
Definition ebpf_extension.h:418
ebpf_epoch_allocate_with_tag_t epoch_allocate_with_tag
Definition ebpf_extension.h:420
ebpf_epoch_free_t epoch_free
Definition ebpf_extension.h:422
ebpf_extension_header_t header
Definition ebpf_extension.h:416
ebpf_map_find_element_t find_element_function
Definition ebpf_extension.h:417
Custom map provider data.
Definition ebpf_extension.h:430
ebpf_extension_header_t header
Definition ebpf_extension.h:431
ebpf_base_map_provider_dispatch_table_t * base_provider_table
Pointer to base map provider dispatch table.
Definition ebpf_extension.h:435
uint32_t map_type
Custom map type implemented by the provider.
Definition ebpf_extension.h:432
uint32_t base_map_type
Base map type used to implement the custom map.
Definition ebpf_extension.h:433
ebpf_base_map_provider_properties_t * base_properties
Base map provider properties.
Definition ebpf_extension.h:434
Definition ebpf_extension.h:321
_Notnull_ ebpf_map_associate_program_type_t associate_program_function
Definition ebpf_extension.h:325
_Notnull_ ebpf_process_map_delete_t process_map_delete
Definition ebpf_extension.h:324
ebpf_preprocess_map_update_element_t preprocess_map_update_element
Definition ebpf_extension.h:327
_Notnull_ ebpf_process_map_create_t process_map_create
Definition ebpf_extension.h:323
ebpf_preprocess_map_delete_element_t preprocess_map_delete_element
Definition ebpf_extension.h:328
ebpf_postprocess_map_find_element_t postprocess_map_find_element
Definition ebpf_extension.h:326
ebpf_extension_header_t header
Definition ebpf_extension.h:322