From b69a4f1e31726260a07f883cefac28ed29cc6a12 Mon Sep 17 00:00:00 2001 From: "Anand V. Avati" Date: Thu, 12 Aug 2010 05:05:01 +0000 Subject: portmap functionality in glusterd Signed-off-by: Anand V. Avati Signed-off-by: Anand V. Avati BUG: 1314 (portmapper functionality) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1314 --- rpc/rpc-lib/src/protocol-common.h | 15 +++ rpc/xdr/src/Makefile.am | 6 +- rpc/xdr/src/portmap-xdr.c | 192 ++++++++++++++++++++++++++++++++++++++ rpc/xdr/src/portmap-xdr.h | 111 ++++++++++++++++++++++ rpc/xdr/src/portmap.c | 189 +++++++++++++++++++++++++++++++++++++ rpc/xdr/src/portmap.h | 95 +++++++++++++++++++ rpc/xdr/src/portmap.x | 45 +++++++++ 7 files changed, 651 insertions(+), 2 deletions(-) create mode 100644 rpc/xdr/src/portmap-xdr.c create mode 100644 rpc/xdr/src/portmap-xdr.h create mode 100644 rpc/xdr/src/portmap.c create mode 100644 rpc/xdr/src/portmap.h create mode 100644 rpc/xdr/src/portmap.x (limited to 'rpc') diff --git a/rpc/rpc-lib/src/protocol-common.h b/rpc/rpc-lib/src/protocol-common.h index 7cff79be3..95ef06aef 100644 --- a/rpc/rpc-lib/src/protocol-common.h +++ b/rpc/rpc-lib/src/protocol-common.h @@ -123,6 +123,18 @@ enum gf_cli_procnum { GF1_CLI_MAXVALUE, }; + +enum gf_pmap_procnum { + GF_PMAP_NULL = 0, + GF_PMAP_PORTBYBRICK, + GF_PMAP_BRICKBYPORT, + GF_PMAP_SIGNUP, + GF_PMAP_SIGNIN, + GF_PMAP_SIGNOUT, + GF_PMAP_MAXVALUE, +}; + + #define GLUSTER3_1_FOP_PROGRAM 1298437 /* Completely random */ #define GLUSTER3_1_FOP_VERSION 310 /* 3.1.0 */ #define GLUSTER3_1_FOP_PROCCNT GFS3_OP_MAXVALUE @@ -138,4 +150,7 @@ enum gf_cli_procnum { #define GLUSTER_HNDSK_PROGRAM 14398633 /* Completely random */ #define GLUSTER_HNDSK_VERSION 1 /* 0.0.1 */ +#define GLUSTER_PMAP_PROGRAM 34123456 +#define GLUSTER_PMAP_VERSION 1 + #endif /* !_PROTOCOL_COMMON_H */ diff --git a/rpc/xdr/src/Makefile.am b/rpc/xdr/src/Makefile.am index 79063cd64..981f319b3 100644 --- a/rpc/xdr/src/Makefile.am +++ b/rpc/xdr/src/Makefile.am @@ -12,9 +12,11 @@ libgfxdr_la_LIBADD = $(top_builddir)/libglusterfs/src/libglusterfs.la \ libgfxdr_la_SOURCES = xdr-generic.c \ glusterfs3-xdr.c glusterfs3.c \ cli1-xdr.c cli1.c \ - glusterd1-xdr.c glusterd1.c + glusterd1-xdr.c glusterd1.c \ + portmap-xdr.c portmap.c noinst_HEADERS = xdr-generic.h \ glusterfs3-xdr.h glusterfs3.h \ cli1-xdr.h cli1.h \ - glusterd1-xdr.h glusterd1.h + glusterd1-xdr.h glusterd1.h \ + portmap-xdr.h portmap.h diff --git a/rpc/xdr/src/portmap-xdr.c b/rpc/xdr/src/portmap-xdr.c new file mode 100644 index 000000000..a23eef9b3 --- /dev/null +++ b/rpc/xdr/src/portmap-xdr.c @@ -0,0 +1,192 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#include "portmap-xdr.h" + +bool_t +xdr_pmap_port_by_brick_req (XDR *xdrs, pmap_port_by_brick_req *objp) +{ + if (!xdr_string (xdrs, &objp->brick, ~0)) + return FALSE; + return TRUE; +} + +bool_t +xdr_pmap_port_by_brick_rsp (XDR *xdrs, pmap_port_by_brick_rsp *objp) +{ + register int32_t *buf; + + + if (xdrs->x_op == XDR_ENCODE) { + buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT); + if (buf == NULL) { + if (!xdr_int (xdrs, &objp->op_ret)) + return FALSE; + if (!xdr_int (xdrs, &objp->op_errno)) + return FALSE; + if (!xdr_int (xdrs, &objp->status)) + return FALSE; + if (!xdr_int (xdrs, &objp->port)) + return FALSE; + } else { + IXDR_PUT_LONG(buf, objp->op_ret); + IXDR_PUT_LONG(buf, objp->op_errno); + IXDR_PUT_LONG(buf, objp->status); + IXDR_PUT_LONG(buf, objp->port); + } + return TRUE; + } else if (xdrs->x_op == XDR_DECODE) { + buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT); + if (buf == NULL) { + if (!xdr_int (xdrs, &objp->op_ret)) + return FALSE; + if (!xdr_int (xdrs, &objp->op_errno)) + return FALSE; + if (!xdr_int (xdrs, &objp->status)) + return FALSE; + if (!xdr_int (xdrs, &objp->port)) + return FALSE; + } else { + objp->op_ret = IXDR_GET_LONG(buf); + objp->op_errno = IXDR_GET_LONG(buf); + objp->status = IXDR_GET_LONG(buf); + objp->port = IXDR_GET_LONG(buf); + } + return TRUE; + } + + if (!xdr_int (xdrs, &objp->op_ret)) + return FALSE; + if (!xdr_int (xdrs, &objp->op_errno)) + return FALSE; + if (!xdr_int (xdrs, &objp->status)) + return FALSE; + if (!xdr_int (xdrs, &objp->port)) + return FALSE; + return TRUE; +} + +bool_t +xdr_pmap_brick_by_port_req (XDR *xdrs, pmap_brick_by_port_req *objp) +{ + if (!xdr_int (xdrs, &objp->port)) + return FALSE; + return TRUE; +} + +bool_t +xdr_pmap_brick_by_port_rsp (XDR *xdrs, pmap_brick_by_port_rsp *objp) +{ + register int32_t *buf; + + + if (xdrs->x_op == XDR_ENCODE) { + buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); + if (buf == NULL) { + if (!xdr_int (xdrs, &objp->op_ret)) + return FALSE; + if (!xdr_int (xdrs, &objp->op_errno)) + return FALSE; + if (!xdr_int (xdrs, &objp->status)) + return FALSE; + + } else { + IXDR_PUT_LONG(buf, objp->op_ret); + IXDR_PUT_LONG(buf, objp->op_errno); + IXDR_PUT_LONG(buf, objp->status); + } + if (!xdr_string (xdrs, &objp->brick, ~0)) + return FALSE; + return TRUE; + } else if (xdrs->x_op == XDR_DECODE) { + buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); + if (buf == NULL) { + if (!xdr_int (xdrs, &objp->op_ret)) + return FALSE; + if (!xdr_int (xdrs, &objp->op_errno)) + return FALSE; + if (!xdr_int (xdrs, &objp->status)) + return FALSE; + + } else { + objp->op_ret = IXDR_GET_LONG(buf); + objp->op_errno = IXDR_GET_LONG(buf); + objp->status = IXDR_GET_LONG(buf); + } + if (!xdr_string (xdrs, &objp->brick, ~0)) + return FALSE; + return TRUE; + } + + if (!xdr_int (xdrs, &objp->op_ret)) + return FALSE; + if (!xdr_int (xdrs, &objp->op_errno)) + return FALSE; + if (!xdr_int (xdrs, &objp->status)) + return FALSE; + if (!xdr_string (xdrs, &objp->brick, ~0)) + return FALSE; + return TRUE; +} + +bool_t +xdr_pmap_signup_req (XDR *xdrs, pmap_signup_req *objp) +{ + if (!xdr_string (xdrs, &objp->brick, ~0)) + return FALSE; + if (!xdr_int (xdrs, &objp->port)) + return FALSE; + return TRUE; +} + +bool_t +xdr_pmap_signup_rsp (XDR *xdrs, pmap_signup_rsp *objp) +{ + if (!xdr_int (xdrs, &objp->op_ret)) + return FALSE; + if (!xdr_int (xdrs, &objp->op_errno)) + return FALSE; + return TRUE; +} + +bool_t +xdr_pmap_signin_req (XDR *xdrs, pmap_signin_req *objp) +{ + if (!xdr_string (xdrs, &objp->brick, ~0)) + return FALSE; + if (!xdr_int (xdrs, &objp->port)) + return FALSE; + return TRUE; +} + +bool_t +xdr_pmap_signin_rsp (XDR *xdrs, pmap_signin_rsp *objp) +{ + if (!xdr_int (xdrs, &objp->op_ret)) + return FALSE; + if (!xdr_int (xdrs, &objp->op_errno)) + return FALSE; + return TRUE; +} + +bool_t +xdr_pmap_signout_req (XDR *xdrs, pmap_signout_req *objp) +{ + if (!xdr_string (xdrs, &objp->brick, ~0)) + return FALSE; + if (!xdr_int (xdrs, &objp->port)) + return FALSE; + return TRUE; +} + +bool_t +xdr_pmap_signout_rsp (XDR *xdrs, pmap_signout_rsp *objp) +{ + if (!xdr_int (xdrs, &objp->op_ret)) + return FALSE; + if (!xdr_int (xdrs, &objp->op_errno)) + return FALSE; + return TRUE; +} diff --git a/rpc/xdr/src/portmap-xdr.h b/rpc/xdr/src/portmap-xdr.h new file mode 100644 index 000000000..7f8141ab2 --- /dev/null +++ b/rpc/xdr/src/portmap-xdr.h @@ -0,0 +1,111 @@ +/* + * Please do not edit this file. + * It was generated using rpcgen. + */ + +#ifndef _PORTMAP_H_RPCGEN +#define _PORTMAP_H_RPCGEN + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +struct pmap_port_by_brick_req { + char *brick; +}; +typedef struct pmap_port_by_brick_req pmap_port_by_brick_req; + +struct pmap_port_by_brick_rsp { + int op_ret; + int op_errno; + int status; + int port; +}; +typedef struct pmap_port_by_brick_rsp pmap_port_by_brick_rsp; + +struct pmap_brick_by_port_req { + int port; +}; +typedef struct pmap_brick_by_port_req pmap_brick_by_port_req; + +struct pmap_brick_by_port_rsp { + int op_ret; + int op_errno; + int status; + char *brick; +}; +typedef struct pmap_brick_by_port_rsp pmap_brick_by_port_rsp; + +struct pmap_signup_req { + char *brick; + int port; +}; +typedef struct pmap_signup_req pmap_signup_req; + +struct pmap_signup_rsp { + int op_ret; + int op_errno; +}; +typedef struct pmap_signup_rsp pmap_signup_rsp; + +struct pmap_signin_req { + char *brick; + int port; +}; +typedef struct pmap_signin_req pmap_signin_req; + +struct pmap_signin_rsp { + int op_ret; + int op_errno; +}; +typedef struct pmap_signin_rsp pmap_signin_rsp; + +struct pmap_signout_req { + char *brick; + int port; +}; +typedef struct pmap_signout_req pmap_signout_req; + +struct pmap_signout_rsp { + int op_ret; + int op_errno; +}; +typedef struct pmap_signout_rsp pmap_signout_rsp; + +/* the xdr functions */ + +#if defined(__STDC__) || defined(__cplusplus) +extern bool_t xdr_pmap_port_by_brick_req (XDR *, pmap_port_by_brick_req*); +extern bool_t xdr_pmap_port_by_brick_rsp (XDR *, pmap_port_by_brick_rsp*); +extern bool_t xdr_pmap_brick_by_port_req (XDR *, pmap_brick_by_port_req*); +extern bool_t xdr_pmap_brick_by_port_rsp (XDR *, pmap_brick_by_port_rsp*); +extern bool_t xdr_pmap_signup_req (XDR *, pmap_signup_req*); +extern bool_t xdr_pmap_signup_rsp (XDR *, pmap_signup_rsp*); +extern bool_t xdr_pmap_signin_req (XDR *, pmap_signin_req*); +extern bool_t xdr_pmap_signin_rsp (XDR *, pmap_signin_rsp*); +extern bool_t xdr_pmap_signout_req (XDR *, pmap_signout_req*); +extern bool_t xdr_pmap_signout_rsp (XDR *, pmap_signout_rsp*); + +#else /* K&R C */ +extern bool_t xdr_pmap_port_by_brick_req (); +extern bool_t xdr_pmap_port_by_brick_rsp (); +extern bool_t xdr_pmap_brick_by_port_req (); +extern bool_t xdr_pmap_brick_by_port_rsp (); +extern bool_t xdr_pmap_signup_req (); +extern bool_t xdr_pmap_signup_rsp (); +extern bool_t xdr_pmap_signin_req (); +extern bool_t xdr_pmap_signin_rsp (); +extern bool_t xdr_pmap_signout_req (); +extern bool_t xdr_pmap_signout_rsp (); + +#endif /* K&R C */ + +#ifdef __cplusplus +} +#endif + +#endif /* !_PORTMAP_H_RPCGEN */ diff --git a/rpc/xdr/src/portmap.c b/rpc/xdr/src/portmap.c new file mode 100644 index 000000000..51c44a7d6 --- /dev/null +++ b/rpc/xdr/src/portmap.c @@ -0,0 +1,189 @@ +/* + Copyright (c) 2010 Gluster, Inc. + This file is part of GlusterFS. + + GlusterFS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + GlusterFS is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see + . +*/ + + +#include "portmap.h" + + +ssize_t +xdr_to_pmap_port_by_brick_req (struct iovec inmsg, void *args) +{ + return xdr_to_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_port_by_brick_req); +} + + +ssize_t +xdr_to_pmap_port_by_brick_rsp (struct iovec inmsg, void *args) +{ + return xdr_to_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_port_by_brick_rsp); +} + + +ssize_t +xdr_from_pmap_port_by_brick_req (struct iovec inmsg, void *args) +{ + return xdr_serialize_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_port_by_brick_req); +} + + +ssize_t +xdr_from_pmap_port_by_brick_rsp (struct iovec inmsg, void *args) +{ + return xdr_serialize_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_port_by_brick_rsp); +} + + + +ssize_t +xdr_to_pmap_brick_by_port_req (struct iovec inmsg, void *args) +{ + return xdr_to_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_brick_by_port_req); +} + + +ssize_t +xdr_to_pmap_brick_by_port_rsp (struct iovec inmsg, void *args) +{ + return xdr_to_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_brick_by_port_rsp); +} + + +ssize_t +xdr_from_pmap_brick_by_port_req (struct iovec inmsg, void *args) +{ + return xdr_serialize_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_brick_by_port_req); +} + + +ssize_t +xdr_from_pmap_brick_by_port_rsp (struct iovec inmsg, void *args) +{ + return xdr_serialize_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_brick_by_port_rsp); +} + + + + +ssize_t +xdr_to_pmap_signup_req (struct iovec inmsg, void *args) +{ + return xdr_to_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_signup_req); +} + + +ssize_t +xdr_to_pmap_signup_rsp (struct iovec inmsg, void *args) +{ + return xdr_to_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_signup_rsp); +} + + +ssize_t +xdr_from_pmap_signup_req (struct iovec inmsg, void *args) +{ + return xdr_serialize_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_signup_req); +} + + +ssize_t +xdr_from_pmap_signup_rsp (struct iovec inmsg, void *args) +{ + return xdr_serialize_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_signup_rsp); +} + + + + +ssize_t +xdr_to_pmap_signin_req (struct iovec inmsg, void *args) +{ + return xdr_to_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_signin_req); +} + + +ssize_t +xdr_to_pmap_signin_rsp (struct iovec inmsg, void *args) +{ + return xdr_to_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_signin_rsp); +} + + +ssize_t +xdr_from_pmap_signin_req (struct iovec inmsg, void *args) +{ + return xdr_serialize_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_signin_req); +} + + +ssize_t +xdr_from_pmap_signin_rsp (struct iovec inmsg, void *args) +{ + return xdr_serialize_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_signin_rsp); +} + + + + +ssize_t +xdr_to_pmap_signout_req (struct iovec inmsg, void *args) +{ + return xdr_to_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_signout_req); +} + + +ssize_t +xdr_to_pmap_signout_rsp (struct iovec inmsg, void *args) +{ + return xdr_to_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_signout_rsp); +} + + +ssize_t +xdr_from_pmap_signout_req (struct iovec inmsg, void *args) +{ + return xdr_serialize_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_signout_req); +} + + +ssize_t +xdr_from_pmap_signout_rsp (struct iovec inmsg, void *args) +{ + return xdr_serialize_generic (inmsg, (void *)args, + (xdrproc_t)xdr_pmap_signout_rsp); +} + diff --git a/rpc/xdr/src/portmap.h b/rpc/xdr/src/portmap.h new file mode 100644 index 000000000..1cfcca3eb --- /dev/null +++ b/rpc/xdr/src/portmap.h @@ -0,0 +1,95 @@ +/* + Copyright (c) 2010 Gluster, Inc. + This file is part of GlusterFS. + + GlusterFS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + GlusterFS is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see + . +*/ + + +#ifndef _PORTMAP_H +#define _PORTMAP_H + +#include + +#include "xdr-generic.h" +#include "portmap-xdr.h" + + +ssize_t +xdr_to_pmap_port_by_brick_req (struct iovec inmsg, void *args); + +ssize_t +xdr_to_pmap_port_by_brick_rsp (struct iovec inmsg, void *args); + +ssize_t +xdr_from_pmap_port_by_brick_req (struct iovec outmsg, void *args); + +ssize_t +xdr_from_pmap_port_by_brick_rsp (struct iovec outmsg, void *args); + + +ssize_t +xdr_to_pmap_brick_by_port_req (struct iovec inmsg, void *args); + +ssize_t +xdr_to_pmap_brick_by_port_rsp (struct iovec inmsg, void *args); + +ssize_t +xdr_from_pmap_brick_by_port_req (struct iovec outmsg, void *args); + +ssize_t +xdr_from_pmap_brick_by_port_rsp (struct iovec outmsg, void *args); + + +ssize_t +xdr_from_pmap_signup_req (struct iovec msg, void *args); + +ssize_t +xdr_from_pmap_signup_rsp (struct iovec msg, void *args); + +ssize_t +xdr_to_pmap_signup_req (struct iovec msg, void *args); + +ssize_t +xdr_to_pmap_signup_rsp (struct iovec msg, void *args); + + +ssize_t +xdr_from_pmap_signin_req (struct iovec msg, void *args); + +ssize_t +xdr_from_pmap_signin_rsp (struct iovec msg, void *args); + +ssize_t +xdr_to_pmap_signin_req (struct iovec msg, void *args); + +ssize_t +xdr_to_pmap_signin_rsp (struct iovec msg, void *args); + + +ssize_t +xdr_from_pmap_signout_req (struct iovec msg, void *args); + +ssize_t +xdr_from_pmap_signout_rsp (struct iovec msg, void *args); + +ssize_t +xdr_to_pmap_signout_req (struct iovec msg, void *args); + +ssize_t +xdr_to_pmap_signout_rsp (struct iovec msg, void *args); + + +#endif /* !_PORTMAP_H */ diff --git a/rpc/xdr/src/portmap.x b/rpc/xdr/src/portmap.x new file mode 100644 index 000000000..6e9f07c45 --- /dev/null +++ b/rpc/xdr/src/portmap.x @@ -0,0 +1,45 @@ + +struct pmap_port_by_brick_req { + string brick<>; +}; + +struct pmap_port_by_brick_rsp { + int op_ret; + int op_errno; + int status; + int port; +}; + + +struct pmap_brick_by_port_req { + int port; +}; + +struct pmap_brick_by_port_rsp { + int op_ret; + int op_errno; + int status; + string brick<>; +}; + + +struct pmap_signup_req { +}; + +struct pmap_signup_rsp { +}; + + +struct pmap_signon_req { +}; + +struct pmap_signon_rsp { +}; + + +struct pmap_signoff_req { +}; + +struct pmap_signoff_rsp { +}; + -- cgit