From owner-freebsd-hackers@FreeBSD.ORG Wed Jun 9 21:21:08 2010 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 9398C106564A for ; Wed, 9 Jun 2010 21:21:08 +0000 (UTC) (envelope-from max@love2party.net) Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.171]) by mx1.freebsd.org (Postfix) with ESMTP id 247528FC13 for ; Wed, 9 Jun 2010 21:21:07 +0000 (UTC) Received: from vampire.homelinux.org (dslb-088-064-181-139.pools.arcor-ip.net [88.64.181.139]) by mrelayeu.kundenserver.de (node=mrbap0) with ESMTP (Nemesis) id 0MVJte-1OmRA42nFe-00YkyT; Wed, 09 Jun 2010 23:21:06 +0200 Received: (qmail 97654 invoked from network); 9 Jun 2010 21:21:06 -0000 Received: from f8x64.laiers.local (192.168.4.188) by laiers.local with SMTP; 9 Jun 2010 21:21:06 -0000 From: Max Laier Organization: FreeBSD To: freebsd-hackers@freebsd.org Date: Wed, 9 Jun 2010 23:21:05 +0200 User-Agent: KMail/1.13.3 (FreeBSD/8.0-RELEASE-p2; KDE/4.4.3; amd64; ; ) References: In-Reply-To: MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_BXAEMBK+l1397lG" Message-Id: <201006092321.05453.max@love2party.net> X-Provags-ID: V01U2FsdGVkX1+CUuBeog1IHg8LArdDJd1tqYDZkR22M65/3ul kc52RViAyefya7DbEpqZYccn65ZHoloM6Ahlh3H5hlYRr8a0VQ +u5h58uw5zeR1mvr204Sw== Cc: Nick Rogers Subject: Re: arp(8) performance w/ many aliases assigned to an interface 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: Wed, 09 Jun 2010 21:21:08 -0000 --Boundary-00=_BXAEMBK+l1397lG Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Hello Nick, On Wednesday 09 June 2010 20:17:43 Nick Rogers wrote: > Is there something that can be done to speedup the call to > if_indextoname(), or would it be worthwhile for me to submit a patch that > adds the ability to skip the interface lookup as an arp(8) option? how about the attached: # time arp -an > /dev/null 0.171u 0.462s 0:00.63 100.0% 21+1538k 0+0io 0pf+0w # time arp.patched -an > /dev/null 0.005u 0.000s 0:00.00 0.0% 0+0k 0+0io 0pf+0w # arp -an | wc -l 1095 I'll commit this soon unless somebody objects. Thanks for your report. Max --Boundary-00=_BXAEMBK+l1397lG Content-Type: text/x-patch; charset="ISO-8859-1"; name="arp_cache_ifname.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="arp_cache_ifname.diff" diff --git a/usr.sbin/arp/arp.c b/usr.sbin/arp/arp.c index a0e228c..cc4d383 100644 --- a/usr.sbin/arp/arp.c +++ b/usr.sbin/arp/arp.c @@ -555,6 +555,9 @@ search(u_long addr, action_fn *action) /* * Display an arp entry */ +static char lifname[IF_NAMESIZE]; +static long lifindex = -1; + static void print_entry(struct sockaddr_dl *sdl, struct sockaddr_inarp *addr, struct rt_msghdr *rtm) @@ -562,7 +565,6 @@ print_entry(struct sockaddr_dl *sdl, const char *host; struct hostent *hp; struct iso88025_sockaddr_dl_data *trld; - char ifname[IF_NAMESIZE]; int seg; if (nflag == 0) @@ -591,8 +593,12 @@ print_entry(struct sockaddr_dl *sdl, } } else printf("(incomplete)"); - if (if_indextoname(sdl->sdl_index, ifname) != NULL) - printf(" on %s", ifname); + if (sdl->sdl_index != lifindex && + if_indextoname(sdl->sdl_index, lifname) != NULL) { + lifindex = sdl->sdl_index; + printf(" on %s", lifname); + } else if (sdl->sdl_index == lifindex) + printf(" on %s", lifname); if (rtm->rtm_rmx.rmx_expire == 0) printf(" permanent"); else { --Boundary-00=_BXAEMBK+l1397lG--