> Am 05.06.2017 um 09:26 schrieb David Gwynne <da...@gwynne.id.au>: > > >> On 5 Jun 2017, at 17:05, Reyk Floeter <r...@openbsd.org> wrote: >> >> Well, not just muscle memory but the fact that some people including me had >> hostname.vlanX files without an explicit "vlan X" in it. > > hrm. yes. > > that means if you change the vnetid on such an interface at runtime, and then > re-run netstart later on to try and reset the stack, it wont configure it > back to the state it would be on boot. im not sure we support running > netstart after boot though, so maybe it doesnt matter. >
We do and I run it all the time, for example # sh /etc/netstart vlan5 But I'd usually destroy a cloner before creating it again. >> >> And I did like the implicit tags, despite your vlan6000 problem that nobody >> ever had ;-) > > i had the opposite problem where new vlan interfaces would collide with > existing ones. > Having the same tag on multiple interfaces? Yes, that was a bit clunky with the implicit tags. >> >> But it is time to move on, we have to cope with it. >> >> So no objections anymore, OK reyk > > thank you. > Reyk >> >>> Am 05.06.2017 um 07:28 schrieb David Gwynne <da...@gwynne.id.au>: >>> >>> 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 >>> >> >