From 1aedf620fcdcdf69ed488719d202ac8c9c69a2b5 Mon Sep 17 00:00:00 2001 From: Alan Jowett Date: Tue, 11 May 2021 19:25:11 -0600 Subject: [PATCH] Modify EBPF_OPERATION_GET_PROGRAM_INFORMATION to accept ebpf_program_type_t (#175) Signed-off-by: Alan Jowett Co-authored-by: Dave Thaler --- libs/api/ebpf_api.cpp | 8 +++----- libs/execution_context/ebpf_core.c | 24 ++++++++++++++++-------- libs/execution_context/ebpf_protocol.h | 2 +- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/libs/api/ebpf_api.cpp b/libs/api/ebpf_api.cpp index 56e0a4938..5f52dc7d4 100644 --- a/libs/api/ebpf_api.cpp +++ b/libs/api/ebpf_api.cpp @@ -346,13 +346,11 @@ _create_program( } static uint32_t -_get_program_information_data(ebpf_handle_t program_handle, ebpf_extension_data_t** program_information_data) +_get_program_information_data(ebpf_program_type_t program_type, ebpf_extension_data_t** program_information_data) { ebpf_protocol_buffer_t reply_buffer(1024); ebpf_operation_get_program_information_request_t request{ - sizeof(request), - ebpf_operation_id_t::EBPF_OPERATION_GET_PROGRAM_INFORMATION, - reinterpret_cast(program_handle)}; + sizeof(request), ebpf_operation_id_t::EBPF_OPERATION_GET_PROGRAM_INFORMATION, program_type}; auto reply = reinterpret_cast(reply_buffer.data()); uint32_t retval = invoke_ioctl(device_handle, request, reply_buffer); @@ -415,7 +413,7 @@ ebpf_api_load_program( if (result != ERROR_SUCCESS) goto Done; - result = _get_program_information_data(program_handle, &program_information_data); + result = _get_program_information_data(program_type, &program_information_data); if (result != ERROR_SUCCESS) goto Done; diff --git a/libs/execution_context/ebpf_core.c b/libs/execution_context/ebpf_core.c index 07bbc36f1..22e635cce 100644 --- a/libs/execution_context/ebpf_core.c +++ b/libs/execution_context/ebpf_core.c @@ -33,10 +33,11 @@ _ebpf_core_map_update_element(ebpf_map_t* map, const uint8_t* key, const uint8_t static void _ebpf_core_map_delete_element(ebpf_map_t* map, const uint8_t* key); -static const void* _ebpf_program_helpers[] = {NULL, - (void*)&_ebpf_core_map_find_element, - (void*)&_ebpf_core_map_update_element, - (void*)&_ebpf_core_map_delete_element}; +static const void* _ebpf_program_helpers[] = { + NULL, + (void*)&_ebpf_core_map_find_element, + (void*)&_ebpf_core_map_update_element, + (void*)&_ebpf_core_map_delete_element}; ebpf_error_code_t ebpf_core_initiate() @@ -572,9 +573,9 @@ static ebpf_error_code_t _ebpf_core_protocol_update_pinning(_In_ const struct _ebpf_operation_update_map_pinning_request* request) { ebpf_error_code_t retval; - const ebpf_utf8_string_t name = {(uint8_t*)request->name, - request->header.length - - EBPF_OFFSET_OF(ebpf_operation_update_pinning_request_t, name)}; + const ebpf_utf8_string_t name = { + (uint8_t*)request->name, + request->header.length - EBPF_OFFSET_OF(ebpf_operation_update_pinning_request_t, name)}; ebpf_object_t* object = NULL; if (name.length == 0) { @@ -687,8 +688,15 @@ _ebpf_core_protocol_get_program_information( ebpf_program_t* program = NULL; ebpf_extension_data_t* program_information_data; size_t required_length; + ebpf_program_parameters_t program_parameters = {0}; - retval = ebpf_reference_object_by_handle(request->program_handle, EBPF_OBJECT_PROGRAM, (ebpf_object_t**)&program); + retval = ebpf_program_create(&program); + if (retval != EBPF_ERROR_SUCCESS) + goto Done; + + program_parameters.program_type = request->program_type; + + retval = ebpf_program_initialize(program, &program_parameters); if (retval != EBPF_ERROR_SUCCESS) goto Done; diff --git a/libs/execution_context/ebpf_protocol.h b/libs/execution_context/ebpf_protocol.h index 9a962154f..1bc5fa908 100644 --- a/libs/execution_context/ebpf_protocol.h +++ b/libs/execution_context/ebpf_protocol.h @@ -251,7 +251,7 @@ typedef struct _ebpf_operation_get_ec_function_reply typedef struct _ebpf_operation_get_program_information_request { struct _ebpf_operation_header header; - uint64_t program_handle; + ebpf_program_type_t program_type; } ebpf_operation_get_program_information_request_t; typedef struct _ebpf_operation_get_program_information_reply