On 28/01/2020 14:28, Juergen Gross wrote:
> In order to be able to connect to the console of Xenstore stubdom we
> need to create the appropriate entries in Xenstore.
>
> For the moment we don't support xenconsoled living in another domain
> than dom0, as this information isn't available other then via
> Xenstore which we are just setting up.

Ah - I see the observation here.

>
> Signed-off-by: Juergen Gross <jgr...@suse.com>

Acked-by: Andrew Cooper <andrew.coop...@citrix.com>

> ---
>  tools/helpers/init-xenstore-domain.c | 31 ++++++++++++++++++++++++++++++-
>  1 file changed, 30 insertions(+), 1 deletion(-)
>
> diff --git a/tools/helpers/init-xenstore-domain.c 
> b/tools/helpers/init-xenstore-domain.c
> index a312bc38b8..a81a15a4de 100644
> --- a/tools/helpers/init-xenstore-domain.c
> +++ b/tools/helpers/init-xenstore-domain.c
> @@ -12,6 +12,7 @@
>  #include <xenstore.h>
>  #include <xen/sys/xenbus_dev.h>
>  #include <xen-xsm/flask/flask.h>
> +#include <xen/io/xenbus.h>
>  
>  #include "init-dom-json.h"
>  #include "_paths.h"
> @@ -312,6 +313,15 @@ static void do_xs_write(struct xs_handle *xsh, char 
> *path, char *val)
>          fprintf(stderr, "writing %s to xenstore failed.\n", path);
>  }
>  
> +static void do_xs_write_dir_node(struct xs_handle *xsh, char *dir, char 
> *node,
> +                                 char *val)
> +{
> +    char full_path[100];
> +
> +    snprintf(full_path, 100, "%s/%s", dir, node);
> +    do_xs_write(xsh, full_path, val);
> +}
> +
>  static void do_xs_write_dom(struct xs_handle *xsh, char *path, char *val)
>  {
>      char full_path[64];
> @@ -325,7 +335,7 @@ int main(int argc, char** argv)
>      int opt;
>      xc_interface *xch;
>      struct xs_handle *xsh;
> -    char buf[16];
> +    char buf[16], be_path[64], fe_path[64];
>      int rv, fd;
>      char *maxmem_str = NULL;
>  
> @@ -414,6 +424,25 @@ int main(int argc, char** argv)
>      if (maxmem)
>          snprintf(buf, 16, "%d", maxmem * 1024);
>      do_xs_write_dom(xsh, "memory/static-max", buf);
> +    snprintf(be_path, 64, "/local/domain/0/backend/console/%d/0", domid);
> +    snprintf(fe_path, 64, "/local/domain/%d/console", domid);
> +    snprintf(buf, 16, "%d", domid);
> +    do_xs_write_dir_node(xsh, be_path, "frontend-id", buf);
> +    do_xs_write_dir_node(xsh, be_path, "frontend", fe_path);
> +    do_xs_write_dir_node(xsh, be_path, "online", "1");
> +    snprintf(buf, 16, "%d", XenbusStateInitialising);
> +    do_xs_write_dir_node(xsh, be_path, "state", buf);
> +    do_xs_write_dir_node(xsh, be_path, "protocol", "vt100");
> +    do_xs_write_dir_node(xsh, fe_path, "backend", be_path);
> +    do_xs_write_dir_node(xsh, fe_path, "backend-id", "0");
> +    do_xs_write_dir_node(xsh, fe_path, "limit", "1048576");
> +    do_xs_write_dir_node(xsh, fe_path, "type", "xenconsoled");
> +    do_xs_write_dir_node(xsh, fe_path, "output", "pty");
> +    do_xs_write_dir_node(xsh, fe_path, "tty", "");
> +    snprintf(buf, 16, "%d", console_evtchn);
> +    do_xs_write_dir_node(xsh, fe_path, "port", buf);
> +    snprintf(buf, 16, "%ld", console_mfn);
> +    do_xs_write_dir_node(xsh, fe_path, "ring-ref", buf);

Eww.  Why are pty/tty details in the protocol?  vt100, fine, but the
backend specifics about what it does with the data shouldn't matter to
the frontend.

I presume this is too engrained in legacy to fix?

~Andrew

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to