Re: [libvirt] [PATCH 5/5] Supporting managed option for forward devs when using HOSTDEV mode
On 06/08/2012 11:30 AM, Shradha Shah wrote: This patch supports the managed option in a network xml for network devices. This option is used for pci network devices when forward mode=hostdev. Hence the example network xml would be: network namedirect-network/name uuid81ff0d90-c91e-6742-64da-4a736edb9a8f/uuid forward mode=hostdev pf dev=eth2 managed='yes'/ /forward /network OR network namedirect-network/name uuid81ff0d90-c91e-6742-64da-4a736edb9a8f/uuid forward mode=hostdev interface dev=:04:00.1 managed='yes'/ interface dev=:04:00.2 managed='yes'/ interface dev=:04:00.3 managed='yes'/ /forward /network This functionality should be included with the initial patch rather than as a later add-on. Signed-off-by: Shradha Shah ss...@solarflare.com --- src/conf/network_conf.c | 61 -- src/conf/network_conf.h |2 + src/network/bridge_driver.c |5 +++- 3 files changed, 64 insertions(+), 4 deletions(-) diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 6b346c3..18e4ee3 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -986,6 +986,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) char *forwardDev = NULL; xmlNodePtr save = ctxt-node; xmlNodePtr bandwidthNode = NULL; +char *managed = NULL; if (VIR_ALLOC(def) 0) { virReportOOMError(); @@ -1128,6 +1129,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) } forwardDev = virXPathString(string(./@dev), ctxt); +managed = virXPathString(string(./managed), ctxt); /* all of these modes can use a pool of physical interfaces */ nForwardIfs = virXPathNodeSet(./interface, ctxt, forwardIfNodes); @@ -1151,6 +1153,12 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) goto error; } +if (managed) { +virNetworkReportError(VIR_ERR_XML_ERROR, + _(A managed field should not be used in this location when using a SRIOV PF)); +goto error; +} + forwardDev = virXMLPropString(*forwardPfNodes, dev); if (!forwardDev) { virNetworkReportError(VIR_ERR_XML_ERROR, @@ -1159,9 +1167,16 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) goto error; } +managed = virXMLPropString(*forwardPfNodes, managed); +if(managed != NULL) { +if (STREQ(managed, yes)) +def-forwardPfs-managed = 1; +} + def-forwardPfs-usageCount = 0; def-forwardPfs-dev = forwardDev; forwardDev = NULL; +managed = NULL; def-nForwardPfs++; } else if (nForwardPfs 1) { virNetworkReportError(VIR_ERR_XML_ERROR, @@ -1170,6 +1185,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) } if (nForwardIfs 0 || forwardDev) { int ii; +unsigned int managedvalue = 0; /* allocate array to hold all the portgroups */ if (VIR_ALLOC_N(def-forwardIfs, MAX(nForwardIfs, 1)) 0) { @@ -1181,12 +1197,24 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) def-forwardIfs[0].usageCount = 0; def-forwardIfs[0].dev = forwardDev; forwardDev = NULL; +if (managed != NULL) { +if (STREQ(managed, yes)) +def-forwardIfs[0].managed = 1; +} +managed = NULL; def-nForwardIfs++; } /* parse each forwardIf */ for (ii = 0; ii nForwardIfs; ii++) { forwardDev = virXMLPropString(forwardIfNodes[ii], dev); +managed = virXMLPropString(forwardIfNodes[ii], managed); +if (managed != NULL) { +if (STREQ(managed, yes)) +managedvalue = 1; +else +managedvalue = 0; +} if (!forwardDev) { virNetworkReportError(VIR_ERR_XML_ERROR, _(Missing required dev attribute in network '%s' forward interface element), @@ -1204,12 +1232,22 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) forwardDev, def-name); goto error; } + +if (managedvalue != def-forwardIfs[0].managed) { +virNetworkReportError(VIR_ERR_XML_ERROR, + _(managed field of forward dev must match that of the first interface element dev in network '%s'), +
[libvirt] [PATCH 5/5] Supporting managed option for forward devs when using HOSTDEV mode
This patch supports the managed option in a network xml for network devices. This option is used for pci network devices when forward mode=hostdev. Hence the example network xml would be: network namedirect-network/name uuid81ff0d90-c91e-6742-64da-4a736edb9a8f/uuid forward mode=hostdev pf dev=eth2 managed='yes'/ /forward /network OR network namedirect-network/name uuid81ff0d90-c91e-6742-64da-4a736edb9a8f/uuid forward mode=hostdev interface dev=:04:00.1 managed='yes'/ interface dev=:04:00.2 managed='yes'/ interface dev=:04:00.3 managed='yes'/ /forward /network Signed-off-by: Shradha Shah ss...@solarflare.com --- src/conf/network_conf.c | 61 -- src/conf/network_conf.h |2 + src/network/bridge_driver.c |5 +++- 3 files changed, 64 insertions(+), 4 deletions(-) diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 6b346c3..18e4ee3 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -986,6 +986,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) char *forwardDev = NULL; xmlNodePtr save = ctxt-node; xmlNodePtr bandwidthNode = NULL; +char *managed = NULL; if (VIR_ALLOC(def) 0) { virReportOOMError(); @@ -1128,6 +1129,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) } forwardDev = virXPathString(string(./@dev), ctxt); +managed = virXPathString(string(./managed), ctxt); /* all of these modes can use a pool of physical interfaces */ nForwardIfs = virXPathNodeSet(./interface, ctxt, forwardIfNodes); @@ -1151,6 +1153,12 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) goto error; } +if (managed) { +virNetworkReportError(VIR_ERR_XML_ERROR, + _(A managed field should not be used in this location when using a SRIOV PF)); +goto error; +} + forwardDev = virXMLPropString(*forwardPfNodes, dev); if (!forwardDev) { virNetworkReportError(VIR_ERR_XML_ERROR, @@ -1159,9 +1167,16 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) goto error; } +managed = virXMLPropString(*forwardPfNodes, managed); +if(managed != NULL) { +if (STREQ(managed, yes)) +def-forwardPfs-managed = 1; +} + def-forwardPfs-usageCount = 0; def-forwardPfs-dev = forwardDev; forwardDev = NULL; +managed = NULL; def-nForwardPfs++; } else if (nForwardPfs 1) { virNetworkReportError(VIR_ERR_XML_ERROR, @@ -1170,6 +1185,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) } if (nForwardIfs 0 || forwardDev) { int ii; +unsigned int managedvalue = 0; /* allocate array to hold all the portgroups */ if (VIR_ALLOC_N(def-forwardIfs, MAX(nForwardIfs, 1)) 0) { @@ -1181,12 +1197,24 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) def-forwardIfs[0].usageCount = 0; def-forwardIfs[0].dev = forwardDev; forwardDev = NULL; +if (managed != NULL) { +if (STREQ(managed, yes)) +def-forwardIfs[0].managed = 1; +} +managed = NULL; def-nForwardIfs++; } /* parse each forwardIf */ for (ii = 0; ii nForwardIfs; ii++) { forwardDev = virXMLPropString(forwardIfNodes[ii], dev); +managed = virXMLPropString(forwardIfNodes[ii], managed); +if (managed != NULL) { +if (STREQ(managed, yes)) +managedvalue = 1; +else +managedvalue = 0; +} if (!forwardDev) { virNetworkReportError(VIR_ERR_XML_ERROR, _(Missing required dev attribute in network '%s' forward interface element), @@ -1204,12 +1232,22 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) forwardDev, def-name); goto error; } + +if (managedvalue != def-forwardIfs[0].managed) { +virNetworkReportError(VIR_ERR_XML_ERROR, + _(managed field of forward dev must match that of the first interface element dev in network '%s'), + def-name); +goto error; +} +VIR_FREE(managed); VIR_FREE(forwardDev); continue; }