From owner-freebsd-hackers@FreeBSD.ORG Tue Jul 12 11:19:58 2011 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E68C61065749 for ; Tue, 12 Jul 2011 11:19:58 +0000 (UTC) (envelope-from "melifaro@ipfw.ru"@mail.ipfw.ru) Received: from mail.ipfw.ru (unknown [IPv6:2a01:4f8:120:6141::2]) by mx1.freebsd.org (Postfix) with ESMTP id 83A3D8FC2F for ; Tue, 12 Jul 2011 11:19:58 +0000 (UTC) Received: from birdie.ipv6.meganet.ru ([2a02:978::1008] helo=bibi.ipfw.ru) by mail.ipfw.ru with esmtpsa (TLSv1:CAMELLIA256-SHA:256) (Exim 4.76 (FreeBSD)) (envelope-from <"melifaro@ipfw.ru"@mail.ipfw.ru>) id 1Qgb0P-000Ik4-DA; Tue, 12 Jul 2011 15:19:57 +0400 Message-ID: <4E1C2C7B.5050109@ipfw.ru> Date: Tue, 12 Jul 2011 15:14:03 +0400 From: "Alexander V. Chernikov" User-Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; en-US; rv:1.9.2.13) Gecko/20110301 Thunderbird/3.1.7 MIME-Version: 1.0 To: Garrett Cooper References: <4E1BE6D8.60805@ipfw.ru> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Sender: "melifaro@ipfw.ru"@mail.ipfw.ru Cc: freebsd-hackers@freebsd.org Subject: Re: [PATCH] Remove dead code in netstat from route.c X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Jul 2011 11:19:59 -0000 On 12.07.2011 11:10, Garrett Cooper wrote: > On Mon, Jul 11, 2011 at 11:16 PM, Alexander V. Chernikov > wrote: >> Garrett Cooper wrote: >>> Hi, >>> While trying to determine how to print out routes via kvm for >>> net-snmp, I noticed that there's a chunk of code from the 4.4 BSD Lite >>> days that isn't executed in netstat as NewTree is always 0. The >>> following patch removes that dead code and gets the FreeBSD source for >>> netstat more in line with NetBSD and OpenBSD's copy. >>> Thanks! >> >> Hello! >> >> This code is still working (I've tested it several months ago). Using >> RT_DUMP sysctl gives us less information than KVM, but this is much more >> better way of requesting infromation: >> KVM heavily assumes RADIX rtee is used and simply implement walking the >> tree in userland (p_tree()) which is quite hackish. Since some dynamic >> routing software can change massive amounts of data at once (BGP session >> with full-view going up/down) or physical interface with several hundred >> vlans goes up/down - requesting routing data via KVM can lead to fully >> unexpected behaviour. Calling this on regular basis on net-snmp is not >> the best thing one can do. >> >> Additionally, there can be address families where RADIX is unnecessary >> complicated since only direct key match is required (MPLS, for example). >> Moving from RADIX implementation for such family will require a lot of >> 'if (af == AF_MPLS)' code in many base userland utilities since >> assumption that RADIX is used do exists in many places, unfortunately. >> >> Requesting routes via KVM is completely undocumented and kernel >> internals dependent way. From the other side, NET_RT_DUMP sysctl is >> documented in sysctl(3) and is used by all major routing software >> (quagga, bird,openbgp). It also brings us more RADIX-dependent which >> should be avoided. > > That's a compelling argument, but why is NewTree hardwired to 0 > then (apart from the fact that kvm works with non-live kernel images)? I don't know - It was too long ago :) Walking RADIX directly gives an advantage of accessing its internal fields like "refcount" and "use" values which we are get used to see in 'netstat -rn' output, for example. > Thanks, > -Garrett >