[libvirt] [PATCH 2/2] Addition of XenAPI support to libvirt

Sharadha Prabhakar (3P) sharadha.prabhakar at citrix.com
Fri Mar 5 15:04:37 UTC 2010


Please see my comments inline. The diff content of PATCH 2/2 with the changes is
submitted at the end of this mail.

@<:@default=/usr/local/lib@:>@]),[],[with_libssh2=yes])
>  AC_ARG_WITH([phyp],
>   AC_HELP_STRING([--with-phyp], [add PHYP support @<:@default=check@:>@]),[],[with_phyp=check])
> +AC_ARG_WITH([xenapi],
> +  AC_HELP_STRING([--with-xenapi], [add XenAPI support @<:@default=yes@:>@]),[],[with_xenapi=check])

>The actual default and the printed one mismatch. change default=yes to
>default=check

This has been changed.

>  AC_ARG_WITH([vbox],
>   AC_HELP_STRING([--with-vbox], [add VirtualBox support @<:@default=yes@:>@]),[],[with_vbox=yes])
>  AC_ARG_WITH([lxc],
> @@ -307,6 +309,7 @@
>  fi
>  AM_CONDITIONAL([WITH_VBOX], [test "$with_vbox" = "yes"])
>
> +
>  if test "$with_libvirtd" = "no" ; then
>   with_qemu=no
>  fi
> @@ -335,6 +338,49 @@
>  fi
>  AM_CONDITIONAL([WITH_LIBVIRTD], [test "$with_libvirtd" = "yes"])
>
> +
> +old_LIBS="$LIBS"
> +old_CFLAGS="$CFLAGS"
> +LIBXENSERVER_LIBS=""
> +LIBXENSERVER_CFLAGS=""
> +LIBXENSERVER_LDFLAGS=""
> +dnl search for the XenServer library
> +if test "$with_xenapi" != "no" ; then
> +    if test "$with_xenapi" != "yes" -a "$with_xenapi" != "check" ; then
> +        LIBXENSERVER_CFLAGS="-I$with_xenapi/include"
> +        LIBXENSERVER_LDFLAGS="$with_xenapi/libxenserver.so"

>Why do you add the path to an .so file to the LDFLAGS?
I wasn't sure that adding LIBXENSERVER_LIBS to xenapi_ldflags would
Suffice. LIBXENSERVER_LDFLAGS has been removed now.

> +        LIBXENSERVER_LIBS="-L$with_xenapi -lxenserver"
> +    fi
> +    fail=0
> +    CFLAGS="$CFLAGS $LIBXENSERVER_CFLAGS"
> +    LIBS="$LIBS $LIBXENSERVER_LIBS"
> +    AC_CHECK_LIB([xen_vm_start], [xs_read], [

>I'm not sure that I understand what you're doing here. You're checking
>for a xs_read function in a xen_vm_start library.

This has been changed to check for the function xen_vm_start in libxenserver.


> +           with_xenapi=yes
> +           LIBXENSERVER_LIBS="$LIBXENSERVER_LIBS -lxenstore"

>Do you really need xenstore?
No. It has been changed to -lxenserver


> +       ],[
> +           if test "$with_xenapi" = "yes"; then
> +               fail=1
> +           fi
> +           with_xenapi=no
> +       ])
> +fi
> +
> +LIBS="$old_LIBS"
> +CFLAGS="$old_CFLAGS"
> +
> +if test $fail = 1; then
> +    AC_MSG_ERROR([You must install the XenServer Library to compile XenAPI driver with -lxenserver])
> +fi
> +
> +if test "$with_xenapi" = "yes"; then
> +    AC_DEFINE_UNQUOTED([WITH_XENAPI], 1, [whether Xen driver is enabled])

>'XenAPI driver' instead of 'Xen driver'
Done

> +fi
> +
> +AC_SUBST([LIBXENSERVER_CFLAGS])
> +AC_SUBST([LIBXENSERVER_LIBS])
> +AC_SUBST([LIBXENSERVER_LDFLAGS])
> +
> +



>  old_LIBS="$LIBS"
>  old_CFLAGS="$CFLAGS"
>  XEN_LIBS=""
> @@ -1447,23 +1493,31 @@
>  LIBCURL_LIBS=""
>  LIBCURL_FOUND="no"
>
> -if test "$with_esx" = "yes" -o "$with_esx" = "check"; then
> +if test "$with_esx" = "yes" -o "$with_esx" = "check" -o "$with_xenapi" = "yes" -o "$with_xenapi" = "check"; >then
>     PKG_CHECK_MODULES(LIBCURL, libcurl >= $LIBCURL_REQUIRED, [
>         LIBCURL_FOUND=yes
>         with_esx="yes"
> +        with_xenapi="yes"

>This part should be split into an ESX and XenAPI part. Otherwise you
>may change with_esx="no" to with_esx="yes" just because libcurl was
>found.


>     ], [
> -        if test "$with_esx" = "check"; then
> +        if test "$with_esx" = "check" -o "$with_xenapi" = "check"; then
>             with_esx=no
> -            AC_MSG_NOTICE([libcurl is required for ESX driver, disabling it])
> +            with_xenapi=no
> +            AC_MSG_NOTICE([libcurl is required for ESX/XENAPI driver, disabling it])
>         else
> -            AC_MSG_ERROR([libcurl >= $LIBCURL_REQUIRED is required for the ESX driver])
> +            AC_MSG_ERROR([libcurl >= $LIBCURL_REQUIRED is required for the ESX/XENAPI driver])
>         fi

>Also this part should be split into an ESX and XenAPI part.

>     ])
>  fi
>  if test "$with_esx" = "yes" ; then
>     AC_DEFINE_UNQUOTED([WITH_ESX], 1, [whether ESX driver is enabled])
>  fi
> +
> +if test "$with_xenapi" = "yes" ; then
> +    AC_DEFINE_UNQUOTED([WITH_XENAPI], 1, [whether XenAPI driver is enabled])
> +fi
> +
>  AM_CONDITIONAL([WITH_ESX], [test "$with_esx" = "yes"])
> +AM_CONDITIONAL([WITH_XENAPI], [test "$with_xenapi" = "yes"])
>  AC_SUBST([LIBCURL_CFLAGS])
>  AC_SUBST([LIBCURL_LIBS])

>I suggest to restructure this tests like this:




dnl
dnl check for libcurl (ESX/XenAPI)
dnl

LIBCURL_CFLAGS=""
LIBCURL_LIBS=""

if test "$with_esx" = "yes" -o "$with_esx" = "check" -o "$with_xenapi"
= "yes" -o "$with_xenapi" = "check"; then
    PKG_CHECK_MODULES(LIBCURL, libcurl >= $LIBCURL_REQUIRED, [
        if test "$with_esx" = "check"; then
            with_esx=yes
        fi

        if test "$with_xenapi" = "check"; then
            with_xenapi=yes
        fi
    ], [
        if test "$with_esx" = "check"; then
            with_esx=no
            AC_MSG_NOTICE([libcurl is required for the ESX driver,
disabling it])
        elif test "$with_esx" = "yes"; then
            AC_MSG_ERROR([libcurl >= $LIBCURL_REQUIRED is required for
the ESX driver])
        fi

        if test "$with_xenapi" = "check"; then
            with_xenapi=no
            AC_MSG_NOTICE([libcurl is required for the XenAPI driver,
disabling it])
        elif test "$with_xenapi" = "yes"; then
            AC_MSG_ERROR([libcurl >= $LIBCURL_REQUIRED is required for
the XenAPI driver])
        fi
    ])
fi


if test "$with_esx" = "yes" ; then
    AC_DEFINE_UNQUOTED([WITH_ESX], 1, [whether ESX driver is enabled])
fi
AM_CONDITIONAL([WITH_ESX], [test "$with_esx" = "yes"])


if test "$with_xenapi" = "yes" ; then
    AC_DEFINE_UNQUOTED([WITH_XENAPI], 1, [whether XenAPI driver is enabled])
fi
AM_CONDITIONAL([WITH_XENAPI], [test "$with_xenapi" = "yes"])


AC_SUBST([LIBCURL_CFLAGS])
AC_SUBST([LIBCURL_LIBS])


--this bit has been added and the previous code removed

> @@ -1894,6 +1948,7 @@
>  AC_MSG_NOTICE([     UML: $with_uml])
>  AC_MSG_NOTICE([  OpenVZ: $with_openvz])
>  AC_MSG_NOTICE([    VBox: $with_vbox])
> +AC_MSG_NOTICE([  XenAPI: $with_xenapi])
>  AC_MSG_NOTICE([     LXC: $with_lxc])
>  AC_MSG_NOTICE([    PHYP: $with_phyp])
>  AC_MSG_NOTICE([     ONE: $with_one])
> @@ -1992,6 +2047,12 @@
>  else
>  AC_MSG_NOTICE([     xen: no])
>  fi
> +if test "$with_xenapi" = "yes" ; then
> +AC_MSG_NOTICE([     xenapi:  $LIBXENSERVER_CFLAGS  $LIBXENSERVER_LIBS  $LIBXENSERVER_LDFLAGS])
> +else
> +AC_MSG_NOTICE([     xen: no])

>'xenapi: no' instead of 'xen: no'.
Done

> +fi
>  if test "$with_hal" = "yes" ; then
>  AC_MSG_NOTICE([     hal: $HAL_CFLAGS $HAL_LIBS])
>  else
> --- ./libvirt_org/src/Makefile.am       2010-02-17 17:38:13.000000000 +0000
> +++ ./libvirt/src/Makefile.am   2010-02-26 13:13:59.000000000 +0000
> @@ -205,6 +207,11 @@
>                qemu/qemu_security_dac.h                        \
>                qemu/qemu_security_dac.c
>
> +XENAPI_DRIVER_SOURCES =                                         \
> +                xenapi/xenapi_driver.c xenapi/xenapi_driver.h   \
> +                xenapi_driver_private.h                         \
> +                xenapi/xenapi_utils.c xenapi/xenapi_utils.h
> +
>  UML_DRIVER_SOURCES =                                           \
>                uml/uml_conf.c uml/uml_conf.h                   \
>                uml/uml_driver.c uml/uml_driver.h
> @@ -466,6 +473,30 @@
>  libvirt_driver_vbox_la_SOURCES = $(VBOX_DRIVER_SOURCES)
>  endif
>
> +if WITH_XENAPI
> +if WITH_DRIVER_MODULES
> +mod_LTLIBRARIES += libvirt_driver_xenapi.la
> +else
> +noinst_LTLIBRARIES += libvirt_driver_xenapi.la
> +
> +libvirt_la_LIBADD += libvirt_driver_xenapi.la   \
> +                     $(LIBXENSERVER_LDFLAGS)

>LIBXENSERVER_LDFLAGS is not necessary here. Adding LIBXENSERVER_LIBS
>to libvirt_driver_xenapi_la_LDFLAGS some lines below should be enough.

LIBXENSERVER_LDFLAGS has been removed from here and the configure script too.

--------------------------PATCH 2/2 BELOW------------------------------------
--- ./libvirt_org/configure.ac  2010-02-17 17:39:21.000000000 +0000
+++ ./libvirt/configure.ac      2010-03-05 13:26:45.000000000 +0000
@@ -219,6 +219,8 @@
   AC_HELP_STRING([--with-libssh2=@<:@PFX@:>@], [libssh2 location @<:@default=/usr/local/lib@:>@]),[],[with_libssh2=yes])
 AC_ARG_WITH([phyp],
   AC_HELP_STRING([--with-phyp], [add PHYP support @<:@default=check@:>@]),[],[with_phyp=check])
+AC_ARG_WITH([xenapi],
+  AC_HELP_STRING([--with-xenapi], [add XenAPI support @<:@default=check@:>@]),[],[with_xenapi=check])
 AC_ARG_WITH([vbox],
   AC_HELP_STRING([--with-vbox], [add VirtualBox support @<:@default=yes@:>@]),[],[with_vbox=yes])
 AC_ARG_WITH([lxc],
@@ -307,6 +309,7 @@
 fi
 AM_CONDITIONAL([WITH_VBOX], [test "$with_vbox" = "yes"])

+
 if test "$with_libvirtd" = "no" ; then
   with_qemu=no
 fi
@@ -335,6 +338,46 @@
 fi
 AM_CONDITIONAL([WITH_LIBVIRTD], [test "$with_libvirtd" = "yes"])

+
+old_LIBS="$LIBS"
+old_CFLAGS="$CFLAGS"
+LIBXENSERVER_LIBS=""
+LIBXENSERVER_CFLAGS=""
+dnl search for the XenServer library
+if test "$with_xenapi" != "no" ; then
+    if test "$with_xenapi" != "yes" -a "$with_xenapi" != "check" ; then
+        LIBXENSERVER_CFLAGS="-I$with_xenapi/include"
+        LIBXENSERVER_LIBS="-L$with_xenapi"
+    fi
+    fail=0
+    CFLAGS="$CFLAGS $LIBXENSERVER_CFLAGS"
+    LIBS="$LIBS $LIBXENSERVER_LIBS"
+    AC_CHECK_LIB([xenserver], [xen_vm_start], [
+           with_xenapi=yes
+           LIBXENSERVER_LIBS="$LIBXENSERVER_LIBS -lxenserver"
+       ],[
+           if test "$with_xenapi" = "yes"; then
+               fail=1
+           fi
+           with_xenapi=no
+       ])
+fi
+
+LIBS="$old_LIBS"
+CFLAGS="$old_CFLAGS"
+
+if test $fail = 1; then
+    AC_MSG_ERROR([You must install the XenServer Library to compile XenAPI driver with -lxenserver])
+fi
+
+if test "$with_xenapi" = "yes"; then
+    AC_DEFINE_UNQUOTED([WITH_XENAPI], 1, [whether XenAPI driver is enabled])
+fi
+
+AC_SUBST([LIBXENSERVER_CFLAGS])
+AC_SUBST([LIBXENSERVER_LIBS])
+
+
 old_LIBS="$LIBS"
 old_CFLAGS="$CFLAGS"
 XEN_LIBS=""
@@ -1440,31 +1483,51 @@
 AC_SUBST([LIBPARTED_LIBS])

 dnl
-dnl check for libcurl (ESX)
+dnl check for libcurl (ESX/XenAPI)
 dnl

 LIBCURL_CFLAGS=""
 LIBCURL_LIBS=""
-LIBCURL_FOUND="no"

-if test "$with_esx" = "yes" -o "$with_esx" = "check"; then
+if test "$with_esx" = "yes" -o "$with_esx" = "check" -o "$with_xenapi"
+= "yes" -o "$with_xenapi" = "check"; then
     PKG_CHECK_MODULES(LIBCURL, libcurl >= $LIBCURL_REQUIRED, [
-        LIBCURL_FOUND=yes
-        with_esx="yes"
+        if test "$with_esx" = "check"; then
+            with_esx=yes
+        fi
+
+        if test "$with_xenapi" = "check"; then
+            with_xenapi=yes
+        fi
     ], [
         if test "$with_esx" = "check"; then
             with_esx=no
-            AC_MSG_NOTICE([libcurl is required for ESX driver, disabling it])
-        else
+            AC_MSG_NOTICE([libcurl is required for the ESX driver, disabling it])
+        elif test "$with_esx" = "yes"; then
             AC_MSG_ERROR([libcurl >= $LIBCURL_REQUIRED is required for the ESX driver])
         fi
+
+        if test "$with_xenapi" = "check"; then
+            with_xenapi=no
+            AC_MSG_NOTICE([libcurl is required for the XenAPI driver, disabling it])
+        elif test "$with_xenapi" = "yes"; then
+            AC_MSG_ERROR([libcurl >= $LIBCURL_REQUIRED is required for the XenAPI driver])
+        fi
     ])
 fi
+
+
 if test "$with_esx" = "yes" ; then
-    AC_DEFINE_UNQUOTED([WITH_ESX], 1, [whether ESX driver is enabled])
-fi
+    AC_DEFINE_UNQUOTED([WITH_ESX], 1, [whether ESX driver is enabled])
+fi
 AM_CONDITIONAL([WITH_ESX], [test "$with_esx" = "yes"])

+if test "$with_xenapi" = "yes" ; then
+    AC_DEFINE_UNQUOTED([WITH_XENAPI], 1, [whether XenAPI driver is enabled])
+fi
+AM_CONDITIONAL([WITH_XENAPI], [test "$with_xenapi" = "yes"])
+
+
 AC_SUBST([LIBCURL_CFLAGS])
 AC_SUBST([LIBCURL_LIBS])

@@ -1894,6 +1957,7 @@
 AC_MSG_NOTICE([     UML: $with_uml])
 AC_MSG_NOTICE([  OpenVZ: $with_openvz])
 AC_MSG_NOTICE([    VBox: $with_vbox])
+AC_MSG_NOTICE([  XenAPI: $with_xenapi])
 AC_MSG_NOTICE([     LXC: $with_lxc])
 AC_MSG_NOTICE([    PHYP: $with_phyp])
 AC_MSG_NOTICE([     ONE: $with_one])
@@ -1992,6 +2056,11 @@
 else
 AC_MSG_NOTICE([     xen: no])
 fi
+if test "$with_xenapi" = "yes" ; then
+AC_MSG_NOTICE([     xenapi: $LIBXENSERVER_CFLAGS $LIBXENSERVER_LIBS ])
+else
+AC_MSG_NOTICE([     xenapi: no])
+fi
 if test "$with_hal" = "yes" ; then
 AC_MSG_NOTICE([     hal: $HAL_CFLAGS $HAL_LIBS])
 else
--- ./libvirt_org/src/Makefile.am       2010-02-17 17:38:13.000000000 +0000
+++ ./libvirt/src/Makefile.am   2010-03-05 11:49:58.000000000 +0000
@@ -3,6 +3,8 @@
 # No libraries with the exception of LIBXML should be listed
 # here. List them against the individual XXX_la_CFLAGS targets
 # that actually use them
+
+
 INCLUDES =                                                     \
                -I$(top_srcdir)/gnulib/lib                      \
                -I../gnulib/lib                                 \
@@ -205,6 +207,11 @@
                qemu/qemu_security_dac.h                        \
                qemu/qemu_security_dac.c

+XENAPI_DRIVER_SOURCES =                                         \
+                xenapi/xenapi_driver.c xenapi/xenapi_driver.h   \
+                xenapi_driver_private.h                         \
+                xenapi/xenapi_utils.c xenapi/xenapi_utils.h
+
 UML_DRIVER_SOURCES =                                           \
                uml/uml_conf.c uml/uml_conf.h                   \
                uml/uml_driver.c uml/uml_driver.h
@@ -466,6 +473,28 @@
 libvirt_driver_vbox_la_SOURCES = $(VBOX_DRIVER_SOURCES)
 endif

+if WITH_XENAPI
+if WITH_DRIVER_MODULES
+mod_LTLIBRARIES += libvirt_driver_xenapi.la
+else
+noinst_LTLIBRARIES += libvirt_driver_xenapi.la
+
+libvirt_la_LIBADD += libvirt_driver_xenapi.la
+endif
+libvirt_driver_xenapi_la_CFLAGS = $(LIBXENSERVER_CFLAGS)       \
+                                    -I at top_srcdir@/src         \
+                                    -I at top_srcdir@/src/xenapi  \
+                                    -I at top_srcdir@/src/conf    \
+                                  $(LIBCURL_CFLAGS)
+libvirt_driver_xenapi_la_LDFLAGS = $(LIBXENSERVER_LIBS) -g $(LIBXML_LIBS) \
+                                   $(LIBCURL_LIBS)
+
+if WITH_DRIVER_MODULES
+libvirt_driver_xenapi_la_LDFLAGS += -module -avoid-version
+endif
+libvirt_driver_xenapi_la_SOURCES = $(XENAPI_DRIVER_SOURCES)
+endif
+
 if WITH_QEMU
 if WITH_DRIVER_MODULES
 mod_LTLIBRARIES += libvirt_driver_qemu.la
@@ -722,6 +751,7 @@
                $(OPENVZ_DRIVER_SOURCES)                        \
                $(PHYP_DRIVER_SOURCES)                          \
                $(VBOX_DRIVER_SOURCES)                          \
+               $(XENAPI_DRIVER_SOURCES)                        \
                $(ESX_DRIVER_SOURCES)                           \
                $(NETWORK_DRIVER_SOURCES)                       \
                $(INTERFACE_DRIVER_SOURCES)                     \

--- ./libvirt_org/src/driver.h  2010-02-17 17:38:08.000000000 +0000
+++ ./libvirt/src/driver.h      2010-02-18 10:45:54.000000000 +0000
@@ -27,6 +27,7 @@
     VIR_DRV_ONE = 9,
     VIR_DRV_ESX = 10,
     VIR_DRV_PHYP = 11,
+    VIR_DRV_XENAPI = 12
 } virDrvNo;
--- ./libvirt_org/src/libvirt.c 2010-02-17 17:38:08.000000000 +0000
+++ ./libvirt/src/libvirt.c     2010-02-18 12:21:43.000000000 +0000
@@ -64,6 +64,9 @@
 #ifdef WITH_ESX
 #include "esx/esx_driver.h"
 #endif
+#ifdef WITH_XENAPI
+#include "xenapi/xenapi_driver.h"
+#endif
 #endif

 #define VIR_FROM_THIS VIR_FROM_NONE
@@ -357,6 +360,7 @@
     virDriverLoadModule("openvz");
     virDriverLoadModule("vbox");
     virDriverLoadModule("esx");
+    virDriverLoadModule("xenapi");
     virDriverLoadModule("remote");
 #else
 #ifdef WITH_TEST
@@ -377,6 +381,9 @@
 #ifdef WITH_ESX
     if (esxRegister() == -1) return -1;  #endif
+#ifdef WITH_XENAPI
+    if (xenapiRegister () == -1) return -1; #endif
 #ifdef WITH_REMOTE
     if (remoteRegister () == -1) return -1;  #endif @@ -1035,6 +1042,10 @@
         if (STRCASEEQ(type, "Remote"))
             *typeVer = remoteVersion();  #endif
+#if WITH_XENAPI
+        if (STRCASEEQ(type, "XenAPI"))
+            *typeVer = LIBVIR_VERSION_NUMBER; #endif
         if (*typeVer == 0) {
             virLibConnError(NULL, VIR_ERR_NO_SUPPORT, type);
             goto error;
diff--- ./libvirt_org/include/libvirt/virterror.h   2010-02-17 17:37:51.000000000 +0000
diff+++ ./libvirt/include/libvirt/virterror.h       2010-02-18 12:17:54.000000000 +0000
@@ -69,6 +69,7 @@
     VIR_FROM_PHYP,      /* Error from IBM power hypervisor */
     VIR_FROM_SECRET,    /* Error from secret storage */
     VIR_FROM_CPU,       /* Error from CPU driver */
+    VIR_FROM_XENAPI     /* Error from XenAPI */
 } virErrorDomain;
> diff -ur ./libvirt_org/src/util/virterror.c
> ./libvirt/src/util/virterror.c
> --- ./libvirt_org/src/util/virterror.c  2010-02-17 17:38:14.000000000
> +0000
> +++ ./libvirt/src/util/virterror.c      2010-02-18 12:13:08.000000000 +0000
> @@ -85,6 +85,9 @@
>          case VIR_FROM_XEN:
>              dom = "Xen ";
>              break;
> +        case VIR_FROM_XENAPI:
> +            dom = "XenAPI ";
> +            break;
>          case VIR_FROM_XML:
>              dom = "XML ";
>              break;




More information about the libvir-list mailing list