On Tue, Jul 28, 2020 at 07:09:17PM +0200, Klemens Nanni wrote:
> bridge_status() and switch_status() do the regular sanity check with
> SIOCGIFFLAGS, but both functions also call is_switch(), bridge_status()
> also calls is_bridge().
> 
> Those is_*() helpers do the same SIOCGIFFLAGS sanity check, making those
> in *_status() entirely redundant, so I'd like to remove them.
Small correction: is_bridge() does SIOCGIFFLAGS, is_switch() does not.

Below is a new diff that removes the SIOCGIFFLAGS check form is_bridge()
as well, leaving the two is_*() helpers to their driver specific ioctls
alone.

> I'm here since the tpmr(4) ioctl interface transition from trunk to
> bridge semantics is now complete, so ifconfig(8) now requires tpmr bits
> to show its members in bridge fashion.
> 
> One way would be duplicate code into is_tpmr() and tpmr_status() which
> I've already done, but another approach is to unify all bridge like
> interfaces under bridge_status().
With this in, merging switch_status() into bridge_status() is a trivial
diff, adding tpmr awareness to the mix would then be another diff after
that.

> Either ways, diff below cleans up and makes for simpler code.
So this effectively just removes SIOCGIFFLAGS in brconfig.c which are of
no use, imho.  ifconfig.c:getinfo() already checks interfaces flags,
even more than once, for all interfaces.

> Feedback? OK?


Index: brconfig.c
===================================================================
RCS file: /cvs/src/sbin/ifconfig/brconfig.c,v
retrieving revision 1.25
diff -u -p -r1.25 brconfig.c
--- brconfig.c  22 Jan 2020 06:24:07 -0000      1.25
+++ brconfig.c  29 Jul 2020 00:58:40 -0000
@@ -762,14 +762,8 @@ bridge_holdcnt(const char *value, int d)
 int
 is_bridge()
 {
-       struct ifreq ifr;
        struct ifbaconf ifbac;
 
-       strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
-
-       if (ioctl(sock, SIOCGIFFLAGS, (caddr_t)&ifr) == -1)
-               return (0);
-
        ifbac.ifbac_len = 0;
        strlcpy(ifbac.ifbac_name, ifname, sizeof(ifbac.ifbac_name));
        if (ioctl(sock, SIOCBRDGRTS, (caddr_t)&ifbac) == -1) {
@@ -783,16 +777,11 @@ is_bridge()
 void
 bridge_status(void)
 {
-       struct ifreq ifr;
        struct ifbrparam bp1, bp2;
 
        if (!is_bridge() || is_switch())
                return;
 
-       strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
-       if (ioctl(sock, SIOCGIFFLAGS, (caddr_t)&ifr) == -1)
-               return;
-
        bridge_cfg("\t");
 
        bridge_list("\t");
@@ -1184,13 +1173,7 @@ switch_cfg(char *delim)
 void
 switch_status(void)
 {
-       struct ifreq ifr;
-
        if (!is_switch())
-               return;
-
-       strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
-       if (ioctl(sock, SIOCGIFFLAGS, (caddr_t)&ifr) == -1)
                return;
 
        switch_cfg("\t");

Reply via email to