#include #include #include #include #include #include "mountnfs.h" void usage(void) { fprint(2, "usage: vmount [-v] [-h handle] address mountpoint\n"); exits("usage"); } int handlelen = 1; uchar handle[64] = { 0x00 }; void main(int argc, char **argv) { char *p, *net, *unx; char host[INET_ADDRSTRLEN]; 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, &sa, &port) < 0) sysfatal("bad address '%s'", p); if(sa.sin_family != AF_INET) sysfatal("only IPv4 is supported"); inet_ntop(AF_INET, &(sa.sin_addr), host, INET_ADDRSTRLEN); if(verbose) print("nfs server is net=%s addr=%s port=%d\n", net, host, 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); mountnfs(proto, &sa, handle, handlelen, argv[1]); exits(0); }