aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2009-08-09 15:09:36 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2009-08-09 15:09:36 -0400
commitc877b849d302d1275452af80b7221a2555dc02e1 (patch)
tree7baf4099cbb235e9ee4d420f61208d10ecdc8c4d
parentba809130bc260fce04141aca01ef9e068d32af2a (diff)
SUNRPC: Use rpc_ntop() for constructing transport address strings
Clean up: In addition to using the new generic rpc_ntop() and rpc_get_port() functions, have the RPC client compute the presentation address buffer sizes dynamically using kstrdup(). Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r--net/sunrpc/xprtrdma/transport.c45
-rw-r--r--net/sunrpc/xprtsock.c109
2 files changed, 52 insertions, 102 deletions
diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c
index 537c210a8b92..5f9b8676b6bd 100644
--- a/net/sunrpc/xprtrdma/transport.c
+++ b/net/sunrpc/xprtrdma/transport.c
@@ -168,39 +168,30 @@ static struct rpc_xprt_ops xprt_rdma_procs; /* forward reference */
168static void 168static void
169xprt_rdma_format_addresses(struct rpc_xprt *xprt) 169xprt_rdma_format_addresses(struct rpc_xprt *xprt)
170{ 170{
171 struct sockaddr_in *addr = (struct sockaddr_in *) 171 struct sockaddr *sap = (struct sockaddr *)
172 &rpcx_to_rdmad(xprt).addr; 172 &rpcx_to_rdmad(xprt).addr;
173 char *buf; 173 struct sockaddr_in *sin = (struct sockaddr_in *)sap;
174 char buf[64];
174 175
175 buf = kzalloc(20, GFP_KERNEL); 176 (void)rpc_ntop(sap, buf, sizeof(buf));
176 if (buf) 177 xprt->address_strings[RPC_DISPLAY_ADDR] = kstrdup(buf, GFP_KERNEL);
177 snprintf(buf, 20, "%pI4", &addr->sin_addr.s_addr);
178 xprt->address_strings[RPC_DISPLAY_ADDR] = buf;
179 178
180 buf = kzalloc(8, GFP_KERNEL); 179 (void)snprintf(buf, sizeof(buf), "%u", rpc_get_port(sap));
181 if (buf) 180 xprt->address_strings[RPC_DISPLAY_PORT] = kstrdup(buf, GFP_KERNEL);
182 snprintf(buf, 8, "%u", ntohs(addr->sin_port));
183 xprt->address_strings[RPC_DISPLAY_PORT] = buf;
184 181
185 xprt->address_strings[RPC_DISPLAY_PROTO] = "rdma"; 182 xprt->address_strings[RPC_DISPLAY_PROTO] = "rdma";
186 183
187 buf = kzalloc(48, GFP_KERNEL); 184 (void)snprintf(buf, sizeof(buf), "addr=%s port=%s proto=rdma",
188 if (buf) 185 xprt->address_strings[RPC_DISPLAY_ADDR],
189 snprintf(buf, 48, "addr=%pI4 port=%u proto=%s", 186 xprt->address_strings[RPC_DISPLAY_PORT]);
190 &addr->sin_addr.s_addr, 187 xprt->address_strings[RPC_DISPLAY_ALL] = kstrdup(buf, GFP_KERNEL);
191 ntohs(addr->sin_port), "rdma"); 188
192 xprt->address_strings[RPC_DISPLAY_ALL] = buf; 189 (void)snprintf(buf, sizeof(buf), "%02x%02x%02x%02x",
193 190 NIPQUAD(sin->sin_addr.s_addr));
194 buf = kzalloc(10, GFP_KERNEL); 191 xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = kstrdup(buf, GFP_KERNEL);
195 if (buf) 192
196 snprintf(buf, 10, "%02x%02x%02x%02x", 193 (void)snprintf(buf, sizeof(buf), "%4hx", rpc_get_port(sap));
197 NIPQUAD(addr->sin_addr.s_addr)); 194 xprt->address_strings[RPC_DISPLAY_HEX_PORT] = kstrdup(buf, GFP_KERNEL);
198 xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = buf;
199
200 buf = kzalloc(8, GFP_KERNEL);
201 if (buf)
202 snprintf(buf, 8, "%4hx", ntohs(addr->sin_port));
203 xprt->address_strings[RPC_DISPLAY_HEX_PORT] = buf;
204 195
205 /* netid */ 196 /* netid */
206 xprt->address_strings[RPC_DISPLAY_NETID] = "rdma"; 197 xprt->address_strings[RPC_DISPLAY_NETID] = "rdma";
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index a42c2adda59f..302a40904923 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -296,99 +296,58 @@ static inline struct sockaddr_in6 *xs_addr_in6(struct rpc_xprt *xprt)
296 return (struct sockaddr_in6 *) &xprt->addr; 296 return (struct sockaddr_in6 *) &xprt->addr;
297} 297}
298 298
299static void xs_format_ipv4_peer_addresses(struct rpc_xprt *xprt, 299static void xs_format_common_peer_addresses(struct rpc_xprt *xprt)
300 const char *protocol,
301 const char *netid)
302{ 300{
303 struct sockaddr_in *addr = xs_addr_in(xprt); 301 struct sockaddr *sap = xs_addr(xprt);
304 char *buf; 302 char buf[128];
305
306 buf = kzalloc(20, GFP_KERNEL);
307 if (buf) {
308 snprintf(buf, 20, "%pI4", &addr->sin_addr.s_addr);
309 }
310 xprt->address_strings[RPC_DISPLAY_ADDR] = buf;
311 303
312 buf = kzalloc(8, GFP_KERNEL); 304 (void)rpc_ntop(sap, buf, sizeof(buf));
313 if (buf) { 305 xprt->address_strings[RPC_DISPLAY_ADDR] = kstrdup(buf, GFP_KERNEL);
314 snprintf(buf, 8, "%u",
315 ntohs(addr->sin_port));
316 }
317 xprt->address_strings[RPC_DISPLAY_PORT] = buf;
318 306
319 xprt->address_strings[RPC_DISPLAY_PROTO] = protocol; 307 (void)snprintf(buf, sizeof(buf), "%u", rpc_get_port(sap));
308 xprt->address_strings[RPC_DISPLAY_PORT] = kstrdup(buf, GFP_KERNEL);
320 309
321 buf = kzalloc(48, GFP_KERNEL); 310 (void)snprintf(buf, sizeof(buf), "addr=%s port=%s proto=%s",
322 if (buf) { 311 xprt->address_strings[RPC_DISPLAY_ADDR],
323 snprintf(buf, 48, "addr=%pI4 port=%u proto=%s", 312 xprt->address_strings[RPC_DISPLAY_PORT],
324 &addr->sin_addr.s_addr, 313 xprt->address_strings[RPC_DISPLAY_PROTO]);
325 ntohs(addr->sin_port), 314 xprt->address_strings[RPC_DISPLAY_ALL] = kstrdup(buf, GFP_KERNEL);
326 protocol);
327 }
328 xprt->address_strings[RPC_DISPLAY_ALL] = buf;
329 315
330 buf = kzalloc(10, GFP_KERNEL); 316 (void)snprintf(buf, sizeof(buf), "%4hx", rpc_get_port(sap));
331 if (buf) { 317 xprt->address_strings[RPC_DISPLAY_HEX_PORT] = kstrdup(buf, GFP_KERNEL);
332 snprintf(buf, 10, "%02x%02x%02x%02x", 318}
333 NIPQUAD(addr->sin_addr.s_addr));
334 }
335 xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = buf;
336 319
337 buf = kzalloc(8, GFP_KERNEL); 320static void xs_format_ipv4_peer_addresses(struct rpc_xprt *xprt,
338 if (buf) { 321 const char *protocol,
339 snprintf(buf, 8, "%4hx", 322 const char *netid)
340 ntohs(addr->sin_port)); 323{
341 } 324 struct sockaddr_in *sin = xs_addr_in(xprt);
342 xprt->address_strings[RPC_DISPLAY_HEX_PORT] = buf; 325 char buf[16];
343 326
327 xprt->address_strings[RPC_DISPLAY_PROTO] = protocol;
344 xprt->address_strings[RPC_DISPLAY_NETID] = netid; 328 xprt->address_strings[RPC_DISPLAY_NETID] = netid;
329
330 (void)snprintf(buf, sizeof(buf), "%02x%02x%02x%02x",
331 NIPQUAD(sin->sin_addr.s_addr));
332 xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = kstrdup(buf, GFP_KERNEL);
333
334 xs_format_common_peer_addresses(xprt);
345} 335}
346 336
347static void xs_format_ipv6_peer_addresses(struct rpc_xprt *xprt, 337static void xs_format_ipv6_peer_addresses(struct rpc_xprt *xprt,
348 const char *protocol, 338 const char *protocol,
349 const char *netid) 339 const char *netid)
350{ 340{
351 struct sockaddr_in6 *addr = xs_addr_in6(xprt); 341 struct sockaddr_in6 *sin6 = xs_addr_in6(xprt);
352 char *buf; 342 char buf[48];
353
354 buf = kzalloc(40, GFP_KERNEL);
355 if (buf) {
356 snprintf(buf, 40, "%pI6",&addr->sin6_addr);
357 }
358 xprt->address_strings[RPC_DISPLAY_ADDR] = buf;
359
360 buf = kzalloc(8, GFP_KERNEL);
361 if (buf) {
362 snprintf(buf, 8, "%u",
363 ntohs(addr->sin6_port));
364 }
365 xprt->address_strings[RPC_DISPLAY_PORT] = buf;
366 343
367 xprt->address_strings[RPC_DISPLAY_PROTO] = protocol; 344 xprt->address_strings[RPC_DISPLAY_PROTO] = protocol;
345 xprt->address_strings[RPC_DISPLAY_NETID] = netid;
368 346
369 buf = kzalloc(64, GFP_KERNEL); 347 (void)snprintf(buf, sizeof(buf), "%pi6", &sin6->sin6_addr);
370 if (buf) { 348 xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = kstrdup(buf, GFP_KERNEL);
371 snprintf(buf, 64, "addr=%pI6 port=%u proto=%s",
372 &addr->sin6_addr,
373 ntohs(addr->sin6_port),
374 protocol);
375 }
376 xprt->address_strings[RPC_DISPLAY_ALL] = buf;
377
378 buf = kzalloc(36, GFP_KERNEL);
379 if (buf)
380 snprintf(buf, 36, "%pi6", &addr->sin6_addr);
381
382 xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = buf;
383
384 buf = kzalloc(8, GFP_KERNEL);
385 if (buf) {
386 snprintf(buf, 8, "%4hx",
387 ntohs(addr->sin6_port));
388 }
389 xprt->address_strings[RPC_DISPLAY_HEX_PORT] = buf;
390 349
391 xprt->address_strings[RPC_DISPLAY_NETID] = netid; 350 xs_format_common_peer_addresses(xprt);
392} 351}
393 352
394static void xs_free_peer_addresses(struct rpc_xprt *xprt) 353static void xs_free_peer_addresses(struct rpc_xprt *xprt)