* [PATCH 0/3] nfsmount.conf: New variables that explicitly set default (Release 3)
@ 2009-10-17 13:36 Steve Dickson
[not found] ` <4AD9C871.3000400-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 6+ messages in thread
From: Steve Dickson @ 2009-10-17 13:36 UTC (permalink / raw)
To: linux-nfs
Here is an update to my previous patch that allow the setting
of both the protocol version and network version from the
mount configuration file. Here is the original justification:
http://marc.info/?l=linux-nfs&m=125511238831199&w=2
In this release two global variables are used to keep
the default values set in the configuration file. These
values are then used to initialize the values used in
the server negotiation.
This patch set can be found on the 'mntconf_v3' branch
on my experimental git tree:
git://linux-nfs.org/nfs-utils-exp
Comments?
steved.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/3] nfsmount.conf: New variables that explicitly set default (Release 3)
[not found] ` <4AD9C871.3000400-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
@ 2009-10-17 13:38 ` Steve Dickson
2009-10-17 13:39 ` [PATCH 2/3] " Steve Dickson
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Steve Dickson @ 2009-10-17 13:38 UTC (permalink / raw)
To: linux-nfs
commit c41c16fca30b30796e66d997c1ad504d128f76b6
Author: Steve Dickson <steved@redhat.com>
Date: Sat Oct 17 09:16:18 2009 -0400
Introducing the parsing of both 'defaultvers' and 'defaultproto'
config variables which will be used to set the the default
version and network protocol.
A global variable will be set for each option with the
corresponding value. The value will be used as the
initial value in the server negation.
Signed-off-by: Steve Dickson <steved@redhat.com>
diff --git a/support/include/conffile.h b/support/include/conffile.h
index 672020a..fe23ec2 100644
--- a/support/include/conffile.h
+++ b/support/include/conffile.h
@@ -75,4 +75,11 @@ static inline void upper2lower(char *str)
while ((c = tolower(*str)))
*str++ = c;
}
+
+/*
+ * Default Mount options
+ */
+extern unsigned long config_default_vers;
+extern unsigned long config_default_proto;
+
#endif /* _CONFFILE_H_ */
diff --git a/utils/mount/configfile.c b/utils/mount/configfile.c
index d3285f8..28b722c 100644
--- a/utils/mount/configfile.c
+++ b/utils/mount/configfile.c
@@ -20,13 +20,19 @@
#include <config.h>
#endif
#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
+#include <errno.h>
#include "xlog.h"
+#include "mount.h"
+#include "parse_opt.h"
+#include "network.h"
#include "conffile.h"
#define KBYTES(x) ((x) * (1024))
@@ -197,6 +203,51 @@ int inline check_vers(char *mopt, char *field)
}
return 0;
}
+
+unsigned long config_default_vers;
+unsigned long config_default_proto;
+/*
+ * Check to see if a default value is being set.
+ * If so, set the appropriate global value which will
+ * be used as the initial value in the server negation.
+ */
+int inline default_value(char *mopt)
+{
+ struct mount_options *options = NULL;
+ int dftlen = strlen("default");
+ char *field;
+
+ if (strncasecmp(mopt, "default", dftlen) != 0)
+ return 0;
+
+ field = mopt + dftlen;
+ if (strncasecmp(field, "proto", strlen("proto")) == 0) {
+ if ((options = po_split(field)) != NULL) {
+ if (!nfs_nfs_protocol(options, &config_default_proto)) {
+ xlog_warn("Unable to set default protocol : %s",
+ strerror(errno));
+ }
+ } else {
+ xlog_warn("Unable to alloc memory for default protocol");
+ }
+ } else if (strncasecmp(field, "vers", strlen("vers")) == 0) {
+ if ((options = po_split(field)) != NULL) {
+ if (!nfs_nfs_version(options, &config_default_vers)) {
+ xlog_warn("Unable to set default version: %s",
+ strerror(errno));
+
+ }
+ } else {
+ xlog_warn("Unable to alloc memory for default version");
+ }
+ } else
+ xlog_warn("Invalid default setting: '%s'", mopt);
+
+ if (options)
+ po_destroy(options);
+
+ return 1;
+}
/*
* Parse the given section of the configuration
* file to if there are any mount options set.
@@ -320,15 +371,19 @@ char *conf_get_mntopts(char *spec, char *mount_point,
free_all();
return mount_opts;
}
+
if (mount_opts) {
strcpy(config_opts, mount_opts);
strcat(config_opts, ",");
}
SLIST_FOREACH(entry, &head, entries) {
+ if (default_value(entry->opt))
+ continue;
strcat(config_opts, entry->opt);
strcat(config_opts, ",");
}
- *(strrchr(config_opts, ',')) = '\0';
+ if ((ptr = strrchr(config_opts, ',')) != NULL)
+ *ptr = '\0';
free_all();
if (mount_opts)
diff --git a/utils/mount/network.c b/utils/mount/network.c
index bd621be..1a05351 100644
--- a/utils/mount/network.c
+++ b/utils/mount/network.c
@@ -1261,7 +1261,7 @@ nfs_nfs_version(struct mount_options *options, unsigned long *version)
* Returns TRUE if @protocol contains a valid value for this option,
* or FALSE if the option was specified with an invalid value.
*/
-static int
+int
nfs_nfs_protocol(struct mount_options *options, unsigned long *protocol)
{
char *option;
diff --git a/utils/mount/network.h b/utils/mount/network.h
index 402e0a5..7eb89b0 100644
--- a/utils/mount/network.h
+++ b/utils/mount/network.h
@@ -57,6 +57,8 @@ int clnt_ping(struct sockaddr_in *, const unsigned long,
struct mount_options;
int nfs_nfs_version(struct mount_options *options, unsigned long *version);
+int nfs_nfs_protocol(struct mount_options *options, unsigned long *protocol);
+
int nfs_options2pmap(struct mount_options *,
struct pmap *, struct pmap *);
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/3] nfsmount.conf: New variables that explicitly set default (Release 3)
[not found] ` <4AD9C871.3000400-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2009-10-17 13:38 ` [PATCH 1/3] " Steve Dickson
@ 2009-10-17 13:39 ` Steve Dickson
2009-10-17 13:40 ` [PATCH 3/3] " Steve Dickson
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Steve Dickson @ 2009-10-17 13:39 UTC (permalink / raw)
To: linux-nfs
commit dbab932b4563744084d7ea22ad593173295e494e
Author: Steve Dickson <steved@redhat.com>
Date: Sat Oct 17 09:26:18 2009 -0400
Use the default protocol and version values, when they
are set in the configuration file, to start the negation
with the server
Signed-off-by: Steve Dickson <steved@redhat.com>
diff --git a/utils/mount/network.c b/utils/mount/network.c
index 1a05351..e651167 100644
--- a/utils/mount/network.c
+++ b/utils/mount/network.c
@@ -50,6 +50,7 @@
#include "nfsrpc.h"
#include "parse_opt.h"
#include "network.h"
+#include "conffile.h"
#define PMAP_TIMEOUT (10)
#define CONNECT_TIMEOUT (20)
@@ -609,10 +610,19 @@ static int nfs_probe_nfsport(const struct sockaddr *sap, const socklen_t salen,
if (pmap->pm_vers && pmap->pm_prot && pmap->pm_port)
return 1;
- if (nfs_mount_data_version >= 4)
+ if (nfs_mount_data_version >= 4) {
+ const unsigned int *probe_proto = probe_tcp_first;
+
+ /*
+ * If the default proto has been set and
+ * its not TCP, start with UDP
+ */
+ if (config_default_proto && config_default_proto != IPPROTO_TCP)
+ probe_proto = probe_udp_first;
+
return nfs_probe_port(sap, salen, pmap,
- probe_nfs3_first, probe_tcp_first);
- else
+ probe_nfs3_first, probe_proto);
+ } else
return nfs_probe_port(sap, salen, pmap,
probe_nfs2_only, probe_udp_only);
}
diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c
index 069bdc1..ceefdb0 100644
--- a/utils/mount/stropts.c
+++ b/utils/mount/stropts.c
@@ -45,6 +45,7 @@
#include "parse_opt.h"
#include "version.h"
#include "parse_dev.h"
+#include "conffile.h"
#ifndef NFS_PROGRAM
#define NFS_PROGRAM (100003)
@@ -283,6 +284,14 @@ static int nfs_validate_options(struct nfsmount_info *mi)
if (option && strcmp(option, "rdma") == 0)
mi->version = 3;
}
+ /*
+ * Use the default value set in the config file when
+ * the version has not been explicitly set.
+ */
+ if (mi->version == 0 && config_default_vers) {
+ if (config_default_vers < 4)
+ mi->version = config_default_vers;
+ }
if (!nfs_append_sloppy_option(mi->options))
return 0;
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] nfsmount.conf: New variables that explicitly set default (Release 3)
[not found] ` <4AD9C871.3000400-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2009-10-17 13:38 ` [PATCH 1/3] " Steve Dickson
2009-10-17 13:39 ` [PATCH 2/3] " Steve Dickson
@ 2009-10-17 13:40 ` Steve Dickson
2009-10-20 13:27 ` [PATCH 0/3] " Chuck Lever
2009-10-22 19:48 ` Steve Dickson
4 siblings, 0 replies; 6+ messages in thread
From: Steve Dickson @ 2009-10-17 13:40 UTC (permalink / raw)
To: linux-nfs
commit 04f6cc992b99d09855736bccf33f1eb96af82244
Author: Steve Dickson <steved@redhat.com>
Date: Mon Oct 12 17:16:56 2009 -0400
Added the defaultproto and defaultvers variable to the mount
configuration file.
Signed-off-by: Steve Dickson <steved@redhat.com>
diff --git a/utils/mount/nfsmount.conf b/utils/mount/nfsmount.conf
index 991838f..0d65056 100644
--- a/utils/mount/nfsmount.conf
+++ b/utils/mount/nfsmount.conf
@@ -28,10 +28,24 @@
# This statically named section defines global mount
# options that can be applied on all NFS mount.
#
-# Protocol Version [2,3]
-# Nfsvers=3
-#
-# Network Transport [udp,tcp,rdma] (Note: values are case sensitive)
+# Protocol Version [2,3,4]
+# This defines the default protocol version which will
+# be used to start the negotiation with the server.
+# Defaultvers=4
+#
+# Setting this option makes it mandatory the server supports the
+# given version. The mount will fail if the given version is
+# not support by the server.
+# Nfsvers=4
+#
+# Network Protocol [udp,tcp,rdma] (Note: values are case sensitive)
+# This defines the default network protocol which will
+# be used to start the negotiation with the server.
+# Defaultproto=tcp
+#
+# Setting this option makes it mandatory the server supports the
+# given network protocol. The mount will fail if the given network
+# protocol is not supported by the server.
# Proto=tcp
#
# The number of times a request will be retired before
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 0/3] nfsmount.conf: New variables that explicitly set default (Release 3)
[not found] ` <4AD9C871.3000400-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
` (2 preceding siblings ...)
2009-10-17 13:40 ` [PATCH 3/3] " Steve Dickson
@ 2009-10-20 13:27 ` Chuck Lever
2009-10-22 19:48 ` Steve Dickson
4 siblings, 0 replies; 6+ messages in thread
From: Chuck Lever @ 2009-10-20 13:27 UTC (permalink / raw)
To: Steve Dickson; +Cc: linux-nfs
On Oct 17, 2009, at 10:36 PM, Steve Dickson wrote:
> Here is an update to my previous patch that allow the setting
> of both the protocol version and network version from the
> mount configuration file. Here is the original justification:
>
> http://marc.info/?l=linux-nfs&m=125511238831199&w=2
>
> In this release two global variables are used to keep
> the default values set in the configuration file. These
> values are then used to initialize the values used in
> the server negotiation.
>
> This patch set can be found on the 'mntconf_v3' branch
> on my experimental git tree:
> git://linux-nfs.org/nfs-utils-exp
>
>
> Comments?
Much simpler, eh? I think this is closer but I would like to study it
a little more. I will post more specific comments tomorrow.
--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 0/3] nfsmount.conf: New variables that explicitly set default (Release 3)
[not found] ` <4AD9C871.3000400-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
` (3 preceding siblings ...)
2009-10-20 13:27 ` [PATCH 0/3] " Chuck Lever
@ 2009-10-22 19:48 ` Steve Dickson
4 siblings, 0 replies; 6+ messages in thread
From: Steve Dickson @ 2009-10-22 19:48 UTC (permalink / raw)
To: linux-nfs
On 10/17/2009 09:36 AM, Steve Dickson wrote:
> Here is an update to my previous patch that allow the setting
> of both the protocol version and network version from the
> mount configuration file. Here is the original justification:
>
> http://marc.info/?l=linux-nfs&m=125511238831199&w=2
>
> In this release two global variables are used to keep
> the default values set in the configuration file. These
> values are then used to initialize the values used in
> the server negotiation.
>
> This patch set can be found on the 'mntconf_v3' branch
> on my experimental git tree:
> git://linux-nfs.org/nfs-utils-exp
>
>
Committed..
steved.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-10-22 19:48 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-17 13:36 [PATCH 0/3] nfsmount.conf: New variables that explicitly set default (Release 3) Steve Dickson
[not found] ` <4AD9C871.3000400-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2009-10-17 13:38 ` [PATCH 1/3] " Steve Dickson
2009-10-17 13:39 ` [PATCH 2/3] " Steve Dickson
2009-10-17 13:40 ` [PATCH 3/3] " Steve Dickson
2009-10-20 13:27 ` [PATCH 0/3] " Chuck Lever
2009-10-22 19:48 ` Steve Dickson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox