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 3409bc9a 2012-06-02 0intro #include <arpa/inet.h>
5 004aa293 2005-07-13 devnull #include <libc.h>
6 004aa293 2005-07-13 devnull #include "mountnfs.h"
7 004aa293 2005-07-13 devnull
8 004aa293 2005-07-13 devnull void
9 004aa293 2005-07-13 devnull usage(void)
10 004aa293 2005-07-13 devnull {
11 004aa293 2005-07-13 devnull fprint(2, "usage: vmount [-v] [-h handle] address mountpoint\n");
12 004aa293 2005-07-13 devnull exits("usage");
13 004aa293 2005-07-13 devnull }
14 004aa293 2005-07-13 devnull
15 004aa293 2005-07-13 devnull int handlelen = 20;
16 004aa293 2005-07-13 devnull uchar handle[64] = {
17 004aa293 2005-07-13 devnull /* SHA1("/") */
18 004aa293 2005-07-13 devnull 0x42, 0x09, 0x9B, 0x4A, 0xF0, 0x21, 0xE5, 0x3F, 0xD8, 0xFD,
19 cbeb0b26 2006-04-01 devnull 0x4E, 0x05, 0x6C, 0x25, 0x68, 0xD7, 0xC2, 0xE3, 0xFF, 0xA8
20 004aa293 2005-07-13 devnull };
21 004aa293 2005-07-13 devnull
22 004aa293 2005-07-13 devnull void
23 004aa293 2005-07-13 devnull main(int argc, char **argv)
24 004aa293 2005-07-13 devnull {
25 004aa293 2005-07-13 devnull char *p, *net, *unx;
26 3409bc9a 2012-06-02 0intro char host[INET_ADDRSTRLEN];
27 004aa293 2005-07-13 devnull int n, port, proto, verbose;
28 004aa293 2005-07-13 devnull struct sockaddr_in sa;
29 004aa293 2005-07-13 devnull
30 004aa293 2005-07-13 devnull verbose = 0;
31 004aa293 2005-07-13 devnull ARGBEGIN{
32 004aa293 2005-07-13 devnull case 'h':
33 004aa293 2005-07-13 devnull p = EARGF(usage());
34 004aa293 2005-07-13 devnull n = strlen(p);
35 004aa293 2005-07-13 devnull if(n%2)
36 004aa293 2005-07-13 devnull sysfatal("bad handle '%s'", p);
37 004aa293 2005-07-13 devnull if(n > 2*sizeof handle)
38 004aa293 2005-07-13 devnull sysfatal("handle too long '%s'", p);
39 004aa293 2005-07-13 devnull handlelen = n/2;
40 004aa293 2005-07-13 devnull if(dec16(handle, n/2, p, n) != n/2)
41 004aa293 2005-07-13 devnull sysfatal("bad hex in handle '%s'", p);
42 004aa293 2005-07-13 devnull break;
43 004aa293 2005-07-13 devnull
44 004aa293 2005-07-13 devnull case 'v':
45 004aa293 2005-07-13 devnull verbose = 1;
46 004aa293 2005-07-13 devnull break;
47 004aa293 2005-07-13 devnull
48 004aa293 2005-07-13 devnull default:
49 004aa293 2005-07-13 devnull usage();
50 004aa293 2005-07-13 devnull }ARGEND
51 004aa293 2005-07-13 devnull
52 004aa293 2005-07-13 devnull if(argc != 2)
53 004aa293 2005-07-13 devnull usage();
54 004aa293 2005-07-13 devnull
55 004aa293 2005-07-13 devnull p = p9netmkaddr(argv[0], "udp", "nfs");
56 3409bc9a 2012-06-02 0intro if(p9dialparse(strdup(p), &net, &unx, &sa, &port) < 0)
57 004aa293 2005-07-13 devnull sysfatal("bad address '%s'", p);
58 004aa293 2005-07-13 devnull
59 3409bc9a 2012-06-02 0intro if(sa.sin_family != AF_INET)
60 3409bc9a 2012-06-02 0intro sysfatal("only IPv4 is supported");
61 3409bc9a 2012-06-02 0intro
62 3409bc9a 2012-06-02 0intro inet_ntop(AF_INET, &(sa.sin_addr), host, INET_ADDRSTRLEN);
63 3409bc9a 2012-06-02 0intro
64 004aa293 2005-07-13 devnull if(verbose)
65 3409bc9a 2012-06-02 0intro print("nfs server is net=%s addr=%s port=%d\n",
66 3409bc9a 2012-06-02 0intro net, host, port);
67 004aa293 2005-07-13 devnull
68 004aa293 2005-07-13 devnull proto = 0;
69 004aa293 2005-07-13 devnull if(strcmp(net, "tcp") == 0)
70 004aa293 2005-07-13 devnull proto = SOCK_STREAM;
71 004aa293 2005-07-13 devnull else if(strcmp(net, "udp") == 0)
72 004aa293 2005-07-13 devnull proto = SOCK_DGRAM;
73 004aa293 2005-07-13 devnull else
74 004aa293 2005-07-13 devnull sysfatal("bad proto %s: can only handle tcp and udp", net);
75 004aa293 2005-07-13 devnull
76 004aa293 2005-07-13 devnull mountnfs(proto, &sa, handle, handlelen, argv[1]);
77 004aa293 2005-07-13 devnull exits(0);
78 004aa293 2005-07-13 devnull }