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