plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

vmount0.c (1547B)


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