svn commit: r209267 - stable/8/usr.sbin/arp
Max Laier
mlaier at FreeBSD.org
Thu Jun 17 19:46:37 UTC 2010
Author: mlaier
Date: Thu Jun 17 19:46:36 2010
New Revision: 209267
URL: http://svn.freebsd.org/changeset/base/209267
Log:
MFC r209063:
Cache the last result from if_indextoname for printing. This speeds up
"arp -an" when using a lot of aliases (on a single interface).
A better fix would include a better interface for if_indextoname than
getting the whole address list from the kernel just to find the one
index->name mapping.
Modified:
stable/8/usr.sbin/arp/arp.c
Directory Properties:
stable/8/usr.sbin/arp/ (props changed)
Modified: stable/8/usr.sbin/arp/arp.c
==============================================================================
--- stable/8/usr.sbin/arp/arp.c Thu Jun 17 19:28:56 2010 (r209266)
+++ stable/8/usr.sbin/arp/arp.c Thu Jun 17 19:46:36 2010 (r209267)
@@ -555,6 +555,9 @@ search(u_long addr, action_fn *action)
/*
* Display an arp entry
*/
+static char lifname[IF_NAMESIZE];
+static int64_t 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 {
More information about the svn-src-stable
mailing list