summaryrefslogtreecommitdiffstats
path: root/utils/nfsd/nfssvc.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2014-03-08 10:40:07 -0500
committerSteve Dickson <steved@redhat.com>2014-03-11 12:03:05 -0400
commite54de2940d020e6ac53a5840b6e427bac986ca62 (patch)
tree43065d3e0e07b8827def2d1193235638aaf0dad2 /utils/nfsd/nfssvc.c
parent5be4b2d7786d3eaee9e11c3bc4cdbfa451006947 (diff)
downloadnfs-utils-e54de2940d020e6ac53a5840b6e427bac986ca62.tar.gz
nfs-utils-e54de2940d020e6ac53a5840b6e427bac986ca62.tar.xz
nfs-utils-e54de2940d020e6ac53a5840b6e427bac986ca62.zip
nfsd: add -r and --rdma options to request rdma service
As nfsd establishes UDP and TCP ports, it should establish RDMA too. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'utils/nfsd/nfssvc.c')
-rw-r--r--utils/nfsd/nfssvc.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/utils/nfsd/nfssvc.c b/utils/nfsd/nfssvc.c
index 1a52cca..4f2826b 100644
--- a/utils/nfsd/nfssvc.c
+++ b/utils/nfsd/nfssvc.c
@@ -268,6 +268,40 @@ nfssvc_set_sockets(const int family, const unsigned int protobits,
return nfssvc_setfds(&hints, host, port);
}
+int
+nfssvc_set_rdmaport(const char *port)
+{
+ struct servent *sv = getservbyname(port, "tcp");
+ int nport;
+ char buf[20];
+ int ret;
+ int fd;
+
+ if (sv)
+ nport = sv->s_port;
+ else {
+ char *ep;
+ nport = strtol(port, &ep, 10);
+ if (!*port || *ep) {
+ xlog(L_ERROR, "unable to interpret port name %s",
+ port);
+ return 1;
+ }
+ }
+
+ fd = open(NFSD_PORTS_FILE, O_WRONLY);
+ if (fd < 0)
+ return 1;
+ snprintf(buf, sizeof(buf), "rdma %d", nport);
+ ret = 0;
+ if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) {
+ ret= errno;
+ xlog(L_ERROR, "Unable to request RDMA services: %m");
+ }
+ close(fd);
+ return ret;
+}
+
void
nfssvc_setvers(unsigned int ctlbits, unsigned int minorvers, unsigned int minorversset)
{