stats: use rimport or import to mount remote system
This commit is contained in:
parent
046e0ee259
commit
4410517b44
1 changed files with 23 additions and 153 deletions
|
@ -1,8 +1,6 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <ctype.h>
|
||||
#include <auth.h>
|
||||
#include <fcall.h>
|
||||
#include <draw.h>
|
||||
#include <event.h>
|
||||
#include <keyboard.h>
|
||||
|
@ -215,7 +213,6 @@ int ngraph; /* totaly number is ngraph*nmach */
|
|||
double scale = 1.0;
|
||||
int logscale = 0;
|
||||
int ylabels = 0;
|
||||
int oldsystem = 0;
|
||||
int sleeptime = 1000;
|
||||
|
||||
char *procnames[NPROC] = {"main", "input"};
|
||||
|
@ -465,142 +462,6 @@ readnums(Machine *m, int n, uvlong *a, int spanlines)
|
|||
return i == n;
|
||||
}
|
||||
|
||||
/* Network on fd1, mount driver on fd0 */
|
||||
static int
|
||||
filter(int fd)
|
||||
{
|
||||
int p[2];
|
||||
|
||||
if(pipe(p) < 0){
|
||||
fprint(2, "stats: can't pipe: %r\n");
|
||||
killall("pipe");
|
||||
}
|
||||
|
||||
switch(rfork(RFNOWAIT|RFPROC|RFFDG)) {
|
||||
case -1:
|
||||
sysfatal("rfork record module");
|
||||
case 0:
|
||||
dup(fd, 1);
|
||||
close(fd);
|
||||
dup(p[0], 0);
|
||||
close(p[0]);
|
||||
close(p[1]);
|
||||
execl("/bin/aux/fcall", "fcall", nil);
|
||||
fprint(2, "stats: can't exec fcall: %r\n");
|
||||
killall("fcall");
|
||||
default:
|
||||
close(fd);
|
||||
close(p[0]);
|
||||
}
|
||||
return p[1];
|
||||
}
|
||||
|
||||
/*
|
||||
* 9fs
|
||||
*/
|
||||
int
|
||||
connect9fs(char *addr)
|
||||
{
|
||||
char dir[256], *na;
|
||||
int fd;
|
||||
|
||||
fprint(2, "connect9fs...");
|
||||
na = netmkaddr(addr, 0, "9fs");
|
||||
|
||||
fprint(2, "dial %s...", na);
|
||||
if((fd = dial(na, 0, dir, 0)) < 0)
|
||||
return -1;
|
||||
|
||||
fprint(2, "dir %s...", dir);
|
||||
// if(strstr(dir, "tcp"))
|
||||
// fd = filter(fd);
|
||||
return fd;
|
||||
}
|
||||
|
||||
int
|
||||
old9p(int fd)
|
||||
{
|
||||
int p[2];
|
||||
|
||||
if(pipe(p) < 0)
|
||||
return -1;
|
||||
|
||||
switch(rfork(RFPROC|RFFDG|RFNAMEG)) {
|
||||
case -1:
|
||||
return -1;
|
||||
case 0:
|
||||
if(fd != 1){
|
||||
dup(fd, 1);
|
||||
close(fd);
|
||||
}
|
||||
if(p[0] != 0){
|
||||
dup(p[0], 0);
|
||||
close(p[0]);
|
||||
}
|
||||
close(p[1]);
|
||||
if(0){
|
||||
fd = open("/sys/log/cpu", OWRITE);
|
||||
if(fd != 2){
|
||||
dup(fd, 2);
|
||||
close(fd);
|
||||
}
|
||||
execl("/bin/srvold9p", "srvold9p", "-ds", nil);
|
||||
} else
|
||||
execl("/bin/srvold9p", "srvold9p", "-s", nil);
|
||||
return -1;
|
||||
default:
|
||||
close(fd);
|
||||
close(p[0]);
|
||||
}
|
||||
return p[1];
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* exportfs
|
||||
*/
|
||||
int
|
||||
connectexportfs(char *addr)
|
||||
{
|
||||
char buf[ERRMAX], dir[256], *na;
|
||||
int fd, n;
|
||||
char *tree;
|
||||
AuthInfo *ai;
|
||||
|
||||
tree = "/";
|
||||
na = netmkaddr(addr, 0, "exportfs");
|
||||
if((fd = dial(na, 0, dir, 0)) < 0)
|
||||
return -1;
|
||||
|
||||
ai = auth_proxy(fd, auth_getkey, "proto=p9any role=client");
|
||||
if(ai == nil)
|
||||
return -1;
|
||||
auth_freeAI(ai);
|
||||
|
||||
n = write(fd, tree, strlen(tree));
|
||||
if(n < 0){
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
strcpy(buf, "can't read tree");
|
||||
n = read(fd, buf, sizeof buf - 1);
|
||||
if(n!=2 || buf[0]!='O' || buf[1]!='K'){
|
||||
buf[sizeof buf - 1] = '\0';
|
||||
werrstr("bad remote tree: %s\n", buf);
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// if(strstr(dir, "tcp"))
|
||||
// fd = filter(fd);
|
||||
|
||||
if(oldsystem)
|
||||
return old9p(fd);
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
int
|
||||
readswap(Machine *m, uvlong *a)
|
||||
{
|
||||
|
@ -668,7 +529,7 @@ ilog10(uvlong j)
|
|||
int
|
||||
initmach(Machine *m, char *name)
|
||||
{
|
||||
int n, fd;
|
||||
int n;
|
||||
uvlong a[MAXNUM];
|
||||
char *p, mpt[256], buf[256];
|
||||
|
||||
|
@ -683,21 +544,28 @@ initmach(Machine *m, char *name)
|
|||
if(m->remote == 0)
|
||||
strcpy(mpt, "");
|
||||
else{
|
||||
Waitmsg *w;
|
||||
int pid;
|
||||
|
||||
snprint(mpt, sizeof mpt, "/n/%s", p);
|
||||
fd = connectexportfs(name);
|
||||
if(fd < 0){
|
||||
fprint(2, "can't connect to %s: %r\n", name);
|
||||
snprint(buf, sizeof buf, "rimport %q / %q || import %q / %q", name, mpt, name, mpt);
|
||||
|
||||
pid = fork();
|
||||
switch(pid){
|
||||
case -1:
|
||||
fprint(2, "can't fork: %r\n");
|
||||
return 0;
|
||||
case 0:
|
||||
execl("/bin/rc", "rc", "-c", buf, nil);
|
||||
fprint(2, "can't exec: %r\n");
|
||||
exits("exec");
|
||||
}
|
||||
w = wait();
|
||||
if(w == nil || w->pid != pid || w->msg[0] != '\0'){
|
||||
free(w);
|
||||
return 0;
|
||||
}
|
||||
/* BUG? need to use amount() now? */
|
||||
if(mount(fd, -1, mpt, MREPL, "") < 0){
|
||||
fprint(2, "stats: mount %s on %s failed (%r); trying /n/sid\n", name, mpt);
|
||||
strcpy(mpt, "/n/sid");
|
||||
if(mount(fd, -1, mpt, MREPL, "") < 0){
|
||||
fprint(2, "stats: mount %s on %s failed: %r\n", name, mpt);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
free(w);
|
||||
}
|
||||
|
||||
snprint(buf, sizeof buf, "%s/dev/swap", mpt);
|
||||
|
@ -1360,6 +1228,8 @@ main(int argc, char *argv[])
|
|||
uvlong v, vmax, nargs;
|
||||
char args[100];
|
||||
|
||||
quotefmtinstall();
|
||||
|
||||
nmach = 1;
|
||||
mysysname = getenv("sysname");
|
||||
if(mysysname == nil){
|
||||
|
@ -1386,7 +1256,6 @@ main(int argc, char *argv[])
|
|||
ylabels++;
|
||||
break;
|
||||
case 'O':
|
||||
oldsystem = 1;
|
||||
break;
|
||||
default:
|
||||
if(nargs>=sizeof args || strchr(argchars, ARGC())==nil)
|
||||
|
@ -1399,6 +1268,7 @@ main(int argc, char *argv[])
|
|||
initmach(&mach[0], mysysname);
|
||||
readmach(&mach[0], 1);
|
||||
}else{
|
||||
rfork(RFNAMEG);
|
||||
for(i=j=0; i<argc; i++){
|
||||
if (addmachine(argv[i]))
|
||||
readmach(&mach[j++], 1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue