[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