Dump-like file system backup for Unix, built on Venti.
This commit is contained in:
parent
0c98da8bf8
commit
004aa293f3
27 changed files with 4437 additions and 0 deletions
77
src/cmd/vbackup/vmount.c
Normal file
77
src/cmd/vbackup/vmount.c
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
#include <u.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <libc.h>
|
||||
#include "mountnfs.h"
|
||||
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fprint(2, "usage: vmount [-v] [-h handle] address mountpoint\n");
|
||||
exits("usage");
|
||||
}
|
||||
|
||||
int handlelen = 20;
|
||||
uchar handle[64] = {
|
||||
/* SHA1("/") */
|
||||
0x42, 0x09, 0x9B, 0x4A, 0xF0, 0x21, 0xE5, 0x3F, 0xD8, 0xFD,
|
||||
0x4E, 0x05, 0x6C, 0x25, 0x68, 0xD7, 0xC2, 0xE3, 0xFF, 0xA8,
|
||||
};
|
||||
|
||||
void
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
char *p, *net, *unx;
|
||||
u32int host;
|
||||
int n, port, proto, verbose;
|
||||
struct sockaddr_in sa;
|
||||
|
||||
verbose = 0;
|
||||
ARGBEGIN{
|
||||
case 'h':
|
||||
p = EARGF(usage());
|
||||
n = strlen(p);
|
||||
if(n%2)
|
||||
sysfatal("bad handle '%s'", p);
|
||||
if(n > 2*sizeof handle)
|
||||
sysfatal("handle too long '%s'", p);
|
||||
handlelen = n/2;
|
||||
if(dec16(handle, n/2, p, n) != n/2)
|
||||
sysfatal("bad hex in handle '%s'", p);
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
usage();
|
||||
}ARGEND
|
||||
|
||||
if(argc != 2)
|
||||
usage();
|
||||
|
||||
p = p9netmkaddr(argv[0], "udp", "nfs");
|
||||
if(p9dialparse(strdup(p), &net, &unx, &host, &port) < 0)
|
||||
sysfatal("bad address '%s'", p);
|
||||
|
||||
if(verbose)
|
||||
print("nfs server is net=%s addr=%d.%d.%d.%d port=%d\n",
|
||||
net, host&0xFF, (host>>8)&0xFF, (host>>16)&0xFF, host>>24, port);
|
||||
|
||||
proto = 0;
|
||||
if(strcmp(net, "tcp") == 0)
|
||||
proto = SOCK_STREAM;
|
||||
else if(strcmp(net, "udp") == 0)
|
||||
proto = SOCK_DGRAM;
|
||||
else
|
||||
sysfatal("bad proto %s: can only handle tcp and udp", net);
|
||||
|
||||
memset(&sa, 0, sizeof sa);
|
||||
memmove(&sa.sin_addr, &host, 4);
|
||||
sa.sin_family = AF_INET;
|
||||
sa.sin_port = htons(port);
|
||||
|
||||
mountnfs(proto, &sa, handle, handlelen, argv[1]);
|
||||
exits(0);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue