Roman Bogorodskiy wrote:
Recently e1000 NIC support was added to bhyve; implement that in
the bhyve driver:
- Add capability check by analyzing output of the 'bhyve -s 0,e1000'
command
- Modify bhyveBuildNetArgStr() to support e1000 and also pass
virConnectPtr so it could call bhyveDriverGetCaps() to check if this
NIC is supported
- Modify command parsing code to add support for e1000 and adjust tests
- Add net-e1000 test
---
src/bhyve/bhyve_capabilities.c | 27 ++++++++
src/bhyve/bhyve_capabilities.h | 1 +
src/bhyve/bhyve_command.c | 74 ++++++++++++++--------
src/bhyve/bhyve_parse_command.c | 9 ++-
tests/bhyveargv2xmldata/bhyveargv2xml-e1000.args | 8 +++
tests/bhyveargv2xmldata/bhyveargv2xml-e1000.xml | 28 ++++++++
.../bhyveargv2xmldata/bhyveargv2xml-virtio-net.xml | 2 +
.../bhyveargv2xml-virtio-net4.xml | 1 +
tests/bhyveargv2xmltest.c | 1 +
.../bhyvexml2argvdata/bhyvexml2argv-net-e1000.args | 9 +++
.../bhyvexml2argv-net-e1000.ldargs | 3 +
.../bhyvexml2argvdata/bhyvexml2argv-net-e1000.xml | 22 +++++++
tests/bhyvexml2argvtest.c | 7 +-
13 files changed, 162 insertions(+), 30 deletions(-)
create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-e1000.args
create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-e1000.xml
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-net-e1000.args
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-net-e1000.ldargs
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-net-e1000.xml
snip
if (!dryRun) {
@@ -79,44 +100,41 @@ bhyveBuildNetArgStr(const virDomainDef *def,
def->uuid, NULL, NULL, 0,
virDomainNetGetActualVirtPortProfile(net),
virDomainNetGetActualVlan(net),
- VIR_NETDEV_TAP_CREATE_IFUP |
VIR_NETDEV_TAP_CREATE_PERSIST) < 0) {
- VIR_FREE(net->ifname);
- VIR_FREE(brname);
- return -1;
- }
+ VIR_NETDEV_TAP_CREATE_IFUP |
VIR_NETDEV_TAP_CREATE_PERSIST) < 0)
+ goto out;
realifname = virNetDevTapGetRealDeviceName(net->ifname);
- if (realifname == NULL) {
- VIR_FREE(net->ifname);
- VIR_FREE(brname);
- return -1;
- }
+ if (realifname == NULL)
+ goto out;
VIR_DEBUG("%s -> %s", net->ifname, realifname);
/* hack on top of other hack: we need to set
* interface to 'UP' again after re-opening to find its
* name
*/
- if (virNetDevSetOnline(net->ifname, true) != 0) {
- VIR_FREE(realifname);
- VIR_FREE(net->ifname);
- VIR_FREE(brname);
- return -1;
- }
+ if (virNetDevSetOnline(net->ifname, true) != 0)
+ goto out;
} else {
if (VIR_STRDUP(realifname, "tap0") < 0)
- return -1;
+ goto out;
}
virCommandAddArg(cmd, "-s");
- virCommandAddArgFormat(cmd, "%d:0,virtio-net,%s,mac=%s",
- net->info.addr.pci.slot,
+ virCommandAddArgFormat(cmd, "%d:0,%s,%s,mac=%s",
+ net->info.addr.pci.slot, nic_model,
realifname, virMacAddrFormat(&net->mac, macaddr));
+
+ ret = 0;
+ out:
+ VIR_FREE(net->ifname);
+ VIR_FREE(realifname);
^^^^^^^^^^ I noticed that this bit is
not needed as we
free realifname two lines beyond. I won't be sending v4 just because of
this, I'll squash this in if this one gets acked, or include with the
other stuff if there'll be some other issues with this version.
+ VIR_FREE(brname);
VIR_FREE(realifname);
+ VIR_FREE(nic_model);
- return 0;
+ return ret;
}
Roman Bogorodskiy