Modify EBPF_OPERATION_GET_PROGRAM_INFORMATION to accept ebpf_program_type_t (#175)

Signed-off-by: Alan Jowett <alanjo@microsoft.com>

Co-authored-by: Dave Thaler <dthaler@microsoft.com>
This commit is contained in:
Alan Jowett 2021-05-11 19:25:11 -06:00 коммит произвёл GitHub
Родитель 445ba0faad
Коммит 1aedf620fc
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
3 изменённых файлов: 20 добавлений и 14 удалений

Просмотреть файл

@ -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<uint64_t>(program_handle)};
sizeof(request), ebpf_operation_id_t::EBPF_OPERATION_GET_PROGRAM_INFORMATION, program_type};
auto reply = reinterpret_cast<ebpf_operation_get_program_information_reply_t*>(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;

Просмотреть файл

@ -33,7 +33,8 @@ _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,
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};
@ -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;

Просмотреть файл

@ -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