diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2010-01-14 12:23:15 -0500 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2010-01-15 14:55:51 -0500 |
commit | f0d3a4bedccca7cce48296757bc1c8bd59b80828 (patch) | |
tree | b3c2012dcc177962eed5974e6ddc6f7d46e84a0a /support/nfs/rpc_socket.c | |
parent | 18c3a41364836e61ceeb8e615e2b059904c5b65f (diff) | |
download | nfs-utils-f0d3a4bedccca7cce48296757bc1c8bd59b80828.tar.gz nfs-utils-f0d3a4bedccca7cce48296757bc1c8bd59b80828.tar.xz nfs-utils-f0d3a4bedccca7cce48296757bc1c8bd59b80828.zip |
nfs-utils: Collect socket address helpers into one location
Introduce generic helpers for managing socket addresses. These are
general enough that they are useful for pretty much any component of
nfs-utils.
We also include the definition of nfs_sockaddr here, so it can be
shared. See:
https://bugzilla.redhat.com/show_bug.cgi?id=448743
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Diffstat (limited to 'support/nfs/rpc_socket.c')
-rw-r--r-- | support/nfs/rpc_socket.c | 55 |
1 files changed, 8 insertions, 47 deletions
diff --git a/support/nfs/rpc_socket.c b/support/nfs/rpc_socket.c index 9c20f61..0e20824 100644 --- a/support/nfs/rpc_socket.c +++ b/support/nfs/rpc_socket.c @@ -26,6 +26,8 @@ #include <sys/types.h> #include <sys/time.h> + +#include <stdbool.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> @@ -38,6 +40,7 @@ #include <rpc/rpc.h> #include <rpc/pmap_prot.h> +#include "sockaddr.h" #include "nfsrpc.h" #ifdef HAVE_LIBTIRPC @@ -51,6 +54,7 @@ #define NFSRPC_TIMEOUT_UDP (3) #define NFSRPC_TIMEOUT_TCP (10) + /* * Set up an RPC client for communicating via a AF_LOCAL socket. * @@ -121,10 +125,10 @@ static int nfs_bind(const int sock, const sa_family_t family) switch (family) { case AF_INET: - return bind(sock, (struct sockaddr *)&sin, + return bind(sock, (struct sockaddr *)(char *)&sin, (socklen_t)sizeof(sin)); case AF_INET6: - return bind(sock, (struct sockaddr *)&sin6, + return bind(sock, (struct sockaddr *)(char *)&sin6, (socklen_t)sizeof(sin6)); } @@ -153,9 +157,9 @@ static int nfs_bindresvport(const int sock, const sa_family_t family) switch (family) { case AF_INET: - return bindresvport_sa(sock, (struct sockaddr *)&sin); + return bindresvport_sa(sock, (struct sockaddr *)(char *)&sin); case AF_INET6: - return bindresvport_sa(sock, (struct sockaddr *)&sin6); + return bindresvport_sa(sock, (struct sockaddr *)(char *)&sin6); } errno = EAFNOSUPPORT; @@ -416,49 +420,6 @@ static CLIENT *nfs_get_tcpclient(const struct sockaddr *sap, } /** - * nfs_get_port - extract port value from a socket address - * @sap: pointer to socket address - * - * Returns port value in host byte order. - */ -uint16_t -nfs_get_port(const struct sockaddr *sap) -{ - const struct sockaddr_in *sin = (const struct sockaddr_in *)sap; - const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)sap; - - switch (sap->sa_family) { - case AF_INET: - return ntohs(sin->sin_port); - case AF_INET6: - return ntohs(sin6->sin6_port); - } - return 0; -} - -/** - * nfs_set_port - set port value in a socket address - * @sap: pointer to socket address - * @port: port value to set - * - */ -void -nfs_set_port(struct sockaddr *sap, const uint16_t port) -{ - struct sockaddr_in *sin = (struct sockaddr_in *)sap; - struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sap; - - switch (sap->sa_family) { - case AF_INET: - sin->sin_port = htons(port); - break; - case AF_INET6: - sin6->sin6_port = htons(port); - break; - } -} - -/** * nfs_get_rpcclient - acquire an RPC client * @sap: pointer to socket address of RPC server * @salen: length of socket address |