Date: Sat, 29 Mar 2008 12:16:03 +0600 (NOVT) From: User & <swp@uni-altai.ru> To: FreeBSD-gnats-submit@FreeBSD.org Subject: ports/122223: mrouted do not see all network interfaces for me Message-ID: <200803290616.m2T6G3Rd097006@main.uni-altai.ru> Resent-Message-ID: <200803290650.m2T6o1pF005227@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 122223 >Category: ports >Synopsis: mrouted do not see all network interfaces for me >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sat Mar 29 06:50:00 UTC 2008 >Closed-Date: >Last-Modified: >Originator: User & >Release: FreeBSD 6.3-STABLE i386 >Organization: Barnaul State Pedagogical University >Environment: System: FreeBSD main.uni-altai.ru 6.3-STABLE FreeBSD 6.3-STABLE #1: Sun Feb 3 18:52:21 NOVT 2008 swp@main.uni-altai.ru:/usr/obj/usr/src/sys/fc_kernel i386 >Description: Mrouted gets list of interfaces by ioctl SIOCGIFCONF. Default buffer is short for my case. Logic for resize buffer anf restart ioctl is wrong for me. >How-To-Repeat: /usr/include > ifconfig xl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 options=9<RXCSUM,VLAN_MTU> ether 00:04:76:92:65:a8 media: Ethernet autoselect (none) status: no carrier xl1: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU> ether 00:60:08:46:d3:b0 media: Ethernet autoselect (none) status: no carrier xl2: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU> ether 00:60:08:76:52:99 media: Ethernet autoselect (none) status: no carrier rl0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500 options=8<VLAN_MTU> ether 00:40:f4:76:90:5c media: Ethernet autoselect status: no carrier em0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500 options=1b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING> ether 00:07:e9:2a:fd:f4 media: Ethernet autoselect (1000baseTX <full-duplex>) status: active lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 inet 10.250.2.11 netmask 0xffffffff inet 82.179.19.65 netmask 0xffffffff inet 82.179.19.68 netmask 0xffffffff inet 82.179.19.67 netmask 0xffffffff inet 83.246.160.193 netmask 0xffffffff inet 10.250.1.20 netmask 0xffffffff inet 10.250.6.1 netmask 0xffffffff inet 81.1.237.193 netmask 0xffffffff inet 10.250.8.1 netmask 0xffffffff inet 10.250.4.1 netmask 0xffffffff inet 10.250.1.1 netmask 0xffffffff inet 83.246.136.145 netmask 0xffffffff inet 83.246.136.159 netmask 0xffffffff inet 10.250.3.1 netmask 0xffffffff inet 10.250.1.101 netmask 0xffffffff inet 10.250.0.1 netmask 0xffffffff inet 10.250.7.20 netmask 0xffffffff inet 10.250.7.21 netmask 0xffffffff inet 10.250.7.22 netmask 0xffffffff inet 10.250.7.23 netmask 0xffffffff inet 10.250.7.24 netmask 0xffffffff inet 10.250.7.25 netmask 0xffffffff inet 10.250.1.10 netmask 0xffffffff inet 81.1.237.194 netmask 0xffffffff inet 83.246.160.196 netmask 0xffffffff inet 10.250.1.100 netmask 0xffffffff inet 10.250.1.11 netmask 0xffffffff inet 10.250.1.65 netmask 0xffffffff sw0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500 inet 10.250.5.1 netmask 0xffffff00 broadcast 10.250.5.255 ether 00:07:e9:2a:fd:f4 media: Ethernet autoselect (1000baseTX <full-duplex>) status: active vlan: 5 parent interface: em0 bb0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500 inet 10.250.10.1 netmask 0xffffff00 broadcast 10.250.10.255 ether 00:07:e9:2a:fd:f4 media: Ethernet autoselect (1000baseTX <full-duplex>) status: active vlan: 10 parent interface: em0 ttk0: flags=8a43<UP,BROADCAST,RUNNING,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500 inet 82.200.46.14 netmask 0xfffffffc broadcast 82.200.46.15 ether 00:07:e9:2a:fd:f4 media: Ethernet autoselect (1000baseTX <full-duplex>) status: active vlan: 16 parent interface: em0 ksd0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500 inet 10.1.3.1 netmask 0xffffff00 broadcast 10.1.3.255 ether 00:07:e9:2a:fd:f4 media: Ethernet autoselect (1000baseTX <full-duplex>) status: active vlan: 20 parent interface: em0 asu0: flags=8a43<UP,BROADCAST,RUNNING,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500 inet 82.179.18.10 netmask 0xfffffffc broadcast 82.179.18.11 ether 00:07:e9:2a:fd:f4 media: Ethernet autoselect (1000baseTX <full-duplex>) status: active vlan: 34 parent interface: em0 frl0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500 inet 10.1.0.1 netmask 0xffffff00 broadcast 10.1.0.255 ether 00:07:e9:2a:fd:f4 media: Ethernet autoselect (1000baseTX <full-duplex>) status: active vlan: 70 parent interface: em0 leo0: flags=8b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500 inet 10.8.0.5 netmask 0xfffffe00 broadcast 10.8.1.255 ether 00:07:e9:2a:fd:f4 media: Ethernet autoselect (1000baseTX <full-duplex>) status: active vlan: 80 parent interface: em0 itb0: flags=8a43<UP,BROADCAST,RUNNING,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500 inet 83.246.140.137 netmask 0xffffffc0 broadcast 83.246.140.191 ether 00:07:e9:2a:fd:f4 media: Ethernet autoselect (1000baseTX <full-duplex>) status: active vlan: 105 parent interface: em0 br0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 96:9c:24:ae:b3:4d id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto stp maxaddr 100 timeout 1200 root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0 member: xl0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP> pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33208 >Fix: Dirty fix: +++ config.c 2008-03-28 09:14:09.000000000 +0600dir 8Delete 9Menu 10Quit @@ -18,6 +18,7 @@ config.c,v 3.8.4.10 1998/01/06 01:57:41 fenner Exp $"; #endif + struct ifconf ifc; /* @@ -33,33 +34,24 @@ int n; u_int32 addr, mask, subnet; short flags; - int num_ifreq = 32; - ifc.ifc_len = num_ifreq * sizeof(struct ifreq); - ifc.ifc_buf = malloc(ifc.ifc_len); - while (ifc.ifc_buf) { - if (ioctl(udp_socket, SIOCGIFCONF, (char *)&ifc) < 0) + do { + char *b; + + b = sbrk(0x10000); + if (!b) + log(LOG_ERR, errno, "sbrk(0x10000"); + + ifc.ifc_len = 0x10000; + ifc.ifc_buf = b; + + if (ioctl(udp_socket, SIOCGIFCONF, &ifc) < 0) log(LOG_ERR, errno, "ioctl SIOCGIFCONF"); - /* - * If the buffer was large enough to hold all the addresses - * then break out, otherwise increase the buffer size and - * try again. - * - * The only way to know that we definitely had enough space - * is to know that there was enough space for at least one - * more struct ifreq. ??? - */ - if ((num_ifreq * sizeof(struct ifreq)) >= - ifc.ifc_len + sizeof(struct ifreq)) - break; - - num_ifreq *= 2; - ifc.ifc_len = num_ifreq * sizeof(struct ifreq); - ifc.ifc_buf = realloc(ifc.ifc_buf, ifc.ifc_len); - } - if (ifc.ifc_buf == NULL) - log(LOG_ERR, 0, "config_vifs_from_kernel: ran out of memory"); + b += ifc.ifc_len; + if (brk(b) < 0) + log(LOG_ERR, errno, "brk()"); + } while (0); ifrp = (struct ifreq *)ifc.ifc_buf; ifend = (struct ifreq *)(ifc.ifc_buf + ifc.ifc_len); >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200803290616.m2T6G3Rd097006>