aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/vbackup/mount-Linux.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-07-13 03:49:41 +0000
committerrsc <devnull@localhost>2005-07-13 03:49:41 +0000
commit004aa293f360ea0f63ec50f5042f8c0fb2831e4f (patch)
treed44b801b47c82861d68d4045acf0bf7129ce6009 /src/cmd/vbackup/mount-Linux.c
parent0c98da8bf8ea51d0288222f6c6ba3c125cf20f46 (diff)
downloadplan9port-004aa293f360ea0f63ec50f5042f8c0fb2831e4f.tar.gz
plan9port-004aa293f360ea0f63ec50f5042f8c0fb2831e4f.tar.bz2
plan9port-004aa293f360ea0f63ec50f5042f8c0fb2831e4f.zip
Dump-like file system backup for Unix, built on Venti.
Diffstat (limited to 'src/cmd/vbackup/mount-Linux.c')
-rw-r--r--src/cmd/vbackup/mount-Linux.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/cmd/vbackup/mount-Linux.c b/src/cmd/vbackup/mount-Linux.c
new file mode 100644
index 00000000..39b96a31
--- /dev/null
+++ b/src/cmd/vbackup/mount-Linux.c
@@ -0,0 +1,58 @@
+#include <u.h>
+#include <sys/socket.h>
+#include <sys/mount.h>
+#ifdef __Linux24__
+# define __KERNEL__
+# include <linux/nfs.h>
+# undef __KERNEL__
+#else
+# include <linux/nfs.h>
+#endif
+#include <linux/nfs2.h>
+#include <linux/nfs_mount.h>
+#include <libc.h>
+#include "mountnfs.h"
+
+void
+mountnfs(int proto, struct sockaddr_in *sa, uchar *handle, int nhandle, char *mtpt)
+{
+ int mflag, fd;
+ struct nfs_mount_data nfs;
+
+ fd = socket(AF_INET, proto, proto==SOCK_STREAM ? IPPROTO_TCP : IPPROTO_UDP);
+ if(fd < 0)
+ sysfatal("socket: %r");
+
+ memset(&nfs, 0, sizeof nfs);
+ nfs.version = NFS_MOUNT_VERSION;
+ nfs.fd = fd;
+ nfs.flags =
+ NFS_MOUNT_SOFT|
+ NFS_MOUNT_INTR|
+ NFS_MOUNT_NOAC|
+ NFS_MOUNT_NOCTO|
+ NFS_MOUNT_VER3|
+ NFS_MOUNT_NONLM;
+ if(proto==SOCK_STREAM)
+ nfs.flags |= NFS_MOUNT_TCP;
+ nfs.rsize = 8192;
+ nfs.wsize = 8192;
+ nfs.timeo = 120;
+ nfs.retrans = 2;
+ nfs.acregmin = 60;
+ nfs.acregmax = 600;
+ nfs.acdirmin = 60;
+ nfs.acdirmax = 600;
+ nfs.addr = *sa;
+ strcpy(nfs.hostname, "backup");
+ nfs.namlen = 1024;
+ nfs.bsize = 8192;
+ memcpy(nfs.root.data, handle, nhandle);
+ nfs.root.size = nhandle;
+ mflag = MS_NOATIME|MS_NODEV|MS_NODIRATIME|
+ MS_NOEXEC|MS_NOSUID|MS_RDONLY;
+
+ if(mount("backup:/", mtpt, "nfs", mflag, &nfs) < 0)
+ sysfatal("mount: %r");
+}
+