With the hv_config() now in, `ldomctl init-system -n ldom.conf' to only parse configuration is trivial.
It is usable as unprivileged user, no devices are touched. If errors occur, errors will be generated and ldomctl exits; if all is valid, this prints "configuration OK" just like vmd(8) does. I have plans for additional ldom.conf(5) options and -n greatly aids development, but I also prefer to (double) check configs before loading them as root in general. Feedback? OK? ? default.diff ? disk.diff ? download.diff ? msg ? n.diff ? owner.diff ? parse.y.new Index: config.c =================================================================== RCS file: /cvs/src/usr.sbin/ldomctl/config.c,v retrieving revision 1.29 diff -u -p -r1.29 config.c --- config.c 28 Nov 2019 18:40:42 -0000 1.29 +++ config.c 3 Jan 2020 20:45:33 -0000 @@ -2759,7 +2759,7 @@ primary_init(void) } void -build_config(const char *filename) +build_config(const char *filename, int noaction) { struct guest *primary; struct guest *guest; @@ -2781,6 +2781,10 @@ build_config(const char *filename) SIMPLEQ_INIT(&conf.domain_list); if (parse_config(filename, &conf) < 0) exit(1); + if (noaction) { + fprintf(stderr, "configuration OK\n"); + exit(0); + } pri = md_read("pri"); if (pri == NULL) Index: ldomctl.8 =================================================================== RCS file: /cvs/src/usr.sbin/ldomctl/ldomctl.8,v retrieving revision 1.21 diff -u -p -r1.21 ldomctl.8 --- ldomctl.8 30 Dec 2019 20:10:48 -0000 1.21 +++ ldomctl.8 3 Jan 2020 20:45:33 -0000 @@ -63,12 +63,17 @@ The download is aborted if a configurati .It Cm dump Dump the current configuration from non-volatile storage into the current working directory. -.It Cm init-system Ar file +.It Cm init-system Oo Fl n Oc Ar file Generate files in the current working directory for a logical domain configuration .Ar file as described in .Xr ldom.conf 5 . +.Bl -tag -width Fl +.It Fl n +Configtest mode. +Only check the configuration file for validty. +.El .It Cm list List configurations stored in non-volatile storage. Indicate the currently running configuration, Index: ldomctl.c =================================================================== RCS file: /cvs/src/usr.sbin/ldomctl/ldomctl.c,v retrieving revision 1.32 diff -u -p -r1.32 ldomctl.c --- ldomctl.c 3 Jan 2020 19:45:51 -0000 1.32 +++ ldomctl.c 3 Jan 2020 20:45:34 -0000 @@ -129,7 +129,7 @@ usage(void) fprintf(stderr, "usage:\t%1$s delete|select configuration\n" "\t%1$s download directory\n" "\t%1$s dump|list|list-io\n" - "\t%1$s init-system file\n" + "\t%1$s init-system [-n] file\n" "\t%1$s create-vdisk -s size file\n" "\t%1$s console|panic|start|status|stop [domain]\n", getprogname()); exit(EXIT_FAILURE); @@ -241,12 +241,27 @@ dump(int argc, char **argv) void init_system(int argc, char **argv) { - if (argc != 2) + int ch, noaction = 0; + + while ((ch = getopt(argc, argv, "n")) != -1) { + switch (ch) { + case 'n': + noaction = 1; + break; + default: + usage(); + } + } + argc -= optind; + argv += optind; + + if (argc != 1) usage(); - hv_config(); + if (!noaction) + hv_config(); - build_config(argv[1]); + build_config(argv[0], noaction); } void Index: ldomctl.h =================================================================== RCS file: /cvs/src/usr.sbin/ldomctl/ldomctl.h,v retrieving revision 1.11 diff -u -p -r1.11 ldomctl.h --- ldomctl.h 28 Nov 2019 18:03:33 -0000 1.11 +++ ldomctl.h 3 Jan 2020 20:45:34 -0000 @@ -193,5 +193,5 @@ struct ldom_config { }; int parse_config(const char *, struct ldom_config *); -void build_config(const char *); +void build_config(const char *, int); void list_components(void);