WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] Merge

# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1279644967 -3600
# Node ID 8963f83ba73b16cf09c9a1dec3d80c7b5ffab6df
# Parent  ad5b6399aa29dbb35afe96ad9dc45a8f4d3f65b5
# Parent  24277e3237ca3b8ce13f9f6e082ea7d3d2ab5a95
Merge
---
 tools/Rules.mk                 |    5 +++
 tools/libxl/Makefile           |    4 +-
 tools/libxl/libxl.c            |   63 +++++++++++++++++++++++++++++++++++++++++
 tools/libxl/libxl.h            |    1 
 tools/libxl/libxl_bootloader.c |    9 +++++
 tools/libxl/xl.h               |    1 
 tools/libxl/xl_cmdimpl.c       |   46 +++++++++++++++++++++++++++++
 tools/libxl/xl_cmdtable.c      |    8 +++++
 8 files changed, 134 insertions(+), 3 deletions(-)

diff -r ad5b6399aa29 -r 8963f83ba73b tools/Rules.mk
--- a/tools/Rules.mk    Tue Jul 20 16:09:50 2010 +0100
+++ b/tools/Rules.mk    Tue Jul 20 17:56:07 2010 +0100
@@ -26,8 +26,13 @@ CFLAGS_libxenstore = -I$(XEN_XENSTORE) $
 CFLAGS_libxenstore = -I$(XEN_XENSTORE) $(CFLAGS_include)
 LDFLAGS_libxenstore = -L$(XEN_XENSTORE) -lxenstore
 
+ifeq ($(CONFIG_Linux),y)
 CFLAGS_libblktapctl = -I$(XEN_BLKTAP2)/control -I$(XEN_BLKTAP2)/include 
$(CFLAGS_include)
 LDFLAGS_libblktapctl = -L$(XEN_BLKTAP2)/control -lblktapctl
+else
+CFLAGS_libblktapctl =
+LDFLAGS_libblktapctl =
+endif
 
 X11_LDPATH = -L/usr/X11R6/$(LIBLEAFDIR)
 
diff -r ad5b6399aa29 -r 8963f83ba73b tools/libxl/Makefile
--- a/tools/libxl/Makefile      Tue Jul 20 16:09:50 2010 +0100
+++ b/tools/libxl/Makefile      Tue Jul 20 17:56:07 2010 +0100
@@ -15,7 +15,7 @@ CFLAGS += -I. -fPIC
 CFLAGS += -I. -fPIC
 CFLAGS += $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest) $(CFLAGS_libxenstore) 
$(CFLAGS_libblktapctl)
 
-LIBS = $(LDFLAGS_libxenctrl) $(LDFLAGS_libxenguest) $(LDFLAGS_libxenstore) 
$(LDFLAGS_libblktapctl) -lutil
+LIBS = $(LDFLAGS_libxenctrl) $(LDFLAGS_libxenguest) $(LDFLAGS_libxenstore) 
$(LDFLAGS_libblktapctl) $(UTIL_LIBS)
 
 LIBXL_OBJS-y = osdeps.o libxl_paths.o libxl_bootloader.o
 LIBXL_OBJS = flexarray.o libxl.o libxl_dom.o libxl_exec.o libxl_xshelp.o 
libxl_device.o libxl_internal.o xenguest.o libxl_utils.o $(LIBXL_OBJS-y)
@@ -85,7 +85,7 @@ xl_cmdtable.o: xl_cmdtable.c
 xl_cmdtable.o: xl_cmdtable.c
        $(CC) $(CFLAGS) -c xl_cmdtable.c
 
-$(CLIENTS): xl.o xl_cmdimpl.o xl_cmdtable.o libxlutil.so libxenlight.so
+$(CLIENTS): xl.o xl_cmdimpl.o xl_cmdtable.o libxl_paths.o libxl_bootloader.o 
libxlutil.so libxenlight.so
        $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
 
 .PHONY: install
diff -r ad5b6399aa29 -r 8963f83ba73b tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Tue Jul 20 16:09:50 2010 +0100
+++ b/tools/libxl/libxl.c       Tue Jul 20 17:56:07 2010 +0100
@@ -841,6 +841,69 @@ int libxl_primary_console_exec(struct li
         return libxl_console_exec(ctx, stubdomid, 1);
     else
         return libxl_console_exec(ctx, domid_vm, 0);
+}
+
+int libxl_vncviewer_exec(struct libxl_ctx *ctx, uint32_t domid, int autopass)
+{
+    const char *vnc_port, *vfb_back;
+    const char *vnc_listen = NULL, *vnc_pass = NULL;
+    int port = 0, autopass_fd = -1;
+    char *vnc_bin, *args[] = {
+        "vncviewer",
+        NULL, /* hostname:display */
+        NULL, /* -autopass */
+        NULL,
+    };
+
+    vnc_port = libxl_xs_read(ctx, XBT_NULL,
+                            libxl_sprintf(ctx,
+                            "/local/domain/%d/console/vnc-port", domid));
+    if ( vnc_port )
+        port = atoi(vnc_port) - 5900;
+
+    vfb_back = libxl_xs_read(ctx, XBT_NULL,
+                            libxl_sprintf(ctx,
+                            "/local/domain/%d/device/vfb/0/backend", domid));
+    if ( vfb_back ) {
+        vnc_listen = libxl_xs_read(ctx, XBT_NULL,
+                            libxl_sprintf(ctx,
+                            "/local/domain/%d/console/vnc-listen", domid));
+        if ( autopass )
+            vnc_pass = libxl_xs_read(ctx, XBT_NULL,
+                            libxl_sprintf(ctx,
+                            "/local/domain/%d/console/vnc-pass", domid));
+    }
+
+    if ( NULL == vnc_listen )
+        vnc_listen = "localhost";
+
+    if ( (vnc_bin = getenv("VNCVIEWER")) )
+        args[0] = vnc_bin;
+
+    args[1] = libxl_sprintf(ctx, "%s:%d", vnc_listen, port);
+
+    if ( vnc_pass ) {
+        char tmpname[] = "/tmp/vncautopass.XXXXXX";
+        autopass_fd = mkstemp(tmpname);
+        if ( autopass_fd < 0 )
+            goto skip_autopass;
+
+        if ( unlink(tmpname) )
+            /* should never happen */
+            XL_LOG_ERRNO(ctx, XL_LOG_ERROR, "unlink %s failed", tmpname);
+
+        if ( libxl_write_exactly(ctx, autopass_fd, vnc_pass, strlen(vnc_pass),
+                                    tmpname, "vnc password") ) {
+            do { close(autopass_fd); } while(errno == EINTR);
+            goto skip_autopass;
+        }
+
+        args[2] = "-autopass";
+    }
+
+skip_autopass:
+    libxl_exec(autopass_fd, -1, -1, args[0], args);
+    return 0;
 }
 
 static char ** libxl_build_device_model_args(struct libxl_ctx *ctx,
diff -r ad5b6399aa29 -r 8963f83ba73b tools/libxl/libxl.h
--- a/tools/libxl/libxl.h       Tue Jul 20 16:09:50 2010 +0100
+++ b/tools/libxl/libxl.h       Tue Jul 20 17:56:07 2010 +0100
@@ -400,6 +400,7 @@ int libxl_domain_setmaxmem(struct libxl_
 int libxl_domain_setmaxmem(struct libxl_ctx *ctx, uint32_t domid, uint32_t 
target_memkb);
 int libxl_set_memory_target(struct libxl_ctx *ctx, uint32_t domid, uint32_t 
target_memkb, int enforce);
 
+int libxl_vncviewer_exec(struct libxl_ctx *ctx, uint32_t domid, int autopass);
 int libxl_console_exec(struct libxl_ctx *ctx, uint32_t domid, int cons_num);
 /* libxl_primary_console_exec finds the domid and console number
  * corresponding to the primary console of the given vm, then calls
diff -r ad5b6399aa29 -r 8963f83ba73b tools/libxl/libxl_bootloader.c
--- a/tools/libxl/libxl_bootloader.c    Tue Jul 20 16:09:50 2010 +0100
+++ b/tools/libxl/libxl_bootloader.c    Tue Jul 20 17:56:07 2010 +0100
@@ -15,9 +15,16 @@
 #include "libxl_osdeps.h"
 
 #include <string.h>
-#include <pty.h>
 #include <unistd.h>
 #include <fcntl.h>
+#include <termios.h>
+#if defined(__NetBSD__) || defined(__OpenBSD__)
+#include <util.h>
+#elif defined(__linux__)
+#include <pty.h>
+#elif defined(__sun__)
+#include <stropts.h>
+#endif
 
 #include <sys/stat.h>
 #include <sys/types.h>
diff -r ad5b6399aa29 -r 8963f83ba73b tools/libxl/xl.h
--- a/tools/libxl/xl.h  Tue Jul 20 16:09:50 2010 +0100
+++ b/tools/libxl/xl.h  Tue Jul 20 17:56:07 2010 +0100
@@ -30,6 +30,7 @@ int main_cd_eject(int argc, char **argv)
 int main_cd_eject(int argc, char **argv);
 int main_cd_insert(int argc, char **argv);
 int main_console(int argc, char **argv);
+int main_vncviewer(int argc, char **argv);
 int main_pcilist(int argc, char **argv);
 int main_pcidetach(int argc, char **argv);
 int main_pciattach(int argc, char **argv);
diff -r ad5b6399aa29 -r 8963f83ba73b tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Tue Jul 20 16:09:50 2010 +0100
+++ b/tools/libxl/xl_cmdimpl.c  Tue Jul 20 17:56:07 2010 +0100
@@ -1654,6 +1654,52 @@ int main_console(int argc, char **argv)
     return 1;
 }
 
+static int vncviewer(const char *domain_spec, int autopass)
+{
+    find_domain(domain_spec);
+    libxl_vncviewer_exec(&ctx, domid, autopass);
+    fprintf(stderr, "Unable to execute vncviewer\n");
+    return 1;
+}
+
+int main_vncviewer(int argc, char **argv)
+{
+    static const struct option long_options[] = {
+        {"autopass", 0, 0, 'a'},
+        {"vncviewer-autopass", 0, 0, 'a'},
+        {"help", 0, 0, 'h'},
+        {0, 0, 0, 0}
+    };
+    int opt, autopass = 0;
+
+    while (1) {
+        opt = getopt_long(argc, argv, "ah", long_options, NULL);
+        if (opt == -1)
+            break;
+
+        switch (opt) {
+        case 'a':
+            autopass = 1;
+            break;
+        case 'h':
+            help("vncviewer");
+            exit(0);
+        default:
+            fprintf(stderr, "option not supported\n");
+            break;
+        }
+    }
+
+    if (argc - optind != 1) {
+        help("vncviewer");
+        exit(2);
+    }
+
+    if (vncviewer(argv[optind], autopass))
+        exit(1);
+    exit(0);
+}
+
 void pcilist(char *dom)
 {
     libxl_device_pci *pcidevs;
diff -r ad5b6399aa29 -r 8963f83ba73b tools/libxl/xl_cmdtable.c
--- a/tools/libxl/xl_cmdtable.c Tue Jul 20 16:09:50 2010 +0100
+++ b/tools/libxl/xl_cmdtable.c Tue Jul 20 17:56:07 2010 +0100
@@ -83,6 +83,14 @@ struct cmd_spec cmd_table[] = {
       "Attach to domain's console",
       "<Domain>",
     },
+    { "vncviewer",
+      &main_vncviewer,
+      "Attach to domain's VNC server.",
+      "[options] <Domain>\n"
+      "--autopass               Pass VNC password to viewer via stdin and\n"
+      "                         -autopass\n"
+      "--vncviewer-autopass     (consistency alias for --autopass)"
+    },
     { "save",
       &main_save,
       "Save a domain state to restore later",

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>