mirror of
https://github.com/samba-team/samba.git
synced 2025-01-27 14:04:05 +03:00
Merge git://git.samba.org/tridge/ctdb
(This used to be ctdb commit 947bcc76ff0e90b613f20246be67ff014098a74d)
This commit is contained in:
commit
60103afff5
0
ctdb/configure.rpm
Normal file → Executable file
0
ctdb/configure.rpm
Normal file → Executable file
@ -147,9 +147,6 @@ static const struct ctdb_methods ctdb_tcp_methods = {
|
||||
|
||||
static int tcp_ctcp_destructor(struct ctdb_tcp *ctcp)
|
||||
{
|
||||
if (ctcp->listen_fd) {
|
||||
close(ctcp->listen_fd);
|
||||
}
|
||||
ctcp->ctdb->private_data = NULL;
|
||||
ctcp->ctdb->methods = NULL;
|
||||
|
||||
|
@ -997,6 +997,84 @@ static int tickle_tcp(struct ctdb_context *ctdb, int argc, const char **argv)
|
||||
}
|
||||
|
||||
|
||||
struct node_ip {
|
||||
uint32_t pnn;
|
||||
struct sockaddr_in sin;
|
||||
};
|
||||
|
||||
void getips_store_callback(void *param, void *data)
|
||||
{
|
||||
struct node_ip *node_ip = (struct node_ip *)data;
|
||||
struct ctdb_all_public_ips *ips = param;
|
||||
int i;
|
||||
|
||||
i = ips->num++;
|
||||
ips->ips[i].pnn = node_ip->pnn;
|
||||
ips->ips[i].sin = node_ip->sin;
|
||||
}
|
||||
|
||||
void getips_count_callback(void *param, void *data)
|
||||
{
|
||||
uint32_t *count = param;
|
||||
|
||||
(*count)++;
|
||||
}
|
||||
|
||||
static int
|
||||
control_get_all_public_ips(struct ctdb_context *ctdb, TALLOC_CTX *tmp_ctx, struct ctdb_all_public_ips **ips)
|
||||
{
|
||||
struct ctdb_all_public_ips *tmp_ips;
|
||||
struct ctdb_node_map *nodemap=NULL;
|
||||
trbt_tree_t *tree;
|
||||
int i, j, len, ret;
|
||||
uint32_t count;
|
||||
|
||||
ret = ctdb_ctrl_getnodemap(ctdb, TIMELIMIT(), CTDB_CURRENT_NODE, tmp_ctx, &nodemap);
|
||||
if (ret != 0) {
|
||||
DEBUG(DEBUG_ERR, ("Unable to get nodemap from node %u\n", options.pnn));
|
||||
return ret;
|
||||
}
|
||||
|
||||
tree = trbt_create(tmp_ctx, 0);
|
||||
|
||||
for(i=0;i<nodemap->num;i++){
|
||||
if (nodemap->nodes[i].flags & NODE_FLAGS_DISCONNECTED) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* read the public ip list from this node */
|
||||
ret = ctdb_ctrl_get_public_ips(ctdb, TIMELIMIT(), nodemap->nodes[i].pnn, tmp_ctx, &tmp_ips);
|
||||
if (ret != 0) {
|
||||
DEBUG(DEBUG_ERR, ("Unable to get public ip list from node %u\n", nodemap->nodes[i].pnn));
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (j=0; j<tmp_ips->num;j++) {
|
||||
struct node_ip *node_ip;
|
||||
|
||||
node_ip = talloc(tmp_ctx, struct node_ip);
|
||||
node_ip->pnn = tmp_ips->ips[j].pnn;
|
||||
node_ip->sin = tmp_ips->ips[j].sin;
|
||||
|
||||
trbt_insert32(tree, tmp_ips->ips[j].sin.sin_addr.s_addr, node_ip);
|
||||
}
|
||||
talloc_free(tmp_ips);
|
||||
}
|
||||
|
||||
/* traverse */
|
||||
count = 0;
|
||||
trbt_traversearray32(tree, 1, getips_count_callback, &count);
|
||||
|
||||
len = offsetof(struct ctdb_all_public_ips, ips) +
|
||||
count*sizeof(struct ctdb_public_ip);
|
||||
tmp_ips = talloc_zero_size(tmp_ctx, len);
|
||||
trbt_traversearray32(tree, 1, getips_store_callback, tmp_ips);
|
||||
|
||||
*ips = tmp_ips;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
display public ip status
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user