From 37b42d67d9027f82756dc2b3cddd6903ffa18b53 Mon Sep 17 00:00:00 2001 From: hadaq Date: Wed, 10 Oct 2012 16:39:51 +0000 Subject: [PATCH] added RPC-ProgId Option to trbnetd, now serveral trbnetd can run on one machine, valid only for TRB3 --- trbnetd/server/trbnetd.c | 22 ++++++++++++++-------- trbnetd/trbnetrpc.c | 15 +++++++++++++-- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/trbnetd/server/trbnetd.c b/trbnetd/server/trbnetd.c index b51def0..a3409ce 100644 --- a/trbnetd/server/trbnetd.c +++ b/trbnetd/server/trbnetd.c @@ -14,7 +14,8 @@ #include "trbrpc.h" -static const char trbnetd_version[] = "$Revision: 1.13 $"; +static const char trbnetd_version[] = "$Revision: 1.14 $"; +static uint32_t server_rpc_prog_id = TRBNETRPCPROG; static int daemon_lock = 0; @@ -490,9 +491,10 @@ static void blockDaemon(int sig) { void usage(const char *progName) { - fprintf(stdout, "Usage: %s [-h] [-f]\n", progName); + fprintf(stdout, "Usage: %s [-h] [-f] [-i progId]\n", progName); fprintf(stdout, "Options:\n"); fprintf(stdout, " -h give this help\n"); + fprintf(stdout, " -i set an individual RPC-ProgId (0-255), default 0\n"); fprintf(stdout, " -f execute as foreground process\n"); fprintf(stdout, " -V version number\n"); fprintf(stdout, "\nSignals:\n"); @@ -510,7 +512,7 @@ int main(int argc, char **argv) int opt; optind = 1; - while ((opt = getopt(argc, argv, "+hfVd:")) != -1) { + while ((opt = getopt(argc, argv, "+hfi:Vd:")) != -1) { switch (opt) { case '?': usage(basename(argv[0])); @@ -518,11 +520,15 @@ int main(int argc, char **argv) case 'h': usage(basename(argv[0])); return 0; + case 'i': + server_rpc_prog_id = ((server_rpc_prog_id & 0xffff00ff) | + ((strtoul(optarg, NULL, 0) & 0xff) << 8)); + break; case 'f': daemonMode = 0; break; case 'd': - trb_debug = strtoul(optarg, NULL, 0); + trb_debug = strtoul(optarg, NULL, 0); break; case 'V': printf("%s %s, using libtrbnet %s\n", @@ -534,7 +540,7 @@ int main(int argc, char **argv) break; } } - + /* Block Signal SIGPIPE */ sigemptyset(&blockSet); sigaddset(&blockSet, SIGPIPE); @@ -544,7 +550,7 @@ int main(int argc, char **argv) if (signal(SIGUSR1, blockDaemon) == SIG_ERR) abort(); if (signal(SIGUSR2, blockDaemon) == SIG_ERR) abort(); - pmap_unset(TRBNETRPCPROG, TRBNETRPCVERS); + pmap_unset(server_rpc_prog_id, TRBNETRPCVERS); transp = svctcp_create(RPC_ANYSOCK, 0, 0); if (transp == NULL) { @@ -552,9 +558,9 @@ int main(int argc, char **argv) exit(EXIT_FAILURE); } if (!svc_register - (transp, TRBNETRPCPROG, TRBNETRPCVERS, trbnetrpcprog_1, IPPROTO_TCP)) { + (transp, server_rpc_prog_id, TRBNETRPCVERS, trbnetrpcprog_1, IPPROTO_TCP)) { fprintf(stderr, "%s", - "unable to register (TRBNETRPCPROG, TRBNETRPCVERS, tcp)."); + "unable to register (server_rpc_prog_id, TRBNETRPCVERS, tcp)."); exit(EXIT_FAILURE); } diff --git a/trbnetd/trbnetrpc.c b/trbnetd/trbnetrpc.c index 18a8276..34f15b6 100644 --- a/trbnetd/trbnetrpc.c +++ b/trbnetd/trbnetrpc.c @@ -1,12 +1,13 @@ #include #include /* always needed */ #include +#include #include "trbrpc.h" /* will be generated by rpcgen */ #include #include "trbnet.h" -const char trbnet_version[] = "$Revision: 1.12 $ RPC"; +const char trbnet_version[] = "$Revision: 1.13 $ RPC"; unsigned int trb_debug = 0; unsigned int trb_dma = 0; static CLIENT *trb_client = NULL; @@ -24,18 +25,28 @@ static void copyStatus(const Status* status) int trb_connect(const char *server) { + uint32_t server_rpc_prog_id = TRBNETRPCPROG; + if (server == NULL) { char *tmp; tmp = getenv("DAQOPSERVER"); if (tmp != NULL) { + uint32_t id = 0; + char* separator = NULL; + if ((separator = rindex(tmp, ':')) != NULL) { + *separator = '\0'; + id = strtoul(separator + 1, NULL, 0); + } strncpy(trb_server, tmp, 128); + server_rpc_prog_id = ((server_rpc_prog_id & 0xffff00ff) | (id << 8)); } else { sprintf(trb_server, "etraxp023"); } } else { strncpy(trb_server, server, 128); } - trb_client = clnt_create(trb_server, TRBNETRPCPROG, TRBNETRPCVERS, "tcp"); + trb_client = clnt_create(trb_server, server_rpc_prog_id, + TRBNETRPCVERS, "tcp"); if (trb_client == NULL) { /* * Couldn't establish connection with server. -- 2.43.0