]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
add daemon code for the new kill_tcp control
authorRonnie Sahlberg <sahlberg@ronnie>
Wed, 11 Jul 2007 08:24:25 +0000 (18:24 +1000)
committerRonnie Sahlberg <sahlberg@ronnie>
Wed, 11 Jul 2007 08:24:25 +0000 (18:24 +1000)
(This used to be ctdb commit 8fe4ae62255ecb2db36bea736ff17409ba6614c5)

ctdb/include/ctdb_private.h
ctdb/server/ctdb_control.c
ctdb/server/ctdb_takeover.c

index 14808e06549d27047982eb1999dd7e1943df807c..4c7b0da4ae0588968084f29238a8fdd52f74790b 100644 (file)
@@ -407,6 +407,7 @@ enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS          = 0,
                    CTDB_CONTROL_GET_PUBLIC_IPS          = 51,
                    CTDB_CONTROL_MODIFY_FLAGS            = 52,
                    CTDB_CONTROL_GET_ALL_TUNABLES        = 53,
+                   CTDB_CONTROL_KILL_TCP                = 54,
 };
 
 /*
@@ -442,6 +443,14 @@ struct ctdb_control_tcp {
        struct sockaddr_in dest;
 };
 
+/*
+  struct for kill_tcp control
+ */
+struct ctdb_control_kill_tcp {
+       struct sockaddr_in src;
+       struct sockaddr_in dst;
+};
+
 /*
   struct for tcp_add and tcp_remove controls
  */
@@ -997,6 +1006,7 @@ int32_t ctdb_control_tcp_client(struct ctdb_context *ctdb, uint32_t client_id,
 int32_t ctdb_control_tcp_add(struct ctdb_context *ctdb, TDB_DATA indata);
 int32_t ctdb_control_tcp_remove(struct ctdb_context *ctdb, TDB_DATA indata);
 int32_t ctdb_control_startup(struct ctdb_context *ctdb, uint32_t vnn);
+int32_t ctdb_control_kill_tcp(struct ctdb_context *ctdb, TDB_DATA indata);
 
 void ctdb_takeover_client_destructor_hook(struct ctdb_client *client);
 int ctdb_event_script(struct ctdb_context *ctdb, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
index 69848bb15cd4499329aa4b4a66a46540dec023d1..604715cfd63976c8bdcd19b81c400136fa8bd747 100644 (file)
@@ -286,6 +286,10 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
                CHECK_CONTROL_DATA_SIZE(sizeof(struct ctdb_node_modflags));
                return ctdb_control_modflags(ctdb, indata);
 
+       case CTDB_CONTROL_KILL_TCP: 
+               CHECK_CONTROL_DATA_SIZE(sizeof(struct ctdb_control_kill_tcp));
+               return ctdb_control_kill_tcp(ctdb, indata);
+
        default:
                DEBUG(0,(__location__ " Unknown CTDB control opcode %u\n", opcode));
                return -1;
index a2ccf501097bcaa047131cb155752b38849da5d4..a86ba60cee43166ce0969892f60264da7294de40 100644 (file)
@@ -679,6 +679,22 @@ int32_t ctdb_control_tcp_add(struct ctdb_context *ctdb, TDB_DATA indata)
        return 0;
 }
 
+
+/*
+  called by a daemon to inform us of a TCP connection that one of its
+  clients managing that should tickled with an ACK when IP takeover is
+  done
+ */
+int32_t ctdb_control_kill_tcp(struct ctdb_context *ctdb, TDB_DATA indata)
+{
+       struct ctdb_control_kill_tcp *killtcp = (struct ctdb_control_kill_tcp *)indata.dptr;
+
+       ctdb_killtcp_add_connection(ctdb, &killtcp->src, &killtcp->dst);
+
+       return 0;
+}
+
+
 /*
   called by a daemon to inform us of a TCP connection that one of its
   clients managing that should tickled with an ACK when IP takeover is