text: #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);
  }
  
  
  
  