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