diff options
| -rw-r--r-- | rpc/rpc-lib/src/Makefile.am | 3 | ||||
| -rw-r--r-- | rpc/rpc-lib/src/rpc-clnt.c | 6 | ||||
| -rw-r--r-- | rpc/rpc-lib/src/rpc-common.c | 115 | ||||
| -rw-r--r-- | rpc/rpc-lib/src/rpcsvc.c | 108 | ||||
| -rw-r--r-- | rpc/rpc-lib/src/xdr-common.h | 45 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client-handshake.c | 140 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client.c | 3 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client.h | 1 | ||||
| -rw-r--r-- | xlators/protocol/lib/src/glusterfs-xdr.c | 32 | ||||
| -rw-r--r-- | xlators/protocol/lib/src/glusterfs-xdr.h | 23 | ||||
| -rw-r--r-- | xlators/protocol/lib/src/glusterfs3.x | 21 | ||||
| -rw-r--r-- | xlators/protocol/lib/src/msg-xdr.c | 32 | ||||
| -rw-r--r-- | xlators/protocol/lib/src/msg-xdr.h | 12 | ||||
| -rw-r--r-- | xlators/protocol/lib/src/protocol-common.h | 1 | ||||
| -rw-r--r-- | xlators/protocol/server/src/server-handshake.c | 57 | 
15 files changed, 351 insertions, 248 deletions
diff --git a/rpc/rpc-lib/src/Makefile.am b/rpc/rpc-lib/src/Makefile.am index 4df8888a08d..986eb95cebc 100644 --- a/rpc/rpc-lib/src/Makefile.am +++ b/rpc/rpc-lib/src/Makefile.am @@ -2,7 +2,8 @@ lib_LTLIBRARIES = libgfrpc.la  libgfrpc_la_LDFLAGS = -module -avoidversion  libgfrpc_la_SOURCES = auth-unix.c rpcsvc-auth.c rpcsvc.c auth-null.c \ -	rpc-transport.c xdr-rpc.c xdr-rpcclnt.c rpc-clnt.c auth-glusterfs.c +	rpc-transport.c xdr-rpc.c xdr-rpcclnt.c rpc-clnt.c auth-glusterfs.c \ +	rpc-common.c  libgfrpc_la_LIBADD = $(top_builddir)/libglusterfs/src/libglusterfs.la  noinst_HEADERS = rpcsvc.h rpc-transport.h xdr-common.h xdr-rpc.h xdr-rpcclnt.h \ diff --git a/rpc/rpc-lib/src/rpc-clnt.c b/rpc/rpc-lib/src/rpc-clnt.c index 84fdb9bb55f..b41275c2c8a 100644 --- a/rpc/rpc-lib/src/rpc-clnt.c +++ b/rpc/rpc-lib/src/rpc-clnt.c @@ -1202,9 +1202,9 @@ rpc_clnt_submit (struct rpc_clnt *rpc, rpc_clnt_prog_t *prog,                  if (conn->connected ||                      /* FIXME: hack!! hack!! find a neater way to do this */ -                    ((prog->prognum == GLUSTER_HNDSK_PROGRAM) && -                     ((procnum == GF_HNDSK_SETVOLUME) || -                      (procnum == GF_HNDSK_DUMP_VERSION)))) { +                    (((prog->prognum == GLUSTER_HNDSK_PROGRAM) && +                     (procnum == GF_HNDSK_SETVOLUME)) || +                     (prog->prognum == GLUSTER_DUMP_PROGRAM))) {                          if (proghdr) {                                  proglen += iov_length (proghdr, proghdrcount);                          } diff --git a/rpc/rpc-lib/src/rpc-common.c b/rpc/rpc-lib/src/rpc-common.c new file mode 100644 index 00000000000..ffd0c8d2837 --- /dev/null +++ b/rpc/rpc-lib/src/rpc-common.c @@ -0,0 +1,115 @@ + +#include "xdr-common.h" + +ssize_t +xdr_serialize_generic (struct iovec outmsg, void *res, xdrproc_t proc) +{ +        ssize_t ret = -1; +        XDR     xdr; + +        if ((!outmsg.iov_base) || (!res) || (!proc)) +                return -1; + +        xdrmem_create (&xdr, outmsg.iov_base, (unsigned int)outmsg.iov_len, +                       XDR_ENCODE); + +        if (!proc (&xdr, res)) { +                ret = -1; +                goto ret; +        } + +        ret = xdr_encoded_length (xdr); + +ret: +        return ret; +} + + +ssize_t +xdr_to_generic (struct iovec inmsg, void *args, xdrproc_t proc) +{ +        XDR     xdr; +        ssize_t ret = -1; + +        if ((!inmsg.iov_base) || (!args) || (!proc)) +                return -1; + +        xdrmem_create (&xdr, inmsg.iov_base, (unsigned int)inmsg.iov_len, +                       XDR_DECODE); + +        if (!proc (&xdr, args)) { +                ret  = -1; +                goto ret; +        } + +        ret = xdr_decoded_length (xdr); +ret: +        return ret; +} + + +bool_t +xdr_gf_dump_req (XDR *xdrs, gf_dump_req *objp) +{ +	 if (!xdr_u_quad_t (xdrs, &objp->gfs_id)) +		 return FALSE; +	return TRUE; +} + +bool_t +xdr_gf_prog_detail (XDR *xdrs, gf_prog_detail *objp) +{ +	 if (!xdr_string (xdrs, &objp->progname, ~0)) +		 return FALSE; +	 if (!xdr_u_quad_t (xdrs, &objp->prognum)) +		 return FALSE; +	 if (!xdr_u_quad_t (xdrs, &objp->progver)) +		 return FALSE; +	 if (!xdr_pointer (xdrs, (char **)&objp->next, sizeof (gf_prog_detail), (xdrproc_t) xdr_gf_prog_detail)) +		 return FALSE; +	return TRUE; +} + +bool_t +xdr_gf_dump_rsp (XDR *xdrs, gf_dump_rsp *objp) +{ +	 if (!xdr_u_quad_t (xdrs, &objp->gfs_id)) +		 return FALSE; +	 if (!xdr_int (xdrs, &objp->op_ret)) +		 return FALSE; +	 if (!xdr_int (xdrs, &objp->op_errno)) +		 return FALSE; +	 if (!xdr_pointer (xdrs, (char **)&objp->prog, sizeof (gf_prog_detail), (xdrproc_t) xdr_gf_prog_detail)) +		 return FALSE; +	return TRUE; +} + + +ssize_t +xdr_serialize_dump_rsp (struct iovec outmsg, void *rsp) +{ +        return xdr_serialize_generic (outmsg, (void *)rsp, +                                      (xdrproc_t)xdr_gf_dump_rsp); +} + +ssize_t +xdr_to_dump_req (struct iovec inmsg, void *args) +{ +        return xdr_to_generic (inmsg, (void *)args, +                               (xdrproc_t)xdr_gf_dump_req); +} + + +ssize_t +xdr_from_dump_req (struct iovec outmsg, void *rsp) +{ +        return xdr_serialize_generic (outmsg, (void *)rsp, +                                      (xdrproc_t)xdr_gf_dump_req); +} + +ssize_t +xdr_to_dump_rsp (struct iovec inmsg, void *args) +{ +        return xdr_to_generic (inmsg, (void *)args, +                               (xdrproc_t)xdr_gf_dump_rsp); +} diff --git a/rpc/rpc-lib/src/rpcsvc.c b/rpc/rpc-lib/src/rpcsvc.c index c39a880886d..bb4e37ef8b0 100644 --- a/rpc/rpc-lib/src/rpcsvc.c +++ b/rpc/rpc-lib/src/rpcsvc.c @@ -33,6 +33,7 @@  #include "xdr-rpc.h"  #include "iobuf.h"  #include "globals.h" +#include "xdr-common.h"  #include <errno.h>  #include <pthread.h> @@ -45,6 +46,8 @@  #include <stdarg.h>  #include <stdio.h> +struct rpcsvc_program gluster_dump_prog; +  #define rpcsvc_alloc_request(con, request)                              \          do {                                                            \ @@ -1931,6 +1934,89 @@ free_prog:          return ret;  } +static void +free_prog_details (gf_dump_rsp *rsp) +{ +        gf_prog_detail *prev = NULL; +        gf_prog_detail *trav = NULL; + +        trav = rsp->prog; +        while (trav) { +                prev = trav; +                trav = trav->next; +                GF_FREE (prev); +        } +} + +static int +build_prog_details (rpcsvc_request_t *req, gf_dump_rsp *rsp) +{ +        int               ret     = -1; +        rpcsvc_program_t *program = NULL; +        gf_prog_detail   *prog    = NULL; +        gf_prog_detail   *prev    = NULL; + +        if (!req || !req->conn || !req->conn->svc) +                goto out; + +        list_for_each_entry (program, &req->conn->svc->programs, program) { +                prog = GF_CALLOC (1, sizeof (*prog), 0); +                if (!prog) +                        goto out; +                prog->progname = program->progname; +                prog->prognum  = program->prognum; +                prog->progver  = program->progver; +                if (!rsp->prog) +                        rsp->prog = prog; +                if (prev) +                        prev->next = prog; +                prev = prog; +        } +        if (prev) +                ret = 0; +out: +        return ret; +} + +static int +rpcsvc_dump (rpcsvc_request_t *req) +{ +        char         rsp_buf[8 * 1024] = {0,}; +        gf_dump_rsp  rsp      = {0,}; +        struct iovec iov      = {0,}; +        int          op_errno = EINVAL; +        int          ret      = -1; + +        if (!req) +                goto fail; + +        ret = build_prog_details (req, &rsp); +        if (ret < 0) { +                op_errno = -ret; +                goto fail; +        } + +fail: +        rsp.op_errno = gf_errno_to_error (op_errno); +        rsp.op_ret   = ret; + +        iov.iov_base = rsp_buf; +        iov.iov_len  = (8 * 1024); + +        ret = xdr_serialize_dump_rsp (iov, &rsp); +        if (ret < 0) { +                req->rpc_err = GARBAGE_ARGS; +                op_errno = EINVAL; +                goto fail; +        } + +        ret = rpcsvc_submit_generic (req, &iov, 1, NULL, 0, +                                     NULL); + +        free_prog_details (&rsp); + +        return 0; +}  int  rpcsvc_init_options (rpcsvc_t *svc, dict_t *options) @@ -2004,6 +2090,12 @@ rpcsvc_init (glusterfs_ctx_t *ctx, dict_t *options)          svc->listener = listener; +        ret = rpcsvc_program_register (svc, gluster_dump_prog); +        if (ret) { +                gf_log (GF_RPCSVC, GF_LOG_ERROR, +                        "failed to register DUMP program"); +                goto free_svc; +        }          ret = 0;  free_svc:          if (ret == -1) { @@ -2013,3 +2105,19 @@ free_svc:          return svc;  } + + +rpcsvc_actor_t gluster_dump_actors[] = { +        [GF_DUMP_NULL] = {"NULL", GF_DUMP_NULL, NULL, NULL, NULL }, +        [GF_DUMP_DUMP] = {"DUMP", GF_DUMP_DUMP, rpcsvc_dump, NULL, NULL }, +        [GF_DUMP_MAXVALUE] = {"MAXVALUE", GF_DUMP_MAXVALUE, NULL, NULL, NULL }, +}; + + +struct rpcsvc_program gluster_dump_prog = { +        .progname  = "GF-DUMP", +        .prognum   = GLUSTER_DUMP_PROGRAM, +        .progver   = GLUSTER_DUMP_VERSION, +        .actors    = gluster_dump_actors, +        .numactors = 2, +}; diff --git a/rpc/rpc-lib/src/xdr-common.h b/rpc/rpc-lib/src/xdr-common.h index 0c9ffb2f827..7ba1372529c 100644 --- a/rpc/rpc-lib/src/xdr-common.h +++ b/rpc/rpc-lib/src/xdr-common.h @@ -27,6 +27,16 @@  #include <rpc/rpc.h> +enum { +        GF_DUMP_NULL, +        GF_DUMP_DUMP, +        GF_DUMP_MAXVALUE, +} gf_dump_procnum_t; + +#define GLUSTER_DUMP_PROGRAM 123451501 /* Completely random */ +#define GLUSTER_DUMP_VERSION 1 + +  #if GF_DARWIN_HOST_OS  #define xdr_u_quad_t xdr_u_int64_t  #define xdr_quad_t   xdr_int64_t @@ -43,8 +53,41 @@ struct auth_glusterfs_parms {  };  typedef struct auth_glusterfs_parms auth_glusterfs_parms; -bool_t +struct gf_dump_req { +	u_quad_t gfs_id; +}; +typedef struct gf_dump_req gf_dump_req; + +struct gf_prog_detail { +	char    *progname; +	u_quad_t prognum; +	u_quad_t progver; +	struct gf_prog_detail *next; +}; +typedef struct gf_prog_detail gf_prog_detail; + +struct gf_dump_rsp { +	u_quad_t gfs_id; +	int op_ret; +	int op_errno; +	struct gf_prog_detail *prog; +}; +typedef struct gf_dump_rsp gf_dump_rsp; + +extern bool_t  xdr_auth_glusterfs_parms (XDR *xdrs, auth_glusterfs_parms *objp); +extern bool_t xdr_gf_dump_req (XDR *, gf_dump_req*); +extern bool_t xdr_gf_prog_detail (XDR *, gf_prog_detail*); +extern bool_t xdr_gf_dump_rsp (XDR *, gf_dump_rsp*); + +ssize_t +xdr_serialize_dump_rsp (struct iovec outmsg, void *rsp); +ssize_t +xdr_to_dump_req (struct iovec inmsg, void *args); +ssize_t +xdr_from_dump_req (struct iovec outmsg, void *rsp); +ssize_t +xdr_to_dump_rsp (struct iovec inmsg, void *args);  #define XDR_BYTES_PER_UNIT      4 diff --git a/xlators/protocol/client/src/client-handshake.c b/xlators/protocol/client/src/client-handshake.c index 1c239d0cb0f..f45cc84aa61 100644 --- a/xlators/protocol/client/src/client-handshake.c +++ b/xlators/protocol/client/src/client-handshake.c @@ -596,88 +596,59 @@ fail:  }  int -select_server_supported_programs (xlator_t *this, char *msg) +select_server_supported_programs (xlator_t *this, gf_prog_detail *prog)  { -        clnt_conf_t *conf        = NULL; -        char        *tmp_str     = NULL; -        char        *prog_str    = NULL; -        char        *dup_str     = NULL; -        char        *tmp_str1    = NULL; -        char        *tmp_msg     = NULL; -        char        *progname    = NULL; -        char        *progver_str = NULL; -        char        *prognum_str = NULL; -        int          ret         = -1; -        int          progver     = 0; -        int          prognum     = 0; - -        if (!this || !msg) +        gf_prog_detail *trav     = NULL; +        clnt_conf_t    *conf     = NULL; +        int             ret      = -1; + +        if (!this || !prog)                  goto out;          conf = this->private; +        trav = prog; -        /* Reply in "Name:Program-Number:Program-Version,..." format */ -        tmp_msg = gf_strdup (msg); -        prog_str = strtok_r (tmp_msg, ",", &tmp_str); -        while (prog_str) { -                dup_str = gf_strdup (prog_str); - -                progname = strtok_r (dup_str, ":", &tmp_str1); -                prognum_str = strtok_r (NULL, ":", &tmp_str1); -                if (!prognum_str) { -                        gf_log (this->name, GF_LOG_WARNING, -                                "Supported versions not formatted"); -                        goto out; -                } -                sscanf (prognum_str, "%d", &prognum); -                progver_str = strtok_r (NULL, ":", &tmp_str1); -                if (!progver_str) { -                        gf_log (this->name, GF_LOG_WARNING, -                                "Supported versions not formatted"); -                        goto out; -                } -                sscanf (progver_str, "%d", &progver); - +        while (trav) {                  /* Select 'programs' */ -                if ((clnt3_1_fop_prog.prognum == prognum) && -                    (clnt3_1_fop_prog.progver == progver)) { +                if ((clnt3_1_fop_prog.prognum == trav->prognum) && +                    (clnt3_1_fop_prog.progver == trav->progver)) {                          conf->fops = &clnt3_1_fop_prog;                          gf_log (this->name, GF_LOG_INFO, -                                "Using Program %s, Num (%s), Version (%s)", -                                progname, prognum_str, progver_str); +                                "Using Program %s, Num (%"PRId64"), " +                                "Version (%"PRId64")", +                                trav->progname, trav->prognum, trav->progver);                          ret = 0;                  } -                if ((clnt3_1_mgmt_prog.prognum == prognum) && -                    (clnt3_1_mgmt_prog.progver == progver)) { +                if ((clnt3_1_mgmt_prog.prognum == trav->prognum) && +                    (clnt3_1_mgmt_prog.progver == trav->progver)) {                          conf->mgmt = &clnt3_1_mgmt_prog;                          gf_log (this->name, GF_LOG_INFO, -                                "Using Program %s, Num (%s), Version (%s)", -                                progname, prognum_str, progver_str); +                                "Using Program %s, Num (%"PRId64"), " +                                "Version (%"PRId64")", +                                trav->progname, trav->prognum, trav->progver);                          ret = 0;                  } - -                prog_str = strtok_r (NULL, ",", &tmp_str); -                GF_FREE (dup_str); +                if (ret) { +                        gf_log (this->name, GF_LOG_TRACE, +                                "%s (%"PRId64") not supported", trav->progname, +                                trav->progver); +                } +                trav = trav->next;          } -        if (ret) { -                gf_log (this->name, GF_LOG_ERROR, -                        "none of the server versions are supported by client"); -        } -        ret = 0;  out: -        if (tmp_msg) -                GF_FREE (tmp_msg);          return ret;  }  int  client_dump_version_cbk (struct rpc_req *req, struct iovec *iov, int count, void *myframe)  { -        gf_dump_version_rsp  rsp   = {0,}; -        call_frame_t            *frame = NULL; -        clnt_conf_t             *conf = NULL; -        int                      ret   = 0; +        gf_dump_rsp     rsp   = {0,}; +        gf_prog_detail *trav  = NULL; +        gf_prog_detail *next  = NULL; +        call_frame_t   *frame = NULL; +        clnt_conf_t    *conf  = NULL; +        int             ret   = 0;          frame = myframe;          conf  = frame->this->private; @@ -687,7 +658,7 @@ client_dump_version_cbk (struct rpc_req *req, struct iovec *iov, int count, void                  goto out;          } -        ret = xdr_to_dump_version_rsp (*iov, &rsp); +        ret = xdr_to_dump_rsp (*iov, &rsp);          if (ret < 0) {                  gf_log ("", GF_LOG_ERROR, "error");                  goto out; @@ -700,12 +671,11 @@ client_dump_version_cbk (struct rpc_req *req, struct iovec *iov, int count, void          /* Check for the proper version string */          /* Reply in "Name:Program-Number:Program-Version,..." format */ -        ret = select_server_supported_programs (frame->this, -                                                rsp.msg.msg_val); +        ret = select_server_supported_programs (frame->this, rsp.prog);          if (ret) {                  gf_log (frame->this->name, GF_LOG_ERROR,                          "Server versions are not present in this " -                        "release (%s)", rsp.msg.msg_val); +                        "release");                  goto out;          } @@ -713,8 +683,13 @@ client_dump_version_cbk (struct rpc_req *req, struct iovec *iov, int count, void  out:          /* don't use GF_FREE, buffer was allocated by libc */ -        if (rsp.msg.msg_val) { -                free (rsp.msg.msg_val); +        if (rsp.prog) { +                trav = rsp.prog; +                while (trav) { +                        next = trav->next; +                        free (trav); +                        trav = next; +                }          }          STACK_DESTROY (frame->root); @@ -724,10 +699,10 @@ out:  int  client_handshake (xlator_t *this, struct rpc_clnt *rpc)  { -        call_frame_t        *frame = NULL; -        clnt_conf_t         *conf  = NULL; -        gf_dump_version_req  req   = {0,}; -        int                  ret   = 0; +        call_frame_t *frame = NULL; +        clnt_conf_t  *conf  = NULL; +        gf_dump_req   req   = {0,}; +        int           ret   = 0;          conf = this->private;          if (!conf->handshake) @@ -737,24 +712,17 @@ client_handshake (xlator_t *this, struct rpc_clnt *rpc)          if (!frame)                  goto out; -        req.key = "fop-handshake"; -        req.gfs_id = 123456; -        ret = client_submit_request (this, &req, frame, conf->handshake, -                                     GF_HNDSK_DUMP_VERSION, -                                     client_dump_version_cbk, -                                     NULL, xdr_from_dump_version_req); +        req.gfs_id = 0xbabe; +        ret = client_submit_request (this, &req, frame, conf->dump, +                                     GF_DUMP_DUMP, client_dump_version_cbk, +                                     NULL, xdr_from_dump_req);  out:          return ret;  } - -/* */ -/* This table should ideally remain same irrespective of versions */ -  char *clnt_handshake_procs[GF_HNDSK_MAXVALUE] = {          [GF_HNDSK_NULL]         = "NULL", -        [GF_HNDSK_DUMP_VERSION] = "VERSION",          [GF_HNDSK_SETVOLUME]    = "SETVOLUME",          [GF_HNDSK_GETSPEC]      = "GETSPEC",          [GF_HNDSK_PING]         = "PING", @@ -766,3 +734,15 @@ rpc_clnt_prog_t clnt_handshake_prog = {          .progver   = GLUSTER_HNDSK_VERSION,          .procnames = clnt_handshake_procs,  }; + +char *clnt_dump_proc[GF_DUMP_MAXVALUE] = { +        [GF_DUMP_NULL] = "NULL", +        [GF_DUMP_DUMP] = "DUMP", +}; + +rpc_clnt_prog_t clnt_dump_prog = { +        .progname  = "GF-DUMP", +        .prognum   = GLUSTER_DUMP_PROGRAM, +        .progver   = GLUSTER_DUMP_VERSION, +        .procnames = clnt_dump_proc, +}; diff --git a/xlators/protocol/client/src/client.c b/xlators/protocol/client/src/client.c index 6ad5944007f..97e638dfcbe 100644 --- a/xlators/protocol/client/src/client.c +++ b/xlators/protocol/client/src/client.c @@ -32,6 +32,8 @@  #include "compat-errno.h"  extern rpc_clnt_prog_t clnt_handshake_prog; +extern rpc_clnt_prog_t clnt_dump_prog; +  int  client_handshake (xlator_t *this, struct rpc_clnt *rpc); @@ -1558,6 +1560,7 @@ init (xlator_t *this)                  goto out;          conf->handshake = &clnt_handshake_prog; +        conf->dump      = &clnt_dump_prog;          this->private = conf;          ret = 0; diff --git a/xlators/protocol/client/src/client.h b/xlators/protocol/client/src/client.h index 1422c7abeda..26679cf630a 100644 --- a/xlators/protocol/client/src/client.h +++ b/xlators/protocol/client/src/client.h @@ -48,6 +48,7 @@ typedef struct clnt_conf {          rpc_clnt_prog_t       *fops;          rpc_clnt_prog_t       *mgmt;          rpc_clnt_prog_t       *handshake; +        rpc_clnt_prog_t       *dump;  } clnt_conf_t;  typedef struct _client_fd_ctx { diff --git a/xlators/protocol/lib/src/glusterfs-xdr.c b/xlators/protocol/lib/src/glusterfs-xdr.c index cbc4d7cef47..92b8c2ed247 100644 --- a/xlators/protocol/lib/src/glusterfs-xdr.c +++ b/xlators/protocol/lib/src/glusterfs-xdr.c @@ -1667,38 +1667,6 @@ xdr_gf_common_rsp (XDR *xdrs, gf_common_rsp *objp)  bool_t -xdr_gf_dump_version_req (XDR *xdrs, gf_dump_version_req *objp) -{ - -	 if (!xdr_u_quad_t (xdrs, &objp->gfs_id)) -		 return FALSE; -	 if (!xdr_u_int (xdrs, &objp->flags)) -		 return FALSE; -	 if (!xdr_string (xdrs, &objp->key, ~0)) -		 return FALSE; -	return TRUE; -} - -bool_t -xdr_gf_dump_version_rsp (XDR *xdrs, gf_dump_version_rsp *objp) -{ - -	 if (!xdr_u_quad_t (xdrs, &objp->gfs_id)) -		 return FALSE; -	 if (!xdr_int (xdrs, &objp->op_ret)) -		 return FALSE; -	 if (!xdr_int (xdrs, &objp->op_errno)) -		 return FALSE; -	 if (!xdr_u_int (xdrs, &objp->flags)) -		 return FALSE; -	 if (!xdr_bytes (xdrs, (char **)&objp->msg.msg_val, (u_int *) &objp->msg.msg_len, ~0)) -		 return FALSE; -	return TRUE; -} - - - -bool_t  xdr_gfs3_dirlist (XDR *xdrs, gfs3_dirlist *objp)  {  	 if (!xdr_u_quad_t (xdrs, &objp->d_ino)) diff --git a/xlators/protocol/lib/src/glusterfs-xdr.h b/xlators/protocol/lib/src/glusterfs-xdr.h index 45ce3ff9bed..a3afe8861ac 100644 --- a/xlators/protocol/lib/src/glusterfs-xdr.h +++ b/xlators/protocol/lib/src/glusterfs-xdr.h @@ -1063,25 +1063,6 @@ struct gf_common_rsp {  };  typedef struct gf_common_rsp gf_common_rsp; -struct gf_dump_version_req { -	u_quad_t gfs_id; -        u_int  flags; -        char *key; -}; -typedef struct gf_dump_version_req gf_dump_version_req; - -struct gf_dump_version_rsp { -	u_quad_t gfs_id; -	int op_ret; -	int op_errno; -        u_int flags; -	struct { -		u_int msg_len; -		char *msg_val; -	} msg; -}; -typedef struct gf_dump_version_rsp gf_dump_version_rsp; -  struct gfs3_dirlist {  	u_quad_t d_ino;  	u_quad_t d_off; @@ -1208,8 +1189,6 @@ extern  bool_t xdr_gf_notify_rsp (XDR *, gf_notify_rsp*);  extern  bool_t xdr_gfs3_releasedir_req (XDR *, gfs3_releasedir_req*);  extern  bool_t xdr_gfs3_release_req (XDR *, gfs3_release_req*);  extern  bool_t xdr_gf_common_rsp (XDR *, gf_common_rsp*); -extern  bool_t xdr_gf_dump_version_req (XDR *, gf_dump_version_req *); -extern  bool_t xdr_gf_dump_version_rsp (XDR *, gf_dump_version_rsp *);  #else /* K&R C */  extern bool_t xdr_gf_statfs (); @@ -1297,8 +1276,6 @@ extern bool_t xdr_gf_log_req ();  extern bool_t xdr_gf_notify_req ();  extern bool_t xdr_gf_notify_rsp ();  extern bool_t xdr_gf_common_rsp (); -extern bool_t xdr_gf_dump_version_req (); -extern bool_t xdr_gf_dump_version_rsp ();  #endif /* K&R C */ diff --git a/xlators/protocol/lib/src/glusterfs3.x b/xlators/protocol/lib/src/glusterfs3.x index b2eb9556c02..cafe965efaf 100644 --- a/xlators/protocol/lib/src/glusterfs3.x +++ b/xlators/protocol/lib/src/glusterfs3.x @@ -732,19 +732,20 @@ struct gf_common_rsp {  } ; -struct gf_dump_version_req { -	unsigned hyper gfs_id; -        unsigned int   flags; -        string         key<>; +struct gf_dump_req { +       unsigned hyper gfs_id;  }; +struct gf_prog_detail { +       string progname<>; +       unsigned hyper prognum; +       unsigned hyper progver; +       struct gf_prog_detail *next; +}; -struct gf_dump_version_rsp { -        unsigned hyper gfs_id; -        int op_ret; -	int op_errno; -        unsigned int flags; -        opaque msg<>; +struct gf_dump_rsp { +       unsigned hyper gfs_id; +       struct gf_prog_detail *prog;  };  struct auth_glusterfs_parms { diff --git a/xlators/protocol/lib/src/msg-xdr.c b/xlators/protocol/lib/src/msg-xdr.c index 3fe5ad5f65d..9227e715fd3 100644 --- a/xlators/protocol/lib/src/msg-xdr.c +++ b/xlators/protocol/lib/src/msg-xdr.c @@ -341,24 +341,6 @@ xdr_serialize_ftruncate_rsp (struct iovec outmsg, void *rsp)  ssize_t -xdr_serialize_dump_version_rsp (struct iovec outmsg, void *rsp) -{ -        return xdr_serialize_generic (outmsg, (void *)rsp, -                                      (xdrproc_t)xdr_gf_dump_version_rsp); -} - - -/* Decode */ - - -ssize_t -xdr_to_dump_version_req (struct iovec inmsg, void *args) -{ -        return xdr_to_generic (inmsg, (void *)args, -                               (xdrproc_t)xdr_gf_dump_version_req); -} - -ssize_t  xdr_to_lookup_req (struct iovec inmsg, void *args)  {          return xdr_to_generic (inmsg, (void *)args, @@ -960,13 +942,6 @@ xdr_from_setvolume_req (struct iovec outmsg, void *req)  }  ssize_t -xdr_from_dump_version_req (struct iovec outmsg, void *req) -{ -        return xdr_serialize_generic (outmsg, (void *)req, -                                      (xdrproc_t)xdr_gf_dump_version_req); - -} -ssize_t  xdr_from_rmdir_req (struct iovec outmsg, void *req)  {          return xdr_serialize_generic (outmsg, (void *)req, @@ -1207,13 +1182,6 @@ xdr_to_setvolume_rsp (struct iovec outmsg, void *rsp)  }  ssize_t -xdr_to_dump_version_rsp (struct iovec outmsg, void *rsp) -{ -        return xdr_to_generic (outmsg, (void *)rsp, -                                      (xdrproc_t)xdr_gf_dump_version_rsp); - -} -ssize_t  xdr_to_rmdir_rsp (struct iovec outmsg, void *rsp)  {          return xdr_to_generic (outmsg, (void *)rsp, diff --git a/xlators/protocol/lib/src/msg-xdr.h b/xlators/protocol/lib/src/msg-xdr.h index 59b6ca30112..025b7f8c717 100644 --- a/xlators/protocol/lib/src/msg-xdr.h +++ b/xlators/protocol/lib/src/msg-xdr.h @@ -406,23 +406,11 @@ ssize_t  xdr_from_release_req (struct iovec outmsg, void *args);  ssize_t -xdr_from_dump_version_req (struct iovec outmsg, void *args); - -ssize_t  xdr_from_setvolume_req (struct iovec outmsg, void *args);  ssize_t  xdr_to_setvolume_rsp (struct iovec inmsg, void *args); -ssize_t -xdr_to_dump_version_rsp (struct iovec inmsg, void *args); - - -ssize_t -xdr_serialize_dump_version_rsp (struct iovec outmsg, void *args); - -ssize_t -xdr_to_dump_version_req (struct iovec inmsg, void *args);  ssize_t diff --git a/xlators/protocol/lib/src/protocol-common.h b/xlators/protocol/lib/src/protocol-common.h index 5590960a6d9..78ee2581fdf 100644 --- a/xlators/protocol/lib/src/protocol-common.h +++ b/xlators/protocol/lib/src/protocol-common.h @@ -69,7 +69,6 @@ enum gf_fop_procnum {  enum gf_handshake_procnum {          GF_HNDSK_NULL, -        GF_HNDSK_DUMP_VERSION,          GF_HNDSK_SETVOLUME,          GF_HNDSK_GETSPEC,          GF_HNDSK_PING, diff --git a/xlators/protocol/server/src/server-handshake.c b/xlators/protocol/server/src/server-handshake.c index 94586d20c53..61630d1f625 100644 --- a/xlators/protocol/server/src/server-handshake.c +++ b/xlators/protocol/server/src/server-handshake.c @@ -241,52 +241,6 @@ out:          return ret;  } -int -build_program_list (server_conf_t *conf, char *list) -{ -        /* Reply in "Name:Program-Number:Program-Version,..." format */ -        sprintf (list, "%s:%d:%d", -                 glusterfs3_1_fop_prog.progname, -                 glusterfs3_1_fop_prog.prognum, -                 glusterfs3_1_fop_prog.progver); -        /* TODO: keep adding new versions to the list here */ -        return 0; -} - -int -server_dump_version (rpcsvc_request_t *req) -{ -        char                     list[8192]  = {0,}; -        server_conf_t           *conf     = NULL; -        int                      ret      = -1; -        int                      op_errno = EINVAL; -        gf_dump_version_req      args     = {0,}; -        gf_dump_version_rsp      rsp      = {0,}; - -        conf = ((xlator_t *)req->conn->svc->mydata)->private; - -        if (xdr_to_glusterfs_req (req, &args, xdr_to_dump_version_req)) { -                //failed to decode msg; -                req->rpc_err = GARBAGE_ARGS; -                goto fail; -        } - -        build_program_list (conf, list); -        rsp.msg.msg_val = list; -        rsp.msg.msg_len = strlen (list) + 1; -        ret = 0; -fail: -        rsp.op_errno = gf_errno_to_error (op_errno); -        rsp.op_ret   = ret; - -        server_submit_reply (NULL, req, &rsp, NULL, 0, NULL, -                             (gfs_serialize_t)xdr_serialize_dump_version_rsp); - -        if (args.key) -                free (args.key); - -        return 0; -}  int  server_getspec (rpcsvc_request_t *req) @@ -672,11 +626,10 @@ server_ping (rpcsvc_request_t *req)  rpcsvc_actor_t gluster_handshake_actors[] = { -        [GF_HNDSK_NULL] = {"NULL", GF_HNDSK_NULL, server_null, NULL, NULL }, -        [GF_HNDSK_DUMP_VERSION] = {"VERSION",   GF_HNDSK_DUMP_VERSION, server_dump_version, NULL, NULL }, +        [GF_HNDSK_NULL]      = {"NULL",      GF_HNDSK_NULL,      server_null, NULL, NULL },          [GF_HNDSK_SETVOLUME] = {"SETVOLUME", GF_HNDSK_SETVOLUME, server_setvolume, NULL, NULL }, -        [GF_HNDSK_GETSPEC] = {"GETSPEC",   GF_HNDSK_GETSPEC,   server_getspec, NULL, NULL }, -        [GF_HNDSK_PING] = {"PING",      GF_HNDSK_PING,      server_ping, NULL, NULL }, +        [GF_HNDSK_GETSPEC]   = {"GETSPEC",   GF_HNDSK_GETSPEC,   server_getspec, NULL, NULL }, +        [GF_HNDSK_PING]      = {"PING",      GF_HNDSK_PING,      server_ping, NULL, NULL },  }; @@ -684,8 +637,6 @@ struct rpcsvc_program gluster_handshake_prog = {          .progname  = "GlusterFS Handshake",          .prognum   = GLUSTER_HNDSK_PROGRAM,          .progver   = GLUSTER_HNDSK_VERSION, -          .actors    = gluster_handshake_actors, -        .numactors = 5, -        .progport  = 7008, +        .numactors = GF_HNDSK_MAXVALUE,  };  | 
