On Fri, Jul 28, 2017 at 06:13:50PM +1000, Jonathan Gray wrote:
> The handling of 'add' used by bridge and switch in ifconfig does not
> error out if the ioctl returns EEXIST. Do the same for the switch
> specific 'addlocal' and 'portno' ioctls so netstart won't error out
> when rerun with the same settings in hostname.switchN.
>
makes sense, ok
Reyk
> Index: brconfig.c
> ===================================================================
> RCS file: /cvs/src/sbin/ifconfig/brconfig.c,v
> retrieving revision 1.15
> diff -u -p -r1.15 brconfig.c
> --- brconfig.c 7 Jun 2017 16:47:29 -0000 1.15
> +++ brconfig.c 28 Jul 2017 08:04:00 -0000
> @@ -203,7 +203,7 @@ addlocal(const char *ifsname, int d)
> strlcpy(breq.ifbr_ifsname, ifsname, sizeof(breq.ifbr_ifsname));
> if (ioctl(s, SIOCBRDGADDL, (caddr_t)&breq) < 0) {
> if (errno == EEXIST)
> - errx(1, "%s: local port exists already", name);
> + return;
> else
> err(1, "%s: ioctl SIOCBRDGADDL %s", name, ifsname);
> }
> @@ -1076,8 +1076,12 @@ switch_portno(const char *ifname, const
> errx(1, "invalid arg for portidx: %s", val);
>
> breq.ifbr_portno = newportidx;
> - if (ioctl(s, SIOCSWSPORTNO, (caddr_t)&breq) < 0)
> - err(1, "%s", name);
> + if (ioctl(s, SIOCSWSPORTNO, (caddr_t)&breq) < 0) {
> + if (errno == EEXIST)
> + return;
> + else
> + err(1, "%s", name);
> + }
> }
>
> #endif
>
--