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