
On 5/12/24 21:45, Andrew Melnychenko wrote:
Added code for monitor and monitor_json. The "request-ebpf" return's eBPF binary object encoded in base64.
QEMU provides eBPF that can be loaded and passed to it from Libvirt. QEMU requires exact eBPF program/maps, so it can be retrieved using QAPI. To load eBPF program - administrative capabilities are required, so Libvirt may load it and pass it to the QEMU instance. For now, there is only "RSS"(Receive Side Scaling) for virtio-net eBPF program and maps.
Signed-off-by: Andrew Melnychenko <andrew@daynix.com> --- src/qemu/qemu_monitor.c | 13 +++++++++++++ src/qemu/qemu_monitor.h | 3 +++ src/qemu/qemu_monitor_json.c | 26 ++++++++++++++++++++++++++ src/qemu/qemu_monitor_json.h | 3 +++ 4 files changed, 45 insertions(+)
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 34e2ccab97..1dc2fa3fac 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -4511,3 +4511,16 @@ qemuMonitorDisplayReload(qemuMonitor *mon,
return qemuMonitorJSONDisplayReload(mon, type, tlsCerts); } + +const char * +qemuMonitorGetEbpf(qemuMonitor *mon, const char *ebpfName)
I'm going to mentioned it here, because this is the first occurrence and then I'll stop pointing it out: libvirt's coding style is a bit different. I think the pre-exiting code around may give you couple of examples. Anyway, this is a nitpick.
+{ + QEMU_CHECK_MONITOR_NULL(mon); + + if (ebpfName == NULL) { + virReportInvalidNonNullArg(ebpfName); + return NULL; + }
We don't usually do this kind of check here. Usually there's just one (or very few) callers of these functions and they can verify arguments passed).
+ + return qemuMonitorJSONGetEbpf(mon, ebpfName); +}
Michal