summaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2008-12-02 07:43:01 -0500
committerSteve Dickson <steved@redhat.com>2008-12-02 07:43:01 -0500
commitcc58ba0c98b2f687810a5af9e6185bcc5e855fb0 (patch)
tree13186d0dc2ee822575ec1aa77bfbc3b6ff6da764 /utils
parent14b0dae49afae3fcf05c19ae84829aeef2f6876e (diff)
downloadnfs-utils-cc58ba0c98b2f687810a5af9e6185bcc5e855fb0.tar.gz
nfs-utils-cc58ba0c98b2f687810a5af9e6185bcc5e855fb0.tar.xz
nfs-utils-cc58ba0c98b2f687810a5af9e6185bcc5e855fb0.zip
mount command: Replace clnt_ping() and getport() calls in probe_port()
Update the mount command's probe_port() function to call the new shared rpcbind query and RPC ping functions. This provides immediate support for rpcbind v3/v4 queries, and paves the way for supporting AF_INET6 in the probe_bothports() path. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'utils')
-rw-r--r--utils/mount/network.c43
1 files changed, 29 insertions, 14 deletions
diff --git a/utils/mount/network.c b/utils/mount/network.c
index 2231210..8d96e12 100644
--- a/utils/mount/network.c
+++ b/utils/mount/network.c
@@ -521,6 +521,27 @@ static unsigned short getport(struct sockaddr_in *saddr,
return port;
}
+static void nfs_pp_debug(const struct sockaddr *sap, const socklen_t salen,
+ const rpcprog_t program, const rpcvers_t version,
+ const unsigned short protocol,
+ const unsigned short port)
+{
+ char buf[NI_MAXHOST];
+
+ if (!verbose)
+ return;
+
+ if (nfs_present_sockaddr(sap, salen, buf, sizeof(buf)) == 0) {
+ buf[0] = '\0';
+ strcat(buf, "unknown host");
+ }
+
+ fprintf(stderr, _("%s: trying %s prog %ld vers %ld prot %s port %d\n"),
+ progname, buf, program, version,
+ (protocol == IPPROTO_UDP ? _("UDP") : _("TCP")),
+ port);
+}
+
/*
* Use the portmapper to discover whether or not the service we want is
* available. The lists 'versions' and 'protos' define ordered sequences
@@ -529,7 +550,8 @@ static unsigned short getport(struct sockaddr_in *saddr,
static int probe_port(clnt_addr_t *server, const unsigned long *versions,
const unsigned int *protos)
{
- struct sockaddr_in *saddr = &server->saddr;
+ const struct sockaddr *saddr = (struct sockaddr *)&server->saddr;
+ const socklen_t salen = sizeof(server->saddr);
struct pmap *pmap = &server->pmap;
const unsigned long prog = pmap->pm_prog, *p_vers;
const unsigned int prot = (u_int)pmap->pm_prot, *p_prot;
@@ -541,21 +563,14 @@ static int probe_port(clnt_addr_t *server, const unsigned long *versions,
p_vers = vers ? &vers : versions;
rpc_createerr.cf_stat = 0;
for (;;) {
- p_port = getport(saddr, prog, *p_vers, *p_prot);
+ p_port = nfs_getport(saddr, salen, prog, *p_vers, *p_prot);
if (p_port) {
if (!port || port == p_port) {
- saddr->sin_port = htons(p_port);
- if (verbose) {
- printf(_("%s: trying %s prog %ld vers "
- "%ld prot %s port %d\n"),
- progname,
- inet_ntoa(saddr->sin_addr),
- prog, *p_vers,
- *p_prot == IPPROTO_UDP ?
- _("UDP") : _("TCP"),
- p_port);
- }
- if (clnt_ping(saddr, prog, *p_vers, *p_prot, NULL))
+ server->saddr.sin_port = htons(p_port);
+ nfs_pp_debug(saddr, salen, prog, *p_vers,
+ *p_prot, p_port);
+ if (nfs_rpc_ping(saddr, salen, prog,
+ *p_vers, *p_prot, NULL))
goto out_ok;
}
}