--- /sys/src/cmd/aux/listen1.c Thu Oct 15 06:22:02 2015+++ ../patched/gridlisten1.c Fri Dec 7 23:24:27 2018@@ -6,11 +6,13 @@ int verbose; int trusted; char *nsfile;+char *description;+char *mountpoint; void usage(void) {- fprint(2, "usage: listen1 [-tv] [-p maxprocs] [-n namespace] address cmd args...\n");+ fprint(2, "usage: gridlisten1 [-tv] [-d description] [-p maxprocs] [-n namespace] address cmd args...\n"); exits("usage"); } @@ -27,6 +29,33 @@ sysfatal("can't build namespace: %r"); } +void+doregister(char *announce, char *service)+{+ int regfd;+ char *loc;+ char *port;++ switch(rfork(RFPROC|RFFDG)) {+ case -1:+ fprint(2, "error forking\n");+ case 0:+ if((loc=getenv("myip")) == 0)+ loc=getenv("sysname");+ if((port=strrchr(announce, '!')) != 0)+ port++;+ regfd=open("/mnt/registry/new", OWRITE);+ if(regfd == -1)+ sysfatal("didn't find /mnt/registry/new, can't announce\n");+ fprint(regfd, "tcp!%s!%s sys %s service %s mountpoint %s is %s", loc, port, getenv("sysname"), service, mountpoint, description);+ for(;;)+ sleep(1000);+ break;+ default:+ return;+ }+}+ char* remoteaddr(char *dir) {@@ -57,6 +86,8 @@ int ctl, nctl, fd; int wfd, nowait, procs; Dir *d;+ description="unknown";+ mountpoint="unknown"; ARGBEGIN{ default:@@ -73,6 +104,12 @@ case 'n': nsfile = EARGF(usage()); break;+ case 'd':+ description = EARGF(usage());+ break;+ case 'm':+ mountpoint = EARGF(usage());+ break; }ARGEND if(argc < 2)@@ -92,6 +129,8 @@ print("listen started\n"); ctl = announce(argv[0], dir);+ fprint(2, "registering %s\n", argv[0]);+ doregister(argv[0], argv[1]); if(ctl < 0) sysfatal("announce %s: %r", argv[0]);
--- /sys/src/cmd/aux/listen1.c Thu Oct 15 06:22:02 2015
+++ ../patched/gridlisten1.c Fri Dec 7 23:24:27 2018
@@ -6,11 +6,13 @@
int verbose;
int trusted;
char *nsfile;
+char *description;
+char *mountpoint;
void
usage(void)
{
- fprint(2, "usage: listen1 [-tv] [-p maxprocs] [-n namespace] address cmd args...\n");
+ fprint(2, "usage: gridlisten1 [-tv] [-d description] [-p maxprocs] [-n namespace] address cmd args...\n");
exits("usage");
}
@@ -27,6 +29,33 @@
sysfatal("can't build namespace: %r");
}
+void
+doregister(char *announce, char *service)
+{
+ int regfd;
+ char *loc;
+ char *port;
+
+ switch(rfork(RFPROC|RFFDG)) {
+ case -1:
+ fprint(2, "error forking\n");
+ case 0:
+ if((loc=getenv("myip")) == 0)
+ loc=getenv("sysname");
+ if((port=strrchr(announce, '!')) != 0)
+ port++;
+ regfd=open("/mnt/registry/new", OWRITE);
+ if(regfd == -1)
+ sysfatal("didn't find /mnt/registry/new, can't announce\n");
+ fprint(regfd, "tcp!%s!%s sys %s service %s mountpoint %s is %s", loc, port, getenv("sysname"), service, mountpoint, description);
+ for(;;)
+ sleep(1000);
+ break;
+ default:
+ return;
+ }
+}
+
char*
remoteaddr(char *dir)
{
@@ -57,6 +86,8 @@
int ctl, nctl, fd;
int wfd, nowait, procs;
Dir *d;
+ description="unknown";
+ mountpoint="unknown";
ARGBEGIN{
default:
@@ -73,6 +104,12 @@
case 'n':
nsfile = EARGF(usage());
break;
+ case 'd':
+ description = EARGF(usage());
+ break;
+ case 'm':
+ mountpoint = EARGF(usage());
+ break;
}ARGEND
if(argc < 2)
@@ -92,6 +129,8 @@
print("listen started\n");
ctl = announce(argv[0], dir);
+ fprint(2, "registering %s\n", argv[0]);
+ doregister(argv[0], argv[1]);
if(ctl < 0)
sysfatal("announce %s: %r", argv[0]);