1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# -*- Mode: Python -*-
# vim: filetype=python
#
# This work is licensed under the terms of the GNU GPL, version 2 or later.
# See the COPYING file in the top-level directory.
##
# = eBPF Objects
#
# eBPF object is an ELF binary that contains the eBPF program and eBPF
# map description(BTF). Overall, eBPF object should contain the
# program and enough metadata to create/load eBPF with libbpf. As the
# eBPF maps/program should correspond to QEMU, the eBPF can't be used
# from different QEMU build.
#
# Currently, there is a possible eBPF for receive-side scaling (RSS).
##
##
# @EbpfObject:
#
# An eBPF ELF object.
#
# @object: the eBPF object encoded in base64
#
# Since: 9.0
##
{ 'struct': 'EbpfObject',
'data': {'object': 'str'},
'if': 'CONFIG_EBPF' }
##
# @EbpfProgramID:
#
# The eBPF programs that can be gotten with request-ebpf.
#
# @rss: Receive side scaling, technology that allows steering traffic
# between queues by calculation hash. Users may set up
# indirection table and hash/packet types configurations. Used
# with virtio-net.
#
# Since: 9.0
##
{ 'enum': 'EbpfProgramID',
'prefix': 'EBPF_PROGRAMID', # TODO drop
'if': 'CONFIG_EBPF',
'data': [ { 'name': 'rss' } ] }
##
# @request-ebpf:
#
# Retrieve an eBPF object that can be loaded with libbpf. Management
# applications (e.g. libvirt) may load it and pass file descriptors to
# QEMU, so they can run running QEMU without BPF capabilities.
#
# @id: The ID of the program to return.
#
# Returns: eBPF object encoded in base64.
#
# Since: 9.0
##
{ 'command': 'request-ebpf',
'data': { 'id': 'EbpfProgramID' },
'returns': 'EbpfObject',
'if': 'CONFIG_EBPF' }
|