diff options
author | dfr <dfr@FreeBSD.org> | 2004-06-13 10:57:10 +0000 |
---|---|---|
committer | dfr <dfr@FreeBSD.org> | 2004-06-13 10:57:10 +0000 |
commit | f670e3d9a849f66fd9524fcc3d86be41cad0bc91 (patch) | |
tree | 86a0404685f09f96c27fc4133d14733ca80f828a /usr.sbin/arp | |
parent | a1fa8042f5e49d1e07a282f98704243b2620baad (diff) | |
download | FreeBSD-src-f670e3d9a849f66fd9524fcc3d86be41cad0bc91.zip FreeBSD-src-f670e3d9a849f66fd9524fcc3d86be41cad0bc91.tar.gz |
Be smarter about printing non-ethernet link-level addresses.
Diffstat (limited to 'usr.sbin/arp')
-rw-r--r-- | usr.sbin/arp/arp.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/usr.sbin/arp/arp.c b/usr.sbin/arp/arp.c index cd35cb0..0a35859 100644 --- a/usr.sbin/arp/arp.c +++ b/usr.sbin/arp/arp.c @@ -526,9 +526,16 @@ print_entry(struct sockaddr_dl *sdl, nflag = 1; } printf("%s (%s) at ", host, inet_ntoa(addr->sin_addr)); - if (sdl->sdl_alen) - printf("%s", ether_ntoa((struct ether_addr *)LLADDR(sdl))); - else + if (sdl->sdl_alen) { + if (sdl->sdl_type == IFT_ETHER && + sdl->sdl_alen == ETHER_ADDR_LEN) + printf("%s", ether_ntoa((struct ether_addr *)LLADDR(sdl))); + else { + int n = sdl->sdl_nlen > 0 ? sdl->sdl_nlen + 1 : 0; + + printf("%s", link_ntoa(sdl) + n); + } + } else printf("(incomplete)"); if (if_indextoname(sdl->sdl_index, ifname) != NULL) printf(" on %s", ifname); @@ -568,6 +575,9 @@ print_entry(struct sockaddr_dl *sdl, case IFT_L2VLAN: printf(" [vlan]"); break; + case IFT_IEEE1394: + printf(" [firewire]"); + break; default: break; } |