[libvirt] [PATCH 2/2]: VirtualBox: Updated vboxNetworkUndefine() and vboxNetworkDestroy()
Daniel P. Berrange
berrange at redhat.com
Thu Aug 13 18:38:20 UTC 2009
On Thu, Aug 13, 2009 at 03:32:45PM +0200, Pritesh Kothari wrote:
> Hi All,
>
> I have made some changes to the functions vboxNetworkCreateXML(),
> vboxNetworkDefineXML(), vboxNetworkUndefine() and vboxNetworkDestroy() to handle
> multiple host only interfaces as multiple host only interfaces are supported
> by VirtualBox 3.0 and greater.
ACk, looks fine.
> commit e32b0c4d92d0c2acfb43284c636d693625fedea7
> Author: Pritesh Kothari <Pritesh.Kothari at Sun.com>
> Date: Thu Aug 13 14:24:44 2009 +0200
>
> libvirt: Merged vboxNetworkUndefine() and vboxNetworkDestroy() and
> added code to handle multiple hostonly interfaces.
>
> diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
> index 6de277f..0180b9b 100644
> --- a/src/vbox/vbox_tmpl.c
> +++ b/src/vbox/vbox_tmpl.c
> @@ -5191,7 +5191,7 @@ static virNetworkPtr vboxNetworkDefineXML(virConnectPtr conn, const char *xml) {
> return vboxNetworkDefineCreateXML(conn, xml, false);
> }
>
> -static int vboxNetworkUndefine(virNetworkPtr network) {
> +static int vboxNetworkUndefineDestroy(virNetworkPtr network, bool removeinterface) {
> vboxGlobalData *data = network->conn->privateData;
> char *networkNameUtf8 = NULL;
> int ret = -1;
> @@ -5230,19 +5230,48 @@ static int vboxNetworkUndefine(virNetworkPtr network) {
> PRUnichar *networkNameUtf16 = NULL;
> IDHCPServer *dhcpServer = NULL;
>
> +#if VBOX_API_VERSION != 2002
> + if (removeinterface) {
> + PRUnichar *iidUtf16 = NULL;
> + IProgress *progress = NULL;
> +
> + networkInterface->vtbl->GetId(networkInterface, &iidUtf16);
> +
> + if (iidUtf16) {
> +#if VBOX_API_VERSION == 3000
> + IHostNetworkInterface *netInt = NULL;
> + host->vtbl->RemoveHostOnlyNetworkInterface(host, iidUtf16, &netInt, &progress);
> + if (netInt)
> + netInt->vtbl->nsisupports.Release((nsISupports *) netInt);
> +#else /* VBOX_API_VERSION > 3000 */
> + host->vtbl->RemoveHostOnlyNetworkInterface(host, iidUtf16, &progress);
> +#endif /* VBOX_API_VERSION > 3000 */
> + data->pFuncs->pfnUtf16Free(iidUtf16);
> + }
> +
> + if (progress) {
> + progress->vtbl->WaitForCompletion(progress, -1);
> + progress->vtbl->nsisupports.Release((nsISupports *)progress);
> + }
> + }
> +#endif /* VBOX_API_VERSION != 2002 */
> +
> data->pFuncs->pfnUtf8ToUtf16(networkNameUtf8 , &networkNameUtf16);
>
> data->vboxObj->vtbl->FindDHCPServerByNetworkName(data->vboxObj,
> networkNameUtf16,
> &dhcpServer);
> if (dhcpServer) {
> - data->vboxObj->vtbl->RemoveDHCPServer(data->vboxObj, dhcpServer);
> + dhcpServer->vtbl->SetEnabled(dhcpServer, PR_FALSE);
> + dhcpServer->vtbl->Stop(dhcpServer);
> + if (removeinterface)
> + data->vboxObj->vtbl->RemoveDHCPServer(data->vboxObj, dhcpServer);
> dhcpServer->vtbl->nsisupports.Release((nsISupports *) dhcpServer);
> }
>
> data->pFuncs->pfnUtf16Free(networkNameUtf16);
> - }
>
> + }
> networkInterface->vtbl->nsisupports.Release((nsISupports *) networkInterface);
> }
>
> @@ -5258,6 +5287,10 @@ cleanup:
> return ret;
> }
>
> +static int vboxNetworkUndefine(virNetworkPtr network) {
> + return vboxNetworkUndefineDestroy(network, true);
> +}
> +
> static int vboxNetworkCreate(virNetworkPtr network) {
> vboxGlobalData *data = network->conn->privateData;
> char *networkNameUtf8 = NULL;
> @@ -5337,74 +5370,7 @@ cleanup:
> }
>
> static int vboxNetworkDestroy(virNetworkPtr network) {
> - vboxGlobalData *data = network->conn->privateData;
> - char *networkNameUtf8 = NULL;
> - int ret = -1;
> -
> - /* Current limitation of the function for VirtualBox 2.2.* is
> - * that the default hostonly network "vboxnet0" is always active
> - * and thus all this functions does is stop the dhcp server,
> - * but the network can still be used without the dhcp server
> - * by giving the machine static IP
> - */
> -
> - if (virAsprintf(&networkNameUtf8, "HostInterfaceNetworking-%s", network->name) < 0) {
> - virReportOOMError(network->conn);
> - goto cleanup;
> - }
> -
> - if (data->vboxObj) {
> - IHost *host = NULL;
> -
> - data->vboxObj->vtbl->GetHost(data->vboxObj, &host);
> - if (host) {
> - PRUnichar *networkInterfaceNameUtf16 = NULL;
> - IHostNetworkInterface *networkInterface = NULL;
> -
> - data->pFuncs->pfnUtf8ToUtf16(network->name, &networkInterfaceNameUtf16);
> -
> - host->vtbl->FindHostNetworkInterfaceByName(host, networkInterfaceNameUtf16, &networkInterface);
> -
> - if (networkInterface) {
> - PRUint32 interfaceType = 0;
> -
> - networkInterface->vtbl->GetInterfaceType(networkInterface, &interfaceType);
> -
> - if (interfaceType == HostNetworkInterfaceType_HostOnly) {
> - PRUnichar *networkNameUtf16 = NULL;
> - IDHCPServer *dhcpServer = NULL;
> -
> -
> - data->pFuncs->pfnUtf8ToUtf16(networkNameUtf8 , &networkNameUtf16);
> -
> - data->vboxObj->vtbl->FindDHCPServerByNetworkName(data->vboxObj,
> - networkNameUtf16,
> - &dhcpServer);
> - if (dhcpServer) {
> -
> - dhcpServer->vtbl->SetEnabled(dhcpServer, PR_FALSE);
> -
> - dhcpServer->vtbl->Stop(dhcpServer);
> -
> - dhcpServer->vtbl->nsisupports.Release((nsISupports *) dhcpServer);
> - }
> -
> - data->pFuncs->pfnUtf16Free(networkNameUtf16);
> - }
> -
> - networkInterface->vtbl->nsisupports.Release((nsISupports *) networkInterface);
> - }
> -
> - data->pFuncs->pfnUtf16Free(networkInterfaceNameUtf16);
> - host->vtbl->nsisupports.Release((nsISupports *) host);
> - }
> - }
> -
> - ret = 0;
> -
> -cleanup:
> - VIR_FREE(networkNameUtf8);
> - return ret;
> + return vboxNetworkUndefineDestroy(network, false);
> }
>
> static char *vboxNetworkDumpXML(virNetworkPtr network, int flags ATTRIBUTE_UNUSED) {
> --
> Libvir-list mailing list
> Libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list