Hi

The grammar for lladdr of interfaces is according to the manpage:

  [locked] lladdr [etheraddr]

This implies that `locked lladdr' is OK but looking at parse.y this
does not seem to be the case.  Making it optional would lead to a
`lladdr' all by itself being valid, which I find weird.  So I copied
the way ifconfig does it and now the syntax is:

  [locked] lladdr etheraddr|random

so to have a random locked lladdr one would have to write

  locked lladdr random

Is this a good approach?

Best,

Martin

Index: parse.y
===================================================================
RCS file: /cvs/src/usr.sbin/vmd/parse.y,v
retrieving revision 1.56
diff -u -p -r1.56 parse.y
--- parse.y     23 Sep 2020 19:18:18 -0000      1.56
+++ parse.y     22 May 2021 07:55:18 -0000
@@ -685,14 +685,16 @@ string            : STRING string                 {
 lladdr         : STRING                        {
                        struct ether_addr *ea;
 
-                       if ((ea = ether_aton($1)) == NULL) {
+                       if (strcmp($1, "random") == 0) {
+                               memset($$, 0, ETHER_ADDR_LEN);
+                       } else if ((ea = ether_aton($1)) != NULL) {
+                               memcpy($$, ea, ETHER_ADDR_LEN);
+                       } else {
                                yyerror("invalid address: %s\n", $1);
                                free($1);
                                YYERROR;
                        }
                        free($1);
-
-                       memcpy($$, ea, ETHER_ADDR_LEN);
                }
                ;
 
Index: vm.conf.5
===================================================================
RCS file: /cvs/src/usr.sbin/vmd/vm.conf.5,v
retrieving revision 1.56
diff -u -p -r1.56 vm.conf.5
--- vm.conf.5   1 Mar 2021 14:27:44 -0000       1.56
+++ vm.conf.5   22 May 2021 07:55:18 -0000
@@ -237,10 +237,12 @@ The
 must not be longer than 15 characters or end with a digit,
 as described in
 .Xr ifconfig 8 .
-.It Oo Cm locked Oc Cm lladdr Op Ar etheraddr
+.It Oo Cm locked Oc Cm lladdr Ar etheraddr Ns | Ns Cm random
 Change the link layer address (MAC address) of the interface on the
 VM guest side.
-If not specified, a randomized address will be assigned by
+If
+.Cm random
+is specified, a randomized address will be assigned by
 .Xr vmd 8 .
 If the
 .Cm locked

Reply via email to