summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--utils/mount/network.c6
-rw-r--r--utils/mount/stropts.c25
2 files changed, 29 insertions, 2 deletions
diff --git a/utils/mount/network.c b/utils/mount/network.c
index 7d3d09a..75354a7 100644
--- a/utils/mount/network.c
+++ b/utils/mount/network.c
@@ -532,11 +532,10 @@ static int probe_port(clnt_addr_t *server, const unsigned long *versions,
}
if (clnt_ping(saddr, prog, *p_vers, *p_prot, NULL))
goto out_ok;
- if (rpc_createerr.cf_stat == RPC_TIMEDOUT)
- goto out_bad;
}
}
if (rpc_createerr.cf_stat != RPC_PROGNOTREGISTERED &&
+ rpc_createerr.cf_stat != RPC_TIMEDOUT &&
rpc_createerr.cf_stat != RPC_PROGVERSMISMATCH)
goto out_bad;
@@ -545,6 +544,9 @@ static int probe_port(clnt_addr_t *server, const unsigned long *versions,
continue;
p_prot = protos;
}
+ if (rpc_createerr.cf_stat == RPC_TIMEDOUT)
+ goto out_bad;
+
if (vers || !*++p_vers)
break;
}
diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c
index e4a4408..09fca86 100644
--- a/utils/mount/stropts.c
+++ b/utils/mount/stropts.c
@@ -353,6 +353,17 @@ static struct mount_options *nfs_rewrite_mount_options(char *str)
option = po_get(options, "mountvers");
if (option)
mnt_server.pmap.pm_vers = atoi(option);
+ option = po_get(options, "mountproto");
+ if (option) {
+ if (strcmp(option, "tcp") == 0) {
+ mnt_server.pmap.pm_prot = IPPROTO_TCP;
+ po_remove_all(options, "mountproto");
+ }
+ if (strcmp(option, "udp") == 0) {
+ mnt_server.pmap.pm_prot = IPPROTO_UDP;
+ po_remove_all(options, "mountproto");
+ }
+ }
option = po_get(options, "port");
if (option) {
@@ -421,6 +432,20 @@ static struct mount_options *nfs_rewrite_mount_options(char *str)
}
+ if (mnt_server.pmap.pm_prot == IPPROTO_TCP)
+ snprintf(new_option, sizeof(new_option) - 1,
+ "mountproto=tcp");
+ else
+ snprintf(new_option, sizeof(new_option) - 1,
+ "mountproto=udp");
+ if (po_append(options, new_option) == PO_FAILED)
+ goto err;
+
+ snprintf(new_option, sizeof(new_option) - 1,
+ "mountport=%lu", mnt_server.pmap.pm_port);
+ if (po_append(options, new_option) == PO_FAILED)
+ goto err;
+
errno = 0;
return options;