aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2007-08-06 11:57:12 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2007-10-09 17:15:59 -0400
commit4b6473fba4e832ee1d15737bc38779501c349a61 (patch)
treedf83058dc748253d66e57ffd600a9858d8af5678
parentba10f2c23471b2ef106eb0c71ead4e9862766b8d (diff)
SUNRPC: add a function to format IPv6 addresses
Clone xs_format_ipv4_peer_addresses into an IPv6 version. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Cc: Aurelien Charbon <aurelien.charbon@ext.bull.net> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r--net/sunrpc/xprtsock.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 45fac56b40f9..23e5865d984c 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -312,6 +312,58 @@ static void xs_format_ipv4_peer_addresses(struct rpc_xprt *xprt)
312 xprt->address_strings[RPC_DISPLAY_HEX_PORT] = buf; 312 xprt->address_strings[RPC_DISPLAY_HEX_PORT] = buf;
313} 313}
314 314
315static void xs_format_ipv6_peer_addresses(struct rpc_xprt *xprt)
316{
317 struct sockaddr_in6 *addr = (struct sockaddr_in6 *) &xprt->addr;
318 char *buf;
319
320 buf = kzalloc(40, GFP_KERNEL);
321 if (buf) {
322 snprintf(buf, 40, NIP6_FMT,
323 NIP6(addr->sin6_addr));
324 }
325 xprt->address_strings[RPC_DISPLAY_ADDR] = buf;
326
327 buf = kzalloc(8, GFP_KERNEL);
328 if (buf) {
329 snprintf(buf, 8, "%u",
330 ntohs(addr->sin6_port));
331 }
332 xprt->address_strings[RPC_DISPLAY_PORT] = buf;
333
334 buf = kzalloc(8, GFP_KERNEL);
335 if (buf) {
336 if (xprt->prot == IPPROTO_UDP)
337 snprintf(buf, 8, "udp");
338 else
339 snprintf(buf, 8, "tcp");
340 }
341 xprt->address_strings[RPC_DISPLAY_PROTO] = buf;
342
343 buf = kzalloc(64, GFP_KERNEL);
344 if (buf) {
345 snprintf(buf, 64, "addr="NIP6_FMT" port=%u proto=%s",
346 NIP6(addr->sin6_addr),
347 ntohs(addr->sin6_port),
348 xprt->prot == IPPROTO_UDP ? "udp" : "tcp");
349 }
350 xprt->address_strings[RPC_DISPLAY_ALL] = buf;
351
352 buf = kzalloc(36, GFP_KERNEL);
353 if (buf) {
354 snprintf(buf, 36, NIP6_SEQFMT,
355 NIP6(addr->sin6_addr));
356 }
357 xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = buf;
358
359 buf = kzalloc(8, GFP_KERNEL);
360 if (buf) {
361 snprintf(buf, 8, "%4hx",
362 ntohs(addr->sin6_port));
363 }
364 xprt->address_strings[RPC_DISPLAY_HEX_PORT] = buf;
365}
366
315static void xs_free_peer_addresses(struct rpc_xprt *xprt) 367static void xs_free_peer_addresses(struct rpc_xprt *xprt)
316{ 368{
317 int i; 369 int i;