public inbox for cluster-cvs@sourceware.org help / color / mirror / Atom feed
From: Christine Caulfield <chrissie@fedoraproject.org> To: cluster-cvs-relay@redhat.com Subject: cluster: STABLE3 - cman: More changes for the latest corosync API Date: Mon, 11 May 2009 15:07:00 -0000 [thread overview] Message-ID: <20090511150726.B833F1201EC@lists.fedorahosted.org> (raw) Gitweb: http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=af56607de98bb20578833a1261c5c263e9fffac7 Commit: af56607de98bb20578833a1261c5c263e9fffac7 Parent: 7e6ec0be8f368c2991c1aabff27d39d63adb9486 Author: Christine Caulfield <ccaulfie@redhat.com> AuthorDate: Mon May 11 16:06:46 2009 +0100 Committer: Christine Caulfield <ccaulfie@redhat.com> CommitterDate: Mon May 11 16:06:46 2009 +0100 cman: More changes for the latest corosync API In particular honouring constness of buffers Signed-off-by: Christine Caulfield <ccaulfie@redhat.com> --- cman/daemon/ais.c | 31 +++++++++++++++++-------------- cman/daemon/commands.c | 12 ++++++++++-- cman/daemon/commands.h | 2 +- cman/daemon/daemon.c | 2 +- cman/daemon/daemon.h | 2 +- 5 files changed, 30 insertions(+), 19 deletions(-) diff --git a/cman/daemon/ais.c b/cman/daemon/ais.c index 3e04dd6..598bff7 100644 --- a/cman/daemon/ais.c +++ b/cman/daemon/ais.c @@ -90,7 +90,7 @@ static void cman_confchg_fn(enum totem_configuration_type configuration_type, const unsigned int *left_list, size_t left_list_entries, const unsigned int *joined_list, size_t joined_list_entries, const struct memb_ring_id *ring_id); -static void cman_deliver_fn(unsigned int nodeid, const struct iovec *iovec, unsigned int iov_len, +static void cman_deliver_fn(unsigned int nodeid, const void *msg, unsigned int msg_len, int endian_conversion_required); static void cman_quorum_init(struct corosync_api_v1 *api, quorum_set_quorate_fn_t report); @@ -249,28 +249,31 @@ int comms_send_message(void *buf, int len, return corosync->tpg_joined_mcast(group_handle, iov, 2, totem_flags); } -// This assumes the iovec has only one element ... is it true ?? -static void cman_deliver_fn(unsigned int nodeid, const struct iovec *iovec, unsigned int iov_len, +static void cman_deliver_fn(unsigned int nodeid, const void *msg, unsigned int msg_len, int endian_conversion_required) { - struct cl_protheader *header = iovec->iov_base; - char *buf = iovec->iov_base; + const struct cl_protheader *original_header = msg; + struct cl_protheader header; + const char *buf = msg; P_AIS("deliver_fn source nodeid = %d, len=%d, endian_conv=%d\n", - nodeid, (int)iovec->iov_len, endian_conversion_required); + nodeid, msg_len, endian_conversion_required); if (endian_conversion_required) { - header->srcid = swab32(header->srcid); - header->tgtid = swab32(header->tgtid); - header->flags = swab32(header->flags); + header.srcid = swab32(original_header->srcid); + header.tgtid = swab32(original_header->tgtid); + header.flags = swab32(original_header->flags); + } + else { + memcpy(&header, original_header, sizeof(header)); } /* Only pass on messages for us or everyone */ - if (header->tgtid == our_nodeid() || - header->tgtid == 0) { - send_to_userport(header->srcport, header->tgtport, - header->srcid, header->tgtid, - buf + sizeof(struct cl_protheader), iovec->iov_len - sizeof(struct cl_protheader), + if (header.tgtid == our_nodeid() || + header.tgtid == 0) { + send_to_userport(header.srcport, header.tgtport, + header.srcid, header.tgtid, + buf + sizeof(struct cl_protheader), msg_len - sizeof(struct cl_protheader), endian_conversion_required); } } diff --git a/cman/daemon/commands.c b/cman/daemon/commands.c index 407e33b..11d72e6 100644 --- a/cman/daemon/commands.c +++ b/cman/daemon/commands.c @@ -1511,13 +1511,21 @@ int process_command(struct connection *con, int cmd, char *cmdbuf, int send_to_userport(unsigned char fromport, unsigned char toport, int nodeid, int tgtid, - char *recv_buf, int len, + const char *recv_buf, int len, int endian_conv) { int ret = -1; if (toport == 0) { - process_internal_message(recv_buf, nodeid, endian_conv); + + /* We need to make a private copy here so that the internal command + * processors can do byteswapping. + */ + char *newmsg = alloca(len); + if (!newmsg) + return -1; + memcpy(newmsg, recv_buf, len); + process_internal_message(newmsg, nodeid, endian_conv); ret = 0; } else { diff --git a/cman/daemon/commands.h b/cman/daemon/commands.h index 7b51309..af0b17a 100644 --- a/cman/daemon/commands.h +++ b/cman/daemon/commands.h @@ -5,7 +5,7 @@ extern void process_cnxman_message(char *data, char *addr, int addrlen, extern int send_to_userport(unsigned char fromport, unsigned char toport, int nodeid, int tgtnodeid, - char *recv_buf, int len, + const char *recv_buf, int len, int endian_conv); extern void clean_dead_listeners(void); extern void unbind_con(struct connection *con); diff --git a/cman/daemon/daemon.c b/cman/daemon/daemon.c index d74c454..326c828 100644 --- a/cman/daemon/daemon.c +++ b/cman/daemon/daemon.c @@ -425,7 +425,7 @@ int send_status_return(struct connection *con, uint32_t cmd, int status) return send_reply_message(con, (struct sock_header *)&msg); } -int send_data_reply(struct connection *con, int nodeid, int port, char *data, int len) +int send_data_reply(struct connection *con, int nodeid, int port, const char *data, int len) { char buf[len + sizeof(struct sock_data_header)]; struct sock_data_header *msg = (struct sock_data_header *)buf; diff --git a/cman/daemon/daemon.h b/cman/daemon/daemon.h index 6907de3..4c202ef 100644 --- a/cman/daemon/daemon.h +++ b/cman/daemon/daemon.h @@ -1,5 +1,5 @@ extern int send_status_return(struct connection *con, uint32_t cmd, int status); -extern int send_data_reply(struct connection *con, int nodeid, int port, char *data, int len); +extern int send_data_reply(struct connection *con, int nodeid, int port, const char *data, int len); extern void set_cman_timeout(int secs); extern void notify_listeners(struct connection *con, int reason, int arg); extern int num_listeners(void);
reply other threads:[~2009-05-11 15:07 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20090511150726.B833F1201EC@lists.fedorahosted.org \ --to=chrissie@fedoraproject.org \ --cc=cluster-cvs-relay@redhat.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).