added a magic header for wireshark and packet version info
authorAndrew Tridgell <tridge@samba.org>
Fri, 6 Apr 2007 04:41:05 +0000 (14:41 +1000)
committerAndrew Tridgell <tridge@samba.org>
Fri, 6 Apr 2007 04:41:05 +0000 (14:41 +1000)
(This used to be ctdb commit 8366c212bde710dd46c8c1d9d4301f6c3738e300)

ctdb/common/ctdb.c
ctdb/common/ctdb_call.c
ctdb/common/ctdb_message.c
ctdb/include/ctdb_private.h

index e4f7289550472d9aaa35e14bfb6d7280d6bec58b..da07192c215b0cfbd63d68c232139a75c47d9a4c 100644 (file)
@@ -205,6 +205,16 @@ static void ctdb_recv_pkt(struct ctdb_context *ctdb, uint8_t *data, uint32_t len
                return;
        }
 
+       if (hdr->ctdb_magic != CTDB_MAGIC) {
+               ctdb_set_error(ctdb, "Non CTDB packet rejected\n");
+               return;
+       }
+
+       if (hdr->ctdb_version != CTDB_VERSION) {
+               ctdb_set_error(ctdb, "Bad CTDB version 0x%x rejected\n", hdr->ctdb_version);
+               return;
+       }
+
        switch (hdr->operation) {
        case CTDB_REQ_CALL:
                ctdb_request_call(ctdb, hdr);
index 0b4195140cd0461d1d93600dd5b9cd650c43fb9a..decdbe127fd4bb99d1a468cf7a33cde8fb3af406 100644 (file)
@@ -125,6 +125,8 @@ static void ctdb_send_error(struct ctdb_context *ctdb,
        CTDB_NO_MEMORY_FATAL(ctdb, r);
 
        r->hdr.length    = len + msglen;
+       r->hdr.ctdb_magic = CTDB_MAGIC;
+       r->hdr.ctdb_version = CTDB_VERSION;
        r->hdr.operation = CTDB_REPLY_ERROR;
        r->hdr.destnode  = hdr->srcnode;
        r->hdr.srcnode   = ctdb->vnn;
@@ -153,6 +155,8 @@ static void ctdb_call_send_redirect(struct ctdb_context *ctdb,
        r = ctdb->methods->allocate_pkt(ctdb, sizeof(*r));
        CTDB_NO_MEMORY_FATAL(ctdb, r);
        r->hdr.length = sizeof(*r);
+       r->hdr.ctdb_magic = CTDB_MAGIC;
+       r->hdr.ctdb_version = CTDB_VERSION;
        r->hdr.operation = CTDB_REPLY_REDIRECT;
        r->hdr.destnode  = c->hdr.srcnode;
        r->hdr.srcnode   = ctdb->vnn;
@@ -184,6 +188,8 @@ static void ctdb_call_send_dmaster(struct ctdb_db_context *ctdb_db,
        r = ctdb->methods->allocate_pkt(ctdb, len);
        CTDB_NO_MEMORY_FATAL(ctdb, r);
        r->hdr.length    = len;
+       r->hdr.ctdb_magic = CTDB_MAGIC;
+       r->hdr.ctdb_version = CTDB_VERSION;
        r->hdr.operation = CTDB_REQ_DMASTER;
        r->hdr.destnode  = ctdb_lmaster(ctdb, key);
        r->hdr.srcnode   = ctdb->vnn;
@@ -264,6 +270,8 @@ void ctdb_request_dmaster(struct ctdb_context *ctdb, struct ctdb_req_header *hdr
        r = ctdb->methods->allocate_pkt(ctdb, len);
        CTDB_NO_MEMORY_FATAL(ctdb, r);
        r->hdr.length    = len;
+       r->hdr.ctdb_magic = CTDB_MAGIC;
+       r->hdr.ctdb_version = CTDB_VERSION;
        r->hdr.operation = CTDB_REPLY_DMASTER;
        r->hdr.destnode  = c->dmaster;
        r->hdr.srcnode   = ctdb->vnn;
@@ -346,6 +354,8 @@ void ctdb_request_call(struct ctdb_context *ctdb, struct ctdb_req_header *hdr)
        r = ctdb->methods->allocate_pkt(ctdb, len);
        CTDB_NO_MEMORY_FATAL(ctdb, r);
        r->hdr.length    = len;
+       r->hdr.ctdb_magic = CTDB_MAGIC;
+       r->hdr.ctdb_version = CTDB_VERSION;
        r->hdr.operation = CTDB_REPLY_CALL;
        r->hdr.destnode  = hdr->srcnode;
        r->hdr.srcnode   = hdr->destnode;
@@ -576,6 +586,8 @@ struct ctdb_call_state *ctdb_call_send(struct ctdb_db_context *ctdb_db, struct c
        CTDB_NO_MEMORY_NULL(ctdb, state->c);
 
        state->c->hdr.length    = len;
+       state->c->hdr.ctdb_magic = CTDB_MAGIC;
+       state->c->hdr.ctdb_version = CTDB_VERSION;
        state->c->hdr.operation = CTDB_REQ_CALL;
        state->c->hdr.destnode  = header.dmaster;
        state->c->hdr.srcnode   = ctdb->vnn;
index 6e79042b85559cb7aee85f2367071e7b039b751e..d866d7876fc90fa0a83065ad7540acd7cf0c56d3 100644 (file)
@@ -65,6 +65,8 @@ int ctdb_send_message(struct ctdb_context *ctdb, uint32_t vnn,
        CTDB_NO_MEMORY(ctdb, r);
 
        r->hdr.length    = len;
+       r->hdr.ctdb_magic = CTDB_MAGIC;
+       r->hdr.ctdb_version = CTDB_VERSION;
        r->hdr.operation = CTDB_REQ_MESSAGE;
        r->hdr.destnode  = vnn;
        r->hdr.srcnode   = ctdb->vnn;
index 66a9a6e2444f20f44d572a64fe51f61b48521279..9c93466e19c72aac91a8c588a380f1df719685d8 100644 (file)
@@ -155,11 +155,16 @@ enum ctdb_operation {
        CTDB_REQ_MESSAGE    = 6
 };
 
+#define CTDB_MAGIC 0x43544442 /* CTDB */
+#define CTDB_VERSION 1
+
 /*
   packet structures
 */
 struct ctdb_req_header {
        uint32_t length;
+       uint32_t ctdb_magic;
+       uint32_t ctdb_version;
        uint32_t operation;
        uint32_t destnode;
        uint32_t srcnode;