On Tuesday 21 April 2009 12:15:37 Daniel P. Berrange wrote:
> The VirtualBox driver currently returns domain IDs starting from 0. The
> domain ID 0 is reserved for a special scenario. It refers to a guest which
> is also the host OS. ie its the guest in which libvirt is running. This
> guest will only exist in virtualization technology where there is a
> separate hypervisor / host OS, eg Xen or MicroSoft Hyper-V.  Thus, it
> should be avoided for drivers like QEMU or VirtualBox.

oops, didn't knew this.

>
> Index: src/vbox/vbox_tmpl.c
> ===================================================================
> RCS file: /data/cvs/libvirt/src/vbox/vbox_tmpl.c,v
> retrieving revision 1.1
> diff -u -p -r1.1 vbox_tmpl.c
> --- src/vbox/vbox_tmpl.c      17 Apr 2009 16:09:07 -0000      1.1
> +++ src/vbox/vbox_tmpl.c      21 Apr 2009 10:11:48 -0000
> @@ -434,7 +434,7 @@ static int vboxListDomains(virConnectPtr
>                      if ((state == MachineState_Running) ||
>                          (state == MachineState_Paused) ) {
>                          ret++;
> -                        ids[j++] = i;
> +                        ids[j++] = i + 1;
>                      }
>                  }
>              }
> @@ -535,6 +535,15 @@ static virDomainPtr vboxDomainLookupByID
>      PRUint32 state;
>      int i;
>
> +    /* Internal vbox IDs start from 0, the public libvirt ID
> +     * starts from 1, so refuse id==0, and adjust the rest*/
> +    if (id == 0) {
> +        vboxError(conn, VIR_ERR_NO_DOMAIN,
> +               _("no domain with matching id %d"), id);
> +        return NULL;
> +    }
> +    id = id - 1;
> +
>      if(data->vboxObj) {
>          rc = data->vboxObj->vtbl->GetMachines(data->vboxObj, &machineCnt,
> &machines); if (NS_FAILED(rc)) {
> @@ -568,7 +577,7 @@ static virDomainPtr vboxDomainLookupByID
>
>                          dom = virGetDomain(conn, machineName, iidl);
>                          if (dom)
> -                            dom->id = id;
> +                            dom->id = id + 1;
>
>                          /* Cleanup all the XPCOM allocated stuff here */
>                          g_pVBoxFuncs->pfnComUnallocMem(iid);
> @@ -645,7 +654,7 @@ static virDomainPtr vboxDomainLookupByUU
>                      if (dom)
>                          if ((state == MachineState_Running) ||
>                              (state == MachineState_Paused) )
> -                            dom->id = i;
> +                            dom->id = i + 1;
>                  }
>
>                  if (iid) {
> @@ -725,7 +734,7 @@ static virDomainPtr vboxDomainLookupByNa
>                      if (dom)
>                          if ((state == MachineState_Running) ||
>                              (state == MachineState_Paused) )
> -                            dom->id = i;
> +                            dom->id = i + 1;
>                  }
>
>                  if (machineName) {
> @@ -2311,7 +2320,7 @@ static int vboxDomainCreate(virDomainPtr
>                                  ret = -1;
>                              } else {
>                                  /* all ok set the domid */
> -                                dom->id = i;
> +                                dom->id = i + 1;
>                                  ret = 0;
>                              }
>                          }

ACK++

Regards,
Pritesh

--
Libvir-list mailing list
Libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to