From owner-freebsd-ports-bugs@FreeBSD.ORG Sat Mar 29 06:50:01 2008 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D9AF31065670 for ; Sat, 29 Mar 2008 06:50:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id B5BFB8FC1B for ; Sat, 29 Mar 2008 06:50:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.2/8.14.2) with ESMTP id m2T6o1od005228 for ; Sat, 29 Mar 2008 06:50:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m2T6o1pF005227; Sat, 29 Mar 2008 06:50:01 GMT (envelope-from gnats) Resent-Date: Sat, 29 Mar 2008 06:50:01 GMT Resent-Message-Id: <200803290650.m2T6o1pF005227@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, User & Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6D8A8106566B for ; Sat, 29 Mar 2008 06:42:33 +0000 (UTC) (envelope-from swp@uni-altai.ru) Received: from mx1-ttk.uni-altai.ru (mx1-ttk.uni-altai.ru [81.1.237.194]) by mx1.freebsd.org (Postfix) with ESMTP id 955F78FC1A for ; Sat, 29 Mar 2008 06:42:32 +0000 (UTC) (envelope-from swp@uni-altai.ru) Received: from main.uni-altai.ru (localhost [127.0.0.1]) by mx1-ttk.uni-altai.ru (8.14.2/8.14.2) with ESMTP id m2T6G4BW097007 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sat, 29 Mar 2008 12:16:05 +0600 (NOVT) (envelope-from swp@main.uni-altai.ru) Received: (from root@localhost) by main.uni-altai.ru (8.14.2/8.14.2/Submit) id m2T6G3Rd097006; Sat, 29 Mar 2008 12:16:03 +0600 (NOVT) (envelope-from swp) Message-Id: <200803290616.m2T6G3Rd097006@main.uni-altai.ru> Date: Sat, 29 Mar 2008 12:16:03 +0600 (NOVT) From: User & To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: Subject: ports/122223: mrouted do not see all network interfaces for me X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: User & List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 29 Mar 2008 06:50:02 -0000 >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 mtu 1500 options=9 ether 00:04:76:92:65:a8 media: Ethernet autoselect (none) status: no carrier xl1: flags=8802 mtu 1500 options=8 ether 00:60:08:46:d3:b0 media: Ethernet autoselect (none) status: no carrier xl2: flags=8802 mtu 1500 options=8 ether 00:60:08:76:52:99 media: Ethernet autoselect (none) status: no carrier rl0: flags=8802 mtu 1500 options=8 ether 00:40:f4:76:90:5c media: Ethernet autoselect status: no carrier em0: flags=8b43 mtu 1500 options=1b ether 00:07:e9:2a:fd:f4 media: Ethernet autoselect (1000baseTX ) status: active lo0: flags=8049 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 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 ) status: active vlan: 5 parent interface: em0 bb0: flags=8b43 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 ) status: active vlan: 10 parent interface: em0 ttk0: flags=8a43 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 ) status: active vlan: 16 parent interface: em0 ksd0: flags=8b43 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 ) status: active vlan: 20 parent interface: em0 asu0: flags=8a43 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 ) status: active vlan: 34 parent interface: em0 frl0: flags=8b43 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 ) status: active vlan: 70 parent interface: em0 leo0: flags=8b43 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 ) status: active vlan: 80 parent interface: em0 itb0: flags=8a43 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 ) status: active vlan: 105 parent interface: em0 br0: flags=8843 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 pflog0: flags=141 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: