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:

Reply via email to