]> git.decadent.org.uk Git - nfs-utils.git/commitdiff
nfsd: Add support for the -V and --nfs-version optional arguments
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 25 Mar 2013 20:07:59 +0000 (16:07 -0400)
committerSteve Dickson <steved@redhat.com>
Mon, 25 Mar 2013 20:07:59 +0000 (16:07 -0400)
Add command line options to enable those NFS versions that are
currently disabled by default. We choose to use the options '-V'
and '--nfs-version' for compatibility with rpc.mountd.

Acked-by: J. Bruce Fields <bfields@fieldses.org>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
support/include/nfs/nfs.h
utils/nfsd/nfsd.c
utils/nfsd/nfsd.man

index 320880ea7bc9c9f38d2f8a9dfa44ca744ed19c9d..174c2dde0fc09c7d74219fadf744cf3e046fd1e1 100644 (file)
@@ -52,6 +52,7 @@ struct nfs_fh_old {
 #define NFSCTL_UDPISSET(_cltbits)     ((_cltbits) & NFSCTL_UDPBIT) 
 #define NFSCTL_TCPISSET(_cltbits)     ((_cltbits) & NFSCTL_TCPBIT) 
 
 #define NFSCTL_UDPISSET(_cltbits)     ((_cltbits) & NFSCTL_UDPBIT) 
 #define NFSCTL_TCPISSET(_cltbits)     ((_cltbits) & NFSCTL_TCPBIT) 
 
+#define NFSCTL_VERSET(_cltbits, _v)   ((_cltbits) |= (1 << ((_v) - 1))) 
 #define NFSCTL_UDPSET(_cltbits)       ((_cltbits) |= NFSCTL_UDPBIT)
 #define NFSCTL_TCPSET(_cltbits)       ((_cltbits) |= NFSCTL_TCPBIT)
 
 #define NFSCTL_UDPSET(_cltbits)       ((_cltbits) |= NFSCTL_UDPBIT)
 #define NFSCTL_TCPSET(_cltbits)       ((_cltbits) |= NFSCTL_TCPBIT)
 
index 2a3f5cca4ae736a41075b1ad0d1a597d3a823235..e87c0a95952d17e584476312ef250ba1519d3bca 100644 (file)
@@ -38,6 +38,7 @@ static struct option longopts[] =
        { "host", 1, 0, 'H' },
        { "help", 0, 0, 'h' },
        { "no-nfs-version", 1, 0, 'N' },
        { "host", 1, 0, 'H' },
        { "help", 0, 0, 'h' },
        { "no-nfs-version", 1, 0, 'N' },
+       { "nfs-version", 1, 0, 'V' },
        { "no-tcp", 0, 0, 'T' },
        { "no-udp", 0, 0, 'U' },
        { "port", 1, 0, 'P' },
        { "no-tcp", 0, 0, 'T' },
        { "no-udp", 0, 0, 'U' },
        { "port", 1, 0, 'P' },
@@ -119,7 +120,7 @@ main(int argc, char **argv)
        xlog_syslog(0);
        xlog_stderr(1);
 
        xlog_syslog(0);
        xlog_stderr(1);
 
-       while ((c = getopt_long(argc, argv, "dH:hN:p:P:sTU", longopts, NULL)) != EOF) {
+       while ((c = getopt_long(argc, argv, "dH:hN:V:p:P:sTU", longopts, NULL)) != EOF) {
                switch(c) {
                case 'd':
                        xlog_config(D_ALL, 1);
                switch(c) {
                case 'd':
                        xlog_config(D_ALL, 1);
@@ -175,6 +176,27 @@ main(int argc, char **argv)
                                exit(1);
                        }
                        break;
                                exit(1);
                        }
                        break;
+               case 'V':
+                       switch((c = strtol(optarg, &p, 0))) {
+                       case 4:
+                               if (*p == '.') {
+                                       int i = atoi(p+1);
+                                       if (i != 1) {
+                                               fprintf(stderr, "%s: unsupported minor version\n", optarg);
+                                               exit(1);
+                                       }
+                                       minorvers41 = 1;
+                                       break;
+                               }
+                       case 3:
+                       case 2:
+                               NFSCTL_VERSET(versbits, c);
+                               break;
+                       default:
+                               fprintf(stderr, "%s: Unsupported version\n", optarg);
+                               exit(1);
+                       }
+                       break;
                case 's':
                        xlog_syslog(1);
                        xlog_stderr(0);
                case 's':
                        xlog_syslog(1);
                        xlog_stderr(0);
@@ -312,7 +334,7 @@ static void
 usage(const char *prog)
 {
        fprintf(stderr, "Usage:\n"
 usage(const char *prog)
 {
        fprintf(stderr, "Usage:\n"
-               "%s [-d|--debug] [-H hostname] [-p|-P|--port port] [-N|--no-nfs-version version ] [-s|--syslog] [-T|--no-tcp] [-U|--no-udp] nrservs\n", 
+               "%s [-d|--debug] [-H hostname] [-p|-P|--port port] [-N|--no-nfs-version version] [-V|--nfs-version version] [-s|--syslog] [-T|--no-tcp] [-U|--no-udp] nrservs\n", 
                prog);
        exit(2);
 }
                prog);
        exit(2);
 }
index 1cf92969a6dd86506d96d03a58d9926de53e2fbd..7de0867e39e8d72d747b311345d2f9ac1e042038 100644 (file)
@@ -47,7 +47,7 @@ This option can be used to request that
 .B rpc.nfsd
 does not offer certain versions of NFS. The current version of
 .B rpc.nfsd
 .B rpc.nfsd
 does not offer certain versions of NFS. The current version of
 .B rpc.nfsd
-can support both NFS version 2,3 and the newer version 4.
+can support NFS versions 2,3,4 and the newer version 4.1.
 .TP
 .B \-s " or " \-\-syslog
 By default,
 .TP
 .B \-s " or " \-\-syslog
 By default,
@@ -67,6 +67,13 @@ Disable
 .B rpc.nfsd
 from accepting UDP connections from clients.
 .TP
 .B rpc.nfsd
 from accepting UDP connections from clients.
 .TP
+.B \-V " or " \-\-nfs-version vers
+This option can be used to request that 
+.B rpc.nfsd
+offer certain versions of NFS. The current version of
+.B rpc.nfsd
+can support NFS versions 2,3,4 and the newer version 4.1.
+.TP
 .I nproc
 specify the number of NFS server threads. By default, just one
 thread is started. However, for optimum performance several threads
 .I nproc
 specify the number of NFS server threads. By default, just one
 thread is started. However, for optimum performance several threads