mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
63bed955df
Implement "<os firmware='efi'>" support for bhyve driver. As there are not really lot of options, try to find "BHYVE_UEFI.fd" firmware which is installed by the sysutils/uefi-edk2-bhyve FreeBSD port. If not found, just use the first found firmware in the firmwares directory (which is configurable via config file). Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
95 lines
2.6 KiB
C
95 lines
2.6 KiB
C
#include <config.h>
|
|
|
|
#include <dirent.h>
|
|
|
|
#include "viralloc.h"
|
|
#include "virstring.h"
|
|
#include "virnetdev.h"
|
|
#include "virnetdevtap.h"
|
|
#include "virmock.h"
|
|
#include "internal.h"
|
|
|
|
#define VIR_FROM_THIS VIR_FROM_BHYVE
|
|
|
|
static DIR * (*real_opendir)(const char *name);
|
|
|
|
static void
|
|
init_syms(void)
|
|
{
|
|
VIR_MOCK_REAL_INIT(opendir);
|
|
}
|
|
|
|
#define FAKEFIRMWAREDIR abs_srcdir "/bhyvefirmwaredata/three_firmwares"
|
|
#define FAKEFIRMWAREEMPTYDIR abs_srcdir "/bhyvefirmwaredata/empty"
|
|
|
|
DIR *
|
|
opendir(const char *path)
|
|
{
|
|
init_syms();
|
|
|
|
g_autofree char *path_override = NULL;
|
|
|
|
if (STREQ(path, "fakefirmwaredir")) {
|
|
path_override = g_strdup(FAKEFIRMWAREDIR);
|
|
} else if (STREQ(path, "fakefirmwareemptydir")) {
|
|
path_override = g_strdup(FAKEFIRMWAREEMPTYDIR);
|
|
}
|
|
|
|
if (!path_override)
|
|
path_override = g_strdup(path);
|
|
|
|
return real_opendir(path_override);
|
|
}
|
|
|
|
void virMacAddrGenerate(const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN],
|
|
virMacAddrPtr addr)
|
|
{
|
|
addr->addr[0] = prefix[0];
|
|
addr->addr[1] = prefix[1];
|
|
addr->addr[2] = prefix[2];
|
|
addr->addr[3] = 0;
|
|
addr->addr[4] = 0;
|
|
addr->addr[5] = 0;
|
|
}
|
|
|
|
int virNetDevTapCreateInBridgePort(const char *brname G_GNUC_UNUSED,
|
|
char **ifname,
|
|
const virMacAddr *macaddr G_GNUC_UNUSED,
|
|
const unsigned char *vmuuid G_GNUC_UNUSED,
|
|
const char *tunpath G_GNUC_UNUSED,
|
|
int *tapfd G_GNUC_UNUSED,
|
|
size_t tapfdSize G_GNUC_UNUSED,
|
|
const virNetDevVPortProfile *virtPortProfile G_GNUC_UNUSED,
|
|
const virNetDevVlan *virtVlan G_GNUC_UNUSED,
|
|
virTristateBool isolatedPort G_GNUC_UNUSED,
|
|
virNetDevCoalescePtr coalesce G_GNUC_UNUSED,
|
|
unsigned int mtu G_GNUC_UNUSED,
|
|
unsigned int *actualMTU G_GNUC_UNUSED,
|
|
unsigned int fakeflags G_GNUC_UNUSED)
|
|
{
|
|
VIR_FREE(*ifname);
|
|
*ifname = g_strdup("vnet0");
|
|
return 0;
|
|
}
|
|
|
|
char *virNetDevTapGetRealDeviceName(char *name G_GNUC_UNUSED)
|
|
{
|
|
char *fakename;
|
|
|
|
fakename = g_strdup("faketapdev");
|
|
return fakename;
|
|
}
|
|
|
|
int virNetDevSetOnline(const char *ifname G_GNUC_UNUSED,
|
|
bool online G_GNUC_UNUSED)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int bind(int sockfd G_GNUC_UNUSED,
|
|
const struct sockaddr *addr G_GNUC_UNUSED,
|
|
socklen_t addrlen G_GNUC_UNUSED)
|
|
{
|
|
return 0;
|
|
}
|