On 01/10/2012 05:41 PM, Eric Blake wrote:
>> /* all of these modes can use a pool of physical
interfaces */
>> nForwardIfs = virXPathNodeSet("./interface", ctxt,
&forwardIfNodes);
>> - if (nForwardIfs < 0)
>> + if (nForwardIfs <= 0) {
>> + virNetworkReportError(VIR_ERR_XML_ERROR,
>> + _("No interface pool given, checking for
SRIOV pf"));
>> + nForwardPfs = virXPathNodeSet("./pf", ctxt,
&forwardPfNodes);
>> +
>> + if (nForwardPfs <= 0) {
>> + virNetworkReportError(VIR_ERR_XML_ERROR,
>> + _("No interface pool or SRIOV
physical device given"));
>
> This has to be a check for '< 0', not '<= 0', or else you get
LOTS of
> 'make check' failures.
Also, your patch touched the rng, but failed to add documentation for
the new XML, nor tests that prove we can parse it. And in adding those
tests, I found that your rng additions don't match your code (which
wants pf before, not after, interface). I'm working on fixing that, but
it's taking me longer than I planned, since I also decided to add tests
of the parsing, and in those tests, it appears that pf did not get
parsed as expected. I don't know if it's a flaw in the original patch
or in my touchups...
I think I understand the problem now. You aren't parsing nForwardPfs
unless there are exactly 0 nForwardIfs; but if you end up reparsing
existing live XML, you don't want to lose the pf information. That is,
the parsing routine should always parse pf information; and perhaps even
be taught to honor flags (just like the format routine), so that it
skips parsing <interface> elements if doing an INACTIVE parse and a pf
is present.
--
Eric Blake eblake(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org