Blame


1 004aa293 2005-07-13 devnull #include <u.h>
2 004aa293 2005-07-13 devnull #include <sys/socket.h>
3 004aa293 2005-07-13 devnull #include <netinet/in.h>
4 004aa293 2005-07-13 devnull #include <libc.h>
5 004aa293 2005-07-13 devnull #include "mountnfs.h"
6 004aa293 2005-07-13 devnull
7 004aa293 2005-07-13 devnull void
8 004aa293 2005-07-13 devnull usage(void)
9 004aa293 2005-07-13 devnull {
10 004aa293 2005-07-13 devnull fprint(2, "usage: vmount [-v] [-h handle] address mountpoint\n");
11 004aa293 2005-07-13 devnull exits("usage");
12 004aa293 2005-07-13 devnull }
13 004aa293 2005-07-13 devnull
14 16ea7713 2005-07-18 devnull int handlelen = 1;
15 004aa293 2005-07-13 devnull uchar handle[64] = {
16 16ea7713 2005-07-18 devnull 0x00
17 004aa293 2005-07-13 devnull };
18 004aa293 2005-07-13 devnull
19 004aa293 2005-07-13 devnull void
20 004aa293 2005-07-13 devnull main(int argc, char **argv)
21 004aa293 2005-07-13 devnull {
22 004aa293 2005-07-13 devnull char *p, *net, *unx;
23 004aa293 2005-07-13 devnull u32int host;
24 004aa293 2005-07-13 devnull int n, port, proto, verbose;
25 004aa293 2005-07-13 devnull struct sockaddr_in sa;
26 004aa293 2005-07-13 devnull
27 004aa293 2005-07-13 devnull verbose = 0;
28 004aa293 2005-07-13 devnull ARGBEGIN{
29 004aa293 2005-07-13 devnull case 'h':
30 004aa293 2005-07-13 devnull p = EARGF(usage());
31 004aa293 2005-07-13 devnull n = strlen(p);
32 004aa293 2005-07-13 devnull if(n%2)
33 004aa293 2005-07-13 devnull sysfatal("bad handle '%s'", p);
34 004aa293 2005-07-13 devnull if(n > 2*sizeof handle)
35 004aa293 2005-07-13 devnull sysfatal("handle too long '%s'", p);
36 004aa293 2005-07-13 devnull handlelen = n/2;
37 004aa293 2005-07-13 devnull if(dec16(handle, n/2, p, n) != n/2)
38 004aa293 2005-07-13 devnull sysfatal("bad hex in handle '%s'", p);
39 004aa293 2005-07-13 devnull break;
40 004aa293 2005-07-13 devnull
41 004aa293 2005-07-13 devnull case 'v':
42 004aa293 2005-07-13 devnull verbose = 1;
43 004aa293 2005-07-13 devnull break;
44 004aa293 2005-07-13 devnull
45 004aa293 2005-07-13 devnull default:
46 004aa293 2005-07-13 devnull usage();
47 004aa293 2005-07-13 devnull }ARGEND
48 004aa293 2005-07-13 devnull
49 004aa293 2005-07-13 devnull if(argc != 2)
50 004aa293 2005-07-13 devnull usage();
51 004aa293 2005-07-13 devnull
52 004aa293 2005-07-13 devnull p = p9netmkaddr(argv[0], "udp", "nfs");
53 004aa293 2005-07-13 devnull if(p9dialparse(strdup(p), &net, &unx, &host, &port) < 0)
54 004aa293 2005-07-13 devnull sysfatal("bad address '%s'", p);
55 004aa293 2005-07-13 devnull
56 004aa293 2005-07-13 devnull if(verbose)
57 004aa293 2005-07-13 devnull print("nfs server is net=%s addr=%d.%d.%d.%d port=%d\n",
58 004aa293 2005-07-13 devnull net, host&0xFF, (host>>8)&0xFF, (host>>16)&0xFF, host>>24, port);
59 004aa293 2005-07-13 devnull
60 004aa293 2005-07-13 devnull proto = 0;
61 004aa293 2005-07-13 devnull if(strcmp(net, "tcp") == 0)
62 004aa293 2005-07-13 devnull proto = SOCK_STREAM;
63 004aa293 2005-07-13 devnull else if(strcmp(net, "udp") == 0)
64 004aa293 2005-07-13 devnull proto = SOCK_DGRAM;
65 004aa293 2005-07-13 devnull else
66 004aa293 2005-07-13 devnull sysfatal("bad proto %s: can only handle tcp and udp", net);
67 004aa293 2005-07-13 devnull
68 004aa293 2005-07-13 devnull memset(&sa, 0, sizeof sa);
69 004aa293 2005-07-13 devnull memmove(&sa.sin_addr, &host, 4);
70 004aa293 2005-07-13 devnull sa.sin_family = AF_INET;
71 004aa293 2005-07-13 devnull sa.sin_port = htons(port);
72 004aa293 2005-07-13 devnull
73 004aa293 2005-07-13 devnull mountnfs(proto, &sa, handle, handlelen, argv[1]);
74 004aa293 2005-07-13 devnull exits(0);
75 004aa293 2005-07-13 devnull }