Lines Matching +full:nfs +full:- +full:kernel +full:- +full:server
1 /*-
2 * SPDX-License-Identifier: BSD-3-Clause
53 #include <nfs/nfssvc.h>
55 #include <fs/nfs/nfsproto.h>
56 #include <fs/nfs/nfskpiport.h>
57 #include <fs/nfs/nfs.h>
75 #define NFSD_STABLERESTART "/var/db/nfs-stablerestart"
76 #define NFSD_STABLEBACKUP "/var/db/nfs-stablerestart.bak"
90 static int stablefd = -1; /* Fd for the stable restart file */
126 * Nfs server daemon mostly just a user context for nfssvc()
128 * 1 - do file descriptor and signal cleanup
129 * 2 - fork the nfsd(s)
130 * 3 - create server socket(s)
131 * 4 - register socket with rpcbind
133 * For connectionless protocols, just pass the socket into the kernel via.
136 * socket from accept, pass the msgsock into the kernel via. nfssvc().
138 * -r - reregister with rpcbind
139 * -d - unregister with rpcbind
140 * -t - support tcp nfs clients
141 * -u - support udp nfs clients
142 * -e - forces it to run a server that supports nfsv4
143 * -p - enable a pNFS service
144 * -m - set the mirroring level for a pNFS service
181 " nfsd [-ardtueN] [-h bindip]\n" in main()
182 " [-n numservers] [--minthreads #] [--maxthreads #]\n" in main()
183 " [-p/--pnfs dsserver0:/dsserver0-mounted-on-dir,...," in main()
184 "dsserverN:/dsserverN-mounted-on-dir] [-m mirrorlevel]\n" in main()
185 " [-P pidfile ] [-V virtual_hostname]\n"; in main()
187 &longindex)) != -1) in main()
207 bindhost[bindhostc-1] = strdup(optarg); in main()
208 if (bindhost[bindhostc-1] == NULL) in main()
224 /* now a no-op, since this is the default */ in main()
227 /* Parse out the DS server host names and mount pts. */ in main()
234 errx(1, "Mirror level out of range 2<-->%d", in main()
259 argc -= optind; in main()
275 * Unless the "-o" option was specified, try and run "nfsd". in main()
276 * If "-o" was specified, try and run "nfsserver". in main()
279 /* Not present in kernel, try loading it */ in main()
281 errx(1, "NFS server is not available"); in main()
286 if (s == -1) { in main()
294 if (s != -1) in main()
302 bindhost[bindhostc-1] = strdup("*"); in main()
303 if (bindhost[bindhostc-1] == NULL) in main()
333 ecode = getaddrinfo(NULL, "nfs", &hints, &ai_udp); in main()
339 nb_udp.buf = ai_udp->ai_addr; in main()
340 nb_udp.len = nb_udp.maxlen = ai_udp->ai_addrlen; in main()
357 ecode = getaddrinfo(NULL, "nfs", &hints, &ai_udp6); in main()
363 nb_udp6.buf = ai_udp6->ai_addr; in main()
364 nb_udp6.len = nb_udp6.maxlen = ai_udp6->ai_addrlen; in main()
381 ecode = getaddrinfo(NULL, "nfs", &hints, &ai_tcp); in main()
387 nb_tcp.buf = ai_tcp->ai_addr; in main()
388 nb_tcp.len = nb_tcp.maxlen = ai_tcp->ai_addrlen; in main()
405 ecode = getaddrinfo(NULL, "nfs", &hints, &ai_tcp6); in main()
411 nb_tcp6.buf = ai_tcp6->ai_addr; in main()
412 nb_tcp6.len = nb_tcp6.maxlen = ai_tcp6->ai_addrlen; in main()
440 * nfsd sits in the kernel most of the time. It needs in main()
460 * regular nfssvc() call to service NFS requests. in main()
466 * local, non-volatile storage device that does not do hardware in main()
467 * level write-back caching. (See SCSI doc for more information in main()
468 * on how to prevent write-back caching on SCSI disks.) in main()
501 * kernel nfsd thread. The kernel will add more in main()
506 if (pid == -1) { in main()
515 setproctitle("server"); in main()
536 if ((sock = socket(ai_udp->ai_family, in main()
537 ai_udp->ai_socktype, in main()
538 ai_udp->ai_protocol)) < 0) { in main()
543 if (bind(sock, ai_udp->ai_addr, in main()
544 ai_udp->ai_addrlen) < 0) { in main()
567 ecode = getaddrinfo(NULL, "nfs", &hints, &ai_udp); in main()
578 nb_udp.buf = ai_udp->ai_addr; in main()
579 nb_udp.len = nb_udp.maxlen = ai_udp->ai_addrlen; in main()
608 if ((sock = socket(ai_udp6->ai_family, in main()
609 ai_udp6->ai_socktype, in main()
610 ai_udp6->ai_protocol)) < 0) { in main()
618 "can't set v6-only binding for " in main()
622 if (bind(sock, ai_udp6->ai_addr, in main()
623 ai_udp6->ai_addrlen) < 0) { in main()
647 ecode = getaddrinfo(NULL, "nfs", &hints, &ai_udp6); in main()
658 nb_udp6.buf = ai_udp6->ai_addr; in main()
659 nb_udp6.len = nb_udp6.maxlen = ai_udp6->ai_addrlen; in main()
701 if (bind(tcpsock, ai_tcp->ai_addr, in main()
702 ai_tcp->ai_addrlen) < 0) { in main()
708 if (listen(tcpsock, -1) < 0) { in main()
724 ecode = getaddrinfo(NULL, "nfs", &hints, in main()
736 nb_tcp.buf = ai_tcp->ai_addr; in main()
737 nb_tcp.len = nb_tcp.maxlen = ai_tcp->ai_addrlen; in main()
766 if ((tcp6sock = socket(ai_tcp6->ai_family, in main()
767 ai_tcp6->ai_socktype, in main()
768 ai_tcp6->ai_protocol)) < 0) { in main()
781 "can't set v6-only binding for tcp6 " in main()
785 if (bind(tcp6sock, ai_tcp6->ai_addr, in main()
786 ai_tcp6->ai_addrlen) < 0) { in main()
792 if (listen(tcp6sock, -1) < 0) { in main()
809 ecode = getaddrinfo(NULL, "nfs", &hints, &ai_tcp6); in main()
820 nb_tcp6.buf = ai_tcp6->ai_addr; in main()
821 nb_tcp6.len = nb_tcp6.maxlen = ai_tcp6->ai_addrlen; in main()
854 * a "server" too. start_server will not return. in main()
861 * into the kernel for the mounts. in main()
938 ecode = getaddrinfo(hostptr, "nfs", &hints, ai); in setbindhost()
974 syslog(LOG_ERR, "missing system call: NFS not available"); in nonfs()
986 children[i] = -1; in reapchild()
1046 warnx("sysctlbyname(hw.ncpu) failed defaulting to %d nfs servers", in get_tuned_nfsdcount()
1068 snprintf(principal, sizeof (principal), "nfs@%s", hostname); in start_server()
1076 if (aip->ai_canonname != NULL && in start_server()
1077 (cp = strchr(aip->ai_canonname, '.')) != in start_server()
1080 "nfs@%s", aip->ai_canonname); in start_server()
1084 nfsdargp->principal = principal; in start_server()
1087 nfsdargp->minthreads = nfsdargp->maxthreads = nfsdcnt; in start_server()
1089 nfsdargp->minthreads = minthreads_set ? minthreads : get_tuned_nfsdcount(); in start_server()
1090 nfsdargp->maxthreads = maxthreads_set ? maxthreads : nfsdargp->minthreads; in start_server()
1091 if (nfsdargp->maxthreads < nfsdargp->minthreads) in start_server()
1092 nfsdargp->maxthreads = nfsdargp->minthreads; in start_server()
1100 * (only the experimental server with nfsv4) in start_server()
1108 syslog(LOG_ERR, "Bad -p option, cannot run"); in start_server()
1127 int stable_fd, backup_fd = -1, ret; in open_stable()
1138 stable_fd = -1; in open_stable()
1152 backup_fd = -1; in open_stable()
1157 stable_fd = -1; in open_stable()
1202 * Back up the stable restart file when indicated by the kernel.
1255 /* Put the NFS port# in "." form. */ in parse_dsserver()
1260 /* Loop around for each DS server name. */ in parse_dsserver()
1325 for (res = ai_tcp; res != NULL; res = res->ai_next) { in parse_dsserver()
1326 if (res->ai_addr->sa_family == AF_INET) { in parse_dsserver()
1327 if (res->ai_addrlen < sizeof(sin)) in parse_dsserver()
1334 memcpy(&sin, res->ai_addr, sizeof(sin)); in parse_dsserver()
1337 } else if (res->ai_family == AF_INET6) { in parse_dsserver()
1338 if (res->ai_addrlen < sizeof(sin6)) in parse_dsserver()
1345 memcpy(&sin6, res->ai_addr, sizeof(sin6)); in parse_dsserver()
1377 hostsiz = strlen(ai_tcp->ai_canonname); in parse_dsserver()
1384 strcpy(&dshost[dshostcnt], ai_tcp->ai_canonname); in parse_dsserver()
1390 nfsdargp->addr = dsaddr; in parse_dsserver()
1391 nfsdargp->addrlen = dsaddrcnt; in parse_dsserver()
1392 nfsdargp->dnshost = dshost; in parse_dsserver()
1393 nfsdargp->dnshostlen = dshostcnt; in parse_dsserver()
1394 nfsdargp->dspath = dspath; in parse_dsserver()
1395 nfsdargp->dspathlen = dspathcnt; in parse_dsserver()
1396 nfsdargp->mdspath = mdspath; in parse_dsserver()
1397 nfsdargp->mdspathlen = mdspathcnt; in parse_dsserver()