It makes no sense to allow zero interfaces; either a positive count is given or -i is omitted entirely. vm.conf(5) does not allow interface configuration that results in zero interfaces either.
$ doas vmctl start -Li0 -b ~/bsd.rd foo vmctl: starting without disks vmctl: started vm 6 successfully, tty /dev/ttyph Diff below raises the minimum to one and tells more about invalid counts with the usual strtonum(3) idiom: $ doas vmctl start -Li-1 -b ~/bsd.rd foo vmctl: invalid count "-1": too small vmctl: invalid interface count: -1 $ doas ./obj/vmctl start -Li0 -b ~/bsd.rd foo vmctl: count is too small: 0 vmctl: invalid interface count: 0 Those duplicate errors aren't easily merged without breaking consistency with how all the command line flags are passed, so I did nothing about this. OK? Index: main.c =================================================================== RCS file: /cvs/src/usr.sbin/vmctl/main.c,v retrieving revision 1.58 diff -u -p -r1.58 main.c --- main.c 23 Aug 2019 07:55:20 -0000 1.58 +++ main.c 25 Oct 2019 22:48:49 -0000 @@ -373,9 +373,9 @@ parse_ifs(struct parse_result *res, char const char *error; if (word != NULL) { - val = strtonum(word, 0, INT_MAX, &error); + val = strtonum(word, 1, INT_MAX, &error); if (error != NULL) { - warnx("invalid count \"%s\": %s", word, error); + warnx("count is %s: %s", error, word); return (-1); } }