Skip to content

Commit

Permalink
test extension - Part 1 (#336)
Browse files Browse the repository at this point in the history
* test extension
  • Loading branch information
shankarseal committed Jul 14, 2021
1 parent 4d0ac1b commit 266578e
Show file tree
Hide file tree
Showing 25 changed files with 1,656 additions and 108 deletions.
73 changes: 72 additions & 1 deletion ebpf-for-windows.sln
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,12 @@ EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_util", "tests\libs\util\test_util.vcxproj", "{D6725F19-B9BF-435F-80F2-C5F3EF0F4B8F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit_tests", "tests\unit\test.vcxproj", "{A4037E5D-B00C-4AF1-9398-76B3ECE95F62}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ebpfnetsh", "libs\ebpfnetsh\ebpfnetsh.vcxproj", "{370E7D53-C97F-4077-A3D5-620C4FD87EED}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netsh_static", "libs\ebpfnetsh\ebpfnetsh.vcxproj", "{370E7D53-C97F-4077-A3D5-620C4FD87EED}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_ebpf_ext", "tests\ext\drv\test_ext.vcxproj", "{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_ext_app", "tests\ext\app\test_ext_app.vcxproj", "{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand Down Expand Up @@ -985,6 +990,70 @@ Global
{370E7D53-C97F-4077-A3D5-620C4FD87EED}.RelWithDebInfo|x64.Build.0 = Release|x64
{370E7D53-C97F-4077-A3D5-620C4FD87EED}.RelWithDebInfo|x86.ActiveCfg = Release|Win32
{370E7D53-C97F-4077-A3D5-620C4FD87EED}.RelWithDebInfo|x86.Build.0 = Release|Win32
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Debug|ARM.ActiveCfg = Debug|ARM
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Debug|ARM.Build.0 = Debug|ARM
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Debug|ARM64.ActiveCfg = Debug|ARM64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Debug|ARM64.Build.0 = Debug|ARM64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Debug|x64.ActiveCfg = Debug|x64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Debug|x64.Build.0 = Debug|x64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Debug|x64.Deploy.0 = Debug|x64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Debug|x86.ActiveCfg = Debug|Win32
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Debug|x86.Build.0 = Debug|Win32
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.MinSizeRel|ARM.ActiveCfg = Debug|ARM
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.MinSizeRel|ARM.Build.0 = Debug|ARM
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.MinSizeRel|ARM64.ActiveCfg = Debug|ARM64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.MinSizeRel|ARM64.Build.0 = Debug|ARM64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.MinSizeRel|x64.ActiveCfg = Debug|x64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.MinSizeRel|x64.Build.0 = Debug|x64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.MinSizeRel|x64.Deploy.0 = Debug|x64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.MinSizeRel|x86.ActiveCfg = Debug|Win32
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.MinSizeRel|x86.Build.0 = Debug|Win32
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Release|ARM.ActiveCfg = Release|ARM
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Release|ARM.Build.0 = Release|ARM
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Release|ARM64.ActiveCfg = Release|ARM64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Release|ARM64.Build.0 = Release|ARM64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Release|x64.ActiveCfg = Release|x64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Release|x64.Build.0 = Release|x64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Release|x64.Deploy.0 = Release|x64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Release|x86.ActiveCfg = Release|Win32
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.Release|x86.Build.0 = Release|Win32
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.RelWithDebInfo|ARM.ActiveCfg = Release|ARM
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.RelWithDebInfo|ARM.Build.0 = Release|ARM
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.RelWithDebInfo|ARM64.ActiveCfg = Release|ARM64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.RelWithDebInfo|ARM64.Build.0 = Release|ARM64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.RelWithDebInfo|x64.Build.0 = Release|x64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.RelWithDebInfo|x64.Deploy.0 = Release|x64
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.RelWithDebInfo|x86.ActiveCfg = Release|Win32
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E}.RelWithDebInfo|x86.Build.0 = Release|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.Debug|ARM.ActiveCfg = Debug|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.Debug|ARM64.ActiveCfg = Debug|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.Debug|x64.ActiveCfg = Debug|x64
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.Debug|x64.Build.0 = Debug|x64
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.Debug|x86.ActiveCfg = Debug|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.Debug|x86.Build.0 = Debug|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.MinSizeRel|ARM.ActiveCfg = Debug|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.MinSizeRel|ARM.Build.0 = Debug|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.MinSizeRel|ARM64.ActiveCfg = Debug|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.MinSizeRel|ARM64.Build.0 = Debug|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.MinSizeRel|x64.ActiveCfg = Debug|x64
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.MinSizeRel|x64.Build.0 = Debug|x64
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.MinSizeRel|x86.ActiveCfg = Debug|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.MinSizeRel|x86.Build.0 = Debug|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.Release|ARM.ActiveCfg = Release|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.Release|ARM64.ActiveCfg = Release|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.Release|x64.ActiveCfg = Release|x64
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.Release|x64.Build.0 = Release|x64
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.Release|x86.ActiveCfg = Release|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.Release|x86.Build.0 = Release|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.RelWithDebInfo|ARM.ActiveCfg = Debug|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.RelWithDebInfo|ARM.Build.0 = Debug|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.RelWithDebInfo|ARM64.ActiveCfg = Debug|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.RelWithDebInfo|ARM64.Build.0 = Debug|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.RelWithDebInfo|x64.ActiveCfg = Release|x64
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.RelWithDebInfo|x64.Build.0 = Release|x64
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.RelWithDebInfo|x86.ActiveCfg = Release|Win32
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76}.RelWithDebInfo|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -1020,6 +1089,8 @@ Global
{D6725F19-B9BF-435F-80F2-C5F3EF0F4B8F} = {492C9B22-9237-4996-9E33-CA14D3533616}
{A4037E5D-B00C-4AF1-9398-76B3ECE95F62} = {492C9B22-9237-4996-9E33-CA14D3533616}
{370E7D53-C97F-4077-A3D5-620C4FD87EED} = {69CDB6A1-434D-4BC9-9BFF-D12DF7EDBB6B}
{C8D46543-5AE5-4E66-B9CE-8B84588B1C9E} = {492C9B22-9237-4996-9E33-CA14D3533616}
{7358D8BD-4123-4B2D-86C0-87F6BA6CED76} = {492C9B22-9237-4996-9E33-CA14D3533616}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {3D5F862D-74C6-4357-9F95-0B152E33B7B8}
Expand Down
3 changes: 0 additions & 3 deletions ebpfcore/ebpf_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -261,9 +261,6 @@ _ebpf_driver_io_device_control(
const struct _ebpf_operation_header* user_request = NULL;
struct _ebpf_operation_header* user_reply = NULL;

UNREFERENCED_PARAMETER(output_buffer_length);
UNREFERENCED_PARAMETER(input_buffer_length);

device = WdfIoQueueGetDevice(queue);

switch (io_control_code) {
Expand Down
4 changes: 3 additions & 1 deletion ebpfsvc/eBPFSvc.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<LinkIncremental>false</LinkIncremental>
<IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>
<ExecutablePath>$(ExecutablePath)</ExecutablePath>
</PropertyGroup>
Expand All @@ -99,6 +99,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
Expand Down Expand Up @@ -135,6 +136,7 @@
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalIncludeDirectories>$(SolutionDir)libs\api_common;$(SolutionDir)libs\execution_context;$(SolutionDir)libs\api;$(SolutionDir)libs\platform;$(SolutionDir)libs\service;$(SolutionDir)include;$(SolutionDir)rpc_interface;$(SolutionDir)libs\platform\user;$(SolutionDir)external\ubpf\vm;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ebpf-verifier\external;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpplatest</LanguageStandard>
</ClCompile>
Expand Down
6 changes: 6 additions & 0 deletions include/ebpf_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ extern "C"
__declspec(selectany) ebpf_attach_type_t EBPF_ATTACH_TYPE_BIND = {
0xb9707e04, 0x8127, 0x4c72, {0x83, 0x3e, 0x05, 0xb1, 0xfb, 0x43, 0x94, 0x96}};

__declspec(selectany) ebpf_attach_type_t EBPF_ATTACH_TYPE_TEST = {
0xf788ef4b, 0x207d, 0x4dc3, {0x85, 0xcf, 0x0f, 0x2e, 0xa1, 0x07, 0x21, 0x3c}};

__declspec(selectany) ebpf_attach_type_t EBPF_PROGRAM_TYPE_UNSPECIFIED = {0};

/** @brief Program type for handling incoming packets as early as possible.
Expand All @@ -58,6 +61,9 @@ extern "C"
__declspec(selectany) ebpf_program_type_t EBPF_PROGRAM_TYPE_BIND = {
0x608c517c, 0x6c52, 0x4a26, {0xb6, 0x77, 0xbb, 0x1c, 0x34, 0x42, 0x5a, 0xdf}};

__declspec(selectany) ebpf_program_type_t EBPF_PROGRAM_TYPE_TEST = {
0xf788ef4a, 0x207d, 0x4dc3, {0x85, 0xcf, 0x0f, 0x2e, 0xa1, 0x07, 0x21, 0x3c}};

typedef int32_t fd_t;
const fd_t ebpf_fd_invalid = -1;
typedef void* ebpf_handle_t;
Expand Down
4 changes: 2 additions & 2 deletions libs/api_common/api_common.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<AdditionalIncludeDirectories>$(SolutionDir)libs\api;$(SolutionDir)include;$(SolutionDir)libs\platform;$(SolutionDir)libs\platform\user;$(SolutionDir)libs\execution_context;$(SolutionDir)external\ubpf\vm;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ebpf-verifier\external;$(OutDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)libs\api;$(SolutionDir)include;$(SolutionDir)libs\platform;$(SolutionDir)libs\platform\user;$(SolutionDir)libs\execution_context;$(SolutionDir)external\ubpf\vm;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ebpf-verifier\external;$(SolutionDir)tests\ext\inc;$(OutDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpplatest</LanguageStandard>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<TreatWarningAsError>true</TreatWarningAsError>
Expand All @@ -155,7 +155,7 @@
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<AdditionalIncludeDirectories>$(SolutionDir)libs\api;$(SolutionDir)include;$(SolutionDir)libs\platform;$(SolutionDir)libs\platform\user;$(SolutionDir)libs\execution_context;$(SolutionDir)external\ubpf\vm;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ebpf-verifier\external;$(OutDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)libs\api;$(SolutionDir)include;$(SolutionDir)libs\platform;$(SolutionDir)libs\platform\user;$(SolutionDir)libs\execution_context;$(SolutionDir)external\ubpf\vm;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ebpf-verifier\external;$(SolutionDir)tests\ext\inc;$(OutDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpplatest</LanguageStandard>
<TreatWarningAsError>true</TreatWarningAsError>
</ClCompile>
Expand Down
19 changes: 15 additions & 4 deletions libs/api_common/windows_platform_common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "ebpf_api.h"
#include "ebpf_helpers.h"
#include "ebpf_nethooks.h"
#include "test_ext_helpers.h"
#include "helpers.hpp"
#include "map_descriptors.hpp"
#include "platform.hpp"
Expand Down Expand Up @@ -43,15 +44,25 @@ const ebpf_context_descriptor_t g_bind_context_descriptor = {
const EbpfProgramType windows_bind_program_type =
PTYPE("bind", &g_bind_context_descriptor, (uint64_t)&EBPF_PROGRAM_TYPE_BIND, {"bind"});

const std::vector<EbpfProgramType> windows_program_types = {
PTYPE("unspecified", {0}, 0, {}),
windows_xdp_program_type,
windows_bind_program_type,
const ebpf_context_descriptor_t g_test_ext_context_descriptor = {
sizeof(test_program_context_t),
EBPF_OFFSET_OF(test_program_context_t, data_start),
EBPF_OFFSET_OF(test_program_context_t, data_end),
-1, // Offset into ctx struct for pointer to metadata, or -1 if none.
};

const EbpfProgramType windows_test_ext_program_type =
PTYPE("test_ext", &g_test_ext_context_descriptor, (uint64_t)&EBPF_PROGRAM_TYPE_TEST, {"test_ext"});

const std::vector<EbpfProgramType> windows_program_types = {PTYPE("unspecified", {0}, 0, {}),
windows_xdp_program_type,
windows_bind_program_type,
windows_test_ext_program_type};

const std::map<ebpf_program_type_t*, ebpf_attach_type_t*> windows_program_type_to_attach_type = {
{&EBPF_PROGRAM_TYPE_XDP, &EBPF_ATTACH_TYPE_XDP},
{&EBPF_PROGRAM_TYPE_BIND, &EBPF_ATTACH_TYPE_BIND},
{&EBPF_PROGRAM_TYPE_TEST, &EBPF_ATTACH_TYPE_TEST},
};

EbpfProgramType
Expand Down
61 changes: 27 additions & 34 deletions libs/execution_context/ebpf_link.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ typedef struct _ebpf_link
ebpf_program_t* program;

ebpf_attach_type_t attach_type;
ebpf_extension_data_t* client_data;
ebpf_extension_data_t client_data;
ebpf_extension_client_t* extension_client_context;

void* provider_binding_context;
ebpf_extension_data_t* provider_data;
} ebpf_link_t;

static ebpf_result_t
_ebpf_link_instance_invoke(_In_ const ebpf_link_t* link, _In_ void* program_context, _Out_ uint32_t* result);
_ebpf_link_instance_invoke(
_In_ const void* extension_client_binding_context, _In_ void* program_context, _Out_ uint32_t* result);

static struct
{
Expand All @@ -35,7 +35,7 @@ _ebpf_link_free(ebpf_object_t* object)
ebpf_link_t* link = (ebpf_link_t*)object;
ebpf_extension_unload(link->extension_client_context);
ebpf_link_detach_program(link);
ebpf_free(link->client_data);
ebpf_free(link->client_data.data);
ebpf_epoch_free(link);
}

Expand All @@ -57,48 +57,34 @@ ebpf_link_initialize(
ebpf_link_t* link, ebpf_attach_type_t attach_type, const uint8_t* context_data, size_t context_data_length)
{
ebpf_result_t return_value;
size_t client_data_length;

return_value = ebpf_safe_size_t_add(sizeof(ebpf_extension_data_t), context_data_length, &client_data_length);
if (return_value != EBPF_SUCCESS)
goto Exit;
link->client_data.version = 0;
link->client_data.size = context_data_length;

link->client_data = ebpf_allocate(client_data_length);
if (!link->client_data) {
return_value = EBPF_NO_MEMORY;
goto Exit;
if (context_data_length > 0) {
link->client_data.data = ebpf_allocate(context_data_length);
if (!link->client_data.data) {
return_value = EBPF_NO_MEMORY;
goto Exit;
}
memcpy(&link->client_data.data, context_data, context_data_length);
}

link->client_data->version = 0;
link->client_data->size = (uint16_t)client_data_length;
memcpy(link->client_data->data, context_data, context_data_length);

return_value = ebpf_extension_load(
&(link->extension_client_context),
&attach_type,
link,
link->client_data,
&link->client_data,
(ebpf_extension_dispatch_table_t*)&_ebpf_link_dispatch_table,
&(link->provider_binding_context),
&(link->provider_data),
NULL,
NULL,
NULL);

Exit:
return return_value;
}

ebpf_result_t
ebpf_link_get_properties(ebpf_link_t* link, uint8_t** hook_properties, size_t* hook_properties_length)
{
if (!link->provider_data)
return EBPF_INVALID_ARGUMENT;

*hook_properties = link->provider_data->data;
*hook_properties_length = link->provider_data->size;
return EBPF_SUCCESS;
}

ebpf_result_t
ebpf_link_attach_program(ebpf_link_t* link, ebpf_program_t* program)
{
Expand Down Expand Up @@ -132,16 +118,23 @@ ebpf_link_detach_program(ebpf_link_t* link)
}

static ebpf_result_t
_ebpf_link_instance_invoke(_In_ const ebpf_link_t* link, _In_ void* program_context, _Out_ uint32_t* result)
_ebpf_link_instance_invoke(
_In_ const void* extension_client_binding_context, _In_ void* program_context, _Out_ uint32_t* result)
{
ebpf_result_t return_value;
if (!link)
return EBPF_SUCCESS;
ebpf_link_t* link = (ebpf_link_t*)ebpf_extension_get_client_context(extension_client_binding_context);

if (link == NULL) {
return_value = EBPF_FAILED;
goto Exit;
}

return_value = ebpf_epoch_enter();
if (return_value != EBPF_SUCCESS)
return return_value;
goto Exit;
ebpf_program_invoke(link->program, program_context, result);
ebpf_epoch_exit();
return EBPF_SUCCESS;

Exit:
return return_value;
}
15 changes: 0 additions & 15 deletions libs/execution_context/ebpf_link.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,21 +41,6 @@ extern "C"
ebpf_link_initialize(
ebpf_link_t* link, ebpf_attach_type_t attach_type, const uint8_t* context_data, size_t context_data_length);

/**
* @brief Get the properties from the hook provider.
*
* @param[in] link The link object to get properties from.
* @param[out] hook_properties Pointer to buffer that contains the hook
* provider properties on success.
* @param[out] hook_properties_length Pointer to size that contains the size
* of the hook provider properties.
* @retval EBPF_SUCCESS The operation was successful.
* @retval EBPF_INVALID_ARGUMENT Hook instance has not been
* initialized.
*/
ebpf_result_t
ebpf_link_get_properties(ebpf_link_t* link, uint8_t** hook_properties, size_t* hook_properties_length);

/**
* @brief Attach a program to this link object.
*
Expand Down
Loading

0 comments on commit 266578e

Please sign in to comment.