# -*- 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', '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' }