summaryrefslogtreecommitdiff
path: root/ctdb/protocol
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2020-04-07 17:26:26 +0200
committerRalph Boehme <slow@samba.org>2020-04-28 09:08:39 +0000
commitbdabf7812223dc0c365fd13aa53d35d10edcdece (patch)
treec4e982abbacfcfcdc00f8ee3ecd83b9ddf878950 /ctdb/protocol
parent6f56f45639e6404161da425bcd2654624907a439 (diff)
downloadsamba-bdabf7812223dc0c365fd13aa53d35d10edcdece.tar.gz
ctdb-protocol: Add marshalling for control ECHO_DATA
Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Martin Schwenke <martin@meltin.net>
Diffstat (limited to 'ctdb/protocol')
-rw-r--r--ctdb/protocol/protocol_api.h4
-rw-r--r--ctdb/protocol/protocol_client.c24
-rw-r--r--ctdb/protocol/protocol_control.c32
-rw-r--r--ctdb/protocol/protocol_debug.c1
4 files changed, 61 insertions, 0 deletions
diff --git a/ctdb/protocol/protocol_api.h b/ctdb/protocol/protocol_api.h
index c2cd4a76289..bdb4bc0e2ea 100644
--- a/ctdb/protocol/protocol_api.h
+++ b/ctdb/protocol/protocol_api.h
@@ -611,6 +611,10 @@ void ctdb_req_control_db_vacuum(struct ctdb_req_control *request,
struct ctdb_db_vacuum *db_vacuum);
int ctdb_reply_control_db_vacuum(struct ctdb_reply_control *reply);
+void ctdb_req_control_echo_data(struct ctdb_req_control *request,
+ struct ctdb_echo_data *echo_data);
+int ctdb_reply_control_echo_data(struct ctdb_reply_control *reply);
+
/* From protocol/protocol_debug.c */
void ctdb_packet_print(uint8_t *buf, size_t buflen, FILE *fp);
diff --git a/ctdb/protocol/protocol_client.c b/ctdb/protocol/protocol_client.c
index 6c5180d6d6d..cde544feb52 100644
--- a/ctdb/protocol/protocol_client.c
+++ b/ctdb/protocol/protocol_client.c
@@ -2385,3 +2385,27 @@ int ctdb_reply_control_db_vacuum(struct ctdb_reply_control *reply)
return reply->status;
}
+
+/* CTDB_CONTROL_ECHO_DATA */
+
+void ctdb_req_control_echo_data(struct ctdb_req_control *request,
+ struct ctdb_echo_data *echo_data)
+{
+ request->opcode = CTDB_CONTROL_ECHO_DATA;
+ request->pad = 0;
+ request->srvid = 0;
+ request->client_id = 0;
+ request->flags = 0;
+
+ request->rdata.opcode = CTDB_CONTROL_ECHO_DATA;
+ request->rdata.data.echo_data = echo_data;
+}
+
+int ctdb_reply_control_echo_data(struct ctdb_reply_control *reply)
+{
+ if (reply->rdata.opcode != CTDB_CONTROL_ECHO_DATA) {
+ return EPROTO;
+ }
+
+ return reply->status;
+}
diff --git a/ctdb/protocol/protocol_control.c b/ctdb/protocol/protocol_control.c
index a25c9b1cfe0..4fd5a5a7d4d 100644
--- a/ctdb/protocol/protocol_control.c
+++ b/ctdb/protocol/protocol_control.c
@@ -415,6 +415,10 @@ static size_t ctdb_req_control_data_len(struct ctdb_req_control_data *cd)
case CTDB_CONTROL_DB_VACUUM:
len = ctdb_db_vacuum_len(cd->data.db_vacuum);
break;
+
+ case CTDB_CONTROL_ECHO_DATA:
+ len = ctdb_echo_data_len(cd->data.echo_data);
+ break;
}
return len;
@@ -698,6 +702,10 @@ static void ctdb_req_control_data_push(struct ctdb_req_control_data *cd,
case CTDB_CONTROL_DB_VACUUM:
ctdb_db_vacuum_push(cd->data.db_vacuum, buf, &np);
break;
+
+ case CTDB_CONTROL_ECHO_DATA:
+ ctdb_echo_data_push(cd->data.echo_data, buf, &np);
+ break;
}
*npush = np;
@@ -1035,6 +1043,14 @@ static int ctdb_req_control_data_pull(uint8_t *buf, size_t buflen,
&cd->data.db_vacuum,
&np);
break;
+
+ case CTDB_CONTROL_ECHO_DATA:
+ ret = ctdb_echo_data_pull(buf,
+ buflen,
+ mem_ctx,
+ &cd->data.echo_data,
+ &np);
+ break;
}
if (ret != 0) {
@@ -1398,6 +1414,10 @@ static size_t ctdb_reply_control_data_len(struct ctdb_reply_control_data *cd)
case CTDB_CONTROL_DB_VACUUM:
break;
+
+ case CTDB_CONTROL_ECHO_DATA:
+ len = ctdb_echo_data_len(cd->data.echo_data);
+ break;
}
return len;
@@ -1558,6 +1578,10 @@ static void ctdb_reply_control_data_push(struct ctdb_reply_control_data *cd,
case CTDB_CONTROL_DB_VACUUM:
break;
+
+ case CTDB_CONTROL_ECHO_DATA:
+ ctdb_echo_data_push(cd->data.echo_data, buf, &np);
+ break;
}
*npush = np;
@@ -1748,6 +1772,14 @@ static int ctdb_reply_control_data_pull(uint8_t *buf, size_t buflen,
case CTDB_CONTROL_DB_VACUUM:
break;
+
+ case CTDB_CONTROL_ECHO_DATA:
+ ret = ctdb_echo_data_pull(buf,
+ buflen,
+ mem_ctx,
+ &cd->data.echo_data,
+ &np);
+ break;
}
if (ret != 0) {
diff --git a/ctdb/protocol/protocol_debug.c b/ctdb/protocol/protocol_debug.c
index 3fe78b13162..56f14e32b09 100644
--- a/ctdb/protocol/protocol_debug.c
+++ b/ctdb/protocol/protocol_debug.c
@@ -244,6 +244,7 @@ static void ctdb_opcode_print(uint32_t opcode, FILE *fp)
{ CTDB_CONTROL_TUNNEL_DEREGISTER, "TUNNEL_DEREGISTER" },
{ CTDB_CONTROL_VACUUM_FETCH, "VACUUM_FETCH" },
{ CTDB_CONTROL_DB_VACUUM, "DB_VACUUM" },
+ { CTDB_CONTROL_ECHO_DATA, "ECHO_DATA" },
{ MAP_END, "" },
};