| /* |
| * 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 */ |