vlan(4) handles the vnetid and ifparent ioctls, so we dont need the
vlan specific handling. i previously removed the code that requests
info with a vlan specific ioctl, but this removes the vlan settings
code.

there's a couple of semantic changes to note though.

firstly, this aliases the "vlan", "vlandev" and "-vlandev" config
options to setvnetid, setifparent, and delifparent respectively.
this means hostname.vlan and muscle memory will largely keep working.

secondly, if ifconfig didnt think you'd already configured a vlan
tag on an interface, it would set one for you based on the unit
number of the interface. eg, the following:

# ifconfig vlan7 create
# ifconfig vlan7 vlandev em0

... would cause vlan7 to be configured with a vnetid of 7 too.

i have proposed this change before, but some people pushed back,
mostly claiming they didnt want to learn new muscle memory.

id still like to do this though. the main reasons are: muscle memory
hasn't been an excuse not to change things. eg, im still learning
to cope with the removal of the sparc architecture, and i still
type sudo a few times before remembering it's doas now.

secondly, the implicit vlan tag generation is inconsistent, both
with other drivers, and with vlan itself. if you create vlan6000,
this doesnt kick in. if you create vxlan0, vxlan1, vxlan6000, there's
no implicit tag there either.

id rather the config was explicit, rather than conditially implicit.

ok?

Index: ifconfig.c
===================================================================
RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v
retrieving revision 1.342
diff -u -p -r1.342 ifconfig.c
--- ifconfig.c  5 Jun 2017 05:10:23 -0000       1.342
+++ ifconfig.c  5 Jun 2017 05:16:36 -0000
@@ -91,8 +91,6 @@
 
 #include <netdb.h>
 
-#include <net/if_vlan_var.h>
-
 #include <netmpls/mpls.h>
 
 #include <ctype.h>
@@ -216,9 +214,6 @@ void        setmpwencap(const char *, int);
 void   setmpwlabel(const char *, const char *);
 void   setmpwneighbor(const char *, int);
 void   setmpwcontrolword(const char *, int);
-void   setvlantag(const char *, int);
-void   setvlandev(const char *, int);
-void   unsetvlandev(const char *, int);
 void   mpe_status(void);
 void   mpw_status(void);
 void   setrdomain(const char *, int);
@@ -367,9 +362,9 @@ const struct        cmd {
        { "scan",       NEXTARG0,       0,              setifscan },
        { "broadcast",  NEXTARG,        0,              setifbroadaddr },
        { "prefixlen",  NEXTARG,        0,              setifprefixlen},
-       { "vlan",       NEXTARG,        0,              setvlantag },
-       { "vlandev",    NEXTARG,        0,              setvlandev },
-       { "-vlandev",   1,              0,              unsetvlandev },
+       { "vlan",       NEXTARG,        0,              setvnetid },
+       { "vlandev",    NEXTARG,        0,              setifparent },
+       { "-vlandev",   1,              0,              delifparent },
        { "group",      NEXTARG,        0,              setifgroup },
        { "-group",     NEXTARG,        0,              unsetifgroup },
        { "autoconf",   1,              0,              setautoconf },
@@ -3768,83 +3763,6 @@ getencap(void)
        }
 
        printf("\n");
-}
-
-static int __tag = 0;
-static int __have_tag = 0;
-
-/* ARGSUSED */
-void
-setvlantag(const char *val, int d)
-{
-       u_int16_t tag;
-       struct vlanreq vreq;
-       const char *errmsg = NULL;
-
-       __tag = tag = strtonum(val, 0, 4095, &errmsg);
-       if (errmsg)
-               errx(1, "vlan tag %s: %s", val, errmsg);
-       __have_tag = 1;
-
-       bzero((char *)&vreq, sizeof(struct vlanreq));
-       ifr.ifr_data = (caddr_t)&vreq;
-
-       if (ioctl(s, SIOCGETVLAN, (caddr_t)&ifr) == -1)
-               err(1, "SIOCGETVLAN");
-
-       vreq.vlr_tag = tag;
-
-       if (ioctl(s, SIOCSETVLAN, (caddr_t)&ifr) == -1)
-               err(1, "SIOCSETVLAN");
-}
-
-/* ARGSUSED */
-void
-setvlandev(const char *val, int d)
-{
-       struct vlanreq   vreq;
-       int              tag;
-       size_t           skip;
-       const char      *estr;
-
-       bzero((char *)&vreq, sizeof(struct vlanreq));
-       ifr.ifr_data = (caddr_t)&vreq;
-
-       if (ioctl(s, SIOCGETVLAN, (caddr_t)&ifr) == -1)
-               err(1, "SIOCGETVLAN");
-
-       (void) strlcpy(vreq.vlr_parent, val, sizeof(vreq.vlr_parent));
-
-       if (!__have_tag && vreq.vlr_tag == 0) {
-               skip = strcspn(ifr.ifr_name, "0123456789");
-               tag = strtonum(ifr.ifr_name + skip, 0, 4095, &estr);
-               if (estr != NULL)
-                       errx(1, "invalid vlan tag and device specification");
-               vreq.vlr_tag = tag;
-       } else if (__have_tag)
-               vreq.vlr_tag = __tag;
-
-       if (ioctl(s, SIOCSETVLAN, (caddr_t)&ifr) == -1)
-               err(1, "SIOCSETVLAN");
-}
-
-/* ARGSUSED */
-void
-unsetvlandev(const char *val, int d)
-{
-       struct vlanreq vreq;
-
-       bzero((char *)&vreq, sizeof(struct vlanreq));
-       ifr.ifr_data = (caddr_t)&vreq;
-
-       if (ioctl(s, SIOCGETVLAN, (caddr_t)&ifr) == -1)
-               err(1, "SIOCGETVLAN");
-
-       bzero((char *)&vreq.vlr_parent, sizeof(vreq.vlr_parent));
-       vreq.vlr_tag = 0;
-
-       if (ioctl(s, SIOCSETVLAN, (caddr_t)&ifr) == -1)
-               err(1, "SIOCSETVLAN");
 }
 
 void

Reply via email to