Module Name: src Committed By: is Date: Tue Jan 26 21:27:55 UTC 2010
Modified Files: src/lib/libc/net: getnameinfo.c src/sbin/route: show.c Log Message: Add AF_APPLETALK support to getnameinfo(); make "route show" use it. Doesn't print "ranges" yet (should it be done here?); only numeric output. To generate a diff of this commit: cvs rdiff -u -r1.47 -r1.48 src/lib/libc/net/getnameinfo.c cvs rdiff -u -r1.39 -r1.40 src/sbin/route/show.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libc/net/getnameinfo.c diff -u src/lib/libc/net/getnameinfo.c:1.47 src/lib/libc/net/getnameinfo.c:1.48 --- src/lib/libc/net/getnameinfo.c:1.47 Wed Aug 12 20:24:30 2009 +++ src/lib/libc/net/getnameinfo.c Tue Jan 26 21:27:54 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: getnameinfo.c,v 1.47 2009/08/12 20:24:30 seanb Exp $ */ +/* $NetBSD: getnameinfo.c,v 1.48 2010/01/26 21:27:54 is Exp $ */ /* $KAME: getnameinfo.c,v 1.45 2000/09/25 22:43:56 itojun Exp $ */ /* @@ -47,7 +47,7 @@ #include <sys/cdefs.h> #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: getnameinfo.c,v 1.47 2009/08/12 20:24:30 seanb Exp $"); +__RCSID("$NetBSD: getnameinfo.c,v 1.48 2010/01/26 21:27:54 is Exp $"); #endif /* LIBC_SCCS and not lint */ #include "namespace.h" @@ -57,6 +57,7 @@ #include <net/if_dl.h> #include <net/if_ieee1394.h> #include <net/if_types.h> +#include <netatalk/at.h> #include <netinet/in.h> #include <arpa/inet.h> #include <arpa/nameser.h> @@ -102,6 +103,9 @@ static int ip6_sa2str __P((const struct sockaddr_in6 *, char *, size_t, int)); #endif +static int getnameinfo_atalk __P((const struct sockaddr *, socklen_t, char *, + socklen_t, char *, socklen_t, int)); + static int getnameinfo_link __P((const struct sockaddr *, socklen_t, char *, socklen_t, char *, socklen_t, int)); static int hexname __P((const u_int8_t *, size_t, char *, socklen_t)); @@ -120,6 +124,9 @@ { switch (sa->sa_family) { + case AF_APPLETALK: + return getnameinfo_atalk(sa, salen, host, hostlen, + serv, servlen, flags); case AF_INET: case AF_INET6: return getnameinfo_inet(sa, salen, host, hostlen, @@ -132,6 +139,45 @@ } } +/* + * getnameinfo_atalk(): + * Format an AppleTalk address into a printable format. + */ +/* ARGSUSED */ +static int +getnameinfo_atalk(const struct sockaddr *sa, socklen_t salen, + char *host, socklen_t hostlen, char *serv, socklen_t servlen, + int flags) +{ + char numserv[8]; + int n; + + const struct sockaddr_at *sat = + (const struct sockaddr_at *)(const void *)sa; + + if (serv != NULL && servlen > 0) { + snprintf(numserv, sizeof(numserv), "%u", sat->sat_port); + if (strlen(numserv) + 1 > servlen) + return EAI_MEMORY; + strlcpy(serv, numserv, servlen); + } + + if (sat->sat_range.r_netrange.nr_phase) { + n = snprintf(host, hostlen, "%u.%u phase %u", + ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node, + sat->sat_range.r_netrange.nr_phase); + } else { + n = snprintf(host, hostlen, "%u.%u", + ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node); + } + + if (n < 0 || (socklen_t) n >= hostlen) { + if (host != NULL && hostlen > 0) + *host = '\0'; /* XXX ??? */ + return EAI_MEMORY; + } + return 0; +} /* * getnameinfo_inet(): Index: src/sbin/route/show.c diff -u src/sbin/route/show.c:1.39 src/sbin/route/show.c:1.40 --- src/sbin/route/show.c:1.39 Tue Mar 17 00:53:42 2009 +++ src/sbin/route/show.c Tue Jan 26 21:27:54 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: show.c,v 1.39 2009/03/17 00:53:42 lukem Exp $ */ +/* $NetBSD: show.c,v 1.40 2010/01/26 21:27:54 is Exp $ */ /* * Copyright (c) 1983, 1988, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "from: @(#)route.c 8.3 (Berkeley) 3/9/94"; #else -__RCSID("$NetBSD: show.c,v 1.39 2009/03/17 00:53:42 lukem Exp $"); +__RCSID("$NetBSD: show.c,v 1.40 2010/01/26 21:27:54 is Exp $"); #endif #endif /* not lint */ @@ -363,6 +363,13 @@ #endif /* INET6 */ #ifndef SMALL + case AF_APPLETALK: + if (getnameinfo(sa, sa->sa_len, workbuf, sizeof(workbuf), + NULL, 0, NI_NUMERICHOST) != 0) + strlcpy(workbuf, "invalid", sizeof(workbuf)); + cp = workbuf; + break; + #endif /* SMALL */ default: