--- /sys/src/cmd/aux/listen1.c Thu Oct 15 06:22:02 2015 +++ ../patched/gridlisten1.c Wed Nov 27 14:29:01 2019 @@ -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]);