]> jspc29.x-matter.uni-frankfurt.de Git - trbnettools.git/commitdiff
initial release
authorhadaq <hadaq>
Fri, 16 Jul 2010 16:04:50 +0000 (16:04 +0000)
committerhadaq <hadaq>
Fri, 16 Jul 2010 16:04:50 +0000 (16:04 +0000)
trbnetd/server/Makefile [new file with mode: 0644]
trbnetd/server/server.c [new file with mode: 0644]
trbnetd/server/trbnetd.c [new file with mode: 0644]
trbnetd/server/trbrpc.h [new file with mode: 0644]
trbnetd/server/trbrpc_xdr.c [new file with mode: 0644]

diff --git a/trbnetd/server/Makefile b/trbnetd/server/Makefile
new file mode 100644 (file)
index 0000000..d3c88ee
--- /dev/null
@@ -0,0 +1,102 @@
+# ------------ Compiler / Linker Options -------------------------------
+
+AXIS_USABLE_LIBS = UCLIBC GLIBC
+include $(AXIS_TOP_DIR)/tools/build/Rules.axis
+
+INCDIR = -I../../libtrbnet
+CPPFLAGS = 
+
+CFLAGS = -pipe -g -Wall  -Winline -O3 -fPIC -finline-functions -finline-limit=600000
+
+CXX = g++
+CXXFLAGS = -pipe -g -Wall
+
+LD = $(CC)
+#LD = $(CXX)
+
+LDFLAGS = 
+LIBDIR = -L../../libtrbnet
+LOADLIBES = -ltrbnet
+
+# ------------ TARGETS -------------------------------------------------
+
+TARGETS = trbnetd
+
+LIB_TARGETS = 
+
+# ------------ Libaries ------------------------------------------------
+
+AR = ar
+ARFLAGS = -srv
+
+# ------------ Pattern Rules -------------------------------------------
+
+# C Code:
+%.o: %.c
+       $(CC) $< -c $(CFLAGS) $(CPPFLAGS) $(INCDIR) -o $@ 
+
+# C++ Code:
+%.o: %.cpp
+       $(CXX) $< -c $(CXXFLAGS) $(CPPFLAGS) $(INCDIR) -o $@ 
+
+%.o: %.cc
+       $(CXX) $< -c $(CXXFLAGS) $(CPPFLAGS) $(INCDIR) -o $@ 
+
+%.o: %.C
+       $(CXX) $< -c $(CXXFLAGS) $(CPPFLAGS) $(INCDIR) -o $@ 
+
+# C/C++ Objects (set LD accordingly)
+%: %.o
+       @echo LINKING $@
+       $(LD) $^ $(LDFLAGS) $(LIBDIR) $(LOADLIBES) -o $@ 
+       @echo DONE!
+
+# Libaries
+%.a: $%
+       @echo CREATING library $@
+       $(AR) $(ARFLAGS) $@ $^
+       @echo DONE!
+
+%.so: $%
+       @echo CREATING shared library $@
+       $(LD) -shared -O $^ -o $@
+       @echo DONE!
+
+# RPCGEN
+%.h: %.x
+       rpcgen -N -M $^
+
+# ------------ Targets -------------------------------------------------
+
+.PHONY: all
+all: $(LIB_TARGETS) $(TARGETS)
+
+.PHONY: clean 
+clean:
+       rm -f *.o core core.*
+       rcsclean
+
+.PHONY: distclean
+distclean: clean
+       rm -f $(TARGETS) $(LIB_TARGETS)
+       rcsclean -u
+
+.PHONY: cleanrpc
+cleanrpc:
+       rm -f trbrpc_clnt.c trbrpc_svc.c trbrpc.h trbrpc_xdr.c
+
+.PHONY: depend
+depend:
+       $(CC) -MM $(CFLAGS) $(CPPFLAGS) $(INCDIR) *.c
+
+# ------------ Dependencies --------------------------------------------
+
+trbnetd: trbnetd.o server.o trbrpc_xdr.o
+
+trbnetd: server.o trbnetd.o trbrpc_xdr.o
+
+trbnetd.o: trbnetd.c trbrpc.h
+
+server.o: server.c
+
+trbrpc_xdr.o: trbrpc_xdr.c trbrpc.h
diff --git a/trbnetd/server/server.c b/trbnetd/server/server.c
new file mode 100644 (file)
index 0000000..cdec464
--- /dev/null
@@ -0,0 +1,331 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include "trbrpc.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <rpc/pmap_clnt.h>
+#include <string.h>
+#include <memory.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <trbnet.h>
+
+#ifndef SIG_PF
+#define SIG_PF void(*)(int)
+#endif
+
+int
+_register_read_1(register_read_1_argument * argp, void *result,
+                 struct svc_req *rqstp)
+{
+  return (register_read_1_svc
+          (argp->arg1, argp->arg2, argp->arg3, result, rqstp));
+}
+
+int
+_register_read_mem_1(register_read_mem_1_argument * argp, void *result,
+                     struct svc_req *rqstp)
+{
+  return (register_read_mem_1_svc
+          (argp->arg1, argp->arg2, argp->arg3, argp->arg4, argp->arg5, result,
+           rqstp));
+}
+
+int
+_register_write_1(register_write_1_argument * argp, void *result,
+                  struct svc_req *rqstp)
+{
+  return (register_write_1_svc
+          (argp->arg1, argp->arg2, argp->arg3, result, rqstp));
+}
+
+int
+_register_write_mem_1(register_write_mem_1_argument * argp, void *result,
+                      struct svc_req *rqstp)
+{
+  return (register_write_mem_1_svc
+          (argp->arg1, argp->arg2, argp->arg3, argp->arg4, result, rqstp));
+}
+
+int
+_read_uid_1(read_uid_1_argument * argp, void *result, struct svc_req *rqstp)
+{
+  return (read_uid_1_svc(argp->arg1, argp->arg2, result, rqstp));
+}
+
+int
+_set_address_1(set_address_1_argument * argp, void *result,
+               struct svc_req *rqstp)
+{
+  return (set_address_1_svc
+          (argp->arg1, argp->arg2, argp->arg3, result, rqstp));
+}
+
+int
+_send_trigger_1(send_trigger_1_argument * argp, void *result,
+                struct svc_req *rqstp)
+{
+  return (send_trigger_1_svc
+          (argp->arg1, argp->arg2, argp->arg3, argp->arg4, result, rqstp));
+}
+
+int
+_ipu_data_read_1(ipu_data_read_1_argument * argp, void *result,
+                 struct svc_req *rqstp)
+{
+  return (ipu_data_read_1_svc
+          (argp->arg1, argp->arg2, argp->arg3, argp->arg4, argp->arg5, result,
+           rqstp));
+}
+
+int
+_fpga_register_read_1(uint16_t * argp, void *result, struct svc_req *rqstp)
+{
+  return (fpga_register_read_1_svc(*argp, result, rqstp));
+}
+
+int
+_fpga_register_write_1(fpga_register_write_1_argument * argp, void *result,
+                       struct svc_req *rqstp)
+{
+  return (fpga_register_write_1_svc(argp->arg1, argp->arg2, result, rqstp));
+}
+
+int _trb_fifo_flush_1(uint8_t * argp, void *result, struct svc_req *rqstp)
+{
+  return (trb_fifo_flush_1_svc(*argp, result, rqstp));
+}
+
+int _network_reset_1(void *argp, void *result, struct svc_req *rqstp)
+{
+  return (network_reset_1_svc(result, rqstp));
+}
+
+int _com_reset_1(void *argp, void *result, struct svc_req *rqstp)
+{
+  return (com_reset_1_svc(result, rqstp));
+}
+
+static void trbnetrpcprog_1(struct svc_req *rqstp, register SVCXPRT * transp)
+{
+  union
+  {
+    register_read_1_argument register_read_1_arg;
+    register_read_mem_1_argument register_read_mem_1_arg;
+    register_write_1_argument register_write_1_arg;
+    register_write_mem_1_argument register_write_mem_1_arg;
+    read_uid_1_argument read_uid_1_arg;
+    set_address_1_argument set_address_1_arg;
+    send_trigger_1_argument send_trigger_1_arg;
+    ipu_data_read_1_argument ipu_data_read_1_arg;
+    uint16_t fpga_register_read_1_arg;
+    fpga_register_write_1_argument fpga_register_write_1_arg;
+    uint8_t trb_fifo_flush_1_arg;
+  } argument;
+  union
+  {
+    RetVal register_read_1_res;
+    RetVal register_read_mem_1_res;
+    Status register_write_1_res;
+    Status register_write_mem_1_res;
+    RetVal read_uid_1_res;
+    Status set_address_1_res;
+    Status send_trigger_1_res;
+    RetVal ipu_data_read_1_res;
+    RetVal fpga_register_read_1_res;
+    Status fpga_register_write_1_res;
+    Status trb_fifo_flush_1_res;
+    Status network_reset_1_res;
+    Status com_reset_1_res;
+  } result;
+  bool_t retval;
+  xdrproc_t _xdr_argument, _xdr_result;
+  bool_t(*local) (char *, void *, struct svc_req *);
+
+  switch (rqstp->rq_proc) {
+  case NULLPROC:
+    (void)svc_sendreply(transp, (xdrproc_t) xdr_void, (char *)NULL);
+    return;
+
+  case REGISTER_READ:
+    _xdr_argument = (xdrproc_t) xdr_register_read_1_argument;
+    _xdr_result = (xdrproc_t) xdr_RetVal;
+    local = (bool_t(*)(char *, void *, struct svc_req *))_register_read_1;
+    break;
+
+  case REGISTER_READ_MEM:
+    _xdr_argument = (xdrproc_t) xdr_register_read_mem_1_argument;
+    _xdr_result = (xdrproc_t) xdr_RetVal;
+    local = (bool_t(*)(char *, void *, struct svc_req *))_register_read_mem_1;
+    break;
+
+  case REGISTER_WRITE:
+    _xdr_argument = (xdrproc_t) xdr_register_write_1_argument;
+    _xdr_result = (xdrproc_t) xdr_Status;
+    local = (bool_t(*)(char *, void *, struct svc_req *))_register_write_1;
+    break;
+
+  case REGISTER_WRITE_MEM:
+    _xdr_argument = (xdrproc_t) xdr_register_write_mem_1_argument;
+    _xdr_result = (xdrproc_t) xdr_Status;
+    local =
+      (bool_t(*)(char *, void *, struct svc_req *))_register_write_mem_1;
+    break;
+
+  case READ_UID:
+    _xdr_argument = (xdrproc_t) xdr_read_uid_1_argument;
+    _xdr_result = (xdrproc_t) xdr_RetVal;
+    local = (bool_t(*)(char *, void *, struct svc_req *))_read_uid_1;
+    break;
+
+  case SET_ADDRESS:
+    _xdr_argument = (xdrproc_t) xdr_set_address_1_argument;
+    _xdr_result = (xdrproc_t) xdr_Status;
+    local = (bool_t(*)(char *, void *, struct svc_req *))_set_address_1;
+    break;
+
+  case SEND_TRIGGER:
+    _xdr_argument = (xdrproc_t) xdr_send_trigger_1_argument;
+    _xdr_result = (xdrproc_t) xdr_Status;
+    local = (bool_t(*)(char *, void *, struct svc_req *))_send_trigger_1;
+    break;
+
+  case IPU_DATA_READ:
+    _xdr_argument = (xdrproc_t) xdr_ipu_data_read_1_argument;
+    _xdr_result = (xdrproc_t) xdr_RetVal;
+    local = (bool_t(*)(char *, void *, struct svc_req *))_ipu_data_read_1;
+    break;
+
+  case FPGA_REGISTER_READ:
+    _xdr_argument = (xdrproc_t) xdr_uint16_t;
+    _xdr_result = (xdrproc_t) xdr_RetVal;
+    local =
+      (bool_t(*)(char *, void *, struct svc_req *))_fpga_register_read_1;
+    break;
+
+  case FPGA_REGISTER_WRITE:
+    _xdr_argument = (xdrproc_t) xdr_fpga_register_write_1_argument;
+    _xdr_result = (xdrproc_t) xdr_Status;
+    local =
+      (bool_t(*)(char *, void *, struct svc_req *))_fpga_register_write_1;
+    break;
+
+  case TRB_FIFO_FLUSH:
+    _xdr_argument = (xdrproc_t) xdr_uint8_t;
+    _xdr_result = (xdrproc_t) xdr_Status;
+    local = (bool_t(*)(char *, void *, struct svc_req *))_trb_fifo_flush_1;
+    break;
+
+  case NETWORK_RESET:
+    _xdr_argument = (xdrproc_t) xdr_void;
+    _xdr_result = (xdrproc_t) xdr_Status;
+    local = (bool_t(*)(char *, void *, struct svc_req *))_network_reset_1;
+    break;
+
+  case COM_RESET:
+    _xdr_argument = (xdrproc_t) xdr_void;
+    _xdr_result = (xdrproc_t) xdr_Status;
+    local = (bool_t(*)(char *, void *, struct svc_req *))_com_reset_1;
+    break;
+
+  default:
+    svcerr_noproc(transp);
+    return;
+  }
+  memset((char *)&argument, 0, sizeof(argument));
+  if (!svc_getargs(transp, (xdrproc_t) _xdr_argument, (caddr_t) & argument)) {
+    svcerr_decode(transp);
+    return;
+  }
+  retval = (bool_t) (*local) ((char *)&argument, (void *)&result, rqstp);
+  if (retval > 0
+      && !svc_sendreply(transp, (xdrproc_t) _xdr_result, (char *)&result)) {
+    svcerr_systemerr(transp);
+  }
+  if (!svc_freeargs(transp, (xdrproc_t) _xdr_argument, (caddr_t) & argument)) {
+    fprintf(stderr, "%s", "unable to free arguments");
+    exit(1);
+  }
+  if (!trbnetrpcprog_1_freeresult(transp, _xdr_result, (caddr_t) & result))
+    fprintf(stderr, "%s", "unable to free results");
+
+  return;
+}
+
+static pid_t myPid = -1;
+
+int main(int argc, char **argv)
+{
+  int daemonMode = 1;
+  register SVCXPRT *transp;
+
+  if ((argc >= 2) && (strcmp(argv[1], "-f") == 0))
+    daemonMode = 0;
+
+  pmap_unset(TRBNETRPCPROG, TRBNETRPCVERS);
+
+  transp = svcudp_create(RPC_ANYSOCK);
+  if (transp == NULL) {
+    fprintf(stderr, "%s", "cannot create udp service.");
+    exit(1);
+  }
+  if (!svc_register
+      (transp, TRBNETRPCPROG, TRBNETRPCVERS, trbnetrpcprog_1, IPPROTO_UDP)) {
+    fprintf(stderr, "%s",
+            "unable to register (TRBNETRPCPROG, TRBNETRPCVERS, udp).");
+    exit(1);
+  }
+
+  transp = svctcp_create(RPC_ANYSOCK, 0, 0);
+  if (transp == NULL) {
+    fprintf(stderr, "%s", "cannot create tcp service.");
+    exit(1);
+  }
+  if (!svc_register
+      (transp, TRBNETRPCPROG, TRBNETRPCVERS, trbnetrpcprog_1, IPPROTO_TCP)) {
+    fprintf(stderr, "%s",
+            "unable to register (TRBNETRPCPROG, TRBNETRPCVERS, tcp).");
+    exit(1);
+  }
+
+  /* initialize FPGA */
+  init_ports();
+
+
+  if (daemonMode == 1) {
+    /* fork the first time */
+    if ((myPid = fork()) == -1) {       /* Error fork, Mother exit, no child */
+      perror(argv[0]);
+      exit(EXIT_FAILURE);
+    }
+    if (myPid > 0) {
+      exit(EXIT_SUCCESS);       /* Mother exit */
+    }
+    /* fork the second time */
+    setsid();
+    if ((myPid = fork()) == -1) {       /* Error fork, Mother exit, no child */
+      perror(argv[0]);
+      exit(EXIT_FAILURE);
+    }
+    if (myPid > 0) {
+      exit(EXIT_SUCCESS);       /* Mother exit */
+    }
+    /* close stdin, stdout, stderr, change dir */
+    chdir("/");
+    freopen("/dev/null", "r", stdin);
+    freopen("/dev/null", "a", stdout);
+    freopen("/dev/console", "a", stderr);
+  }
+  svc_run();
+
+  /* NOTREACHED */
+  fprintf(stderr, "%s", "svc_run returned");
+  exit(EXIT_FAILURE);
+}
diff --git a/trbnetd/server/trbnetd.c b/trbnetd/server/trbnetd.c
new file mode 100644 (file)
index 0000000..11a64a6
--- /dev/null
@@ -0,0 +1,268 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <rpc/pmap_clnt.h>
+#include <string.h>
+#include <memory.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#include <trbnet.h>
+#include <trberror.h>
+
+#include "trbrpc.h"
+
+int trbnetrpcprog_1_freeresult(SVCXPRT * transp,
+                               xdrproc_t xdr_result, caddr_t result)
+{
+  xdr_free(xdr_result, result);
+
+  /*
+   * Insert additional freeing code here, if needed
+   */
+
+  return 1;
+}
+
+static void copyStatus(Status* status)
+{
+  status->trb_errno = trb_errno;
+  status->status_common = trb_term.status_common;
+  status->status_channel = trb_term.status_channel;
+  status->sequence = trb_term.sequence;
+  status->channel = trb_term.channel;
+}
+
+bool_t register_read_1_svc(uint16_t trb_address,
+                           uint16_t reg_address,
+                           u_int dsize,
+                           RetVal * retVal,
+                           struct svc_req * rqstp)
+{
+  int status;
+
+  /* allocate buffer memory */
+  retVal->data.Buffer_val = (uint32_t *) malloc(sizeof(uint32_t) * dsize);
+  if (retVal->data.Buffer_val == NULL) {
+    return FALSE;
+  }
+
+  status = trb_register_read(trb_address, reg_address,
+                             (uint32_t *) retVal->data.Buffer_val, dsize);
+
+  copyStatus(&retVal->status);
+  retVal->data.Buffer_len = status == -1 ? 0 : status;
+
+  return TRUE;
+}
+
+bool_t register_read_mem_1_svc(uint16_t trb_address,
+                               uint16_t reg_address,
+                               uint8_t option,
+                               uint16_t size,
+                               u_int dsize,
+                               RetVal* retVal,
+                               struct svc_req * rqstp)
+{
+  int status;
+
+  /* allocate buffer memory */
+  retVal->data.Buffer_val = (uint32_t *) malloc(sizeof(uint32_t) * dsize);
+  if (retVal->data.Buffer_val == NULL)
+    return FALSE;
+
+  status = trb_register_read_mem(trb_address, reg_address, option, size,
+                                 (uint32_t *) retVal->data.Buffer_val, dsize);
+  
+  copyStatus(&retVal->status);
+  retVal->data.Buffer_len = status == -1 ? 0 : status;
+
+  return TRUE;
+}
+
+bool_t register_write_1_svc(uint16_t trb_address,
+                            uint16_t reg_address, 
+                            uint32_t value, 
+                            Status* retVal, 
+                            struct svc_req* rqstp)
+{
+  int status;
+  
+  status = trb_register_write(trb_address, reg_address, value);
+
+  copyStatus(retVal);
+  
+  return TRUE;
+}
+
+bool_t register_write_mem_1_svc(uint16_t trb_address,
+                                uint16_t reg_address, 
+                                uint8_t option, 
+                                Buffer data,
+                                Status* retVal, 
+                                struct svc_req* rqstp)
+{
+  int status;
+
+  status = trb_register_write_mem(trb_address, 
+                                  reg_address, 
+                                  option, 
+                                  (uint32_t*)data.Buffer_val,
+                                  data.Buffer_len);
+  
+  copyStatus(retVal);
+  
+  return TRUE;
+}
+
+bool_t read_uid_1_svc(uint16_t trb_address,
+                      u_int dsize,
+                      RetVal* retVal, 
+                      struct svc_req* rqstp)
+{
+  int status;
+
+  /* allocate buffer memory */
+  retVal->data.Buffer_val = (uint32_t *) malloc(sizeof(uint32_t) * dsize);
+  if (retVal->data.Buffer_val == NULL) {
+    return FALSE;
+  }
+  
+  status = trb_read_uid(trb_address, 
+                        (uint32_t*)retVal->data.Buffer_val,
+                        dsize);
+  
+  copyStatus(&retVal->status);
+  retVal->data.Buffer_len = status == -1 ? 0 : status;
+  
+  return TRUE;
+}
+
+bool_t set_address_1_svc(uint64_t uid,
+                         uint8_t endpoint, 
+                         uint16_t trb_address, 
+                         Status* retVal, 
+                         struct svc_req* rqstp)
+{
+  int status;
+  
+  status = trb_set_address(uid, endpoint, trb_address);
+  
+  copyStatus(retVal);
+  
+  return TRUE; 
+}
+
+bool_t network_reset_1_svc(Status* retVal, 
+                           struct svc_req* rqstp)
+{
+  int status;
+  
+  status = network_reset();
+  
+  copyStatus(retVal);
+  
+  return TRUE; 
+}
+
+bool_t send_trigger_1_svc(uint8_t type,
+                          uint32_t trg_info,
+                          uint8_t trg_random,
+                          uint16_t trg_number,
+                          Status* retVal, 
+                          struct svc_req* rqstp)
+{
+  int status;
+  
+  status = trb_send_trigger(type, trg_info, trg_random, trg_number);
+  
+  copyStatus(retVal);
+  
+  return TRUE; 
+}
+
+bool_t ipu_data_read_1_svc(uint8_t type,
+                           uint32_t trg_info,
+                           uint8_t trg_random,
+                           uint16_t trg_number,
+                           u_int dsize,
+                           RetVal* retVal,
+                           struct svc_req* rqstp)
+{
+  int status;
+  
+  /* allocate buffer memory */
+  retVal->data.Buffer_val = (uint32_t *) malloc(sizeof(uint32_t) * dsize);
+  if (retVal->data.Buffer_val == NULL)
+    return FALSE;
+
+  status = trb_ipu_data_read(type, trg_info, trg_random, trg_number,
+                             (uint32_t *)retVal->data.Buffer_val, dsize);
+  
+  copyStatus(&retVal->status);
+  retVal->data.Buffer_len = status == -1 ? 0 : status;
+
+  return TRUE;
+}
+
+bool_t fpga_register_read_1_svc(uint16_t reg_address,
+                                RetVal* retVal,
+                                struct svc_req* rqstp)
+{
+  int status;
+  
+  /* allocate buffer memory */
+  retVal->data.Buffer_val = (uint32_t *) malloc(sizeof(uint32_t) * 1);
+  if (retVal->data.Buffer_val == NULL)
+    return FALSE;
+  
+  status = fpga_register_read(reg_address,
+                              (uint32_t *)retVal->data.Buffer_val);
+  
+  copyStatus(&retVal->status);
+  retVal->data.Buffer_len = status == -1 ? 0 : 1;
+  
+  return TRUE;
+}
+
+bool_t fpga_register_write_1_svc(uint16_t reg_address, 
+                                 uint32_t value, 
+                                 Status* retVal, 
+                                 struct svc_req* rqstp)
+{
+ int status;
+ status = fpga_register_write(reg_address, value);
+  
+ copyStatus(retVal);
+ return TRUE;  
+}
+
+
+
+
+bool_t trb_fifo_flush_1_svc(uint8_t channel,
+                            Status* retVal,
+                            struct svc_req* rqstp)
+{
+  int status;
+  
+  status = trb_fifo_flush(channel);
+  
+  copyStatus(retVal);
+  
+  return TRUE; 
+}
+
+
+bool_t com_reset_1_svc(Status* retVal,
+                       struct svc_req* rqstp)
+{
+  int status; 
+  
+  status =  com_reset();
+  
+  copyStatus(retVal);
+  
+  return TRUE; 
+}
diff --git a/trbnetd/server/trbrpc.h b/trbnetd/server/trbrpc.h
new file mode 100644 (file)
index 0000000..2525d85
--- /dev/null
@@ -0,0 +1,246 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#ifndef _TRBRPC_H_RPCGEN
+#define _TRBRPC_H_RPCGEN
+
+#include <rpc/rpc.h>
+
+#include <pthread.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef struct {
+       u_int Buffer_len;
+       uint32_t *Buffer_val;
+} Buffer;
+
+struct Status {
+       int trb_errno;
+       uint16_t status_common;
+       uint16_t status_channel;
+       uint16_t sequence;
+       uint8_t channel;
+};
+typedef struct Status Status;
+
+struct RetVal {
+       Status status;
+       Buffer data;
+};
+typedef struct RetVal RetVal;
+
+struct register_read_1_argument {
+       uint16_t arg1;
+       uint16_t arg2;
+       u_int arg3;
+};
+typedef struct register_read_1_argument register_read_1_argument;
+
+struct register_read_mem_1_argument {
+       uint16_t arg1;
+       uint16_t arg2;
+       uint8_t arg3;
+       uint16_t arg4;
+       u_int arg5;
+};
+typedef struct register_read_mem_1_argument register_read_mem_1_argument;
+
+struct register_write_1_argument {
+       uint16_t arg1;
+       uint16_t arg2;
+       uint32_t arg3;
+};
+typedef struct register_write_1_argument register_write_1_argument;
+
+struct register_write_mem_1_argument {
+       uint16_t arg1;
+       uint16_t arg2;
+       uint8_t arg3;
+       Buffer arg4;
+};
+typedef struct register_write_mem_1_argument register_write_mem_1_argument;
+
+struct read_uid_1_argument {
+       uint16_t arg1;
+       u_int arg2;
+};
+typedef struct read_uid_1_argument read_uid_1_argument;
+
+struct set_address_1_argument {
+       uint64_t arg1;
+       uint8_t arg2;
+       uint16_t arg3;
+};
+typedef struct set_address_1_argument set_address_1_argument;
+
+struct send_trigger_1_argument {
+       uint8_t arg1;
+       uint32_t arg2;
+       uint8_t arg3;
+       uint16_t arg4;
+};
+typedef struct send_trigger_1_argument send_trigger_1_argument;
+
+struct ipu_data_read_1_argument {
+       uint8_t arg1;
+       uint32_t arg2;
+       uint8_t arg3;
+       uint16_t arg4;
+       u_int arg5;
+};
+typedef struct ipu_data_read_1_argument ipu_data_read_1_argument;
+
+struct fpga_register_write_1_argument {
+       uint16_t arg1;
+       uint32_t arg2;
+};
+typedef struct fpga_register_write_1_argument fpga_register_write_1_argument;
+
+struct register_modify_1_argument {
+       uint16_t arg1;
+       uint16_t arg2;
+       int arg3;
+       uint32_t arg4;
+       uint32_t arg5;
+};
+typedef struct register_modify_1_argument register_modify_1_argument;
+
+#define TRBNETRPCPROG 0x20000099
+#define TRBNETRPCVERS 1
+
+#if defined(__STDC__) || defined(__cplusplus)
+#define REGISTER_READ 1
+extern  enum clnt_stat register_read_1(uint16_t , uint16_t , u_int , RetVal *, CLIENT *);
+extern  bool_t register_read_1_svc(uint16_t , uint16_t , u_int , RetVal *, struct svc_req *);
+#define REGISTER_READ_MEM 2
+extern  enum clnt_stat register_read_mem_1(uint16_t , uint16_t , uint8_t , uint16_t , u_int , RetVal *, CLIENT *);
+extern  bool_t register_read_mem_1_svc(uint16_t , uint16_t , uint8_t , uint16_t , u_int , RetVal *, struct svc_req *);
+#define REGISTER_WRITE 3
+extern  enum clnt_stat register_write_1(uint16_t , uint16_t , uint32_t , Status *, CLIENT *);
+extern  bool_t register_write_1_svc(uint16_t , uint16_t , uint32_t , Status *, struct svc_req *);
+#define REGISTER_WRITE_MEM 4
+extern  enum clnt_stat register_write_mem_1(uint16_t , uint16_t , uint8_t , Buffer , Status *, CLIENT *);
+extern  bool_t register_write_mem_1_svc(uint16_t , uint16_t , uint8_t , Buffer , Status *, struct svc_req *);
+#define READ_UID 5
+extern  enum clnt_stat read_uid_1(uint16_t , u_int , RetVal *, CLIENT *);
+extern  bool_t read_uid_1_svc(uint16_t , u_int , RetVal *, struct svc_req *);
+#define SET_ADDRESS 6
+extern  enum clnt_stat set_address_1(uint64_t , uint8_t , uint16_t , Status *, CLIENT *);
+extern  bool_t set_address_1_svc(uint64_t , uint8_t , uint16_t , Status *, struct svc_req *);
+#define SEND_TRIGGER 7
+extern  enum clnt_stat send_trigger_1(uint8_t , uint32_t , uint8_t , uint16_t , Status *, CLIENT *);
+extern  bool_t send_trigger_1_svc(uint8_t , uint32_t , uint8_t , uint16_t , Status *, struct svc_req *);
+#define IPU_DATA_READ 8
+extern  enum clnt_stat ipu_data_read_1(uint8_t , uint32_t , uint8_t , uint16_t , u_int , RetVal *, CLIENT *);
+extern  bool_t ipu_data_read_1_svc(uint8_t , uint32_t , uint8_t , uint16_t , u_int , RetVal *, struct svc_req *);
+#define FPGA_REGISTER_READ 9
+extern  enum clnt_stat fpga_register_read_1(uint16_t , RetVal *, CLIENT *);
+extern  bool_t fpga_register_read_1_svc(uint16_t , RetVal *, struct svc_req *);
+#define FPGA_REGISTER_WRITE 10
+extern  enum clnt_stat fpga_register_write_1(uint16_t , uint32_t , Status *, CLIENT *);
+extern  bool_t fpga_register_write_1_svc(uint16_t , uint32_t , Status *, struct svc_req *);
+#define TRB_FIFO_FLUSH 11
+extern  enum clnt_stat trb_fifo_flush_1(uint8_t , Status *, CLIENT *);
+extern  bool_t trb_fifo_flush_1_svc(uint8_t , Status *, struct svc_req *);
+#define NETWORK_RESET 12
+extern  enum clnt_stat network_reset_1(Status *, CLIENT *);
+extern  bool_t network_reset_1_svc(Status *, struct svc_req *);
+#define COM_RESET 13
+extern  enum clnt_stat com_reset_1(Status *, CLIENT *);
+extern  bool_t com_reset_1_svc(Status *, struct svc_req *);
+#define REGISTER_MODIFY 14
+extern  enum clnt_stat register_modify_1(uint16_t , uint16_t , int , uint32_t , uint32_t , Status *, CLIENT *);
+extern  bool_t register_modify_1_svc(uint16_t , uint16_t , int , uint32_t , uint32_t , Status *, struct svc_req *);
+extern int trbnetrpcprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
+
+#else /* K&R C */
+#define REGISTER_READ 1
+extern  enum clnt_stat register_read_1();
+extern  bool_t register_read_1_svc();
+#define REGISTER_READ_MEM 2
+extern  enum clnt_stat register_read_mem_1();
+extern  bool_t register_read_mem_1_svc();
+#define REGISTER_WRITE 3
+extern  enum clnt_stat register_write_1();
+extern  bool_t register_write_1_svc();
+#define REGISTER_WRITE_MEM 4
+extern  enum clnt_stat register_write_mem_1();
+extern  bool_t register_write_mem_1_svc();
+#define READ_UID 5
+extern  enum clnt_stat read_uid_1();
+extern  bool_t read_uid_1_svc();
+#define SET_ADDRESS 6
+extern  enum clnt_stat set_address_1();
+extern  bool_t set_address_1_svc();
+#define SEND_TRIGGER 7
+extern  enum clnt_stat send_trigger_1();
+extern  bool_t send_trigger_1_svc();
+#define IPU_DATA_READ 8
+extern  enum clnt_stat ipu_data_read_1();
+extern  bool_t ipu_data_read_1_svc();
+#define FPGA_REGISTER_READ 9
+extern  enum clnt_stat fpga_register_read_1();
+extern  bool_t fpga_register_read_1_svc();
+#define FPGA_REGISTER_WRITE 10
+extern  enum clnt_stat fpga_register_write_1();
+extern  bool_t fpga_register_write_1_svc();
+#define TRB_FIFO_FLUSH 11
+extern  enum clnt_stat trb_fifo_flush_1();
+extern  bool_t trb_fifo_flush_1_svc();
+#define NETWORK_RESET 12
+extern  enum clnt_stat network_reset_1();
+extern  bool_t network_reset_1_svc();
+#define COM_RESET 13
+extern  enum clnt_stat com_reset_1();
+extern  bool_t com_reset_1_svc();
+#define REGISTER_MODIFY 14
+extern  enum clnt_stat register_modify_1();
+extern  bool_t register_modify_1_svc();
+extern int trbnetrpcprog_1_freeresult ();
+#endif /* K&R C */
+
+/* the xdr functions */
+
+#if defined(__STDC__) || defined(__cplusplus)
+extern  bool_t xdr_Buffer (XDR *, Buffer*);
+extern  bool_t xdr_Status (XDR *, Status*);
+extern  bool_t xdr_RetVal (XDR *, RetVal*);
+extern  bool_t xdr_register_read_1_argument (XDR *, register_read_1_argument*);
+extern  bool_t xdr_register_read_mem_1_argument (XDR *, register_read_mem_1_argument*);
+extern  bool_t xdr_register_write_1_argument (XDR *, register_write_1_argument*);
+extern  bool_t xdr_register_write_mem_1_argument (XDR *, register_write_mem_1_argument*);
+extern  bool_t xdr_read_uid_1_argument (XDR *, read_uid_1_argument*);
+extern  bool_t xdr_set_address_1_argument (XDR *, set_address_1_argument*);
+extern  bool_t xdr_send_trigger_1_argument (XDR *, send_trigger_1_argument*);
+extern  bool_t xdr_ipu_data_read_1_argument (XDR *, ipu_data_read_1_argument*);
+extern  bool_t xdr_fpga_register_write_1_argument (XDR *, fpga_register_write_1_argument*);
+extern  bool_t xdr_register_modify_1_argument (XDR *, register_modify_1_argument*);
+
+#else /* K&R C */
+extern bool_t xdr_Buffer ();
+extern bool_t xdr_Status ();
+extern bool_t xdr_RetVal ();
+extern bool_t xdr_register_read_1_argument ();
+extern bool_t xdr_register_read_mem_1_argument ();
+extern bool_t xdr_register_write_1_argument ();
+extern bool_t xdr_register_write_mem_1_argument ();
+extern bool_t xdr_read_uid_1_argument ();
+extern bool_t xdr_set_address_1_argument ();
+extern bool_t xdr_send_trigger_1_argument ();
+extern bool_t xdr_ipu_data_read_1_argument ();
+extern bool_t xdr_fpga_register_write_1_argument ();
+extern bool_t xdr_register_modify_1_argument ();
+
+#endif /* K&R C */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_TRBRPC_H_RPCGEN */
diff --git a/trbnetd/server/trbrpc_xdr.c b/trbnetd/server/trbrpc_xdr.c
new file mode 100644 (file)
index 0000000..715e24a
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ */
+
+#include "trbrpc.h"
+
+bool_t
+xdr_Buffer (XDR *xdrs, Buffer *objp)
+{
+       register int32_t *buf;
+
+        if (!xdr_array (xdrs, (char **)&objp->Buffer_val, (u_int *) &objp->Buffer_len, ~0,
+               sizeof (uint32_t), (xdrproc_t) xdr_uint32_t))
+                return FALSE;
+       return TRUE;
+}
+
+bool_t
+xdr_Status (XDR *xdrs, Status *objp)
+{
+       register int32_t *buf;
+
+        if (!xdr_int (xdrs, &objp->trb_errno))
+                return FALSE;
+        if (!xdr_uint16_t (xdrs, &objp->status_common))
+                return FALSE;
+        if (!xdr_uint16_t (xdrs, &objp->status_channel))
+                return FALSE;
+        if (!xdr_uint16_t (xdrs, &objp->sequence))
+                return FALSE;
+        if (!xdr_uint8_t (xdrs, &objp->channel))
+                return FALSE;
+       return TRUE;
+}
+
+bool_t
+xdr_RetVal (XDR *xdrs, RetVal *objp)
+{
+       register int32_t *buf;
+
+        if (!xdr_Status (xdrs, &objp->status))
+                return FALSE;
+        if (!xdr_Buffer (xdrs, &objp->data))
+                return FALSE;
+       return TRUE;
+}
+
+bool_t
+xdr_register_read_1_argument (XDR *xdrs, register_read_1_argument *objp)
+{
+        if (!xdr_uint16_t (xdrs, &objp->arg1))
+                return FALSE;
+        if (!xdr_uint16_t (xdrs, &objp->arg2))
+                return FALSE;
+        if (!xdr_u_int (xdrs, &objp->arg3))
+                return FALSE;
+       return TRUE;
+}
+
+bool_t
+xdr_register_read_mem_1_argument (XDR *xdrs, register_read_mem_1_argument *objp)
+{
+        if (!xdr_uint16_t (xdrs, &objp->arg1))
+                return FALSE;
+        if (!xdr_uint16_t (xdrs, &objp->arg2))
+                return FALSE;
+        if (!xdr_uint8_t (xdrs, &objp->arg3))
+                return FALSE;
+        if (!xdr_uint16_t (xdrs, &objp->arg4))
+                return FALSE;
+        if (!xdr_u_int (xdrs, &objp->arg5))
+                return FALSE;
+       return TRUE;
+}
+
+bool_t
+xdr_register_write_1_argument (XDR *xdrs, register_write_1_argument *objp)
+{
+        if (!xdr_uint16_t (xdrs, &objp->arg1))
+                return FALSE;
+        if (!xdr_uint16_t (xdrs, &objp->arg2))
+                return FALSE;
+        if (!xdr_uint32_t (xdrs, &objp->arg3))
+                return FALSE;
+       return TRUE;
+}
+
+bool_t
+xdr_register_write_mem_1_argument (XDR *xdrs, register_write_mem_1_argument *objp)
+{
+        if (!xdr_uint16_t (xdrs, &objp->arg1))
+                return FALSE;
+        if (!xdr_uint16_t (xdrs, &objp->arg2))
+                return FALSE;
+        if (!xdr_uint8_t (xdrs, &objp->arg3))
+                return FALSE;
+        if (!xdr_Buffer (xdrs, &objp->arg4))
+                return FALSE;
+       return TRUE;
+}
+
+bool_t
+xdr_read_uid_1_argument (XDR *xdrs, read_uid_1_argument *objp)
+{
+        if (!xdr_uint16_t (xdrs, &objp->arg1))
+                return FALSE;
+        if (!xdr_u_int (xdrs, &objp->arg2))
+                return FALSE;
+       return TRUE;
+}
+
+bool_t
+xdr_set_address_1_argument (XDR *xdrs, set_address_1_argument *objp)
+{
+        if (!xdr_uint64_t (xdrs, &objp->arg1))
+                return FALSE;
+        if (!xdr_uint8_t (xdrs, &objp->arg2))
+                return FALSE;
+        if (!xdr_uint16_t (xdrs, &objp->arg3))
+                return FALSE;
+       return TRUE;
+}
+
+bool_t
+xdr_send_trigger_1_argument (XDR *xdrs, send_trigger_1_argument *objp)
+{
+        if (!xdr_uint8_t (xdrs, &objp->arg1))
+                return FALSE;
+        if (!xdr_uint32_t (xdrs, &objp->arg2))
+                return FALSE;
+        if (!xdr_uint8_t (xdrs, &objp->arg3))
+                return FALSE;
+        if (!xdr_uint16_t (xdrs, &objp->arg4))
+                return FALSE;
+       return TRUE;
+}
+
+bool_t
+xdr_ipu_data_read_1_argument (XDR *xdrs, ipu_data_read_1_argument *objp)
+{
+        if (!xdr_uint8_t (xdrs, &objp->arg1))
+                return FALSE;
+        if (!xdr_uint32_t (xdrs, &objp->arg2))
+                return FALSE;
+        if (!xdr_uint8_t (xdrs, &objp->arg3))
+                return FALSE;
+        if (!xdr_uint16_t (xdrs, &objp->arg4))
+                return FALSE;
+        if (!xdr_u_int (xdrs, &objp->arg5))
+                return FALSE;
+       return TRUE;
+}
+
+bool_t
+xdr_fpga_register_write_1_argument (XDR *xdrs, fpga_register_write_1_argument *objp)
+{
+        if (!xdr_uint16_t (xdrs, &objp->arg1))
+                return FALSE;
+        if (!xdr_uint32_t (xdrs, &objp->arg2))
+                return FALSE;
+       return TRUE;
+}
+
+bool_t
+xdr_register_modify_1_argument (XDR *xdrs, register_modify_1_argument *objp)
+{
+        if (!xdr_uint16_t (xdrs, &objp->arg1))
+                return FALSE;
+        if (!xdr_uint16_t (xdrs, &objp->arg2))
+                return FALSE;
+        if (!xdr_int (xdrs, &objp->arg3))
+                return FALSE;
+        if (!xdr_uint32_t (xdrs, &objp->arg4))
+                return FALSE;
+        if (!xdr_uint32_t (xdrs, &objp->arg5))
+                return FALSE;
+       return TRUE;
+}