Add vncviewer xm compatibility options
PATCH v2 1/1 Add vncviewer xm compatibility options
Changes since v1:
- Removed libxl vncviewer related dependencies
- The vncviewer function was modified to accept a domid instead of domspec;
- main_vncviewer was updated to reflect the new use.
- A domain_create structure is now passed to the parse_config_data where required/feasible (NULL otherwise)
- xl restore now have long options for vncviewer/vncviewer-autopass; docs updated.
- Updated vnc logic to depend on create_domain
tools/libxl/xl_cmdimpl.c | 50 ++++++++++++++++--------------- docs/man/xl.cfg.pod.5 | 4 ++ docs/man/xl.pod.1 | 18 +++++++++++ tools/libxl/xl_cmdimpl.c | 73 ++++++++++++++++++++++++++++++++++++++-------- tools/libxl/xl_cmdtable.c | 15 ++++++--- 5 files changed, 118 insertions(+), 42 deletions(-)
PATCH v2 1/1 xl: code motion of vncviewer() and `struct domain_create`
tools/libxl/xl_cmdimpl.c | 50 ++++++++++++++++++++++++----------------------- 1 files changed, 26 insertions(+), 24 deletions(-)
tools/libxl/xl_cmdimpl.c +26 -24
@@ -120,6 +120,24 @@ static const char *action_on_shutdown_na#define SAVEFILE_BYTEORDER_VALUE ((uint32_t)0x01020304UL) +struct domain_create { +int debug; +int daemonize; +int monitor;/* handle guest reboots etc */ +int paused; +int dryrun; +int quiet; +int console_autoconnect; +const char *config_file; +const char *extra_config;/* extra config string */ +const char *restore_file; +int migrate_fd;/* -1 means none */ +char **migration_domname_r;/* from malloc */ +int incr_generationid; +}; + + +static int qualifier_to_id (const char *p,uint32_t *id_r) {int i, alldigit;
@@ -186,6 +204,14 @@ static void find_domain(const char *p) common_domname = was_name ? p :libxl_domid_to_name (ctx, domid); } +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 ; +} +static int acquire_lock (void ) {int rc;
@@ -1399,22 +1425,6 @@ static int preserve_domain(libxl_ctx *ctreturn rc ==0 ?1 :0 ; } -struct domain_create { -int debug; -int daemonize; -int monitor;/* handle guest reboots etc */ -int paused; -int dryrun; -int quiet; -int console_autoconnect; -const char *config_file; -const char *extra_config;/* extra config string */ -const char *restore_file; -int migrate_fd;/* -1 means none */ -char **migration_domname_r;/* from malloc */ -int incr_generationid; -}; -static int freemem (libxl_domain_build_info *b_info) {int rc, retries =3 ;
@@ -2175,14 +2185,6 @@ 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[] = {
Re: [PATCH 1 of 2 v2] xl: code motion of vncviewer() and `struct domain_create`
Quoted 5 lines · Goncalo Gomes
tools/libxl/xl_cmdimpl.c| 50 ++++++++++++++++++++++++-----------------------1 files changed, 26 insertions(+), 24 deletions(-)Signed-off-by Goncalo Gomes <[email protected]>
Thanks!
Not sure what tool you use to send, but it is usual to put the diffstat after the commit + s-o-b and a "---" marker. This way the standard tools (e.g. git am) knows not to include it in the commit message. In this case I've done it by hand. I think hg email is a bit broken in this regard (puts the diffstat at the top), in which case feel free not to use the corresponding option next time.
Ian.
Quoted 82 lines
diff -r
cd4dd23a831d-r380d5f86dfddtools/libxl/xl_cmdimpl.ctools/libxl/xl_cmdimpl.c +26
-24@@ -120,6 +120,24 @@ static const char *action_on_shutdown_na#define SAVEFILE_BYTEORDER_VALUE ((uint32_t)0x01020304UL) +struct domain_create { +int debug; +int daemonize; +int monitor;/* handle guest reboots etc */ +int paused; +int dryrun; +int quiet; +int console_autoconnect; +const char *config_file; +const char *extra_config;/* extra config string */ +const char *restore_file; +int migrate_fd;/* -1 means none */ +char **migration_domname_r;/* from malloc */ +int incr_generationid; +}; + + +static int qualifier_to_id (const char *p,uint32_t *id_r) {int i, alldigit;@@ -186,6 +204,14 @@ static void find_domain(const char *p) common_domname = was_name ? p :libxl_domid_to_name (ctx, domid); } +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 ; +} +static int acquire_lock (void ) {int rc;@@ -1399,22 +1425,6 @@ static int preserve_domain(libxl_ctx *ctreturn rc ==0 ?1 :0 ; } -struct domain_create { -int debug; -int daemonize; -int monitor;/* handle guest reboots etc */ -int paused; -int dryrun; -int quiet; -int console_autoconnect; -const char *config_file; -const char *extra_config;/* extra config string */ -const char *restore_file; -int migrate_fd;/* -1 means none */ -char **migration_domname_r;/* from malloc */ -int incr_generationid; -}; -static int freemem (libxl_domain_build_info *b_info) {int rc, retries =3 ;@@ -2175,14 +2185,6 @@ 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[] = {
Re: [PATCH 1 of 2 v2] xl: code motion of vncviewer() and `struct domain_create`
Quoted 9 lines · Ian Campbell
Quoted 5 lines · Goncalo Gomes
tools/libxl/xl_cmdimpl.c| 50 ++++++++++++++++++++++++-----------------------1 files changed, 26 insertions(+), 24 deletions(-)Signed-off-by Goncalo Gomes <[email protected]>Committed-by Ian Campbell <[email protected]>
Quoted 8 lines
Thanks!
Not sure what tool you use to send, but it is usual to put the diffstat after the commit + s-o-b and a "---" marker. This way the standard tools (e.g. git am) knows not to include it in the commit message. In this case I've done it by hand. I think hg email is a bit broken in this regard (puts the diffstat at the top), in which case feel free not to use the corresponding option next time.
Thanks for fixing this by hand, I used hg email, with the '-d' switch to add the diffstat. I will defer from using it next time.
Goncalo
Quoted 86 lines
Ian.
Quoted 82 lines
diff -r
cd4dd23a831d-r380d5f86dfddtools/libxl/xl_cmdimpl.ctools/libxl/xl_cmdimpl.c +26
-24@@ -120,6 +120,24 @@ static const char *action_on_shutdown_na#define SAVEFILE_BYTEORDER_VALUE ((uint32_t)0x01020304UL) +struct domain_create { +int debug; +int daemonize; +int monitor;/* handle guest reboots etc */ +int paused; +int dryrun; +int quiet; +int console_autoconnect; +const char *config_file; +const char *extra_config;/* extra config string */ +const char *restore_file; +int migrate_fd;/* -1 means none */ +char **migration_domname_r;/* from malloc */ +int incr_generationid; +}; + + +static int qualifier_to_id (const char *p,uint32_t *id_r) {int i, alldigit;@@ -186,6 +204,14 @@ static void find_domain(const char *p) common_domname = was_name ? p :libxl_domid_to_name (ctx, domid); } +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 ; +} +static int acquire_lock (void ) {int rc;@@ -1399,22 +1425,6 @@ static int preserve_domain(libxl_ctx *ctreturn rc ==0 ?1 :0 ; } -struct domain_create { -int debug; -int daemonize; -int monitor;/* handle guest reboots etc */ -int paused; -int dryrun; -int quiet; -int console_autoconnect; -const char *config_file; -const char *extra_config;/* extra config string */ -const char *restore_file; -int migrate_fd;/* -1 means none */ -char **migration_domname_r;/* from malloc */ -int incr_generationid; -}; -static int freemem (libxl_domain_build_info *b_info) {int rc, retries =3 ;@@ -2175,14 +2185,6 @@ 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[] = {
PATCH v2 1/1 Introduce vncviewer xm compatibility options
In reply to Goncalo Gomesdocs/man/xl.cfg.pod.5 | 4 ++ docs/man/xl.pod.1 | 18 +++++++++++ tools/libxl/xl_cmdimpl.c | 73 ++++++++++++++++++++++++++++++++++++++-------- tools/libxl/xl_cmdtable.c | 15 ++++++--- 4 files changed, 92 insertions(+), 18 deletions(-)
docs/man/xl.cfg.pod.5 +4 -0
@@ -91,6 +91,10 @@ The following options apply to guests of Specifies the UUID of the domain. If not specified, a fresh unique UUID will be generated. +=item B<vncviewer=BOOLEAN> + +Automatically spawn a vncviewer when creating/restoring a guest + =item B<pool="CPUPOOLNAME"> Put the guest's vcpus into the named cpu pool.
docs/man/xl.pod.1 +18 -0
@@ -120,6 +120,14 @@ Use the given configuration file. Leave the domain paused after it is created. +=item B<-V>, B<--vncviewer> + +Attach to domain's VNC server, forking a vncviewer process. + +=item B<-A>, B<--vncviewer-autopass> + +Pass VNC password to vncviewer via stdin. + =item B<-c> Attach console to the domain as soon as it has started. This is
@@ -433,6 +441,16 @@ See the corresponding option of the I<cr Enable debug messages. +=item B<-V>, B<--vncviewer> + +Attach to domain's VNC server, forking a vncviewer process. + +=item B<-A>, B<--vncviewer-autopass> + +Pass VNC password to vncviewer via stdin. + + + =back =item B<save> [I<OPTIONS>] I<domain-id> I<CheckpointFile> [I<ConfigFile>]
tools/libxl/xl_cmdimpl.c +60 -13
192 lines not on this page · raw message
tools/libxl/xl_cmdtable.c +10 -5
@@ -30,7 +30,10 @@ struct cmd_spec cmd_table[] = {"-n, --dryrun Dry run - prints the resulting configuration\n" " (deprecated in favour of global -N option).\n" "-d Enable debug messages.\n" -"-e Do not wait in the background for the death of the domain." +"-e Do not wait in the background for the death of the domain.\n" +"-V, --vncviewer Connect to the VNC display after the domain is created.\n" +"-A, --vncviewer-autopass\n" +" Pass VNC password to viewer via stdin." }, { "config-update", &main_config_update, 1,
@@ -144,10 +147,12 @@ struct cmd_spec cmd_table[] = { &main_restore,0 ,"Restore a domain from a saved state" ,"[options] [<ConfigFile>] <CheckpointFile>" , -"-h Print this help.\n" -"-p Do not unpause domain after restoring it.\n" -"-e Do not wait in the background for the death of the domain.\n" -"-d Enable debug messages." +"-h Print this help.\n" +"-p Do not unpause domain after restoring it.\n" +"-e Do not wait in the background for the death of the domain.\n" +"-d Enable debug messages.\n" +"-V, --vncviewer Connect to the VNC display after the domain is created.\n" +"-A, --vncviewer-autopass Pass VNC password to viewer via stdin." }, { "migrate-receive", &main_migrate_receive, 0,
Re: [PATCH 2 of 2 v2] Introduce vncviewer xm compatibility options
Quoted 8 lines · Goncalo Gomes
docs/man/xl.cfg.pod.5 | 4 ++ docs/man/xl.pod.1 | 18 +++++++++++ tools/libxl/xl_cmdimpl.c | 73 ++++++++++++++++++++++++++++++++++++++-------- tools/libxl/xl_cmdtable.c | 15 ++++++--- 4 files changed, 92 insertions(+), 18 deletions(-)Signed-off-by Goncalo Gomes <[email protected]>
Thanks! I fixed up a context reject in xl_cmdtable.c, relating to the addition of the "modifies" flag, please do check I did the right thing.
Also I stripped some trailing whitespace.
Quoted 296 lines
diff -r
380d5f86dfdd-rd1c195e989ccdocs/man/xl.cfg.pod.5docs/man/xl.cfg.pod.5 +4
-0@@ -91,6 +91,10 @@ The following options apply to guests of Specifies the UUID of the domain. If not specified, a fresh unique UUID will be generated. +=item B<vncviewer=BOOLEAN> + +Automatically spawn a vncviewer when creating/restoring a guest + =item B<pool="CPUPOOLNAME"> Put the guest's vcpus into the named cpu pool.diff -r
380d5f86dfdd-rd1c195e989ccdocs/man/xl.pod.1docs/man/xl.pod.1 +18
-0@@ -120,6 +120,14 @@ Use the given configuration file. Leave the domain paused after it is created. +=item B<-V>, B<--vncviewer> + +Attach to domain's VNC server, forking a vncviewer process. + +=item B<-A>, B<--vncviewer-autopass> + +Pass VNC password to vncviewer via stdin. + =item B<-c> Attach console to the domain as soon as it has started. This is@@ -433,6 +441,16 @@ See the corresponding option of the I<cr Enable debug messages. +=item B<-V>, B<--vncviewer> + +Attach to domain's VNC server, forking a vncviewer process. + +=item B<-A>, B<--vncviewer-autopass> + +Pass VNC password to vncviewer via stdin. + + + =back =item B<save> [I<OPTIONS>] I<domain-id> I<CheckpointFile> [I<ConfigFile>]diff -r
380d5f86dfdd-rd1c195e989cctools/libxl/xl_cmdimpl.ctools/libxl/xl_cmdimpl.c +60
-13@@ -127,6 +127,8 @@ struct domain_create {int paused;int dryrun;int quiet; +int vnc; +int vncautopass;int console_autoconnect;const char *config_file;const char *extra_config;/* extra config string */ @@ -204,9 +206,8 @@ static void find_domain(const char *p) common_domname = was_name ? p :libxl_domid_to_name (ctx, domid); } -static int vncviewer (const char *domain_spec,int autopass) +static int vncviewer (uint32_t domid,int autopass) { -find_domain (domain_spec);libxl_vncviewer_exec (ctx, domid, autopass);fprintf (stderr,"Unable to execute vncviewer\n" );return 1 ;@@ -549,7 +550,9 @@ vcpp_out:static void parse_config_data (const char *configfile_filename_report,const char *configfile_data,int configfile_len, -libxl_domain_config *d_config) +libxl_domain_config *d_config, +struct domain_create *dom_info) + {const char *buf;long l;@@ -754,6 +757,13 @@ static void parse_config_data(const charif (!xlu_cfg_get_long (config,"rtc_timeoffset" , &l,0 )) b_info->rtc_timeoffset = l; +if (dom_info && !xlu_cfg_get_long (config,"vncviewer" , &l,0 )) { +/* Command line arguments must take precedence over what's +* specified in the configuration file. */ +if (!dom_info->vnc) + dom_info->vnc = l; + } +xlu_cfg_get_defbool (config,"localtime" , &b_info->localtime,0 );if (!xlu_cfg_get_long (config,"videoram" , &l,0 ))@@ -1531,6 +1541,7 @@ static int create_domain(struct domain_cint daemonize = dom_info->daemonize;int monitor = dom_info->monitor;int paused = dom_info->paused; +int vncautopass = dom_info->vncautopass;const char *config_file = dom_info->config_file;const char *extra_config = dom_info->extra_config;const char *restore_file = dom_info->restore_file;@@ -1654,7 +1665,7 @@ static int create_domain(struct domain_cif (!dom_info->quiet)printf ("Parsing config file %s\n" , config_file); -parse_config_data (config_file, config_data, config_len, &d_config); +parse_config_data (config_file, config_data, config_len, &d_config, dom_info);if (migrate_fd >=0 ) {if (d_config.c_info.name) {@@ -1741,6 +1752,9 @@ start:if (!daemonize && !monitor) goto out; +if (dom_info->vnc) +vncviewer (domid, vncautopass); +if (need_daemon) {char *fullname, *name;pid_t child1, got_child;@@ -1867,7 +1881,7 @@ start:libxl_domain_config_dispose (&d_config);libxl_domain_config_init (&d_config);parse_config_data (config_file, config_data, config_len, - &d_config); + &d_config, dom_info);/* * XXX FIXME: If this sleep is not there then domain @@ -2218,7 +2232,9 @@ int main_vncviewer(int argc, char **argvreturn 2 ; } -if (vncviewer (argv[optind], autopass)) +find_domain (argv[optind]); + +if (vncviewer (domid, autopass))return 1 ;return 0 ; }@@ -2493,7 +2509,7 @@ static void list_domains_details(const lcontinue ;CHK_ERRNO (asprintf (&config_file,"<domid %d data>" , info[i].domid));libxl_domain_config_init (&d_config); -parse_config_data (config_file, (char *)data, len, &d_config); +parse_config_data (config_file, (char *)data, len, &d_config,NULL );printf_info (default_output_format, info[i].domid, &d_config);libxl_domain_config_dispose (&d_config);free (data);@@ -3043,13 +3059,26 @@ int main_restore(int argc, char **argv)const char *config_file =NULL ;struct domain_create dom_info;int paused =0 , debug =0 , daemonize =1 , monitor =1 , - console_autoconnect =0 ; + console_autoconnect =0 , vnc =0 , vncautopass =0 ;int opt, rc; - -while ((opt =def_getopt (argc, argv,"Fcpde" ,"restore" ,1 )) !=-1 ) { +int option_index =0 ; +static struct option long_options[] = { + {"vncviewer" ,0 ,0 ,'V' }, + {"vncviewer-autopass" ,0 ,0 ,'A' }, + {0 ,0 ,0 ,0 } + }; + +while (1 ) { + opt =getopt_long (argc, argv,"FhcpdeVA" , long_options, &option_index); +if (opt ==-1 ) +break ; +switch (opt) {case 0 :case 2 :return opt; +case 'h' : +help ("restore" ); +return 2 ;case 'c' : console_autoconnect =1 ;break ;@@ -3066,6 +3095,12 @@ int main_restore(int argc, char **argv) daemonize =0 ; monitor =0 ;break ; +case 'V' : + vnc =1 ; +break ; +case 'A' : + vnc = vncautopass =1 ; +break ; } }@@ -3087,6 +3122,8 @@ int main_restore(int argc, char **argv) dom_info.config_file = config_file; dom_info.restore_file = checkpoint_file; dom_info.migrate_fd =-1 ; + dom_info.vnc = vnc; + dom_info.vncautopass = vncautopass; dom_info.console_autoconnect = console_autoconnect; dom_info.incr_generationid =1 ;@@ -3394,7 +3431,7 @@ int main_create(int argc, char **argv)char extra_config[1024 ];struct domain_create dom_info;int paused =0 , debug =0 , daemonize =1 , console_autoconnect =0 , - quiet =0 , monitor =1 ; + quiet =0 , monitor =1 , vnc =0 , vncautopass =0 ;int opt, rc;int option_index =0 ;static struct option long_options[] = {@@ -3402,6 +3439,8 @@ int main_create(int argc, char **argv) {"quiet", 0, 0, 'q'}, {"help", 0, 0, 'h'}, {"defconfig", 1, 0, 'f'}, + {"vncviewer", 0, 0, 'V'}, + {"vncviewer-autopass", 0, 0, 'A'}, {0, 0, 0, 0} };@@ -3411,7 +3450,7 @@ int main_create(int argc, char **argv) }while (1 ) { - opt =getopt_long (argc, argv,"Fhnqf:pcde" , long_options, &option_index); + opt =getopt_long (argc, argv,"Fhnqf:pcdeVA" , long_options, &option_index);if (opt ==-1 )break ;@@ -3444,6 +3483,12 @@ int main_create(int argc, char **argv)case 'q' : quiet =1 ;break ; +case 'V' : + vnc =1 ; +break ; +case 'A' : + vnc = vncautopass =1 ; +break ;default :fprintf (stderr,"option `%c' not supported.\n" , optopt);break ;@@ -3473,6 +3518,8 @@ int main_create(int argc, char **argv) dom_info.config_file = filename; dom_info.extra_config = extra_config; dom_info.migrate_fd =-1 ; + dom_info.vnc = vnc; + dom_info.vncautopass = vncautopass; dom_info.console_autoconnect = console_autoconnect; dom_info.incr_generationid =0 ;@@ -3575,7 +3622,7 @@ int main_config_update(int argc, char **libxl_domain_config_init (&d_config); -parse_config_data (filename, config_data, config_len, &d_config); +parse_config_data (filename, config_data, config_len, &d_config,NULL );if (debug || dryrun_only)printf_info (default_output_format,-1 , &d_config);diff -r
380d5f86dfdd-rd1c195e989cctools/libxl/xl_cmdtable.ctools/libxl/xl_cmdtable.c +10
-5@@ -30,7 +30,10 @@ struct cmd_spec cmd_table[] = {"-n, --dryrun Dry run - prints the resulting configuration\n" " (deprecated in favour of global -N option).\n" "-d Enable debug messages.\n" -"-e Do not wait in the background for the death of the domain." +"-e Do not wait in the background for the death of the domain.\n" +"-V, --vncviewer Connect to the VNC display after the domain is created.\n" +"-A, --vncviewer-autopass\n" +" Pass VNC password to viewer via stdin." }, { "config-update", &main_config_update, 1,@@ -144,10 +147,12 @@ struct cmd_spec cmd_table[] = { &main_restore,0 ,"Restore a domain from a saved state" ,"[options] [<ConfigFile>] <CheckpointFile>" , -"-h Print this help.\n" -"-p Do not unpause domain after restoring it.\n" -"-e Do not wait in the background for the death of the domain.\n" -"-d Enable debug messages." +"-h Print this help.\n" +"-p Do not unpause domain after restoring it.\n" +"-e Do not wait in the background for the death of the domain.\n" +"-d Enable debug messages.\n" +"-V, --vncviewer Connect to the VNC display after the domain is created.\n" +"-A, --vncviewer-autopass Pass VNC password to viewer via stdin." }, { "migrate-receive", &main_migrate_receive, 0,
Re: [PATCH 2 of 2 v2] Introduce vncviewer xm compatibility options
Quoted 8 lines · Ian Campbell
Quoted 7 lines · Goncalo Gomes
docs/man/xl.cfg.pod.5 | 4 ++ docs/man/xl.pod.1 | 18 +++++++++++ tools/libxl/xl_cmdimpl.c | 73 ++++++++++++++++++++++++++++++++++++++-------- tools/libxl/xl_cmdtable.c | 15 ++++++--- 4 files changed, 92 insertions(+), 18 deletions(-)
Quoted 8 lines
Quoted 1 line
Signed-off-by Goncalo Gomes <[email protected]>Committed-by Ian Campbell <[email protected]>Thanks! I fixed up a context reject in
xl_cmdtable.c, relating to the addition of the "modifies" flag, please do check I did the right thing.Also I stripped some trailing whitespace.
Thanks for stripping the whitespace/fixing the reject in xl_cmdtable.c. Looks fine to me!
Goncalo
Quoted 298 lines
Quoted 296 lines
diff -r
380d5f86dfdd-rd1c195e989ccdocs/man/xl.cfg.pod.5docs/man/xl.cfg.pod.5 +4
-0@@ -91,6 +91,10 @@ The following options apply to guests of Specifies the UUID of the domain. If not specified, a fresh unique UUID will be generated. +=item B<vncviewer=BOOLEAN> + +Automatically spawn a vncviewer when creating/restoring a guest + =item B<pool="CPUPOOLNAME"> Put the guest's vcpus into the named cpu pool.diff -r
380d5f86dfdd-rd1c195e989ccdocs/man/xl.pod.1docs/man/xl.pod.1 +18
-0@@ -120,6 +120,14 @@ Use the given configuration file. Leave the domain paused after it is created. +=item B<-V>, B<--vncviewer> + +Attach to domain's VNC server, forking a vncviewer process. + +=item B<-A>, B<--vncviewer-autopass> + +Pass VNC password to vncviewer via stdin. + =item B<-c> Attach console to the domain as soon as it has started. This is@@ -433,6 +441,16 @@ See the corresponding option of the I<cr Enable debug messages. +=item B<-V>, B<--vncviewer> + +Attach to domain's VNC server, forking a vncviewer process. + +=item B<-A>, B<--vncviewer-autopass> + +Pass VNC password to vncviewer via stdin. + + + =back =item B<save> [I<OPTIONS>] I<domain-id> I<CheckpointFile> [I<ConfigFile>]diff -r
380d5f86dfdd-rd1c195e989cctools/libxl/xl_cmdimpl.ctools/libxl/xl_cmdimpl.c +60
-13@@ -127,6 +127,8 @@ struct domain_create {int paused;int dryrun;int quiet; +int vnc; +int vncautopass;int console_autoconnect;const char *config_file;const char *extra_config;/* extra config string */ @@ -204,9 +206,8 @@ static void find_domain(const char *p) common_domname = was_name ? p :libxl_domid_to_name (ctx, domid); } -static int vncviewer (const char *domain_spec,int autopass) +static int vncviewer (uint32_t domid,int autopass) { -find_domain (domain_spec);libxl_vncviewer_exec (ctx, domid, autopass);fprintf (stderr,"Unable to execute vncviewer\n" );return 1 ;@@ -549,7 +550,9 @@ vcpp_out:static void parse_config_data (const char *configfile_filename_report,const char *configfile_data,int configfile_len, -libxl_domain_config *d_config) +libxl_domain_config *d_config, +struct domain_create *dom_info) + {const char *buf;long l;@@ -754,6 +757,13 @@ static void parse_config_data(const charif (!xlu_cfg_get_long (config,"rtc_timeoffset" , &l,0 )) b_info->rtc_timeoffset = l; +if (dom_info && !xlu_cfg_get_long (config,"vncviewer" , &l,0 )) { +/* Command line arguments must take precedence over what's +* specified in the configuration file. */ +if (!dom_info->vnc) + dom_info->vnc = l; + } +xlu_cfg_get_defbool (config,"localtime" , &b_info->localtime,0 );if (!xlu_cfg_get_long (config,"videoram" , &l,0 ))@@ -1531,6 +1541,7 @@ static int create_domain(struct domain_cint daemonize = dom_info->daemonize;int monitor = dom_info->monitor;int paused = dom_info->paused; +int vncautopass = dom_info->vncautopass;const char *config_file = dom_info->config_file;const char *extra_config = dom_info->extra_config;const char *restore_file = dom_info->restore_file;@@ -1654,7 +1665,7 @@ static int create_domain(struct domain_cif (!dom_info->quiet)printf ("Parsing config file %s\n" , config_file); -parse_config_data (config_file, config_data, config_len, &d_config); +parse_config_data (config_file, config_data, config_len, &d_config, dom_info);if (migrate_fd >=0 ) {if (d_config.c_info.name) {@@ -1741,6 +1752,9 @@ start:if (!daemonize && !monitor) goto out; +if (dom_info->vnc) +vncviewer (domid, vncautopass); +if (need_daemon) {char *fullname, *name;pid_t child1, got_child;@@ -1867,7 +1881,7 @@ start:libxl_domain_config_dispose (&d_config);libxl_domain_config_init (&d_config);parse_config_data (config_file, config_data, config_len, - &d_config); + &d_config, dom_info);/* * XXX FIXME: If this sleep is not there then domain @@ -2218,7 +2232,9 @@ int main_vncviewer(int argc, char **argvreturn 2 ; } -if (vncviewer (argv[optind], autopass)) +find_domain (argv[optind]); + +if (vncviewer (domid, autopass))return 1 ;return 0 ; }@@ -2493,7 +2509,7 @@ static void list_domains_details(const lcontinue ;CHK_ERRNO (asprintf (&config_file,"<domid %d data>" , info[i].domid));libxl_domain_config_init (&d_config); -parse_config_data (config_file, (char *)data, len, &d_config); +parse_config_data (config_file, (char *)data, len, &d_config,NULL );printf_info (default_output_format, info[i].domid, &d_config);libxl_domain_config_dispose (&d_config);free (data);@@ -3043,13 +3059,26 @@ int main_restore(int argc, char **argv)const char *config_file =NULL ;struct domain_create dom_info;int paused =0 , debug =0 , daemonize =1 , monitor =1 , - console_autoconnect =0 ; + console_autoconnect =0 , vnc =0 , vncautopass =0 ;int opt, rc; - -while ((opt =def_getopt (argc, argv,"Fcpde" ,"restore" ,1 )) !=-1 ) { +int option_index =0 ; +static struct option long_options[] = { + {"vncviewer" ,0 ,0 ,'V' }, + {"vncviewer-autopass" ,0 ,0 ,'A' }, + {0 ,0 ,0 ,0 } + }; + +while (1 ) { + opt =getopt_long (argc, argv,"FhcpdeVA" , long_options, &option_index); +if (opt ==-1 ) +break ; +switch (opt) {case 0 :case 2 :return opt; +case 'h' : +help ("restore" ); +return 2 ;case 'c' : console_autoconnect =1 ;break ;@@ -3066,6 +3095,12 @@ int main_restore(int argc, char **argv) daemonize =0 ; monitor =0 ;break ; +case 'V' : + vnc =1 ; +break ; +case 'A' : + vnc = vncautopass =1 ; +break ; } }@@ -3087,6 +3122,8 @@ int main_restore(int argc, char **argv) dom_info.config_file = config_file; dom_info.restore_file = checkpoint_file; dom_info.migrate_fd =-1 ; + dom_info.vnc = vnc; + dom_info.vncautopass = vncautopass; dom_info.console_autoconnect = console_autoconnect; dom_info.incr_generationid =1 ;@@ -3394,7 +3431,7 @@ int main_create(int argc, char **argv)char extra_config[1024 ];struct domain_create dom_info;int paused =0 , debug =0 , daemonize =1 , console_autoconnect =0 , - quiet =0 , monitor =1 ; + quiet =0 , monitor =1 , vnc =0 , vncautopass =0 ;int opt, rc;int option_index =0 ;static struct option long_options[] = {@@ -3402,6 +3439,8 @@ int main_create(int argc, char **argv) {"quiet", 0, 0, 'q'}, {"help", 0, 0, 'h'}, {"defconfig", 1, 0, 'f'}, + {"vncviewer", 0, 0, 'V'}, + {"vncviewer-autopass", 0, 0, 'A'}, {0, 0, 0, 0} };@@ -3411,7 +3450,7 @@ int main_create(int argc, char **argv) }while (1 ) { - opt =getopt_long (argc, argv,"Fhnqf:pcde" , long_options, &option_index); + opt =getopt_long (argc, argv,"Fhnqf:pcdeVA" , long_options, &option_index);if (opt ==-1 )break ;@@ -3444,6 +3483,12 @@ int main_create(int argc, char **argv)case 'q' : quiet =1 ;break ; +case 'V' : + vnc =1 ; +break ; +case 'A' : + vnc = vncautopass =1 ; +break ;default :fprintf (stderr,"option `%c' not supported.\n" , optopt);break ;@@ -3473,6 +3518,8 @@ int main_create(int argc, char **argv) dom_info.config_file = filename; dom_info.extra_config = extra_config; dom_info.migrate_fd =-1 ; + dom_info.vnc = vnc; + dom_info.vncautopass = vncautopass; dom_info.console_autoconnect = console_autoconnect; dom_info.incr_generationid =0 ;@@ -3575,7 +3622,7 @@ int main_config_update(int argc, char **libxl_domain_config_init (&d_config); -parse_config_data (filename, config_data, config_len, &d_config); +parse_config_data (filename, config_data, config_len, &d_config,NULL );if (debug || dryrun_only)printf_info (default_output_format,-1 , &d_config);diff -r
380d5f86dfdd-rd1c195e989cctools/libxl/xl_cmdtable.ctools/libxl/xl_cmdtable.c +10
-5@@ -30,7 +30,10 @@ struct cmd_spec cmd_table[] = {"-n, --dryrun Dry run - prints the resulting configuration\n" " (deprecated in favour of global -N option).\n" "-d Enable debug messages.\n" -"-e Do not wait in the background for the death of the domain." +"-e Do not wait in the background for the death of the domain.\n" +"-V, --vncviewer Connect to the VNC display after the domain is created.\n" +"-A, --vncviewer-autopass\n" +" Pass VNC password to viewer via stdin." }, { "config-update", &main_config_update, 1,@@ -144,10 +147,12 @@ struct cmd_spec cmd_table[] = { &main_restore,0 ,"Restore a domain from a saved state" ,"[options] [<ConfigFile>] <CheckpointFile>" , -"-h Print this help.\n" -"-p Do not unpause domain after restoring it.\n" -"-e Do not wait in the background for the death of the domain.\n" -"-d Enable debug messages." +"-h Print this help.\n" +"-p Do not unpause domain after restoring it.\n" +"-e Do not wait in the background for the death of the domain.\n" +"-d Enable debug messages.\n" +"-V, --vncviewer Connect to the VNC display after the domain is created.\n" +"-A, --vncviewer-autopass Pass VNC password to viewer via stdin." }, { "migrate-receive", &main_migrate_receive, 0,