Hi Dave
On Tue, Jun 01, 2021 at 08:23:45PM -0400, Dave Voutila wrote:
>
> Martin Vahlensieck writes:
>
> > 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?
>
> Part of me thinks just specifying:
>
> locked lladdr
>
> should give you a random address but enable the source mac
> filtering. Having to specify "random" seems odd to me. Thoughts?
Your variant matches what should be possible according to the man
page. It is also how I tried it and discovered it didn't work. I
don't have a preference between the two, a diff to make the syntax
in the man page work is attached. Syntax is OK for the following
config:
vm "test" {
memory 1G
interface {lladdr f0:e4:08:ef:5f:0a}
interface {lladdr}
interface {locked lladdr}
interface {locked lladdr f0:e4:08:ef:5f:0a}
}
>
> I see what you're saying with how ifconfig(8) does it, but it's a bit
> different in this context as there's the "locked" modifier, so it's not
> exactly the same.
>
> I'm not sure about the man page changes regardless. Will need another
> set of eyes on the syntax.
Sure.
Thanks for the feedback!
Best,
Martin
>
> >
> > 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
>
Index: parse.y
===================================================================
retrieving revision 1.56
diff -u -p -r1.56 parse.y
--- parse.y 23 Sep 2020 19:18:18 -0000 1.56
+++ parse.y 2 Jun 2021 06:48:12 -0000
@@ -694,6 +694,9 @@ lladdr : STRING {
memcpy($$, ea, ETHER_ADDR_LEN);
}
+ | /* empty */ {
+ memset($$, 0, ETHER_ADDR_LEN);
+ }
;
local : /* empty */ { $$ = 0; }