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");