#include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(__FreeBSD_version) && __FreeBSD_version >= 500000 # include # ifndef MNT_NODEV # define MNT_NODEV 0 # endif #else # include #endif #ifdef __NetBSD__ # include #endif #include #include "mountnfs.h" #ifndef MNT_NOATIME # define MNT_NOATIME 0 #endif void mountnfs(int proto, struct sockaddr_in *sa, uchar *handle, int nhandle, char *mtpt) { int mflag; struct nfs_args na; memset(&na, 0, sizeof na); na.version = NFS_ARGSVERSION; na.addr = (struct sockaddr*)sa; na.addrlen = sizeof *sa; na.sotype = proto; na.proto = (proto == SOCK_STREAM) ? IPPROTO_TCP : IPPROTO_UDP; na.fh = handle; na.fhsize = nhandle; na.flags = NFSMNT_RESVPORT|NFSMNT_NFSV3|NFSMNT_INT; na.wsize = NFS_WSIZE; na.rsize = NFS_RSIZE; na.readdirsize = NFS_READDIRSIZE; na.timeo = 200; na.retrans = NFS_RETRANS; na.maxgrouplist = NFS_MAXGRPS; na.hostname = "backup"; #if !defined(__NetBSD__) && !defined(__APPLE__) na.acregmin = 60; na.acregmax = 600; na.acdirmin = 60; na.acdirmax = 600; #endif mflag = MNT_RDONLY|MNT_NOSUID|MNT_NOATIME|MNT_NODEV; if(mount("nfs", mtpt, mflag, &na) < 0) sysfatal("mount: %r"); }