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.
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