diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 9213371b80..e346b03d1c 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -187,15 +187,15 @@ void virNetworkDefFree(virNetworkDefPtr def) VIR_FREE(def->bridge); VIR_FREE(def->domain); - for (ii = 0 ; ii < def->nForwardPfs && def->forwardPfs ; ii++) { - virNetworkForwardPfDefClear(&def->forwardPfs[ii]); + for (ii = 0 ; ii < def->forward.npfs && def->forward.pfs ; ii++) { + virNetworkForwardPfDefClear(&def->forward.pfs[ii]); } - VIR_FREE(def->forwardPfs); + VIR_FREE(def->forward.pfs); - for (ii = 0 ; ii < def->nForwardIfs && def->forwardIfs ; ii++) { - virNetworkForwardIfDefClear(&def->forwardIfs[ii]); + for (ii = 0 ; ii < def->forward.nifs && def->forward.ifs ; ii++) { + virNetworkForwardIfDefClear(&def->forward.ifs[ii]); } - VIR_FREE(def->forwardIfs); + VIR_FREE(def->forward.ifs); for (ii = 0 ; ii < def->nips && def->ips ; ii++) { virNetworkIpDefClear(&def->ips[ii]); @@ -1447,13 +1447,13 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) forwardNode = virXPathNode("./forward", ctxt); if (!forwardNode) { - def->forwardType = VIR_NETWORK_FORWARD_NONE; + def->forward.type = VIR_NETWORK_FORWARD_NONE; def->stp = (stp && STREQ(stp, "off")) ? 0 : 1; } else { ctxt->node = forwardNode; tmp = virXPathString("string(./@mode)", ctxt); if (tmp) { - if ((def->forwardType = virNetworkForwardTypeFromString(tmp)) < 0) { + if ((def->forward.type = virNetworkForwardTypeFromString(tmp)) < 0) { virReportError(VIR_ERR_XML_ERROR, _("unknown forwarding type '%s'"), tmp); VIR_FREE(tmp); @@ -1461,14 +1461,14 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) } VIR_FREE(tmp); } else { - def->forwardType = VIR_NETWORK_FORWARD_NAT; + def->forward.type = VIR_NETWORK_FORWARD_NAT; } forwardDev = virXPathString("string(./@dev)", ctxt); forwardManaged = virXPathString("string(./@managed)", ctxt); if (forwardManaged != NULL) { if (STRCASEEQ(forwardManaged, "yes")) - def->managed = 1; + def->forward.managed = true; } /* all of these modes can use a pool of physical interfaces */ @@ -1495,7 +1495,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) } if (nForwardPfs == 1) { - if (VIR_ALLOC_N(def->forwardPfs, nForwardPfs) < 0) { + if (VIR_ALLOC_N(def->forward.pfs, nForwardPfs) < 0) { virReportOOMError(); goto error; } @@ -1514,9 +1514,9 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) goto error; } - def->forwardPfs->dev = forwardDev; + def->forward.pfs->dev = forwardDev; forwardDev = NULL; - def->nForwardPfs++; + def->forward.npfs++; } else if (nForwardPfs > 1) { virReportError(VIR_ERR_XML_ERROR, "%s", _("Use of more than one physical interface is not allowed")); @@ -1525,7 +1525,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) if (nForwardAddrs > 0) { int ii; - if (VIR_ALLOC_N(def->forwardIfs, nForwardAddrs) < 0) { + if (VIR_ALLOC_N(def->forward.ifs, nForwardAddrs) < 0) { virReportOOMError(); goto error; } @@ -1540,7 +1540,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) type = virXMLPropString(forwardAddrNodes[ii], "type"); if (type) { - if ((def->forwardIfs[ii].type = virNetworkForwardHostdevDeviceTypeFromString(type)) < 0) { + if ((def->forward.ifs[ii].type = virNetworkForwardHostdevDeviceTypeFromString(type)) < 0) { virReportError(VIR_ERR_XML_ERROR, _("unknown address type '%s'"), type); goto error; @@ -1551,9 +1551,9 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) goto error; } - switch (def->forwardIfs[ii].type) { + switch (def->forward.ifs[ii].type) { case VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_PCI: - if (virDevicePCIAddressParseXML(forwardAddrNodes[ii], &(def->forwardIfs[ii].device.pci)) < 0) + if (virDevicePCIAddressParseXML(forwardAddrNodes[ii], &(def->forward.ifs[ii].device.pci)) < 0) goto error; break; @@ -1565,23 +1565,23 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) goto error; } VIR_FREE(type); - def->nForwardIfs++; + def->forward.nifs++; } } else if (nForwardIfs > 0 || forwardDev) { int ii; /* allocate array to hold all the portgroups */ - if (VIR_ALLOC_N(def->forwardIfs, MAX(nForwardIfs, 1)) < 0) { + if (VIR_ALLOC_N(def->forward.ifs, MAX(nForwardIfs, 1)) < 0) { virReportOOMError(); goto error; } if (forwardDev) { - def->forwardIfs[0].device.dev = forwardDev; - def->forwardIfs[0].type = VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV; + def->forward.ifs[0].device.dev = forwardDev; + def->forward.ifs[0].type = VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV; forwardDev = NULL; - def->nForwardIfs++; + def->forward.nifs++; } /* parse each forwardIf */ @@ -1594,13 +1594,13 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) goto error; } - if ((ii == 0) && (def->nForwardIfs == 1)) { + if ((ii == 0) && (def->forward.nifs == 1)) { /* both forwardDev and an interface element are present. * If they don't match, it's an error. */ - if (STRNEQ(forwardDev, def->forwardIfs[0].device.dev)) { + if (STRNEQ(forwardDev, def->forward.ifs[0].device.dev)) { virReportError(VIR_ERR_XML_ERROR, _("forward dev '%s' must match first interface element dev '%s' in network '%s'"), - def->forwardIfs[0].device.dev, + def->forward.ifs[0].device.dev, forwardDev, def->name); goto error; } @@ -1608,10 +1608,10 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) continue; } - def->forwardIfs[ii].device.dev = forwardDev; + def->forward.ifs[ii].device.dev = forwardDev; forwardDev = NULL; - def->forwardIfs[ii].type = VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV; - def->nForwardIfs++; + def->forward.ifs[ii].type = VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV; + def->forward.nifs++; } } VIR_FREE(type); @@ -1620,7 +1620,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) VIR_FREE(forwardPfNodes); VIR_FREE(forwardIfNodes); VIR_FREE(forwardAddrNodes); - switch (def->forwardType) { + switch (def->forward.type) { case VIR_NETWORK_FORWARD_ROUTE: case VIR_NETWORK_FORWARD_NAT: /* It's pointless to specify L3 forwarding without specifying @@ -1629,11 +1629,11 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) if (def->nips == 0) { virReportError(VIR_ERR_XML_ERROR, _("%s forwarding requested, but no IP address provided for network '%s'"), - virNetworkForwardTypeToString(def->forwardType), + virNetworkForwardTypeToString(def->forward.type), def->name); goto error; } - if (def->nForwardIfs > 1) { + if (def->forward.nifs > 1) { virReportError(VIR_ERR_XML_ERROR, _("multiple forwarding interfaces specified for network '%s', only one is supported"), def->name); @@ -1648,7 +1648,7 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) if (def->bridge) { virReportError(VIR_ERR_XML_ERROR, _("bridge name not allowed in %s mode (network '%s')"), - virNetworkForwardTypeToString(def->forwardType), + virNetworkForwardTypeToString(def->forward.type), def->name); goto error; } @@ -1657,16 +1657,16 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt) if (def->delay || stp) { virReportError(VIR_ERR_XML_ERROR, _("bridge delay/stp options only allowed in route, nat, and isolated mode, not in %s (network '%s')"), - virNetworkForwardTypeToString(def->forwardType), + virNetworkForwardTypeToString(def->forward.type), def->name); goto error; } - if (def->bridge && (def->nForwardIfs || nForwardPfs)) { + if (def->bridge && (def->forward.nifs || def->forward.npfs)) { virReportError(VIR_ERR_XML_ERROR, _("A network with forward mode='%s' can specify " "a bridge name or a forward dev, but not " "both (network '%s')"), - virNetworkForwardTypeToString(def->forwardType), + virNetworkForwardTypeToString(def->forward.type), def->name); goto error; } @@ -1943,53 +1943,53 @@ char *virNetworkDefFormat(const virNetworkDefPtr def, unsigned int flags) virUUIDFormat(uuid, uuidstr); virBufferAsprintf(&buf, "%s\n", uuidstr); - if (def->forwardType != VIR_NETWORK_FORWARD_NONE) { + if (def->forward.type != VIR_NETWORK_FORWARD_NONE) { const char *dev = NULL; - if (!def->nForwardPfs) + if (!def->forward.npfs) dev = virNetworkDefForwardIf(def, 0); - const char *mode = virNetworkForwardTypeToString(def->forwardType); + const char *mode = virNetworkForwardTypeToString(def->forward.type); if (!mode) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Unknown forward type %d in network '%s'"), - def->forwardType, def->name); + def->forward.type, def->name); goto error; } virBufferAddLit(&buf, "forwardType == VIR_NETWORK_FORWARD_HOSTDEV) { - if (def->managed == 1) + if (def->forward.type == VIR_NETWORK_FORWARD_HOSTDEV) { + if (def->forward.managed) virBufferAddLit(&buf, " managed='yes'"); else virBufferAddLit(&buf, " managed='no'"); } virBufferAsprintf(&buf, "%s>\n", - (def->nForwardIfs || def->nForwardPfs) ? "" : "/"); + (def->forward.nifs || def->forward.npfs) ? "" : "/"); virBufferAdjustIndent(&buf, 2); - /* For now, hard-coded to at most 1 forwardPfs */ - if (def->nForwardPfs) + /* For now, hard-coded to at most 1 forward.pfs */ + if (def->forward.npfs) virBufferEscapeString(&buf, "\n", - def->forwardPfs[0].dev); + def->forward.pfs[0].dev); - if (def->nForwardIfs && - (!def->nForwardPfs || !(flags & VIR_NETWORK_XML_INACTIVE))) { - for (ii = 0; ii < def->nForwardIfs; ii++) { - if (def->forwardType != VIR_NETWORK_FORWARD_HOSTDEV) { + if (def->forward.nifs && + (!def->forward.npfs || !(flags & VIR_NETWORK_XML_INACTIVE))) { + for (ii = 0; ii < def->forward.nifs; ii++) { + if (def->forward.type != VIR_NETWORK_FORWARD_HOSTDEV) { virBufferEscapeString(&buf, "forwardIfs[ii].device.dev); + def->forward.ifs[ii].device.dev); if (!(flags & VIR_NETWORK_XML_INACTIVE) && - (def->forwardIfs[ii].connections > 0)) { + (def->forward.ifs[ii].connections > 0)) { virBufferAsprintf(&buf, " connections='%d'", - def->forwardIfs[ii].connections); + def->forward.ifs[ii].connections); } virBufferAddLit(&buf, "/>\n"); } else { - if (def->forwardIfs[ii].type == VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_PCI) { + if (def->forward.ifs[ii].type == VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_PCI) { if (virDevicePCIAddressFormat(&buf, - def->forwardIfs[ii].device.pci, + def->forward.ifs[ii].device.pci, true) < 0) goto error; } @@ -1997,13 +1997,13 @@ char *virNetworkDefFormat(const virNetworkDefPtr def, unsigned int flags) } } virBufferAdjustIndent(&buf, -2); - if (def->nForwardPfs || def->nForwardIfs) + if (def->forward.npfs || def->forward.nifs) virBufferAddLit(&buf, "\n"); } - if (def->forwardType == VIR_NETWORK_FORWARD_NONE || - def->forwardType == VIR_NETWORK_FORWARD_NAT || - def->forwardType == VIR_NETWORK_FORWARD_ROUTE) { + if (def->forward.type == VIR_NETWORK_FORWARD_NONE || + def->forward.type == VIR_NETWORK_FORWARD_NAT || + def->forward.type == VIR_NETWORK_FORWARD_ROUTE) { virBufferAddLit(&buf, "bridge) @@ -2011,7 +2011,7 @@ char *virNetworkDefFormat(const virNetworkDefPtr def, unsigned int flags) virBufferAsprintf(&buf, " stp='%s' delay='%ld' />\n", def->stp ? "on" : "off", def->delay); - } else if (def->forwardType == VIR_NETWORK_FORWARD_BRIDGE && + } else if (def->forward.type == VIR_NETWORK_FORWARD_BRIDGE && def->bridge) { virBufferEscapeString(&buf, "\n", def->bridge); } @@ -2171,9 +2171,9 @@ virNetworkObjPtr virNetworkLoadConfig(virNetworkObjListPtr nets, goto error; } - if (def->forwardType == VIR_NETWORK_FORWARD_NONE || - def->forwardType == VIR_NETWORK_FORWARD_NAT || - def->forwardType == VIR_NETWORK_FORWARD_ROUTE) { + if (def->forward.type == VIR_NETWORK_FORWARD_NONE || + def->forward.type == VIR_NETWORK_FORWARD_NAT || + def->forward.type == VIR_NETWORK_FORWARD_ROUTE) { /* Generate a bridge if none is specified, but don't check for collisions * if a bridge is hardcoded, so the network is at least defined. @@ -2743,17 +2743,17 @@ virNetworkDefUpdateForwardInterface(virNetworkDefPtr def, } /* check if an with same dev name already exists */ - for (ii = 0; ii < def->nForwardIfs; ii++) { - if (def->forwardIfs[ii].type + for (ii = 0; ii < def->forward.nifs; ii++) { + if (def->forward.ifs[ii].type == VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV && - STREQ(iface.device.dev, def->forwardIfs[ii].device.dev)) + STREQ(iface.device.dev, def->forward.ifs[ii].device.dev)) break; } if ((command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST) || (command == VIR_NETWORK_UPDATE_COMMAND_ADD_LAST)) { - if (ii < def->nForwardIfs) { + if (ii < def->forward.nifs) { virReportError(VIR_ERR_OPERATION_INVALID, _("there is an existing interface entry " "in network '%s' that matches " @@ -2763,17 +2763,17 @@ virNetworkDefUpdateForwardInterface(virNetworkDefPtr def, } /* add to beginning/end of list */ - if (VIR_INSERT_ELEMENT(def->forwardIfs, + if (VIR_INSERT_ELEMENT(def->forward.ifs, command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST - ? 0 : def->nForwardIfs, - def->nForwardIfs, iface) < 0) { + ? 0 : def->forward.nifs, + def->forward.nifs, iface) < 0) { virReportOOMError(); goto cleanup; } } else if (command == VIR_NETWORK_UPDATE_COMMAND_DELETE) { - if (ii == def->nForwardIfs) { + if (ii == def->forward.nifs) { virReportError(VIR_ERR_OPERATION_INVALID, _("couldn't find an interface entry " "in network '%s' matching "), @@ -2782,19 +2782,19 @@ virNetworkDefUpdateForwardInterface(virNetworkDefPtr def, } /* fail if the interface is being used */ - if (def->forwardIfs[ii].connections > 0) { + if (def->forward.ifs[ii].connections > 0) { virReportError(VIR_ERR_OPERATION_INVALID, _("unable to delete interface '%s' " "in network '%s'. It is currently being used " " by %d domains."), iface.device.dev, def->name, - def->forwardIfs[ii].connections); + def->forward.ifs[ii].connections); goto cleanup; } /* remove it */ - virNetworkForwardIfDefClear(&def->forwardIfs[ii]); - VIR_DELETE_ELEMENT(def->forwardIfs, ii, def->nForwardIfs); + virNetworkForwardIfDefClear(&def->forward.ifs[ii]); + VIR_DELETE_ELEMENT(def->forward.ifs, ii, def->forward.nifs); } else { virNetworkDefUpdateUnknownCommand(command); diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h index 60042fcd28..49fc0ca33b 100644 --- a/src/conf/network_conf.h +++ b/src/conf/network_conf.h @@ -161,6 +161,22 @@ struct _virNetworkForwardPfDef { int connections; /* how many guest interfaces are connected to this device? */ }; +typedef struct _virNetworkForwardDef virNetworkForwardDef; +typedef virNetworkForwardDef *virNetworkForwardDefPtr; +struct _virNetworkForwardDef { + int type; /* One of virNetworkForwardType constants */ + bool managed; /* managed attribute for hostdev mode */ + + /* If there are multiple forward devices (i.e. a pool of + * interfaces), they will be listed here. + */ + size_t npfs; + virNetworkForwardPfDefPtr pfs; + + size_t nifs; + virNetworkForwardIfDefPtr ifs; +}; + typedef struct _virPortGroupDef virPortGroupDef; typedef virPortGroupDef *virPortGroupDefPtr; struct _virPortGroupDef { @@ -191,17 +207,7 @@ struct _virNetworkDef { */ bool ipv6nogw; - int forwardType; /* One of virNetworkForwardType constants */ - int managed; /* managed attribute for hostdev mode */ - - /* If there are multiple forward devices (i.e. a pool of - * interfaces), they will be listed here. - */ - size_t nForwardPfs; - virNetworkForwardPfDefPtr forwardPfs; - - size_t nForwardIfs; - virNetworkForwardIfDefPtr forwardIfs; + virNetworkForwardDef forward; size_t nips; virNetworkIpDefPtr ips; /* ptr to array of IP addresses on this network */ @@ -280,9 +286,9 @@ char *virNetworkDefFormat(const virNetworkDefPtr def, unsigned int flags); static inline const char * virNetworkDefForwardIf(const virNetworkDefPtr def, size_t n) { - return ((def->forwardIfs && (def->nForwardIfs > n) && - def->forwardIfs[n].type == VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV) - ? def->forwardIfs[n].device.dev : NULL); + return ((def->forward.ifs && (def->forward.nifs > n) && + def->forward.ifs[n].type == VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV) + ? def->forward.ifs[n].device.dev : NULL); } virPortGroupDefPtr virPortGroupFindByName(virNetworkDefPtr net, diff --git a/src/esx/esx_network_driver.c b/src/esx/esx_network_driver.c index c8f101a205..6a87abd97e 100644 --- a/src/esx/esx_network_driver.c +++ b/src/esx/esx_network_driver.c @@ -372,11 +372,11 @@ esxNetworkDefineXML(virConnectPtr conn, const char *xml) } /* FIXME: Add support for NAT */ - if (def->forwardType != VIR_NETWORK_FORWARD_NONE && - def->forwardType != VIR_NETWORK_FORWARD_BRIDGE) { + if (def->forward.type != VIR_NETWORK_FORWARD_NONE && + def->forward.type != VIR_NETWORK_FORWARD_BRIDGE) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unsupported forward mode '%s'"), - virNetworkForwardTypeToString(def->forwardType)); + virNetworkForwardTypeToString(def->forward.type)); goto cleanup; } @@ -405,7 +405,7 @@ esxNetworkDefineXML(virConnectPtr conn, const char *xml) goto cleanup; } - if (def->forwardType != VIR_NETWORK_FORWARD_NONE && def->nForwardIfs > 0) { + if (def->forward.type != VIR_NETWORK_FORWARD_NONE && def->forward.nifs > 0) { if (esxVI_HostVirtualSwitchBondBridge_Alloc (&hostVirtualSwitchBondBridge) < 0) { goto cleanup; @@ -419,10 +419,10 @@ esxNetworkDefineXML(virConnectPtr conn, const char *xml) goto cleanup; } - for (i = 0; i < def->nForwardIfs; ++i) { + for (i = 0; i < def->forward.nifs; ++i) { bool found = false; - if (def->forwardIfs[i].type != + if (def->forward.ifs[i].type != VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV) { virReportError(VIR_ERR_INTERNAL_ERROR, _("unsupported device type in network %s " @@ -433,7 +433,7 @@ esxNetworkDefineXML(virConnectPtr conn, const char *xml) for (physicalNic = physicalNicList; physicalNic != NULL; physicalNic = physicalNic->_next) { - if (STREQ(def->forwardIfs[i].device.dev, physicalNic->device)) { + if (STREQ(def->forward.ifs[i].device.dev, physicalNic->device)) { if (esxVI_String_AppendValueToList (&hostVirtualSwitchBondBridge->nicDevice, physicalNic->key) < 0) { @@ -448,7 +448,7 @@ esxNetworkDefineXML(virConnectPtr conn, const char *xml) if (! found) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Could not find PhysicalNic with name '%s'"), - def->forwardIfs[i].device.dev); + def->forward.ifs[i].device.dev); goto cleanup; } } @@ -721,7 +721,7 @@ esxNetworkGetXMLDesc(virNetworkPtr network_, unsigned int flags) goto cleanup; } - def->forwardType = VIR_NETWORK_FORWARD_NONE; + def->forward.type = VIR_NETWORK_FORWARD_NONE; /* Count PhysicalNics on HostVirtualSwitch */ count = 0; @@ -732,9 +732,9 @@ esxNetworkGetXMLDesc(virNetworkPtr network_, unsigned int flags) } if (count > 0) { - def->forwardType = VIR_NETWORK_FORWARD_BRIDGE; + def->forward.type = VIR_NETWORK_FORWARD_BRIDGE; - if (VIR_ALLOC_N(def->forwardIfs, count) < 0) { + if (VIR_ALLOC_N(def->forward.ifs, count) < 0) { virReportOOMError(); goto cleanup; } @@ -751,17 +751,17 @@ esxNetworkGetXMLDesc(virNetworkPtr network_, unsigned int flags) for (physicalNic = physicalNicList; physicalNic != NULL; physicalNic = physicalNic->_next) { if (STREQ(physicalNicKey->value, physicalNic->key)) { - def->forwardIfs[def->nForwardIfs].type + def->forward.ifs[def->forward.nifs].type = VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV; - def->forwardIfs[def->nForwardIfs].device.dev + def->forward.ifs[def->forward.nifs].device.dev = strdup(physicalNic->device); - if (def->forwardIfs[def->nForwardIfs].device.dev == NULL) { + if (def->forward.ifs[def->forward.nifs].device.dev == NULL) { virReportOOMError(); goto cleanup; } - ++def->nForwardIfs; + ++def->forward.nifs; found = true; break; diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index a5b9182b5e..c94a9a19f8 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -711,7 +711,7 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network, * host's /etc/resolv.conf (since this could be used as a channel * to build a connection to the outside). */ - if (network->def->forwardType == VIR_NETWORK_FORWARD_NONE) { + if (network->def->forward.type == VIR_NETWORK_FORWARD_NONE) { virCommandAddArgList(cmd, "--dhcp-option=3", "--no-resolv", NULL); } @@ -1325,9 +1325,9 @@ networkRefreshDaemons(struct network_driver *driver) virNetworkObjLock(network); if (virNetworkObjIsActive(network) && - ((network->def->forwardType == VIR_NETWORK_FORWARD_NONE) || - (network->def->forwardType == VIR_NETWORK_FORWARD_NAT) || - (network->def->forwardType == VIR_NETWORK_FORWARD_ROUTE))) { + ((network->def->forward.type == VIR_NETWORK_FORWARD_NONE) || + (network->def->forward.type == VIR_NETWORK_FORWARD_NAT) || + (network->def->forward.type == VIR_NETWORK_FORWARD_ROUTE))) { /* Only the three L3 network types that are configured by * libvirt will have a dnsmasq or radvd daemon associated * with them. Here we send a SIGHUP to an existing @@ -1862,12 +1862,12 @@ networkAddIpSpecificIptablesRules(struct network_driver *driver, * forward mode is NAT. This is because IPv6 has no NAT. */ - if (network->def->forwardType == VIR_NETWORK_FORWARD_NAT) { + if (network->def->forward.type == VIR_NETWORK_FORWARD_NAT) { if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET)) return networkAddMasqueradingIptablesRules(driver, network, ipdef); else if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6)) return networkAddRoutingIptablesRules(driver, network, ipdef); - } else if (network->def->forwardType == VIR_NETWORK_FORWARD_ROUTE) { + } else if (network->def->forward.type == VIR_NETWORK_FORWARD_ROUTE) { return networkAddRoutingIptablesRules(driver, network, ipdef); } return 0; @@ -1878,12 +1878,12 @@ networkRemoveIpSpecificIptablesRules(struct network_driver *driver, virNetworkObjPtr network, virNetworkIpDefPtr ipdef) { - if (network->def->forwardType == VIR_NETWORK_FORWARD_NAT) { + if (network->def->forward.type == VIR_NETWORK_FORWARD_NAT) { if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET)) networkRemoveMasqueradingIptablesRules(driver, network, ipdef); else if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6)) networkRemoveRoutingIptablesRules(driver, network, ipdef); - } else if (network->def->forwardType == VIR_NETWORK_FORWARD_ROUTE) { + } else if (network->def->forward.type == VIR_NETWORK_FORWARD_ROUTE) { networkRemoveRoutingIptablesRules(driver, network, ipdef); } } @@ -1951,9 +1951,9 @@ networkReloadIptablesRules(struct network_driver *driver) virNetworkObjLock(network); if (virNetworkObjIsActive(network) && - ((network->def->forwardType == VIR_NETWORK_FORWARD_NONE) || - (network->def->forwardType == VIR_NETWORK_FORWARD_NAT) || - (network->def->forwardType == VIR_NETWORK_FORWARD_ROUTE))) { + ((network->def->forward.type == VIR_NETWORK_FORWARD_NONE) || + (network->def->forward.type == VIR_NETWORK_FORWARD_NAT) || + (network->def->forward.type == VIR_NETWORK_FORWARD_ROUTE))) { /* Only the three L3 network types that are configured by libvirt * need to have iptables rules reloaded. */ @@ -2253,8 +2253,8 @@ networkStartNetworkVirtual(struct network_driver *driver, if (virNetDevSetOnline(network->def->bridge, 1) < 0) goto err2; - /* If forwardType != NONE, turn on global IP forwarding */ - if (network->def->forwardType != VIR_NETWORK_FORWARD_NONE && + /* If forward.type != NONE, turn on global IP forwarding */ + if (network->def->forward.type != VIR_NETWORK_FORWARD_NONE && networkEnableIpForwarding(v4present, v6present) < 0) { virReportSystemError(errno, "%s", _("failed to enable IP forwarding")); @@ -2424,7 +2424,7 @@ networkStartNetwork(struct network_driver *driver, if (virNetworkObjSetDefTransient(network, true) < 0) return -1; - switch (network->def->forwardType) { + switch (network->def->forward.type) { case VIR_NETWORK_FORWARD_NONE: case VIR_NETWORK_FORWARD_NAT: @@ -2486,7 +2486,7 @@ static int networkShutdownNetwork(struct network_driver *driver, unlink(stateFile); VIR_FREE(stateFile); - switch (network->def->forwardType) { + switch (network->def->forward.type) { case VIR_NETWORK_FORWARD_NONE: case VIR_NETWORK_FORWARD_NAT: @@ -2739,9 +2739,9 @@ networkValidate(struct network_driver *driver, /* Only the three L3 network types that are configured by libvirt * need to have a bridge device name / mac address provided */ - if (def->forwardType == VIR_NETWORK_FORWARD_NONE || - def->forwardType == VIR_NETWORK_FORWARD_NAT || - def->forwardType == VIR_NETWORK_FORWARD_ROUTE) { + if (def->forward.type == VIR_NETWORK_FORWARD_NONE || + def->forward.type == VIR_NETWORK_FORWARD_NAT || + def->forward.type == VIR_NETWORK_FORWARD_ROUTE) { if (virNetworkSetBridgeName(&driver->networks, def, 1)) return -1; @@ -2756,7 +2756,7 @@ networkValidate(struct network_driver *driver, _("Unsupported element in network %s " "with forward mode='%s'"), def->name, - virNetworkForwardTypeToString(def->forwardType)); + virNetworkForwardTypeToString(def->forward.type)); return -1; } if (def->dns.ntxts || def->dns.nhosts || def->dns.nsrvs) { @@ -2764,7 +2764,7 @@ networkValidate(struct network_driver *driver, _("Unsupported element in network %s " "with forward mode='%s'"), def->name, - virNetworkForwardTypeToString(def->forwardType)); + virNetworkForwardTypeToString(def->forward.type)); return -1; } if (def->domain) { @@ -2772,7 +2772,7 @@ networkValidate(struct network_driver *driver, _("Unsupported element in network %s " "with forward mode='%s'"), def->name, - virNetworkForwardTypeToString(def->forwardType)); + virNetworkForwardTypeToString(def->forward.type)); return -1; } } @@ -2797,7 +2797,7 @@ networkValidate(struct network_driver *driver, * a pool, and those using an Open vSwitch bridge. */ - vlanAllowed = (def->forwardType == VIR_NETWORK_FORWARD_BRIDGE && + vlanAllowed = (def->forward.type == VIR_NETWORK_FORWARD_BRIDGE && def->virtPortProfile && def->virtPortProfile->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH); @@ -2810,7 +2810,7 @@ networkValidate(struct network_driver *driver, * supports a vlan tag. */ if (def->portGroups[ii].virtPortProfile) { - if (def->forwardType != VIR_NETWORK_FORWARD_BRIDGE || + if (def->forward.type != VIR_NETWORK_FORWARD_BRIDGE || def->portGroups[ii].virtPortProfile->virtPortType != VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH) { badVlanUse = true; @@ -3105,9 +3105,9 @@ networkUpdate(virNetworkPtr net, if ((section == VIR_NETWORK_SECTION_IP || section == VIR_NETWORK_SECTION_FORWARD || section == VIR_NETWORK_SECTION_FORWARD_INTERFACE) && - (network->def->forwardType == VIR_NETWORK_FORWARD_NONE || - network->def->forwardType == VIR_NETWORK_FORWARD_NAT || - network->def->forwardType == VIR_NETWORK_FORWARD_ROUTE)) { + (network->def->forward.type == VIR_NETWORK_FORWARD_NONE || + network->def->forward.type == VIR_NETWORK_FORWARD_NAT || + network->def->forward.type == VIR_NETWORK_FORWARD_ROUTE)) { /* these could affect the iptables rules */ networkRemoveIptablesRules(driver, network); if (networkAddIptablesRules(driver, network) < 0) @@ -3405,37 +3405,37 @@ networkCreateInterfacePool(virNetworkDefPtr netdef) { struct pci_config_address **virt_fns; int ret = -1, ii = 0; - if ((virNetDevGetVirtualFunctions(netdef->forwardPfs->dev, + if ((virNetDevGetVirtualFunctions(netdef->forward.pfs->dev, &vfname, &virt_fns, &num_virt_fns)) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Could not get Virtual functions on %s"), - netdef->forwardPfs->dev); + netdef->forward.pfs->dev); goto finish; } if (num_virt_fns == 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("No Vf's present on SRIOV PF %s"), - netdef->forwardPfs->dev); + netdef->forward.pfs->dev); goto finish; } - if ((VIR_ALLOC_N(netdef->forwardIfs, num_virt_fns)) < 0) { + if ((VIR_ALLOC_N(netdef->forward.ifs, num_virt_fns)) < 0) { virReportOOMError(); goto finish; } - netdef->nForwardIfs = num_virt_fns; + netdef->forward.nifs = num_virt_fns; - for (ii = 0; ii < netdef->nForwardIfs; ii++) { - if ((netdef->forwardType == VIR_NETWORK_FORWARD_BRIDGE) || - (netdef->forwardType == VIR_NETWORK_FORWARD_PRIVATE) || - (netdef->forwardType == VIR_NETWORK_FORWARD_VEPA) || - (netdef->forwardType == VIR_NETWORK_FORWARD_PASSTHROUGH)) { - netdef->forwardIfs[ii].type = VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV; + for (ii = 0; ii < netdef->forward.nifs; ii++) { + if ((netdef->forward.type == VIR_NETWORK_FORWARD_BRIDGE) || + (netdef->forward.type == VIR_NETWORK_FORWARD_PRIVATE) || + (netdef->forward.type == VIR_NETWORK_FORWARD_VEPA) || + (netdef->forward.type == VIR_NETWORK_FORWARD_PASSTHROUGH)) { + netdef->forward.ifs[ii].type = VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV; if (vfname[ii]) { - netdef->forwardIfs[ii].device.dev = strdup(vfname[ii]); - if (!netdef->forwardIfs[ii].device.dev) { + netdef->forward.ifs[ii].device.dev = strdup(vfname[ii]); + if (!netdef->forward.ifs[ii].device.dev) { virReportOOMError(); goto finish; } @@ -3446,13 +3446,13 @@ networkCreateInterfacePool(virNetworkDefPtr netdef) { goto finish; } } - else if (netdef->forwardType == VIR_NETWORK_FORWARD_HOSTDEV) { + else if (netdef->forward.type == VIR_NETWORK_FORWARD_HOSTDEV) { /* VF's are always PCI devices */ - netdef->forwardIfs[ii].type = VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_PCI; - netdef->forwardIfs[ii].device.pci.domain = virt_fns[ii]->domain; - netdef->forwardIfs[ii].device.pci.bus = virt_fns[ii]->bus; - netdef->forwardIfs[ii].device.pci.slot = virt_fns[ii]->slot; - netdef->forwardIfs[ii].device.pci.function = virt_fns[ii]->function; + netdef->forward.ifs[ii].type = VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_PCI; + netdef->forward.ifs[ii].device.pci.domain = virt_fns[ii]->domain; + netdef->forward.ifs[ii].device.pci.bus = virt_fns[ii]->bus; + netdef->forward.ifs[ii].device.pci.slot = virt_fns[ii]->slot; + netdef->forward.ifs[ii].device.pci.function = virt_fns[ii]->function; } } @@ -3535,16 +3535,16 @@ networkAllocateActualDevice(virDomainNetDefPtr iface) goto error; } - if ((netdef->forwardType == VIR_NETWORK_FORWARD_NONE) || - (netdef->forwardType == VIR_NETWORK_FORWARD_NAT) || - (netdef->forwardType == VIR_NETWORK_FORWARD_ROUTE)) { + if ((netdef->forward.type == VIR_NETWORK_FORWARD_NONE) || + (netdef->forward.type == VIR_NETWORK_FORWARD_NAT) || + (netdef->forward.type == VIR_NETWORK_FORWARD_ROUTE)) { /* for these forward types, the actual net type really *is* *NETWORK; we just keep the info from the portgroup in * iface->data.network.actual */ if (iface->data.network.actual) iface->data.network.actual->type = VIR_DOMAIN_NET_TYPE_NETWORK; - } else if ((netdef->forwardType == VIR_NETWORK_FORWARD_BRIDGE) && + } else if ((netdef->forward.type == VIR_NETWORK_FORWARD_BRIDGE) && netdef->bridge) { /* @@ -3587,7 +3587,7 @@ networkAllocateActualDevice(virDomainNetDefPtr iface) } } - } else if (netdef->forwardType == VIR_NETWORK_FORWARD_HOSTDEV) { + } else if (netdef->forward.type == VIR_NETWORK_FORWARD_HOSTDEV) { if (!iface->data.network.actual && (VIR_ALLOC(iface->data.network.actual) < 0)) { @@ -3596,15 +3596,15 @@ networkAllocateActualDevice(virDomainNetDefPtr iface) } iface->data.network.actual->type = actualType = VIR_DOMAIN_NET_TYPE_HOSTDEV; - if (netdef->nForwardPfs > 0 && netdef->nForwardIfs <= 0 && + if (netdef->forward.npfs > 0 && netdef->forward.nifs <= 0 && networkCreateInterfacePool(netdef) < 0) { goto error; } /* pick first dev with 0 connections */ - for (ii = 0; ii < netdef->nForwardIfs; ii++) { - if (netdef->forwardIfs[ii].connections == 0) { - dev = &netdef->forwardIfs[ii]; + for (ii = 0; ii < netdef->forward.nifs; ii++) { + if (netdef->forward.ifs[ii].connections == 0) { + dev = &netdef->forward.ifs[ii]; break; } } @@ -3619,7 +3619,7 @@ networkAllocateActualDevice(virDomainNetDefPtr iface) iface->data.network.actual->data.hostdev.def.parent.data.net = iface; iface->data.network.actual->data.hostdev.def.info = &iface->info; iface->data.network.actual->data.hostdev.def.mode = VIR_DOMAIN_HOSTDEV_MODE_SUBSYS; - iface->data.network.actual->data.hostdev.def.managed = netdef->managed; + iface->data.network.actual->data.hostdev.def.managed = netdef->forward.managed ? 1 : 0; iface->data.network.actual->data.hostdev.def.source.subsys.type = dev->type; iface->data.network.actual->data.hostdev.def.source.subsys.u.pci = dev->device.pci; @@ -3648,10 +3648,10 @@ networkAllocateActualDevice(virDomainNetDefPtr iface) } } - } else if ((netdef->forwardType == VIR_NETWORK_FORWARD_BRIDGE) || - (netdef->forwardType == VIR_NETWORK_FORWARD_PRIVATE) || - (netdef->forwardType == VIR_NETWORK_FORWARD_VEPA) || - (netdef->forwardType == VIR_NETWORK_FORWARD_PASSTHROUGH)) { + } else if ((netdef->forward.type == VIR_NETWORK_FORWARD_BRIDGE) || + (netdef->forward.type == VIR_NETWORK_FORWARD_PRIVATE) || + (netdef->forward.type == VIR_NETWORK_FORWARD_VEPA) || + (netdef->forward.type == VIR_NETWORK_FORWARD_PASSTHROUGH)) { /* are all * VIR_DOMAIN_NET_TYPE_DIRECT. @@ -3665,7 +3665,7 @@ networkAllocateActualDevice(virDomainNetDefPtr iface) /* Set type=direct and appropriate */ iface->data.network.actual->type = actualType = VIR_DOMAIN_NET_TYPE_DIRECT; - switch (netdef->forwardType) { + switch (netdef->forward.type) { case VIR_NETWORK_FORWARD_BRIDGE: iface->data.network.actual->data.direct.mode = VIR_NETDEV_MACVLAN_MODE_BRIDGE; break; @@ -3707,7 +3707,7 @@ networkAllocateActualDevice(virDomainNetDefPtr iface) /* If there is only a single device, just return it (caller will detect * any error if exclusive use is required but could not be acquired). */ - if ((netdef->nForwardIfs <= 0) && (netdef->nForwardPfs <= 0)) { + if ((netdef->forward.nifs <= 0) && (netdef->forward.npfs <= 0)) { virReportError(VIR_ERR_INTERNAL_ERROR, _("network '%s' uses a direct mode, but " "has no forward dev and no interface pool"), @@ -3716,7 +3716,7 @@ networkAllocateActualDevice(virDomainNetDefPtr iface) } else { /* pick an interface from the pool */ - if (netdef->nForwardPfs > 0 && netdef->nForwardIfs == 0 && + if (netdef->forward.npfs > 0 && netdef->forward.nifs == 0 && networkCreateInterfacePool(netdef) < 0) { goto error; } @@ -3727,25 +3727,25 @@ networkAllocateActualDevice(virDomainNetDefPtr iface) * just search for the one with the lowest number of * connections. */ - if ((netdef->forwardType == VIR_NETWORK_FORWARD_PASSTHROUGH) || - ((netdef->forwardType == VIR_NETWORK_FORWARD_PRIVATE) && + if ((netdef->forward.type == VIR_NETWORK_FORWARD_PASSTHROUGH) || + ((netdef->forward.type == VIR_NETWORK_FORWARD_PRIVATE) && iface->data.network.actual->virtPortProfile && (iface->data.network.actual->virtPortProfile->virtPortType == VIR_NETDEV_VPORT_PROFILE_8021QBH))) { /* pick first dev with 0 connections */ - for (ii = 0; ii < netdef->nForwardIfs; ii++) { - if (netdef->forwardIfs[ii].connections == 0) { - dev = &netdef->forwardIfs[ii]; + for (ii = 0; ii < netdef->forward.nifs; ii++) { + if (netdef->forward.ifs[ii].connections == 0) { + dev = &netdef->forward.ifs[ii]; break; } } } else { /* pick least used dev */ - dev = &netdef->forwardIfs[0]; - for (ii = 1; ii < netdef->nForwardIfs; ii++) { - if (netdef->forwardIfs[ii].connections < dev->connections) - dev = &netdef->forwardIfs[ii]; + dev = &netdef->forward.ifs[0]; + for (ii = 1; ii < netdef->forward.nifs; ii++) { + if (netdef->forward.ifs[ii].connections < dev->connections) + dev = &netdef->forward.ifs[ii]; } } /* dev points at the physical device we want to use */ @@ -3885,11 +3885,11 @@ networkNotifyActualDevice(virDomainNetDefPtr iface) goto success; } - if (netdef->nForwardPfs > 0 && netdef->nForwardIfs == 0 && + if (netdef->forward.npfs > 0 && netdef->forward.nifs == 0 && networkCreateInterfacePool(netdef) < 0) { goto error; } - if (netdef->nForwardIfs == 0) { + if (netdef->forward.nifs == 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("network '%s' uses a direct or hostdev mode, " "but has no forward dev and no interface pool"), @@ -3909,11 +3909,11 @@ networkNotifyActualDevice(virDomainNetDefPtr iface) } /* find the matching interface and increment its connections */ - for (ii = 0; ii < netdef->nForwardIfs; ii++) { - if (netdef->forwardIfs[ii].type + for (ii = 0; ii < netdef->forward.nifs; ii++) { + if (netdef->forward.ifs[ii].type == VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV && - STREQ(actualDev, netdef->forwardIfs[ii].device.dev)) { - dev = &netdef->forwardIfs[ii]; + STREQ(actualDev, netdef->forward.ifs[ii].device.dev)) { + dev = &netdef->forward.ifs[ii]; break; } } @@ -3931,8 +3931,8 @@ networkNotifyActualDevice(virDomainNetDefPtr iface) * must be 0 in those cases. */ if ((dev->connections > 0) && - ((netdef->forwardType == VIR_NETWORK_FORWARD_PASSTHROUGH) || - ((netdef->forwardType == VIR_NETWORK_FORWARD_PRIVATE) && + ((netdef->forward.type == VIR_NETWORK_FORWARD_PASSTHROUGH) || + ((netdef->forward.type == VIR_NETWORK_FORWARD_PRIVATE) && iface->data.network.actual->virtPortProfile && (iface->data.network.actual->virtPortProfile->virtPortType == VIR_NETDEV_VPORT_PROFILE_8021QBH)))) { @@ -3960,12 +3960,12 @@ networkNotifyActualDevice(virDomainNetDefPtr iface) } /* find the matching interface and increment its connections */ - for (ii = 0; ii < netdef->nForwardIfs; ii++) { - if (netdef->forwardIfs[ii].type + for (ii = 0; ii < netdef->forward.nifs; ii++) { + if (netdef->forward.ifs[ii].type == VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_PCI && virDevicePCIAddressEqual(&hostdev->source.subsys.u.pci, - &netdef->forwardIfs[ii].device.pci)) { - dev = &netdef->forwardIfs[ii]; + &netdef->forward.ifs[ii].device.pci)) { + dev = &netdef->forward.ifs[ii]; break; } } @@ -3987,7 +3987,7 @@ networkNotifyActualDevice(virDomainNetDefPtr iface) * current connections count must be 0 in those cases. */ if ((dev->connections > 0) && - netdef->forwardType == VIR_NETWORK_FORWARD_HOSTDEV) { + netdef->forward.type == VIR_NETWORK_FORWARD_HOSTDEV) { virReportError(VIR_ERR_INTERNAL_ERROR, _("network '%s' claims the PCI device at " "domain=%d bus=%d slot=%d function=%d " @@ -4062,7 +4062,7 @@ networkReleaseActualDevice(virDomainNetDefPtr iface) goto success; } - if (netdef->nForwardIfs == 0) { + if (netdef->forward.nifs == 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("network '%s' uses a direct/hostdev mode, but " "has no forward dev and no interface pool"), @@ -4081,11 +4081,11 @@ networkReleaseActualDevice(virDomainNetDefPtr iface) goto error; } - for (ii = 0; ii < netdef->nForwardIfs; ii++) { - if (netdef->forwardIfs[ii].type + for (ii = 0; ii < netdef->forward.nifs; ii++) { + if (netdef->forward.ifs[ii].type == VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_NETDEV && - STREQ(actualDev, netdef->forwardIfs[ii].device.dev)) { - dev = &netdef->forwardIfs[ii]; + STREQ(actualDev, netdef->forward.ifs[ii].device.dev)) { + dev = &netdef->forward.ifs[ii]; break; } } @@ -4112,12 +4112,12 @@ networkReleaseActualDevice(virDomainNetDefPtr iface) goto error; } - for (ii = 0; ii < netdef->nForwardIfs; ii++) { - if (netdef->forwardIfs[ii].type + for (ii = 0; ii < netdef->forward.nifs; ii++) { + if (netdef->forward.ifs[ii].type == VIR_NETWORK_FORWARD_HOSTDEV_DEVICE_PCI && virDevicePCIAddressEqual(&hostdev->source.subsys.u.pci, - &netdef->forwardIfs[ii].device.pci)) { - dev = &netdef->forwardIfs[ii]; + &netdef->forward.ifs[ii].device.pci)) { + dev = &netdef->forward.ifs[ii]; break; } } @@ -4202,7 +4202,7 @@ networkGetNetworkAddress(const char *netname, char **netaddr) } netdef = network->def; - switch (netdef->forwardType) { + switch (netdef->forward.type) { case VIR_NETWORK_FORWARD_NONE: case VIR_NETWORK_FORWARD_NAT: case VIR_NETWORK_FORWARD_ROUTE: @@ -4227,8 +4227,8 @@ networkGetNetworkAddress(const char *netname, char **netaddr) case VIR_NETWORK_FORWARD_PRIVATE: case VIR_NETWORK_FORWARD_VEPA: case VIR_NETWORK_FORWARD_PASSTHROUGH: - if ((netdef->nForwardIfs > 0) && netdef->forwardIfs) - dev_name = netdef->forwardIfs[0].device.dev; + if ((netdef->forward.nifs > 0) && netdef->forward.ifs) + dev_name = netdef->forward.ifs[0].device.dev; if (!dev_name) { virReportError(VIR_ERR_INTERNAL_ERROR, diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index f9fa442d1b..e0f9b6f221 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -7725,7 +7725,7 @@ static virNetworkPtr vboxNetworkDefineCreateXML(virConnectPtr conn, const char * virSocketAddr netmask; if ((!def) || - (def->forwardType != VIR_NETWORK_FORWARD_NONE) || + (def->forward.type != VIR_NETWORK_FORWARD_NONE) || (def->nips == 0 || !def->ips)) goto cleanup; @@ -8129,7 +8129,7 @@ static char *vboxNetworkGetXMLDesc(virNetworkPtr network, VBOX_UTF8_TO_UTF16(networkNameUtf8 , &networkNameUtf16); - def->forwardType = VIR_NETWORK_FORWARD_NONE; + def->forward.type = VIR_NETWORK_FORWARD_NONE; data->vboxObj->vtbl->FindDHCPServerByNetworkName(data->vboxObj, networkNameUtf16,