[libvirt] [PATCH v3 2/2] bhyve: add e1000 nic support
Roman Bogorodskiy
bogorodskiy at gmail.com
Sun Nov 13 08:54:02 UTC 2016
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 455 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20161113/78919870/attachment-0001.sig>
More information about the libvir-list
mailing list