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