Laine Stump wrote: > On 02/01/2017 11:28 AM, 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 | 26 ++++++++++++++++++ > > src/bhyve/bhyve_capabilities.h | 1 + > > src/bhyve/bhyve_command.c | 31 +++++++++++++++++++--- > > src/bhyve/bhyve_parse_command.c | 10 ++++++- > > tests/bhyveargv2xmldata/bhyveargv2xml-e1000.args | 8 ++++++ > > tests/bhyveargv2xmldata/bhyveargv2xml-e1000.xml | 30 +++++++++++++++++++++ > > .../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, 145 insertions(+), 6 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 > > > > diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c > > index 83e3ae1b4..a647cd19b 100644 > > --- a/src/bhyve/bhyve_capabilities.c > > +++ b/src/bhyve/bhyve_capabilities.c > > @@ -216,6 +216,29 @@ bhyveProbeCapsAHCI32Slot(unsigned int *caps, char *binary) > > return ret; > > } > > > > +static int > > +bhyveProbeCapsNetE1000(unsigned int *caps, char *binary) > > +{ > > + char *error; > > + virCommandPtr cmd = NULL; > > + int ret = 0, exit; > > + > > + cmd = virCommandNew(binary); > > + virCommandAddArgList(cmd, "-s", "0,e1000", NULL); > > + virCommandSetErrorBuffer(cmd, &error); > > + if (virCommandRun(cmd, &exit) < 0) { > > + ret = -1; > > + goto out; > > + } > > + > > + if (strstr(error, "pci slot 0:0: unknown device \"e1000\"") == NULL) > > + *caps |= BHYVE_CAP_NET_E1000; > > + > > + out: > > Even if you don't switch to using a ret initialized to -1 (see the > layout in bhyveBuildNetArgStr()), please name the label "cleanup" > instead of "out". Flipped ret value and renamed out to cleanup. Generally, I just need to add a helper function for these probes as they're very similar and I'm planning to add some more cap checks. > > > + VIR_FREE(error); > > + virCommandFree(cmd); > > + return ret; > > +} > > > > int > > virBhyveProbeCaps(unsigned int *caps) > > @@ -235,6 +258,9 @@ virBhyveProbeCaps(unsigned int *caps) > > if ((ret = bhyveProbeCapsAHCI32Slot(caps, binary))) > > goto out; > > > > + if ((ret = bhyveProbeCapsNetE1000(caps, binary))) > > + goto out; > > + > > out: > > VIR_FREE(binary); > > return ret; > > diff --git a/src/bhyve/bhyve_capabilities.h b/src/bhyve/bhyve_capabilities.h > > index 55581bd68..690feadb8 100644 > > --- a/src/bhyve/bhyve_capabilities.h > > +++ b/src/bhyve/bhyve_capabilities.h > > @@ -39,6 +39,7 @@ typedef enum { > > typedef enum { > > BHYVE_CAP_RTC_UTC = 1 << 0, > > BHYVE_CAP_AHCI32SLOT = 1 << 1, > > + BHYVE_CAP_NET_E1000 = 1 << 2, > > } virBhyveCapsFlags; > > > > int virBhyveProbeGrubCaps(virBhyveGrubCapsFlags *caps); > > diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c > > index a50bd1066..5c86c9f1b 100644 > > --- a/src/bhyve/bhyve_command.c > > +++ b/src/bhyve/bhyve_command.c > > @@ -44,7 +44,8 @@ > > VIR_LOG_INIT("bhyve.bhyve_command"); > > > > static int > > -bhyveBuildNetArgStr(const virDomainDef *def, > > +bhyveBuildNetArgStr(virConnectPtr conn, > > I think it's strange that you need to pass a virConnectPtr around to > your command-line builder functions for caps. In the qemu driver, use of > virConnectPtr has been eliminated wherever possible (it's completely > absent from qemu_command.c). We just get the qemuCaps directly from the > driver object. Noted, added to my TODO list. > ACK (although I'd greatly prefer "out:" changed to "cleanup:") Pushed, thanks! Roman Bogorodskiy
Attachment:
signature.asc
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list