*/
struct ctdb_tcp_list {
struct ctdb_tcp_list *prev, *next;
- struct ctdb_tcp_connection connection;
+ struct ctdb_connection connection;
};
/*
tcparray = arp->tcparray;
if (tcparray) {
for (i=0;i<tcparray->num;i++) {
- struct ctdb_tcp_connection *tcon;
+ struct ctdb_connection *tcon;
tcon = &tcparray->connections[i];
DEBUG(DEBUG_INFO,("sending tcp tickle ack for %u->%s:%u\n",
- (unsigned)ntohs(tcon->dst_addr.ip.sin_port),
- ctdb_addr_to_str(&tcon->src_addr),
- (unsigned)ntohs(tcon->src_addr.ip.sin_port)));
+ (unsigned)ntohs(tcon->dst.ip.sin_port),
+ ctdb_addr_to_str(&tcon->src),
+ (unsigned)ntohs(tcon->src.ip.sin_port)));
ret = ctdb_sys_send_tcp(
- &tcon->src_addr,
- &tcon->dst_addr,
+ &tcon->src,
+ &tcon->dst,
0, 0, 0);
if (ret != 0) {
DEBUG(DEBUG_CRIT,(__location__ " Failed to send tcp tickle ack for %s\n",
- ctdb_addr_to_str(&tcon->src_addr)));
+ ctdb_addr_to_str(&tcon->src)));
}
}
}
struct ctdb_client *client = reqid_find(ctdb->idr, client_id, struct ctdb_client);
struct ctdb_connection *tcp_sock = NULL;
struct ctdb_tcp_list *tcp;
- struct ctdb_tcp_connection t;
+ struct ctdb_connection t;
int ret;
TDB_DATA data;
struct ctdb_client_ip *ip;
tcp = talloc(client, struct ctdb_tcp_list);
CTDB_NO_MEMORY(ctdb, tcp);
- tcp->connection.src_addr = tcp_sock->src;
- tcp->connection.dst_addr = tcp_sock->dst;
+ tcp->connection.src = tcp_sock->src;
+ tcp->connection.dst = tcp_sock->dst;
DLIST_ADD(client->tcp_list, tcp);
- t.src_addr = tcp_sock->src;
- t.dst_addr = tcp_sock->dst;
+ t.src = tcp_sock->src;
+ t.dst = tcp_sock->dst;
data.dptr = (uint8_t *)&t;
data.dsize = sizeof(t);
/*
find a tcp address on a list
*/
-static struct ctdb_tcp_connection *ctdb_tcp_find(struct ctdb_tcp_array *array,
- struct ctdb_tcp_connection *tcp)
+static struct ctdb_connection *ctdb_tcp_find(struct ctdb_tcp_array *array,
+ struct ctdb_connection *tcp)
{
int i;
}
for (i=0;i<array->num;i++) {
- if (ctdb_same_sockaddr(&array->connections[i].src_addr, &tcp->src_addr) &&
- ctdb_same_sockaddr(&array->connections[i].dst_addr, &tcp->dst_addr)) {
+ if (ctdb_same_sockaddr(&array->connections[i].src, &tcp->src) &&
+ ctdb_same_sockaddr(&array->connections[i].dst, &tcp->dst)) {
return &array->connections[i];
}
}
*/
int32_t ctdb_control_tcp_add(struct ctdb_context *ctdb, TDB_DATA indata, bool tcp_update_needed)
{
- struct ctdb_tcp_connection *p = (struct ctdb_tcp_connection *)indata.dptr;
+ struct ctdb_connection *p = (struct ctdb_connection *)indata.dptr;
struct ctdb_tcp_array *tcparray;
- struct ctdb_tcp_connection tcp;
+ struct ctdb_connection tcp;
struct ctdb_vnn *vnn;
/* If we don't have public IPs, tickles are useless */
return 0;
}
- vnn = find_public_ip_vnn(ctdb, &p->dst_addr);
+ vnn = find_public_ip_vnn(ctdb, &p->dst);
if (vnn == NULL) {
DEBUG(DEBUG_INFO,(__location__ " got TCP_ADD control for an address which is not a public address '%s'\n",
- ctdb_addr_to_str(&p->dst_addr)));
+ ctdb_addr_to_str(&p->dst)));
return -1;
}
vnn->tcp_array = tcparray;
tcparray->num = 0;
- tcparray->connections = talloc_size(tcparray, sizeof(struct ctdb_tcp_connection));
+ tcparray->connections = talloc_size(tcparray, sizeof(struct ctdb_connection));
CTDB_NO_MEMORY(ctdb, tcparray->connections);
- tcparray->connections[tcparray->num].src_addr = p->src_addr;
- tcparray->connections[tcparray->num].dst_addr = p->dst_addr;
+ tcparray->connections[tcparray->num].src = p->src;
+ tcparray->connections[tcparray->num].dst = p->dst;
tcparray->num++;
if (tcp_update_needed) {
/* Do we already have this tickle ?*/
- tcp.src_addr = p->src_addr;
- tcp.dst_addr = p->dst_addr;
+ tcp.src = p->src;
+ tcp.dst = p->dst;
if (ctdb_tcp_find(tcparray, &tcp) != NULL) {
DEBUG(DEBUG_DEBUG,("Already had tickle info for %s:%u for vnn:%u\n",
- ctdb_addr_to_str(&tcp.dst_addr),
- ntohs(tcp.dst_addr.ip.sin_port),
+ ctdb_addr_to_str(&tcp.dst),
+ ntohs(tcp.dst.ip.sin_port),
vnn->pnn));
return 0;
}
/* A new tickle, we must add it to the array */
tcparray->connections = talloc_realloc(tcparray, tcparray->connections,
- struct ctdb_tcp_connection,
+ struct ctdb_connection,
tcparray->num+1);
CTDB_NO_MEMORY(ctdb, tcparray->connections);
- tcparray->connections[tcparray->num].src_addr = p->src_addr;
- tcparray->connections[tcparray->num].dst_addr = p->dst_addr;
+ tcparray->connections[tcparray->num].src = p->src;
+ tcparray->connections[tcparray->num].dst = p->dst;
tcparray->num++;
DEBUG(DEBUG_INFO,("Added tickle info for %s:%u from vnn %u\n",
- ctdb_addr_to_str(&tcp.dst_addr),
- ntohs(tcp.dst_addr.ip.sin_port),
+ ctdb_addr_to_str(&tcp.dst),
+ ntohs(tcp.dst.ip.sin_port),
vnn->pnn));
if (tcp_update_needed) {
clients managing that should tickled with an ACK when IP takeover is
done
*/
-static void ctdb_remove_tcp_connection(struct ctdb_context *ctdb, struct ctdb_tcp_connection *conn)
+static void ctdb_remove_connection(struct ctdb_context *ctdb, struct ctdb_connection *conn)
{
- struct ctdb_tcp_connection *tcpp;
- struct ctdb_vnn *vnn = find_public_ip_vnn(ctdb, &conn->dst_addr);
+ struct ctdb_connection *tcpp;
+ struct ctdb_vnn *vnn = find_public_ip_vnn(ctdb, &conn->dst);
if (vnn == NULL) {
DEBUG(DEBUG_ERR,(__location__ " unable to find public address %s\n",
- ctdb_addr_to_str(&conn->dst_addr)));
+ ctdb_addr_to_str(&conn->dst)));
return;
}
*/
if (vnn->tcp_array == NULL) {
DEBUG(DEBUG_INFO,("Trying to remove tickle that doesnt exist (array is empty) %s:%u\n",
- ctdb_addr_to_str(&conn->dst_addr),
- ntohs(conn->dst_addr.ip.sin_port)));
+ ctdb_addr_to_str(&conn->dst),
+ ntohs(conn->dst.ip.sin_port)));
return;
}
tcpp = ctdb_tcp_find(vnn->tcp_array, conn);
if (tcpp == NULL) {
DEBUG(DEBUG_INFO,("Trying to remove tickle that doesnt exist %s:%u\n",
- ctdb_addr_to_str(&conn->dst_addr),
- ntohs(conn->dst_addr.ip.sin_port)));
+ ctdb_addr_to_str(&conn->dst),
+ ntohs(conn->dst.ip.sin_port)));
return;
}
vnn->tcp_update_needed = true;
DEBUG(DEBUG_INFO,("Removed tickle info for %s:%u\n",
- ctdb_addr_to_str(&conn->src_addr),
- ntohs(conn->src_addr.ip.sin_port)));
+ ctdb_addr_to_str(&conn->src),
+ ntohs(conn->src.ip.sin_port)));
}
*/
int32_t ctdb_control_tcp_remove(struct ctdb_context *ctdb, TDB_DATA indata)
{
- struct ctdb_tcp_connection *conn = (struct ctdb_tcp_connection *)indata.dptr;
+ struct ctdb_connection *conn = (struct ctdb_connection *)indata.dptr;
/* If we don't have public IPs, tickles are useless */
if (ctdb->vnn == NULL) {
return 0;
}
- ctdb_remove_tcp_connection(ctdb, conn);
+ ctdb_remove_connection(ctdb, conn);
return 0;
}
while (client->tcp_list) {
struct ctdb_tcp_list *tcp = client->tcp_list;
DLIST_REMOVE(client->tcp_list, tcp);
- ctdb_remove_tcp_connection(client->ctdb, &tcp->connection);
+ ctdb_remove_connection(client->ctdb, &tcp->connection);
}
}
*/
int32_t ctdb_control_kill_tcp(struct ctdb_context *ctdb, TDB_DATA indata)
{
- struct ctdb_tcp_connection *killtcp = (struct ctdb_tcp_connection *)indata.dptr;
+ struct ctdb_connection *killtcp = (struct ctdb_connection *)indata.dptr;
- return ctdb_killtcp_add_connection(ctdb, &killtcp->src_addr, &killtcp->dst_addr);
+ return ctdb_killtcp_add_connection(ctdb, &killtcp->src, &killtcp->dst);
}
/*
/* verify that the size of data matches what we expect */
if (indata.dsize < offsetof(struct ctdb_control_tcp_tickle_list,
tickles.connections)
- + sizeof(struct ctdb_tcp_connection)
+ + sizeof(struct ctdb_connection)
* list->tickles.num) {
DEBUG(DEBUG_ERR,("Bad indata in ctdb_control_set_tcp_tickle_list\n"));
return -1;
tcparray->num = list->tickles.num;
- tcparray->connections = talloc_array(tcparray, struct ctdb_tcp_connection, tcparray->num);
+ tcparray->connections = talloc_array(tcparray, struct ctdb_connection, tcparray->num);
CTDB_NO_MEMORY(ctdb, tcparray->connections);
memcpy(tcparray->connections, &list->tickles.connections[0],
- sizeof(struct ctdb_tcp_connection)*tcparray->num);
+ sizeof(struct ctdb_connection)*tcparray->num);
/* We now have a new fresh tickle list array for this vnn */
vnn->tcp_array = tcparray;
outdata->dsize = offsetof(struct ctdb_control_tcp_tickle_list,
tickles.connections)
- + sizeof(struct ctdb_tcp_connection) * num;
+ + sizeof(struct ctdb_connection) * num;
outdata->dptr = talloc_size(outdata, outdata->dsize);
CTDB_NO_MEMORY(ctdb, outdata->dptr);
list->tickles.num = num;
if (num) {
memcpy(&list->tickles.connections[0], tcparray->connections,
- sizeof(struct ctdb_tcp_connection) * num);
+ sizeof(struct ctdb_connection) * num);
}
return 0;
data.dsize = offsetof(struct ctdb_control_tcp_tickle_list,
tickles.connections) +
- sizeof(struct ctdb_tcp_connection) * num;
+ sizeof(struct ctdb_connection) * num;
data.dptr = talloc_size(ctdb, data.dsize);
CTDB_NO_MEMORY(ctdb, data.dptr);
list->addr = *addr;
list->tickles.num = num;
if (tcparray) {
- memcpy(&list->tickles.connections[0], tcparray->connections, sizeof(struct ctdb_tcp_connection) * num);
+ memcpy(&list->tickles.connections[0], tcparray->connections, sizeof(struct ctdb_connection) * num);
}
ret = ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_ALL, 0,
*/
static int control_add_tickle(struct ctdb_context *ctdb, int argc, const char **argv)
{
- struct ctdb_tcp_connection t;
+ struct ctdb_connection t;
TDB_DATA data;
int ret;
usage();
}
- if (parse_ip_port(argv[0], &t.src_addr) == 0) {
+ if (parse_ip_port(argv[0], &t.src) == 0) {
DEBUG(DEBUG_ERR,("Wrongly formed ip address '%s'\n", argv[0]));
return -1;
}
- if (parse_ip_port(argv[1], &t.dst_addr) == 0) {
+ if (parse_ip_port(argv[1], &t.dst) == 0) {
DEBUG(DEBUG_ERR,("Wrongly formed ip address '%s'\n", argv[1]));
return -1;
}
*/
static int control_del_tickle(struct ctdb_context *ctdb, int argc, const char **argv)
{
- struct ctdb_tcp_connection t;
+ struct ctdb_connection t;
TDB_DATA data;
int ret;
usage();
}
- if (parse_ip_port(argv[0], &t.src_addr) == 0) {
+ if (parse_ip_port(argv[0], &t.src) == 0) {
DEBUG(DEBUG_ERR,("Wrongly formed ip address '%s'\n", argv[0]));
return -1;
}
- if (parse_ip_port(argv[1], &t.dst_addr) == 0) {
+ if (parse_ip_port(argv[1], &t.dst) == 0) {
DEBUG(DEBUG_ERR,("Wrongly formed ip address '%s'\n", argv[1]));
return -1;
}
if (options.machinereadable){
printm(":source ip:port:destination ip:port:\n");
for (i=0;i<list->tickles.num;i++) {
- if (port && port != ntohs(list->tickles.connections[i].dst_addr.ip.sin_port)) {
+ if (port && port != ntohs(list->tickles.connections[i].dst.ip.sin_port)) {
continue;
}
- printm(":%s:%u", ctdb_addr_to_str(&list->tickles.connections[i].src_addr), ntohs(list->tickles.connections[i].src_addr.ip.sin_port));
- printm(":%s:%u:\n", ctdb_addr_to_str(&list->tickles.connections[i].dst_addr), ntohs(list->tickles.connections[i].dst_addr.ip.sin_port));
+ printm(":%s:%u", ctdb_addr_to_str(&list->tickles.connections[i].src), ntohs(list->tickles.connections[i].src.ip.sin_port));
+ printm(":%s:%u:\n", ctdb_addr_to_str(&list->tickles.connections[i].dst), ntohs(list->tickles.connections[i].dst.ip.sin_port));
}
} else {
printf("Tickles for ip:%s\n", ctdb_addr_to_str(&list->addr));
printf("Num tickles:%u\n", list->tickles.num);
for (i=0;i<list->tickles.num;i++) {
- if (port && port != ntohs(list->tickles.connections[i].dst_addr.ip.sin_port)) {
+ if (port && port != ntohs(list->tickles.connections[i].dst.ip.sin_port)) {
continue;
}
- printf("SRC: %s:%u ", ctdb_addr_to_str(&list->tickles.connections[i].src_addr), ntohs(list->tickles.connections[i].src_addr.ip.sin_port));
- printf("DST: %s:%u\n", ctdb_addr_to_str(&list->tickles.connections[i].dst_addr), ntohs(list->tickles.connections[i].dst_addr.ip.sin_port));
+ printf("SRC: %s:%u ", ctdb_addr_to_str(&list->tickles.connections[i].src), ntohs(list->tickles.connections[i].src.ip.sin_port));
+ printf("DST: %s:%u\n", ctdb_addr_to_str(&list->tickles.connections[i].dst), ntohs(list->tickles.connections[i].dst.ip.sin_port));
}
}
static int kill_tcp_from_file(struct ctdb_context *ctdb,
int argc, const char **argv)
{
- struct ctdb_tcp_connection *killtcp;
+ struct ctdb_connection *killtcp;
int max_entries, current, i;
struct timeval timeout;
char line[128], src[128], dst[128];
if (current >= max_entries) {
max_entries += 1024;
killtcp = talloc_realloc(ctdb, killtcp,
- struct ctdb_tcp_connection,
+ struct ctdb_connection,
max_entries);
CTDB_NO_MEMORY(ctdb, killtcp);
}
- if (!parse_ip_port(src, &killtcp[current].src_addr)) {
+ if (!parse_ip_port(src, &killtcp[current].src)) {
DEBUG(DEBUG_ERR, ("Bad IP:port on line [%d]: '%s'\n",
linenum, src));
talloc_free(killtcp);
return -1;
}
- if (!parse_ip_port(dst, &killtcp[current].dst_addr)) {
+ if (!parse_ip_port(dst, &killtcp[current].dst)) {
DEBUG(DEBUG_ERR, ("Bad IP:port on line [%d]: '%s'\n",
linenum, dst));
talloc_free(killtcp);
for (i = 0; i < current; i++) {
- data.dsize = sizeof(struct ctdb_tcp_connection);
+ data.dsize = sizeof(struct ctdb_connection);
data.dptr = (unsigned char *)&killtcp[i];
timeout = TIMELIMIT();
static int kill_tcp(struct ctdb_context *ctdb, int argc, const char **argv)
{
int ret;
- struct ctdb_tcp_connection killtcp;
+ struct ctdb_connection killtcp;
assert_single_node_only();
usage();
}
- if (!parse_ip_port(argv[0], &killtcp.src_addr)) {
+ if (!parse_ip_port(argv[0], &killtcp.src)) {
DEBUG(DEBUG_ERR, ("Bad IP:port '%s'\n", argv[0]));
return -1;
}
- if (!parse_ip_port(argv[1], &killtcp.dst_addr)) {
+ if (!parse_ip_port(argv[1], &killtcp.dst)) {
DEBUG(DEBUG_ERR, ("Bad IP:port '%s'\n", argv[1]));
return -1;
}