[pnfs] [PATCH 06/12] pnfsd-lexp: sunrpc: __svc_print_netaddr

Benny Halevy bhalevy at panasas.com
Mon Jun 16 14:25:24 EDT 2008


Print a network address in a universal format (see rfc1833 and nfsv4.1)

Signed-off-by: Benny Halevy <bhalevy at panasas.com>
---
 include/linux/sunrpc/svc_xprt.h |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h
index 6fd7b01..f337e2c 100644
--- a/include/linux/sunrpc/svc_xprt.h
+++ b/include/linux/sunrpc/svc_xprt.h
@@ -156,4 +156,41 @@ static inline char *__svc_print_addr(struct sockaddr *addr,
 	}
 	return buf;
 }
+
+/*
+ * Print a network address in a universal format (see rfc1833 and nfsv4.1)
+ */
+static inline int __svc_print_netaddr(struct sockaddr *addr,
+				      struct xdr_netobj *na)
+{
+	u16 port;
+	ssize_t len;
+
+	switch (addr->sa_family) {
+	case AF_INET: {
+		struct sockaddr_in *sin = (struct sockaddr_in *)addr;
+		port = ntohs(sin->sin_port);
+
+		len = snprintf(na->data, na->len, NIPQUAD_FMT ".%u.%u",
+				NIPQUAD(sin->sin_addr),
+				port >> 8, port & 0xff);
+		break;
+	}
+	case AF_INET6: {
+		struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)addr;
+		port = ntohs(sin6->sin6_port);
+
+		len = snprintf(na->data, na->len, NIP6_FMT ".%u.%u",
+				NIP6(sin6->sin6_addr),
+				port >> 8, port & 0xff);
+		break;
+	}
+	default:
+		snprintf(na->data, na->len, "unknown address type: %d",
+			 addr->sa_family);
+		len = -EINVAL;
+		break;
+	}
+	return len;
+}
 #endif /* SUNRPC_SVC_XPRT_H */
-- 
1.5.3.3



More information about the pNFS mailing list