From 1ed0c3a9f7af24767a088689baa1b0f472f8661b Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Wed, 11 Jul 2007 18:24:25 +1000 Subject: [PATCH] add daemon code for the new kill_tcp control (This used to be ctdb commit 8fe4ae62255ecb2db36bea736ff17409ba6614c5) --- ctdb/include/ctdb_private.h | 10 ++++++++++ ctdb/server/ctdb_control.c | 4 ++++ ctdb/server/ctdb_takeover.c | 16 ++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h index 14808e06549..4c7b0da4ae0 100644 --- a/ctdb/include/ctdb_private.h +++ b/ctdb/include/ctdb_private.h @@ -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); diff --git a/ctdb/server/ctdb_control.c b/ctdb/server/ctdb_control.c index 69848bb15cd..604715cfd63 100644 --- a/ctdb/server/ctdb_control.c +++ b/ctdb/server/ctdb_control.c @@ -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; diff --git a/ctdb/server/ctdb_takeover.c b/ctdb/server/ctdb_takeover.c index a2ccf501097..a86ba60cee4 100644 --- a/ctdb/server/ctdb_takeover.c +++ b/ctdb/server/ctdb_takeover.c @@ -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 -- 2.47.3