From: Doug Goldstein <cardoe@cardoe.com>
To: sabiya kazi <sabiyafk@gmail.com>
Cc: xen-devel@lists.xenproject.org
Subject: Re: Interested to participate in Outreachy Program
Date: Wed, 23 Mar 2016 14:05:42 -0500 [thread overview]
Message-ID: <56F2E906.2060803@cardoe.com> (raw)
In-Reply-To: <CAGxmxE0CdTBEXNSPWhppy0im1nx1pWCAZHq01hL-Ufyaa4fs4Q@mail.gmail.com>
[-- Attachment #1.1.1: Type: text/plain, Size: 11087 bytes --]
On 3/23/16 11:34 AM, sabiya kazi wrote:
> Hi Doug,
> Can you have a look at patch and let me know if everything
> is correct, I think things are good.
>
> I would also like to have a word with you for deciding timeline for
> project. Meantime, I have started reading stuff about rust language.
>
>
> Regards,
> -Sabiya
>
>
Inlining the patch since it was sent as an attachment..
> diff --git a/tools/Makefile b/tools/Makefile
> index 3f45fb9..1c2fb79 100644
> --- a/tools/Makefile
> +++ b/tools/Makefile
> @@ -1,4 +1,4 @@
> -XEN_ROOT = $(CURDIR)/..
> + XEN_ROOT = $(CURDIR)/..
> include $(XEN_ROOT)/tools/Rules.mk
drop this change
>
> SUBDIRS-y :=
> diff --git a/tools/console/client/main.c b/tools/console/client/main.c
> index d006fdc..199432c 100644
> --- a/tools/console/client/main.c
> +++ b/tools/console/client/main.c
> @@ -35,6 +35,7 @@
> #include <sys/select.h>
> #include <err.h>
> #include <string.h>
> +#include <ctype.h>
> #ifdef __sun__
> #include <sys/stropts.h>
> #endif
> @@ -45,10 +46,12 @@
>
> #define ESCAPE_CHARACTER 0x1d
>
> +# define CONTROL(c) ((c) ^ 0x40)
not really necessary as a define. this can just go into the function
with a comment
> +
> static volatile sig_atomic_t received_signal = 0;
> static char lockfile[sizeof (XEN_LOCK_DIR "/xenconsole.") + 8] = { 0 };
> static int lockfd = -1;
> -
> +static char escapechar = ESCAPE_CHARACTER;
> static void sighandler(int signum)
> {
> received_signal = 1;
> @@ -214,7 +217,7 @@ static int console_loop(int fd, struct xs_handle *xs, char *pty_path,
> char msg[60];
>
> len = read(STDIN_FILENO, msg, sizeof(msg));
> - if (len == 1 && msg[0] == ESCAPE_CHARACTER) {
> + if (len == 1 && msg[0] == escapechar) {
> return 0;
> }
>
> @@ -318,6 +321,14 @@ static void console_unlock(void)
> }
> }
>
> +char getEscapeChar(const char *s)
> +{
> + if (*s == '^')
> + return CONTROL(toupper(s[1]));
This has the possibility to crash. Not really sure why we would want
this at all tbh. The valid range of escape characters should be "a-z A-Z
@ [ \ ] ^ _" so really we should only ever deal with 1 character and
that character needs to be in the range of:
if ( s <= 'a' && s <= 'z' || s <= '@' && s <= '_' )
escapechar = s;
else
tell_the_user_they_did_wrong();
> +
> + return *s;
> +}
> +
> int main(int argc, char **argv)
> {
> struct termios attr;
> @@ -329,6 +340,7 @@ int main(int argc, char **argv)
> struct option lopt[] = {
> { "type", 1, 0, 't' },
> { "num", 1, 0, 'n' },
> + { "escapechar", 1, 0, 'n' },
the last field should be 'e'
> { "help", 0, 0, 'h' },
> { 0 },
>
> @@ -363,6 +375,11 @@ int main(int argc, char **argv)
> exit(EINVAL);
> }
> break;
> + case 'e' :
> + escapechar = getEscapeChar(optarg);
> + break;
white space is off here
> +
> +
> default:
> fprintf(stderr, "Invalid argument\n");
> fprintf(stderr, "Try `%s --help' for more information.\n",
> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
> index 4cdc169..86ee670 100644
> --- a/tools/libxl/libxl.c
> +++ b/tools/libxl/libxl.c
> @@ -1715,14 +1715,16 @@ static void domain_destroy_domid_cb(libxl__egc *egc,
> }
>
> int libxl_console_exec(libxl_ctx *ctx, uint32_t domid, int cons_num,
> - libxl_console_type type)
> + libxl_console_type type, char escapechar)
> {
> +
> +
> GC_INIT(ctx);
> char *p = GCSPRINTF("%s/xenconsole", libxl__private_bindir_path());
> char *domid_s = GCSPRINTF("%d", domid);
> char *cons_num_s = GCSPRINTF("%d", cons_num);
> char *cons_type_s;
> -
> + char *cons_escape_char = GCSPRINTF("%c", escapechar);
> switch (type) {
> case LIBXL_CONSOLE_TYPE_PV:
> cons_type_s = "pv";
> @@ -1734,13 +1736,17 @@ int libxl_console_exec(libxl_ctx *ctx, uint32_t domid, int cons_num,
> goto out;
> }
>
> - execl(p, p, domid_s, "--num", cons_num_s, "--type", cons_type_s, (void *)NULL);
> + if(cons_escape_char == NULL)
this won't ever be true because of the GCSPRINTF() above. I think you
mean to check if escapechar == 0
> + execl(p, p, domid_s, "--num", cons_num_s, "--type", cons_type_s,(void *)NULL);
> + else
> + execl(p, p, domid_s, "--num", cons_num_s, "--type", cons_type_s, "--escapechar", cons_escape_char, (void *)NULL);
>
> out:
> GC_FREE;
> return ERROR_FAIL;
> }
>
> +
unnecessary white space change
> int libxl_console_get_tty(libxl_ctx *ctx, uint32_t domid, int cons_num,
> libxl_console_type type, char **path)
> {
> @@ -1823,7 +1829,7 @@ out:
> return rc;
> }
>
> -int libxl_primary_console_exec(libxl_ctx *ctx, uint32_t domid_vm)
> +int libxl_primary_console_exec(libxl_ctx *ctx, uint32_t domid_vm, char escapechar)
> {
> uint32_t domid;
> int cons_num;
> @@ -1832,7 +1838,7 @@ int libxl_primary_console_exec(libxl_ctx *ctx, uint32_t domid_vm)
>
> rc = libxl__primary_console_find(ctx, domid_vm, &domid, &cons_num, &type);
> if ( rc ) return rc;
> - return libxl_console_exec(ctx, domid, cons_num, type);
> + return libxl_console_exec(ctx, domid, cons_num, type, escapechar);
> }
>
> int libxl_primary_console_get_tty(libxl_ctx *ctx, uint32_t domid_vm,
> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> index f9e3ef5..4ac8cfd 100644
> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -218,6 +218,12 @@
> #define LIBXL_HAVE_SOFT_RESET 1
>
> /*
> + if user does not specify any escape character sequence then
> + Default escape character will be ^]
> + */
> +
> +#define CTRL_CLOSE_BRACKET '\e'
> +/*
> * libxl ABI compatibility
> *
> * The only guarantee which libxl makes regarding ABI compatibility
> @@ -1317,15 +1323,26 @@ int libxl_wait_for_free_memory(libxl_ctx *ctx, uint32_t domid, uint32_t memory_k
> int libxl_wait_for_memory_target(libxl_ctx *ctx, uint32_t domid, int wait_secs);
>
> int libxl_vncviewer_exec(libxl_ctx *ctx, uint32_t domid, int autopass);
> -int libxl_console_exec(libxl_ctx *ctx, uint32_t domid, int cons_num, libxl_console_type type);
> +
> +
> +/*
> + * Escapechar can be specified , If specified given escape char will
> + * be used for terminating logging. Otherwise default Ctrl-] will be used,
> + */
> +int libxl_console_exec(libxl_ctx *ctx, uint32_t domid, int cons_num, libxl_console_type type, char escapechar);
> /* libxl_primary_console_exec finds the domid and console number
> * corresponding to the primary console of the given vm, then calls
> * libxl_console_exec with the right arguments (domid might be different
> * if the guest is using stubdoms).
> * This function can be called after creating the device model, in
> * case of HVM guests, and before libxl_run_bootloader in case of PV
> - * guests using pygrub. */
> -int libxl_primary_console_exec(libxl_ctx *ctx, uint32_t domid_vm);
> + * guests using pygrub.
> + *
> + * Escapechar can be specified , If specified given escape char will
> + * be used for terminating logging. Otherwise default Ctrl-] will be used,
> + */
> +
> +int libxl_primary_console_exec(libxl_ctx *ctx, uint32_t domid_vm, char escapechar);
>
> /* libxl_console_get_tty retrieves the specified domain's console tty path
> * and stores it in path. Caller is responsible for freeing the memory.
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index 990d3c9..fa87f8d 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -1,3 +1,4 @@
> +
> /*
> * Copyright (C) 2009 Citrix Ltd.
> * Author Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> @@ -41,7 +42,8 @@
> #include "libxl_json.h"
> #include "libxlutil.h"
> #include "xl.h"
> -
> +# define CONTROL(c) ((c) ^ 0x40)
> + char getEscapeChar(const char *s);
Let's drop this given my above comments
> /* For calls which return an errno on failure */
> #define CHK_ERRNOVAL( call ) ({ \
> int chk_errnoval = (call); \
> @@ -2623,7 +2625,7 @@ static void autoconnect_console(libxl_ctx *ctx_ignored,
> postfork();
>
> sleep(1);
> - libxl_primary_console_exec(ctx, bldomid);
> + libxl_primary_console_exec(ctx, bldomid, 0);
We probably should just bring the ESCAPE_CHARACTER #define into libxl
and just supply that here by default.
> /* Do not return. xl continued in child process */
> perror("xl: unable to exec console client");
> _exit(1);
> @@ -3411,14 +3413,21 @@ int main_cd_insert(int argc, char **argv)
> cd_insert(domid, virtdev, file);
> return 0;
> }
> +char getEscapeChar(const char *s)
> +{
> + if (*s == '^')
> + return CONTROL(toupper(s[1]));
see above comments
>
> + return *s;
> +}
> int main_console(int argc, char **argv)
> {
> uint32_t domid;
> int opt = 0, num = 0;
> + char escapechar = 0;
> libxl_console_type type = 0;
>
> - SWITCH_FOREACH_OPT(opt, "n:t:", NULL, "console", 1) {
> + SWITCH_FOREACH_OPT(opt, "n:t:e", NULL, "console", 1) {
> case 't':
> if (!strcmp(optarg, "pv"))
> type = LIBXL_CONSOLE_TYPE_PV;
> @@ -3432,13 +3441,18 @@ int main_console(int argc, char **argv)
> case 'n':
> num = atoi(optarg);
> break;
> + case 'e':
> + escapechar = getEscapeChar(optarg);
> + break;
> }
>
> domid = find_domain(argv[optind]);
> if (!type)
> - libxl_primary_console_exec(ctx, domid);
> - else
> - libxl_console_exec(ctx, domid, num, type);
> + libxl_primary_console_exec(ctx, domid, escapechar);
> + else
> + libxl_console_exec(ctx, domid, num, type, escapechar);
> +
> +
> fprintf(stderr, "Unable to attach console\n");
> return 1;
> }
> diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c
> index fdc1ac6..794c7c1 100644
> --- a/tools/libxl/xl_cmdtable.c
> +++ b/tools/libxl/xl_cmdtable.c
> @@ -133,8 +133,9 @@ struct cmd_spec cmd_table[] = {
> &main_console, 0, 0,
> "Attach to domain's console",
> "[options] <Domain>\n"
> - "-t <type> console type, pv or serial\n"
> - "-n <number> console number"
> + "-t <type> console type, pv or serial\n"
> + "-n <number> console number\n"
> + "-e <escapechar> escape character"
> },
> { "vncviewer",
> &main_vncviewer, 0, 0,
Overall this change makes me think about some rough edges of the libxl
API but I think this is the minimum amount to get the feature working
without worrying about API bits.
--
Doug Goldstein
[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 959 bytes --]
[-- Attachment #2: Type: text/plain, Size: 126 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2016-03-23 19:05 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-05 18:29 Interested to participate in Outreachy Program sabiya kazi
2016-03-11 16:59 ` sabiya kazi
2016-03-15 13:44 ` Doug Goldstein
[not found] ` <CAGxmxE0rqnJzW6xUEVQDvxxP+u9ZY9dpVZhNoJD1tcTRAWkWYA@mail.gmail.com>
[not found] ` <56EA3513.2060700@cardoe.com>
[not found] ` <56EAB99C.5030901@cardoe.com>
[not found] ` <CAGxmxE14GH6hBGWJJhug5gmQs=s9t=68P1tqhjSOeJTacU6M2g@mail.gmail.com>
[not found] ` <CAGxmxE2y815wVHR10FjSM175kgWRHDD+Hws_5q9==azpjxc9Bg@mail.gmail.com>
[not found] ` <CAGxmxE1cxGc6PY3ZWRPfOfamBH6UyyUmLVO3iDSAkeMi_RLWPQ@mail.gmail.com>
[not found] ` <CAGxmxE0wVfii1K61NXYdLK+d0wiYrobya+jOf-VX=Xzo3AfYog@mail.gmail.com>
2016-03-20 19:10 ` sabiya kazi
2016-03-21 12:12 ` sabiya kazi
2016-03-22 15:49 ` Doug Goldstein
[not found] ` <CAGxmxE0Ocq0WU4RGYj=_00y1vt_nXg9g9LwFZMd=CxF6DvDHDA@mail.gmail.com>
2016-03-23 16:34 ` sabiya kazi
2016-03-23 18:40 ` Doug Goldstein
2016-03-23 19:05 ` Doug Goldstein [this message]
2016-03-24 22:29 ` Wei Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56F2E906.2060803@cardoe.com \
--to=cardoe@cardoe.com \
--cc=sabiyafk@gmail.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.