| /* | |
| * eBPF RSS header | |
| * | |
| * Developed by Daynix Computing LTD (http://www.daynix.com) | |
| * | |
| * Authors: | |
| * Andrew Melnychenko <andrew@daynix.com> | |
| * Yuri Benditovich <yuri.benditovich@daynix.com> | |
| * | |
| * This work is licensed under the terms of the GNU GPL, version 2. See | |
| * the COPYING file in the top-level directory. | |
| */ | |
| #ifndef QEMU_EBPF_RSS_H | |
| #define QEMU_EBPF_RSS_H | |
| #include "qapi/error.h" | |
| #define EBPF_RSS_MAX_FDS 4 | |
| struct EBPFRSSContext { | |
| void *obj; | |
| int program_fd; | |
| int map_configuration; | |
| int map_toeplitz_key; | |
| int map_indirections_table; | |
| /* mapped eBPF maps for direct access to omit bpf_map_update_elem() */ | |
| void *mmap_configuration; | |
| void *mmap_toeplitz_key; | |
| void *mmap_indirections_table; | |
| }; | |
| struct EBPFRSSConfig { | |
| uint8_t redirect; | |
| uint8_t populate_hash; | |
| uint32_t hash_types; | |
| uint16_t indirections_len; | |
| uint16_t default_queue; | |
| } __attribute__((packed)); | |
| void ebpf_rss_init(struct EBPFRSSContext *ctx); | |
| bool ebpf_rss_is_loaded(struct EBPFRSSContext *ctx); | |
| bool ebpf_rss_load(struct EBPFRSSContext *ctx, Error **errp); | |
| bool ebpf_rss_load_fds(struct EBPFRSSContext *ctx, int program_fd, | |
| int config_fd, int toeplitz_fd, int table_fd, | |
| Error **errp); | |
| bool ebpf_rss_set_all(struct EBPFRSSContext *ctx, struct EBPFRSSConfig *config, | |
| uint16_t *indirections_table, uint8_t *toeplitz_key, | |
| Error **errp); | |
| void ebpf_rss_unload(struct EBPFRSSContext *ctx); | |
| #endif /* QEMU_EBPF_RSS_H */ |