#include <rpc/rpc.h> #include <rpc/rpc_router_ioctl.h> #include <debug.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <errno.h> #define DUMP_DATA 0 int r_open(const char *router) { int handle = open(router, O_RDWR, 0); if(handle < 0) E("error opening %s: %s\n", router, strerror(errno)); return handle; } void r_close(int handle) { if(close(handle) < 0) E("error: %s\n", strerror(errno)); } int r_read(int handle, char *buf, uint32 size) { int rc = read((int) handle, (void *)buf, size); if (rc < 0) E("error reading RPC packet: %d (%s)\n", errno, strerror(errno)); #if DUMP_DATA else { int len = rc / 4; uint32_t *data = (uint32_t *)buf; fprintf(stdout, "RPC in %02d:", rc); while (len--) fprintf(stdout, " %08x", *data++); fprintf(stdout, "\n"); } #endif return rc; } int r_write (int handle, const char *buf, uint32 size) { int rc = write(handle, (void *)buf, size); if (rc < 0) E("error writing RPC packet: %d (%s)\n", errno, strerror(errno)); #if DUMP_DATA else { int len = rc / 4; uint32_t *data = (uint32_t *)buf; fprintf(stdout, "RPC out %02d:", rc); while (len--) fprintf(stdout, " %08x", *data++); fprintf(stdout, "\n"); } #endif return rc; } int r_control(int handle, const uint32 cmd, void *arg) { return ioctl(handle, cmd, arg); }