conf: use new common parser/formatter for hostdev driver in network XML

Now if a new attribute is added to <driver>, we only need to update
the formatting/parsing in one place.

Signed-off-by: Laine Stump <laine@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
Laine Stump 2024-01-04 20:12:51 -05:00
parent 195522ae87
commit bb1acb9ca2
2 changed files with 10 additions and 33 deletions

View File

@ -1349,13 +1349,9 @@ virNetworkForwardDefParseXML(const char *networkName,
def->managed = true;
}
if ((driverNode = virXPathNode("./driver", ctxt))) {
if (virXMLPropEnum(driverNode, "name",
virDeviceHostdevPCIDriverNameTypeFromString,
VIR_XML_PROP_NONZERO,
&def->driver.name) < 0) {
if ((driverNode = virXPathNode("./driver", ctxt)) &&
virDeviceHostdevPCIDriverInfoParseXML(driverNode, &def->driver) < 0) {
return -1;
}
}
/* bridge and hostdev modes can use a pool of physical interfaces */
@ -2317,7 +2313,6 @@ virNetworkDefFormatBuf(virBuffer *buf,
if (def->forward.type != VIR_NETWORK_FORWARD_NONE) {
const char *dev = NULL;
const char *mode = virNetworkForwardTypeToString(def->forward.type);
g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER;
if (!def->forward.npfs)
dev = virNetworkDefForwardIf(def, 0);
@ -2347,18 +2342,8 @@ virNetworkDefFormatBuf(virBuffer *buf,
virBufferAsprintf(buf, "%s>\n", shortforward ? "/" : "");
virBufferAdjustIndent(buf, 2);
if (def->forward.driver.name) {
const char *driverName = virDeviceHostdevPCIDriverNameTypeToString(def->forward.driver.name);
if (!driverName) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected hostdev driver name %1$d "),
def->forward.driver.name);
return -1;
}
virBufferAsprintf(&driverAttrBuf, " name='%s'", driverName);
}
virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL);
if (virDeviceHostdevPCIDriverInfoFormat(buf, &def->forward.driver) < 0)
return -1;
if (def->forward.type == VIR_NETWORK_FORWARD_NAT) {
if (virNetworkForwardNatDefFormat(buf, &def->forward) < 0)

View File

@ -224,13 +224,10 @@ virNetworkPortDefParseXML(xmlXPathContextPtr ctxt)
&def->plug.hostdevpci.managed) < 0)
return NULL;
if ((driverNode = virXPathNode("./plug/driver", ctxt))) {
if (virXMLPropEnum(driverNode, "name",
virDeviceHostdevPCIDriverNameTypeFromString,
VIR_XML_PROP_NONZERO,
&def->plug.hostdevpci.driver.name) < 0) {
return NULL;
}
if ((driverNode = virXPathNode("./plug/driver", ctxt)) &&
virDeviceHostdevPCIDriverInfoParseXML(driverNode,
&def->plug.hostdevpci.driver) < 0) {
return NULL;
}
if (!(addressNode = virXPathNode("./plug/address", ctxt))) {
@ -321,7 +318,6 @@ virNetworkPortDefFormatBuf(virBuffer *buf,
virTristateBoolTypeToString(def->trustGuestRxFilters));
if (def->plugtype != VIR_NETWORK_PORT_PLUG_TYPE_NONE) {
g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER;
virBufferAsprintf(buf, "<plug type='%s'",
virNetworkPortPlugTypeToString(def->plugtype));
@ -356,12 +352,8 @@ virNetworkPortDefFormatBuf(virBuffer *buf,
virBufferAddLit(buf, ">\n");
virBufferAdjustIndent(buf, 2);
if (def->plug.hostdevpci.driver.name) {
virBufferEscapeString(&driverAttrBuf, " name='%s'",
virDeviceHostdevPCIDriverNameTypeToString(def->plug.hostdevpci.driver.name));
}
virXMLFormatElement(buf, "driver", &driverAttrBuf, NULL);
if (virDeviceHostdevPCIDriverInfoFormat(buf, &def->plug.hostdevpci.driver) < 0)
return -1;
virPCIDeviceAddressFormat(buf, def->plug.hostdevpci.addr, false);
virBufferAdjustIndent(buf, -2);