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