summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore6
-rw-r--r--cli/Makefile.am6
-rw-r--r--configure.ac6
-rw-r--r--daemon/Makefile.am7
-rw-r--r--daemon/gluster-blockd.c1
-rw-r--r--rpc/Makefile.am17
-rw-r--r--rpc/block.h173
-rw-r--r--rpc/block_clnt.c100
-rw-r--r--rpc/block_svc.c120
-rw-r--r--rpc/block_svc_routines.c13
-rw-r--r--rpc/block_xdr.c105
-rw-r--r--rpc/rpcl/Makefile.am22
-rw-r--r--rpc/rpcl/block.x5
-rw-r--r--rpc/rpcl/block_svc.h20
-rw-r--r--rpc/rpcl/rpc-pragmas.h28
15 files changed, 117 insertions, 512 deletions
diff --git a/.gitignore b/.gitignore
index c4f04a6..d66bf2f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,3 +28,9 @@ cscope.*
tags
TAGS
*~
+
+# generated by rpcgen
+rpc/rpcl/block.h
+rpc/rpcl/block_clnt.c
+rpc/rpcl/block_svc.c
+rpc/rpcl/block_xdr.c
diff --git a/cli/Makefile.am b/cli/Makefile.am
index f386a85..e5d3cfb 100644
--- a/cli/Makefile.am
+++ b/cli/Makefile.am
@@ -2,12 +2,12 @@ sbin_PROGRAMS = gluster-block
gluster_block_SOURCES = gluster-block.c
-gluster_block_LDADD = $(top_srcdir)/rpc/libgbxdr.la \
- $(top_srcdir)/utils/libgb.la
+gluster_block_LDADD = $(top_builddir)/rpc/libgbrpc.la \
+ $(top_builddir)/utils/libgb.la
gluster_block_CFLAGS = -DDATADIR=\"$(localstatedir)\" \
-I$(top_srcdir)/ -I$(top_srcdir)/utils/ \
- -I$(top_srcdir)/rpc
+ -I$(top_srcdir)/rpc -I$(top_builddir)/rpc/rpcl
DISTCLEANFILES = Makefile.in
diff --git a/configure.ac b/configure.ac
index bad6168..d0533c5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -27,6 +27,7 @@ AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([gluster-block.spec
Makefile
rpc/Makefile
+ rpc/rpcl/Makefile
cli/Makefile
daemon/Makefile
utils/Makefile
@@ -44,6 +45,11 @@ LT_INIT
# Checks for programs.
AC_PROG_CC
+AC_CHECK_PROG(RPCGEN, rpcgen, yes, no)
+if test "x$RPCGEN" = "xno"; then
+ AC_MSG_ERROR([rpcgen not found, needed for building])
+fi
+
# Checks for header files.
AC_CHECK_HEADERS([stdio.h stdlib.h string.h stdbool.h stddef.h \
unistd.h errno.h memory.h time.h \
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 038fce8..faacb67 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -3,10 +3,11 @@ sbin_PROGRAMS = gluster-blockd
gluster_blockd_SOURCES = gluster-blockd.c
gluster_blockd_CFLAGS = -DDATADIR=\"$(localstatedir)\" \
- -I$(top_srcdir)/utils/ -I$(top_srcdir)/rpc
+ -I$(top_srcdir)/utils/ -I$(top_srcdir)/rpc \
+ -I$(top_builddir)/rpc/rpcl
-gluster_blockd_LDADD = $(PTHREAD) $(top_srcdir)/rpc/libgbxdr.la \
- $(top_srcdir)/utils/libgb.la
+gluster_blockd_LDADD = $(PTHREAD) $(top_builddir)/rpc/libgbrpc.la \
+ $(top_builddir)/utils/libgb.la
DISTCLEANFILES = Makefile.in
diff --git a/daemon/gluster-blockd.c b/daemon/gluster-blockd.c
index d4cae91..54329bc 100644
--- a/daemon/gluster-blockd.c
+++ b/daemon/gluster-blockd.c
@@ -17,6 +17,7 @@
# include "common.h"
# include "block.h"
+# include "block_svc.h"
diff --git a/rpc/Makefile.am b/rpc/Makefile.am
index 66717bb..4dd7439 100644
--- a/rpc/Makefile.am
+++ b/rpc/Makefile.am
@@ -1,16 +1,17 @@
-noinst_LTLIBRARIES = libgbxdr.la
+SUBDIRS = rpcl
-libgbxdr_la_SOURCES = block_clnt.c block_xdr.c block_svc.c \
- block_svc_routines.c glfs-operations.c
+noinst_LTLIBRARIES = libgbrpc.la
-noinst_HEADERS = block.h glfs-operations.h
+libgbrpc_la_SOURCES = block_svc_routines.c glfs-operations.c
-libgbxdr_la_CFLAGS = $(GFAPI_CFLAGS) -DDATADIR=\"$(localstatedir)\" \
- -I$(top_srcdir)/utils/
+noinst_HEADERS = glfs-operations.h
-libgbxdr_la_LIBADD = $(GFAPI_LIBS) $(UUID)
+libgbrpc_la_CFLAGS = $(GFAPI_CFLAGS) -DDATADIR=\"$(localstatedir)\" \
+ -I$(top_srcdir)/utils/ -I$(top_builddir)/rpc/rpcl
-libgbxdr_ladir = $(includedir)/gluster-block/rpc
+libgbrpc_la_LIBADD = $(GFAPI_LIBS) $(UUID) rpcl/libgbrpcxdr.la
+
+libgbrpc_ladir = $(includedir)/gluster-block/rpc
DISTCLEANFILES = Makefile.in
diff --git a/rpc/block.h b/rpc/block.h
deleted file mode 100644
index fcf6832..0000000
--- a/rpc/block.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Please do not edit this file.
- * It was generated using rpcgen.
- */
-
-#ifndef _BLOCK_H_RPCGEN
-#define _BLOCK_H_RPCGEN
-
-#include <rpc/rpc.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-struct blockCreate {
- char ipaddr[255];
- char volume[255];
- char gbid[127];
- u_quad_t size;
- char block_name[255];
-};
-typedef struct blockCreate blockCreate;
-
-struct blockCreateCli {
- char volume[255];
- u_quad_t size;
- u_int mpath;
- char block_name[255];
- char *block_hosts;
-};
-typedef struct blockCreateCli blockCreateCli;
-
-struct blockDeleteCli {
- char block_name[255];
- char volume[255];
-};
-typedef struct blockDeleteCli blockDeleteCli;
-
-struct blockDelete {
- char block_name[255];
- char gbid[127];
-};
-typedef struct blockDelete blockDelete;
-
-struct blockInfoCli {
- char block_name[255];
- char volume[255];
-};
-typedef struct blockInfoCli blockInfoCli;
-
-struct blockListCli {
- char volume[255];
- u_quad_t offset;
-};
-typedef struct blockListCli blockListCli;
-
-struct blockResponse {
- int exit;
- char *out;
- u_quad_t offset;
- struct {
- u_int xdata_len;
- char *xdata_val;
- } xdata;
-};
-typedef struct blockResponse blockResponse;
-
-typedef struct blockServerDef {
- size_t nhosts;
- char **hosts;
-} blockServerDef;
-typedef blockServerDef *blockServerDefPtr;
-
-typedef enum operations {
- CREATE_SRV = 1,
- DELETE_SRV = 2,
-} operations;
-
-void
-gluster_block_cli_1(struct svc_req *rqstp, register SVCXPRT *transp);
-
-void
-gluster_block_1(struct svc_req *rqstp, register SVCXPRT *transp);
-
-
-int
-glusterBlockCallRPC_1(char *host, void *cobj, operations opt, char **out);
-
-#define GLUSTER_BLOCK_CLI 212153113
-#define GLUSTER_BLOCK_CLI_VERS 1
-
-#if defined(__STDC__) || defined(__cplusplus)
-#define BLOCK_CREATE_CLI 1
-extern blockResponse * block_create_cli_1(blockCreateCli *, CLIENT *);
-extern blockResponse * block_create_cli_1_svc(blockCreateCli *, struct svc_req *);
-#define BLOCK_LIST_CLI 2
-extern blockResponse * block_list_cli_1(blockListCli *, CLIENT *);
-extern blockResponse * block_list_cli_1_svc(blockListCli *, struct svc_req *);
-#define BLOCK_INFO_CLI 3
-extern blockResponse * block_info_cli_1(blockInfoCli *, CLIENT *);
-extern blockResponse * block_info_cli_1_svc(blockInfoCli *, struct svc_req *);
-#define BLOCK_DELETE_CLI 4
-extern blockResponse * block_delete_cli_1(blockDeleteCli *, CLIENT *);
-extern blockResponse * block_delete_cli_1_svc(blockDeleteCli *, struct svc_req *);
-extern int gluster_block_cli_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
-
-#else /* K&R C */
-#define BLOCK_CREATE_CLI 1
-extern blockResponse * block_create_cli_1();
-extern blockResponse * block_create_cli_1_svc();
-#define BLOCK_LIST_CLI 2
-extern blockResponse * block_list_cli_1();
-extern blockResponse * block_list_cli_1_svc();
-#define BLOCK_INFO_CLI 3
-extern blockResponse * block_info_cli_1();
-extern blockResponse * block_info_cli_1_svc();
-#define BLOCK_DELETE_CLI 4
-extern blockResponse * block_delete_cli_1();
-extern blockResponse * block_delete_cli_1_svc();
-extern int gluster_block_cli_1_freeresult ();
-#endif /* K&R C */
-
-#define GLUSTER_BLOCK 21215311
-#define GLUSTER_BLOCK_VERS 1
-
-#if defined(__STDC__) || defined(__cplusplus)
-#define BLOCK_CREATE 1
-extern blockResponse * block_create_1(blockCreate *, CLIENT *);
-extern blockResponse * block_create_1_svc(blockCreate *, struct svc_req *);
-#define BLOCK_DELETE 2
-extern blockResponse * block_delete_1(blockDelete *, CLIENT *);
-extern blockResponse * block_delete_1_svc(blockDelete *, struct svc_req *);
-extern int gluster_block_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
-
-#else /* K&R C */
-#define BLOCK_CREATE 1
-extern blockResponse * block_create_1();
-extern blockResponse * block_create_1_svc();
-#define BLOCK_DELETE 2
-extern blockResponse * block_delete_1();
-extern blockResponse * block_delete_1_svc();
-extern int gluster_block_1_freeresult ();
-#endif /* K&R C */
-
-/* the xdr functions */
-
-#if defined(__STDC__) || defined(__cplusplus)
-extern bool_t xdr_blockCreate (XDR *, blockCreate*);
-extern bool_t xdr_blockCreateCli (XDR *, blockCreateCli*);
-extern bool_t xdr_blockDeleteCli (XDR *, blockDeleteCli*);
-extern bool_t xdr_blockDelete (XDR *, blockDelete*);
-extern bool_t xdr_blockInfoCli (XDR *, blockInfoCli*);
-extern bool_t xdr_blockListCli (XDR *, blockListCli*);
-extern bool_t xdr_blockResponse (XDR *, blockResponse*);
-
-#else /* K&R C */
-extern bool_t xdr_blockCreate ();
-extern bool_t xdr_blockCreateCli ();
-extern bool_t xdr_blockDeleteCli ();
-extern bool_t xdr_blockDelete ();
-extern bool_t xdr_blockInfoCli ();
-extern bool_t xdr_blockListCli ();
-extern bool_t xdr_blockResponse ();
-
-#endif /* K&R C */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !_BLOCK_H_RPCGEN */
diff --git a/rpc/block_clnt.c b/rpc/block_clnt.c
deleted file mode 100644
index 4c10231..0000000
--- a/rpc/block_clnt.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Please do not edit this file.
- * It was generated using rpcgen.
- */
-
-#include <memory.h> /* for memset */
-#include "block.h"
-
-/* Default timeout can be changed using clnt_control() */
-static struct timeval TIMEOUT = { 25, 0 };
-
-blockResponse *
-block_create_cli_1(blockCreateCli *argp, CLIENT *clnt)
-{
- static blockResponse clnt_res;
-
- memset((char *)&clnt_res, 0, sizeof(clnt_res));
- if (clnt_call (clnt, BLOCK_CREATE_CLI,
- (xdrproc_t) xdr_blockCreateCli, (caddr_t) argp,
- (xdrproc_t) xdr_blockResponse, (caddr_t) &clnt_res,
- TIMEOUT) != RPC_SUCCESS) {
- return (NULL);
- }
- return (&clnt_res);
-}
-
-blockResponse *
-block_list_cli_1(blockListCli *argp, CLIENT *clnt)
-{
- static blockResponse clnt_res;
-
- memset((char *)&clnt_res, 0, sizeof(clnt_res));
- if (clnt_call (clnt, BLOCK_LIST_CLI,
- (xdrproc_t) xdr_blockListCli, (caddr_t) argp,
- (xdrproc_t) xdr_blockResponse, (caddr_t) &clnt_res,
- TIMEOUT) != RPC_SUCCESS) {
- return (NULL);
- }
- return (&clnt_res);
-}
-
-blockResponse *
-block_info_cli_1(blockInfoCli *argp, CLIENT *clnt)
-{
- static blockResponse clnt_res;
-
- memset((char *)&clnt_res, 0, sizeof(clnt_res));
- if (clnt_call (clnt, BLOCK_INFO_CLI,
- (xdrproc_t) xdr_blockInfoCli, (caddr_t) argp,
- (xdrproc_t) xdr_blockResponse, (caddr_t) &clnt_res,
- TIMEOUT) != RPC_SUCCESS) {
- return (NULL);
- }
- return (&clnt_res);
-}
-
-blockResponse *
-block_delete_cli_1(blockDeleteCli *argp, CLIENT *clnt)
-{
- static blockResponse clnt_res;
-
- memset((char *)&clnt_res, 0, sizeof(clnt_res));
- if (clnt_call (clnt, BLOCK_DELETE_CLI,
- (xdrproc_t) xdr_blockDeleteCli, (caddr_t) argp,
- (xdrproc_t) xdr_blockResponse, (caddr_t) &clnt_res,
- TIMEOUT) != RPC_SUCCESS) {
- return (NULL);
- }
- return (&clnt_res);
-}
-
-blockResponse *
-block_create_1(blockCreate *argp, CLIENT *clnt)
-{
- static blockResponse clnt_res;
-
- memset((char *)&clnt_res, 0, sizeof(clnt_res));
- if (clnt_call (clnt, BLOCK_CREATE,
- (xdrproc_t) xdr_blockCreate, (caddr_t) argp,
- (xdrproc_t) xdr_blockResponse, (caddr_t) &clnt_res,
- TIMEOUT) != RPC_SUCCESS) {
- return (NULL);
- }
- return (&clnt_res);
-}
-
-blockResponse *
-block_delete_1(blockDelete *argp, CLIENT *clnt)
-{
- static blockResponse clnt_res;
-
- memset((char *)&clnt_res, 0, sizeof(clnt_res));
- if (clnt_call (clnt, BLOCK_DELETE,
- (xdrproc_t) xdr_blockDelete, (caddr_t) argp,
- (xdrproc_t) xdr_blockResponse, (caddr_t) &clnt_res,
- TIMEOUT) != RPC_SUCCESS) {
- return (NULL);
- }
- return (&clnt_res);
-}
diff --git a/rpc/block_svc.c b/rpc/block_svc.c
deleted file mode 100644
index 8c94d30..0000000
--- a/rpc/block_svc.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Please do not edit this file.
- * It was generated using rpcgen.
- */
-
-#include "block.h"
-
-#ifndef SIG_PF
-#define SIG_PF void(*)(int)
-#endif
-
-void
-gluster_block_cli_1(struct svc_req *rqstp, register SVCXPRT *transp)
-{
- union {
- blockCreateCli block_create_cli_1_arg;
- blockListCli block_list_cli_1_arg;
- blockInfoCli block_info_cli_1_arg;
- blockDeleteCli block_delete_cli_1_arg;
- } argument;
- char *result;
- xdrproc_t _xdr_argument, _xdr_result;
- char *(*local)(char *, struct svc_req *);
-
- switch (rqstp->rq_proc) {
- case NULLPROC:
- (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
- return;
-
- case BLOCK_CREATE_CLI:
- _xdr_argument = (xdrproc_t) xdr_blockCreateCli;
- _xdr_result = (xdrproc_t) xdr_blockResponse;
- local = (char *(*)(char *, struct svc_req *)) block_create_cli_1_svc;
- break;
-
- case BLOCK_LIST_CLI:
- _xdr_argument = (xdrproc_t) xdr_blockListCli;
- _xdr_result = (xdrproc_t) xdr_blockResponse;
- local = (char *(*)(char *, struct svc_req *)) block_list_cli_1_svc;
- break;
-
- case BLOCK_INFO_CLI:
- _xdr_argument = (xdrproc_t) xdr_blockInfoCli;
- _xdr_result = (xdrproc_t) xdr_blockResponse;
- local = (char *(*)(char *, struct svc_req *)) block_info_cli_1_svc;
- break;
-
- case BLOCK_DELETE_CLI:
- _xdr_argument = (xdrproc_t) xdr_blockDeleteCli;
- _xdr_result = (xdrproc_t) xdr_blockResponse;
- local = (char *(*)(char *, struct svc_req *)) block_delete_cli_1_svc;
- 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;
- }
- result = (*local)((char *)&argument, rqstp);
- if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, result)) {
- svcerr_systemerr (transp);
- }
- if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
- fprintf (stderr, "%s", "unable to free arguments");
- exit (1);
- }
- return;
-}
-
-void
-gluster_block_1(struct svc_req *rqstp, register SVCXPRT *transp)
-{
- union {
- blockCreate block_create_1_arg;
- blockDelete block_delete_1_arg;
- } argument;
- char *result;
- xdrproc_t _xdr_argument, _xdr_result;
- char *(*local)(char *, struct svc_req *);
-
- switch (rqstp->rq_proc) {
- case NULLPROC:
- (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);
- return;
-
- case BLOCK_CREATE:
- _xdr_argument = (xdrproc_t) xdr_blockCreate;
- _xdr_result = (xdrproc_t) xdr_blockResponse;
- local = (char *(*)(char *, struct svc_req *)) block_create_1_svc;
- break;
-
- case BLOCK_DELETE:
- _xdr_argument = (xdrproc_t) xdr_blockDelete;
- _xdr_result = (xdrproc_t) xdr_blockResponse;
- local = (char *(*)(char *, struct svc_req *)) block_delete_1_svc;
- 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;
- }
- result = (*local)((char *)&argument, rqstp);
- if (result != NULL && !svc_sendreply(transp, (xdrproc_t) _xdr_result, result)) {
- svcerr_systemerr (transp);
- }
- if (!svc_freeargs (transp, (xdrproc_t) _xdr_argument, (caddr_t) &argument)) {
- fprintf (stderr, "%s", "unable to free arguments");
- exit (1);
- }
- return;
-}
diff --git a/rpc/block_svc_routines.c b/rpc/block_svc_routines.c
index f72ff42..13a1132 100644
--- a/rpc/block_svc_routines.c
+++ b/rpc/block_svc_routines.c
@@ -37,6 +37,12 @@
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
+typedef enum operations {
+ CREATE_SRV = 1,
+ DELETE_SRV = 2
+} operations;
+
+
typedef struct blockRemoteObj {
struct glfs *glfs;
void *obj;
@@ -65,6 +71,13 @@ typedef struct blockRemoteCreateResp {
} blockRemoteCreateResp;
+typedef struct blockServerDef {
+ size_t nhosts;
+ char **hosts;
+} blockServerDef;
+typedef blockServerDef *blockServerDefPtr;
+
+
static char *
getLastWordNoDot(char *line)
{
diff --git a/rpc/block_xdr.c b/rpc/block_xdr.c
deleted file mode 100644
index 9a83b42..0000000
--- a/rpc/block_xdr.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Please do not edit this file.
- * It was generated using rpcgen.
- */
-
-#include "block.h"
-
-bool_t
-xdr_blockCreate (XDR *xdrs, blockCreate *objp)
-{
- if (!xdr_vector (xdrs, (char *)objp->ipaddr, 255,
- sizeof (char), (xdrproc_t) xdr_char))
- return FALSE;
- if (!xdr_vector (xdrs, (char *)objp->volume, 255,
- sizeof (char), (xdrproc_t) xdr_char))
- return FALSE;
- if (!xdr_vector (xdrs, (char *)objp->gbid, 127,
- sizeof (char), (xdrproc_t) xdr_char))
- return FALSE;
- if (!xdr_u_quad_t (xdrs, &objp->size))
- return FALSE;
- if (!xdr_vector (xdrs, (char *)objp->block_name, 255,
- sizeof (char), (xdrproc_t) xdr_char))
- return FALSE;
- return TRUE;
-}
-
-bool_t
-xdr_blockCreateCli (XDR *xdrs, blockCreateCli *objp)
-{
- if (!xdr_vector (xdrs, (char *)objp->volume, 255,
- sizeof (char), (xdrproc_t) xdr_char))
- return FALSE;
- if (!xdr_u_quad_t (xdrs, &objp->size))
- return FALSE;
- if (!xdr_u_int (xdrs, &objp->mpath))
- return FALSE;
- if (!xdr_vector (xdrs, (char *)objp->block_name, 255,
- sizeof (char), (xdrproc_t) xdr_char))
- return FALSE;
- if (!xdr_string (xdrs, &objp->block_hosts, ~0))
- return FALSE;
- return TRUE;
-}
-
-bool_t
-xdr_blockDeleteCli (XDR *xdrs, blockDeleteCli *objp)
-{
- if (!xdr_vector (xdrs, (char *)objp->block_name, 255,
- sizeof (char), (xdrproc_t) xdr_char))
- return FALSE;
- if (!xdr_vector (xdrs, (char *)objp->volume, 255,
- sizeof (char), (xdrproc_t) xdr_char))
- return FALSE;
- return TRUE;
-}
-
-bool_t
-xdr_blockDelete (XDR *xdrs, blockDelete *objp)
-{
- if (!xdr_vector (xdrs, (char *)objp->block_name, 255,
- sizeof (char), (xdrproc_t) xdr_char))
- return FALSE;
- if (!xdr_vector (xdrs, (char *)objp->gbid, 127,
- sizeof (char), (xdrproc_t) xdr_char))
- return FALSE;
- return TRUE;
-}
-
-bool_t
-xdr_blockInfoCli (XDR *xdrs, blockInfoCli *objp)
-{
- if (!xdr_vector (xdrs, (char *)objp->block_name, 255,
- sizeof (char), (xdrproc_t) xdr_char))
- return FALSE;
- if (!xdr_vector (xdrs, (char *)objp->volume, 255,
- sizeof (char), (xdrproc_t) xdr_char))
- return FALSE;
- return TRUE;
-}
-
-bool_t
-xdr_blockListCli (XDR *xdrs, blockListCli *objp)
-{
- if (!xdr_vector (xdrs, (char *)objp->volume, 255,
- sizeof (char), (xdrproc_t) xdr_char))
- return FALSE;
- if (!xdr_u_quad_t (xdrs, &objp->offset))
- return FALSE;
- return TRUE;
-}
-
-bool_t
-xdr_blockResponse (XDR *xdrs, blockResponse *objp)
-{
- if (!xdr_int (xdrs, &objp->exit))
- return FALSE;
- if (!xdr_string (xdrs, &objp->out, ~0))
- return FALSE;
- if (!xdr_u_quad_t (xdrs, &objp->offset))
- return FALSE;
- if (!xdr_bytes (xdrs, (char **)&objp->xdata.xdata_val, (u_int *) &objp->xdata.xdata_len, ~0))
- return FALSE;
- return TRUE;
-}
diff --git a/rpc/rpcl/Makefile.am b/rpc/rpcl/Makefile.am
new file mode 100644
index 0000000..3aa6f0d
--- /dev/null
+++ b/rpc/rpcl/Makefile.am
@@ -0,0 +1,22 @@
+libgbrpcxdr_la_SOURCES = block_clnt.c block_xdr.c block_svc.c
+
+noinst_LTLIBRARIES = libgbrpcxdr.la
+noinst_HEADERS = block.h block_svc.h rpc-pragmas.h
+
+EXTRA_DIST = block.x
+BUILT_SOURCES = block.h block_clnt.c block_svc.c block_xdr.c
+
+DISTCLEANFILES = Makefile.in $(BUILT_SOURCES)
+CLEANFILES = *~ $(BUILT_SOURCES)
+
+block.h: block.x
+ rpcgen -h -o $(top_builddir)/rpc/rpcl/$@ $^
+
+block_xdr.c: block.x
+ rpcgen -c -o $(top_builddir)/rpc/rpcl/$@ $^
+
+block_clnt.c: block.x
+ rpcgen -l -o $(top_builddir)/rpc/rpcl/$@ $^
+
+block_svc.c: block.x
+ rpcgen -m -o $(top_builddir)/rpc/rpcl/$@ $^
diff --git a/rpc/rpcl/block.x b/rpc/rpcl/block.x
index e876ba4..4d840ff 100644
--- a/rpc/rpcl/block.x
+++ b/rpc/rpcl/block.x
@@ -1,3 +1,8 @@
+/* rpcgen generates code that results in unused-variable warnings */
+#ifdef RPC_XDR
+%#include "rpc-pragmas.h"
+#endif
+
struct blockCreate {
char ipaddr[255];
char volume[255];
diff --git a/rpc/rpcl/block_svc.h b/rpc/rpcl/block_svc.h
new file mode 100644
index 0000000..8d1a378
--- /dev/null
+++ b/rpc/rpcl/block_svc.h
@@ -0,0 +1,20 @@
+/*
+ Copyright (c) 2017 Red Hat, Inc. <http://www.redhat.com>
+ This file is part of gluster-block.
+
+ This file is licensed to you under your choice of the GNU Lesser
+ General Public License, version 3 or any later version (LGPLv3 or
+ later), or the GNU General Public License, version 2 (GPLv2), in all
+ cases as published by the Free Software Foundation.
+*/
+
+# ifndef _BLOCK_SVC_H
+# define _BLOCK_SVC_H
+
+void
+gluster_block_cli_1(struct svc_req *rqstp, register SVCXPRT *transp);
+
+void
+gluster_block_1(struct svc_req *rqstp, register SVCXPRT *transp);
+
+# endif /* _BLOCK_SVC_H */
diff --git a/rpc/rpcl/rpc-pragmas.h b/rpc/rpcl/rpc-pragmas.h
new file mode 100644
index 0000000..91bd501
--- /dev/null
+++ b/rpc/rpcl/rpc-pragmas.h
@@ -0,0 +1,28 @@
+/*
+ Copyright (c) 2017 Red Hat, Inc. <http://www.redhat.com>
+ This file is part of gluster-block.
+
+ This file is licensed to you under your choice of the GNU Lesser
+ General Public License, version 3 or any later version (LGPLv3 or
+ later), or the GNU General Public License, version 2 (GPLv2), in all
+ cases as published by the Free Software Foundation.
+*/
+
+#ifndef RPC_PRAGMAS_H
+#define RPC_PRAGMAS_H
+
+#if defined(__GNUC__)
+#if __GNUC__ >= 4
+#if !defined(__clang__)
+#if !defined(__NetBSD__)
+#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
+#pragma GCC diagnostic ignored "-Wunused-variable"
+#endif
+#else
+#pragma clang diagnostic ignored "-Wunused-variable"
+#pragma clang diagnostic ignored "-Wunused-value"
+#endif
+#endif
+#endif
+
+#endif /* RPC_PRAGMAS_H */