summaryrefslogtreecommitdiffstats
path: root/support/nfs
diff options
context:
space:
mode:
authorSteve Dickson <SteveD@redhat.com>2006-06-26 15:23:19 +1000
committerNeil Brown <neilb@suse.de>2006-06-26 15:23:19 +1000
commitfde2ae7794047a698feeaf17963d690a1e660a80 (patch)
tree3fec36ef5414306769e9c0c9e0e7833636e30b87 /support/nfs
parent0523fd513c6baa8dbf45d1a7afea2044262aeb3d (diff)
downloadnfs-utils-fde2ae7794047a698feeaf17963d690a1e660a80.tar.gz
nfs-utils-fde2ae7794047a698feeaf17963d690a1e660a80.tar.xz
nfs-utils-fde2ae7794047a698feeaf17963d690a1e660a80.zip
Add support for suppressing different NFS versions.
e.g. -N 2 means that NFSv2 won't be supported, just v3 and v4 (if the kernel supports them).
Diffstat (limited to 'support/nfs')
-rw-r--r--support/nfs/nfssvc.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/support/nfs/nfssvc.c b/support/nfs/nfssvc.c
index 38240a0..c51ace1 100644
--- a/support/nfs/nfssvc.c
+++ b/support/nfs/nfssvc.c
@@ -12,15 +12,46 @@
#include <unistd.h>
#include <fcntl.h>
+#include <errno.h>
+#include <syslog.h>
#include "nfslib.h"
+static void
+nfssvc_versbits(unsigned int ctlbits)
+{
+ int fd, n, off;
+ char buf[BUFSIZ], *ptr;
+
+ ptr = buf;
+ off = 0;
+ fd = open("/proc/fs/nfsd/versions", O_WRONLY);
+ if (fd < 0)
+ return;
+
+ for (n = NFSD_MINVERS; n <= NFSD_MAXVERS; n++) {
+ if (NFSCTL_VERISSET(ctlbits, n))
+ off += snprintf(ptr+off, BUFSIZ - off, "+%d ", n);
+ else
+ off += snprintf(ptr+off, BUFSIZ - off, "-%d ", n);
+ }
+ snprintf(ptr+off, BUFSIZ - off, "\n");
+ if (write(fd, buf, strlen(buf)) != strlen(buf)) {
+ syslog(LOG_ERR, "nfssvc: Setting version failed: errno %d (%s)",
+ errno, strerror(errno));
+ }
+ close(fd);
+
+ return;
+}
int
-nfssvc(int port, int nrservs)
+nfssvc(int port, int nrservs, unsigned int versbits)
{
struct nfsctl_arg arg;
int fd;
+ nfssvc_versbits(versbits);
+
fd = open("/proc/fs/nfsd/threads", O_WRONLY);
if (fd < 0)
fd = open("/proc/fs/nfs/threads", O_WRONLY);