Home | History | Annotate | Download | only in librpc
      1 #include <rpc/rpc.h>
      2 #include <rpc/rpc_router_ioctl.h>
      3 #include <debug.h>
      4 
      5 #include <sys/types.h>
      6 #include <sys/stat.h>
      7 #include <fcntl.h>
      8 #include <unistd.h>
      9 #include <stdio.h>
     10 #include <errno.h>
     11 
     12 #define DUMP_DATA 0
     13 
     14 int r_open(const char *router)
     15 {
     16   int handle = open(router, O_RDWR, 0);
     17 
     18   if(handle < 0)
     19       E("error opening %s: %s\n", router, strerror(errno));
     20   return handle;
     21 }
     22 
     23 void r_close(int handle)
     24 {
     25     if(close(handle) < 0) E("error: %s\n", strerror(errno));
     26 }
     27 
     28 int r_read(int handle, char *buf, uint32 size)
     29 {
     30 	int rc = read((int) handle, (void *)buf, size);
     31 	if (rc < 0)
     32 		E("error reading RPC packet: %d (%s)\n", errno, strerror(errno));
     33 #if DUMP_DATA
     34 	else {
     35 		int len = rc / 4;
     36 		uint32_t *data = (uint32_t *)buf;
     37 		fprintf(stdout, "RPC in  %02d:", rc);
     38 		while (len--)
     39 			fprintf(stdout, " %08x", *data++);
     40 		fprintf(stdout, "\n");
     41 	}
     42 #endif
     43 	return rc;
     44 }
     45 
     46 int r_write (int handle, const char *buf, uint32 size)
     47 {
     48 	int rc = write(handle, (void *)buf, size);
     49 	if (rc < 0)
     50 		E("error writing RPC packet: %d (%s)\n", errno, strerror(errno));
     51 #if DUMP_DATA
     52 	else {
     53 		int len = rc / 4;
     54 		uint32_t *data = (uint32_t *)buf;
     55 		fprintf(stdout, "RPC out %02d:", rc);
     56 		while (len--)
     57 			fprintf(stdout, " %08x", *data++);
     58 		fprintf(stdout, "\n");
     59 	}
     60 #endif
     61 	return rc;
     62 }
     63 
     64 int r_control(int handle, const uint32 cmd, void *arg)
     65 {
     66   return ioctl(handle, cmd, arg);
     67 }
     68 
     69 
     70 
     71