xref: /openbmc/qemu/ebpf/ebpf_rss.h (revision 58d49b5895f2e0b5cfe4b2901bf24f3320b74f29)
146627f41SAndrew Melnychenko /*
246627f41SAndrew Melnychenko  * eBPF RSS header
346627f41SAndrew Melnychenko  *
446627f41SAndrew Melnychenko  * Developed by Daynix Computing LTD (http://www.daynix.com)
546627f41SAndrew Melnychenko  *
646627f41SAndrew Melnychenko  * Authors:
746627f41SAndrew Melnychenko  *  Andrew Melnychenko <andrew@daynix.com>
846627f41SAndrew Melnychenko  *  Yuri Benditovich <yuri.benditovich@daynix.com>
946627f41SAndrew Melnychenko  *
1046627f41SAndrew Melnychenko  * This work is licensed under the terms of the GNU GPL, version 2.  See
1146627f41SAndrew Melnychenko  * the COPYING file in the top-level directory.
1246627f41SAndrew Melnychenko  */
1346627f41SAndrew Melnychenko 
1446627f41SAndrew Melnychenko #ifndef QEMU_EBPF_RSS_H
1546627f41SAndrew Melnychenko #define QEMU_EBPF_RSS_H
1646627f41SAndrew Melnychenko 
17*00b69f1dSDaniel P. Berrangé #include "qapi/error.h"
18*00b69f1dSDaniel P. Berrangé 
190524ea05SAndrew Melnychenko #define EBPF_RSS_MAX_FDS 4
200524ea05SAndrew Melnychenko 
2146627f41SAndrew Melnychenko struct EBPFRSSContext {
2246627f41SAndrew Melnychenko     void *obj;
2346627f41SAndrew Melnychenko     int program_fd;
2446627f41SAndrew Melnychenko     int map_configuration;
2546627f41SAndrew Melnychenko     int map_toeplitz_key;
2646627f41SAndrew Melnychenko     int map_indirections_table;
27333b3e5fSAndrew Melnychenko 
28333b3e5fSAndrew Melnychenko     /* mapped eBPF maps for direct access to omit bpf_map_update_elem() */
29333b3e5fSAndrew Melnychenko     void *mmap_configuration;
30333b3e5fSAndrew Melnychenko     void *mmap_toeplitz_key;
31333b3e5fSAndrew Melnychenko     void *mmap_indirections_table;
3246627f41SAndrew Melnychenko };
3346627f41SAndrew Melnychenko 
3446627f41SAndrew Melnychenko struct EBPFRSSConfig {
3546627f41SAndrew Melnychenko     uint8_t redirect;
3646627f41SAndrew Melnychenko     uint8_t populate_hash;
3746627f41SAndrew Melnychenko     uint32_t hash_types;
3846627f41SAndrew Melnychenko     uint16_t indirections_len;
3946627f41SAndrew Melnychenko     uint16_t default_queue;
4046627f41SAndrew Melnychenko } __attribute__((packed));
4146627f41SAndrew Melnychenko 
4246627f41SAndrew Melnychenko void ebpf_rss_init(struct EBPFRSSContext *ctx);
4346627f41SAndrew Melnychenko 
4446627f41SAndrew Melnychenko bool ebpf_rss_is_loaded(struct EBPFRSSContext *ctx);
4546627f41SAndrew Melnychenko 
46*00b69f1dSDaniel P. Berrangé bool ebpf_rss_load(struct EBPFRSSContext *ctx, Error **errp);
4746627f41SAndrew Melnychenko 
480524ea05SAndrew Melnychenko bool ebpf_rss_load_fds(struct EBPFRSSContext *ctx, int program_fd,
49*00b69f1dSDaniel P. Berrangé                        int config_fd, int toeplitz_fd, int table_fd,
50*00b69f1dSDaniel P. Berrangé                        Error **errp);
510524ea05SAndrew Melnychenko 
5246627f41SAndrew Melnychenko bool ebpf_rss_set_all(struct EBPFRSSContext *ctx, struct EBPFRSSConfig *config,
53*00b69f1dSDaniel P. Berrangé                       uint16_t *indirections_table, uint8_t *toeplitz_key,
54*00b69f1dSDaniel P. Berrangé                       Error **errp);
5546627f41SAndrew Melnychenko 
5646627f41SAndrew Melnychenko void ebpf_rss_unload(struct EBPFRSSContext *ctx);
5746627f41SAndrew Melnychenko 
5846627f41SAndrew Melnychenko #endif /* QEMU_EBPF_RSS_H */
59