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