2005-07-13 03:49:41 +00:00
|
|
|
#include <u.h>
|
|
|
|
|
#include <sys/socket.h>
|
|
|
|
|
#include <netinet/in.h>
|
2012-06-02 21:50:59 +02:00
|
|
|
#include <arpa/inet.h>
|
2005-07-13 03:49:41 +00:00
|
|
|
#include <libc.h>
|
|
|
|
|
#include "mountnfs.h"
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
usage(void)
|
|
|
|
|
{
|
|
|
|
|
fprint(2, "usage: vmount [-v] [-h handle] address mountpoint\n");
|
|
|
|
|
exits("usage");
|
|
|
|
|
}
|
|
|
|
|
|
2005-07-18 00:03:18 +00:00
|
|
|
int handlelen = 1;
|
2005-07-13 03:49:41 +00:00
|
|
|
uchar handle[64] = {
|
2005-07-18 00:03:18 +00:00
|
|
|
0x00
|
2005-07-13 03:49:41 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
main(int argc, char **argv)
|
|
|
|
|
{
|
|
|
|
|
char *p, *net, *unx;
|
2012-06-02 21:50:59 +02:00
|
|
|
char host[INET_ADDRSTRLEN];
|
2005-07-13 03:49:41 +00:00
|
|
|
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");
|
2012-06-02 21:50:59 +02:00
|
|
|
if(p9dialparse(strdup(p), &net, &unx, &sa, &port) < 0)
|
2005-07-13 03:49:41 +00:00
|
|
|
sysfatal("bad address '%s'", p);
|
|
|
|
|
|
2012-06-02 21:50:59 +02:00
|
|
|
if(sa.sin_family != AF_INET)
|
|
|
|
|
sysfatal("only IPv4 is supported");
|
|
|
|
|
|
|
|
|
|
inet_ntop(AF_INET, &(sa.sin_addr), host, INET_ADDRSTRLEN);
|
|
|
|
|
|
2005-07-13 03:49:41 +00:00
|
|
|
if(verbose)
|
2012-06-02 21:50:59 +02:00
|
|
|
print("nfs server is net=%s addr=%s port=%d\n",
|
|
|
|
|
net, host, port);
|
2005-07-13 03:49:41 +00:00
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|