diff options
author | Steve Dickson <SteveD@redhat.com> | 2006-06-26 15:23:19 +1000 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2006-06-26 15:23:19 +1000 |
commit | fde2ae7794047a698feeaf17963d690a1e660a80 (patch) | |
tree | 3fec36ef5414306769e9c0c9e0e7833636e30b87 /support/nfs | |
parent | 0523fd513c6baa8dbf45d1a7afea2044262aeb3d (diff) | |
download | nfs-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.c | 33 |
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); |