Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 03 Dec 2023 02:29:20 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 275491] ifconfig(8) only shows 101 members of a bridge
Message-ID:  <bug-275491-227@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D275491

            Bug ID: 275491
           Summary: ifconfig(8) only shows 101 members of a bridge
           Product: Base System
           Version: 14.0-RELEASE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: bin
          Assignee: bugs@FreeBSD.org
          Reporter: DtxdF@disroot.org

Created attachment 246735
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=3D246735&action=
=3Dedit
libifconfig_bridge.diff

Description:

I have written a script to create a bridge and a thousand of tap(4) interfa=
ces,
each added as a member of that bridge. When ifconfig(8) is run with the bri=
dge
name as the first argument, the output shows only 101 members. The members =
are
added correctly even though they are not shown in the output of ifconfig(8),
since I tried to add a member that is not shown in the output and ifconfig(=
8)
returns `File exists`.

Steps to reproduce this issue:

```
# cat bridge.sh
#!/bin/sh

total=3D1000
bridge=3D$(ifconfig bridge create)

echo "${bridge}"

for n in `jot ${total}`; do
        ifconfig "${bridge}" addm $(ifconfig tap create)
done
# ./bridge.sh
bridge2
# ifconfig bridge2
bridge2: flags=3D8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 58:9c:fc:00:34:14
        id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
        maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
        root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0
        member: tap1000 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 250 priority 128 path cost 2000000
        member: tap999 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 249 priority 128 path cost 2000000
        member: tap998 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 248 priority 128 path cost 2000000
        member: tap997 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 247 priority 128 path cost 2000000
        member: tap996 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 246 priority 128 path cost 2000000
        member: tap995 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 245 priority 128 path cost 2000000
        member: tap994 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 244 priority 128 path cost 2000000
        member: tap993 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 243 priority 128 path cost 2000000
        member: tap992 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 242 priority 128 path cost 2000000
        member: tap991 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 241 priority 128 path cost 2000000
        member: tap990 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 240 priority 128 path cost 2000000
        member: tap989 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 239 priority 128 path cost 2000000
        member: tap988 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 238 priority 128 path cost 2000000
        member: tap987 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 237 priority 128 path cost 2000000
        member: tap986 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 236 priority 128 path cost 2000000
        member: tap985 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 235 priority 128 path cost 2000000
        member: tap984 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 234 priority 128 path cost 2000000
        member: tap983 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 233 priority 128 path cost 2000000
        member: tap982 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 232 priority 128 path cost 2000000
        member: tap981 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 231 priority 128 path cost 2000000
        member: tap980 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 230 priority 128 path cost 2000000
        member: tap979 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 229 priority 128 path cost 2000000
        member: tap978 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 228 priority 128 path cost 2000000
        member: tap977 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 227 priority 128 path cost 2000000
        member: tap976 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 226 priority 128 path cost 2000000
        member: tap975 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 225 priority 128 path cost 2000000
        member: tap974 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 224 priority 128 path cost 2000000
        member: tap973 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 223 priority 128 path cost 2000000
        member: tap972 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 222 priority 128 path cost 2000000
        member: tap971 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 221 priority 128 path cost 2000000
        member: tap970 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 220 priority 128 path cost 2000000
        member: tap969 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 219 priority 128 path cost 2000000
        member: tap968 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 218 priority 128 path cost 2000000
        member: tap967 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 217 priority 128 path cost 2000000
        member: tap966 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 216 priority 128 path cost 2000000
        member: tap965 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 215 priority 128 path cost 2000000
        member: tap964 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 214 priority 128 path cost 2000000
        member: tap963 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 213 priority 128 path cost 2000000
        member: tap962 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 212 priority 128 path cost 2000000
        member: tap961 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 211 priority 128 path cost 2000000
        member: tap960 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 210 priority 128 path cost 2000000
        member: tap959 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 209 priority 128 path cost 2000000
        member: tap958 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 208 priority 128 path cost 2000000
        member: tap957 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 207 priority 128 path cost 2000000
        member: tap956 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 206 priority 128 path cost 2000000
        member: tap955 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 205 priority 128 path cost 2000000
        member: tap954 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 204 priority 128 path cost 2000000
        member: tap953 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 203 priority 128 path cost 2000000
        member: tap952 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 202 priority 128 path cost 2000000
        member: tap951 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 201 priority 128 path cost 2000000
        member: tap950 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 200 priority 128 path cost 2000000
        member: tap949 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 199 priority 128 path cost 2000000
        member: tap948 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 198 priority 128 path cost 2000000
        member: tap947 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 197 priority 128 path cost 2000000
        member: tap946 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 196 priority 128 path cost 2000000
        member: tap945 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 195 priority 128 path cost 2000000
        member: tap944 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 194 priority 128 path cost 2000000
        member: tap943 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 193 priority 128 path cost 2000000
        member: tap942 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 192 priority 128 path cost 2000000
        member: tap941 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 191 priority 128 path cost 2000000
        member: tap940 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 190 priority 128 path cost 2000000
        member: tap939 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 189 priority 128 path cost 2000000
        member: tap938 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 188 priority 128 path cost 2000000
        member: tap937 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 187 priority 128 path cost 2000000
        member: tap936 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 186 priority 128 path cost 2000000
        member: tap935 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 185 priority 128 path cost 2000000
        member: tap934 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 184 priority 128 path cost 2000000
        member: tap933 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 183 priority 128 path cost 2000000
        member: tap932 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 182 priority 128 path cost 2000000
        member: tap931 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 181 priority 128 path cost 2000000
        member: tap930 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 180 priority 128 path cost 2000000
        member: tap929 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 179 priority 128 path cost 2000000
        member: tap928 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 178 priority 128 path cost 2000000
        member: tap927 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 177 priority 128 path cost 2000000
        member: tap926 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 176 priority 128 path cost 2000000
        member: tap925 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 175 priority 128 path cost 2000000
        member: tap924 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 174 priority 128 path cost 2000000
        member: tap923 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 173 priority 128 path cost 2000000
        member: tap922 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 172 priority 128 path cost 2000000
        member: tap921 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 171 priority 128 path cost 2000000
        member: tap920 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 170 priority 128 path cost 2000000
        member: tap919 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 169 priority 128 path cost 2000000
        member: tap918 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 168 priority 128 path cost 2000000
        member: tap917 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 167 priority 128 path cost 2000000
        member: tap916 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 166 priority 128 path cost 2000000
        member: tap915 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 165 priority 128 path cost 2000000
        member: tap914 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 164 priority 128 path cost 2000000
        member: tap913 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 163 priority 128 path cost 2000000
        member: tap912 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 162 priority 128 path cost 2000000
        member: tap911 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 161 priority 128 path cost 2000000
        member: tap910 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 160 priority 128 path cost 2000000
        member: tap909 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 159 priority 128 path cost 2000000
        member: tap908 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 158 priority 128 path cost 2000000
        member: tap907 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 157 priority 128 path cost 2000000
        member: tap906 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 156 priority 128 path cost 2000000
        member: tap905 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 155 priority 128 path cost 2000000
        member: tap904 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 154 priority 128 path cost 2000000
        member: tap903 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 153 priority 128 path cost 2000000
        member: tap902 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 152 priority 128 path cost 2000000
        member: tap901 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 151 priority 128 path cost 2000000
        member: tap900 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 150 priority 128 path cost 2000000
        member: tap899 flags=3D143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 149 priority 128 path cost 2000000
        groups: bridge
        nd6 options=3D9<PERFORMNUD,IFDISABLED>
```

Tested on:

* 13.2-RELEASE-p6
* 14.0-RELEASE

Notes:

* This problem first occurred when I created three hundred of jails using
AppJail, which no problems except when trying to stop a jail that uses a
Virtualnet (if_bridge(4) + tap(4)). Since it uses the output of ifconfig(8)=
 to
get the members of a bridge and members are missing, AppJail fails to stop a
jail.
* Please correct me if I am wrong: In reading the relevant source files to
understand how to fix this problem, I determined that when the `BRDGGIFS`
request is passed to the ioctl(2) system call, it buffers a new ifbreq
structure, so that if the returned length stored in ifbac_len plus the size=
 of
ifbreq (meaning a new structure is added) is less than or equal to the
accumulated length, we can finish our work.

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-275491-227>