qemu

Форк
0
/
ebpf.c 
69 строк · 1.6 Кб
1
/*
2
 * QEMU eBPF binary declaration routine.
3
 *
4
 * Developed by Daynix Computing LTD (http://www.daynix.com)
5
 *
6
 * Authors:
7
 *  Andrew Melnychenko <andrew@daynix.com>
8
 *
9
 * SPDX-License-Identifier: GPL-2.0-or-later
10
 */
11

12
#include "qemu/osdep.h"
13
#include "qemu/queue.h"
14
#include "qapi/error.h"
15
#include "qapi/qapi-commands-ebpf.h"
16
#include "ebpf/ebpf.h"
17

18
typedef struct ElfBinaryDataEntry {
19
    int id;
20
    const void *data;
21
    size_t datalen;
22

23
    QSLIST_ENTRY(ElfBinaryDataEntry) node;
24
} ElfBinaryDataEntry;
25

26
static QSLIST_HEAD(, ElfBinaryDataEntry) ebpf_elf_obj_list =
27
                                            QSLIST_HEAD_INITIALIZER();
28

29
void ebpf_register_binary_data(int id, const void *data, size_t datalen)
30
{
31
    struct ElfBinaryDataEntry *dataentry = NULL;
32

33
    dataentry = g_new0(struct ElfBinaryDataEntry, 1);
34
    dataentry->data = data;
35
    dataentry->datalen = datalen;
36
    dataentry->id = id;
37

38
    QSLIST_INSERT_HEAD(&ebpf_elf_obj_list, dataentry, node);
39
}
40

41
const void *ebpf_find_binary_by_id(int id, size_t *sz, Error **errp)
42
{
43
    struct ElfBinaryDataEntry *it = NULL;
44
    QSLIST_FOREACH(it, &ebpf_elf_obj_list, node) {
45
        if (id == it->id) {
46
            *sz = it->datalen;
47
            return it->data;
48
        }
49
    }
50

51
    error_setg(errp, "can't find eBPF object with id: %d", id);
52

53
    return NULL;
54
}
55

56
EbpfObject *qmp_request_ebpf(EbpfProgramID id, Error **errp)
57
{
58
    EbpfObject *ret = NULL;
59
    size_t size = 0;
60
    const void *data = ebpf_find_binary_by_id(id, &size, errp);
61
    if (!data) {
62
        return NULL;
63
    }
64

65
    ret = g_new0(EbpfObject, 1);
66
    ret->object = g_base64_encode(data, size);
67

68
    return ret;
69
}
70

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.