/* tell this node to delete all of the aliases that it should not have */
for (j=0;j<nodemap->num;j++) {
if (ctdb->nodes[j]->takeover_vnn != nodemap->nodes[i].vnn) {
-#ifdef HAVE_SOCK_SIN_LEN
- ip.sin.sin_len = sizeof(*sin);
-#endif
+ ip.vnn = j;
+ ip.takeover_vnn = ctdb->nodes[j]->takeover_vnn;
+ ip.sin.sin_family = AF_INET;
+ inet_aton(ctdb->nodes[j]->public_address, &ip.sin.sin_addr);
+
ret = ctdb_ctrl_release_ip(ctdb, TAKEOVER_TIMEOUT(),
nodemap->nodes[i].vnn,
- ctdb->nodes[j]->public_address);
+ &ip);
if (ret != 0) {
DEBUG(0,("Failed to tell vnn %u to release IP %s\n",
nodemap->nodes[i].vnn,
/* this IP won't be taken over */
continue;
}
-#ifdef HAVE_SOCK_SIN_LEN
- ip.sin.sin_len = sizeof(*sin);
-#endif
+ ip.vnn = i;
+ ip.takeover_vnn = ctdb->nodes[i]->takeover_vnn;
+ ip.sin.sin_family = AF_INET;
+ inet_aton(ctdb->nodes[i]->public_address, &ip.sin.sin_addr);
+
ret = ctdb_ctrl_takeover_ip(ctdb, TAKEOVER_TIMEOUT(),
ctdb->nodes[i]->takeover_vnn,
- ctdb->nodes[i]->public_address);
+ &ip);
if (ret != 0) {
DEBUG(0,("Failed asking vnn %u to take over IP %s\n",
ctdb->nodes[i]->takeover_vnn,
}
}
}
-#ifdef HAVE_SOCK_SIN_LEN
- ips->ips[i].sin.sin_len = sizeof(struct sockaddr_in);
-#endif
+
+
+ /*
+
+ */
+ int32_t ctdb_control_get_public_ips(struct ctdb_context *ctdb, struct ctdb_req_control *c, TDB_DATA *outdata)
+ {
+ int i, len;
+ struct ctdb_all_public_ips *ips;
+
+ len = offsetof(struct ctdb_all_public_ips, ips) + ctdb->num_nodes*sizeof(struct ctdb_public_ip);
+
+ ips = talloc_size(outdata, len);
+ CTDB_NO_MEMORY(ctdb, ips);
+
+ outdata->dsize = len;
+ outdata->dptr = (uint8_t *)ips;
+
+ ips->num = ctdb->num_nodes;
+ for(i=0;i<ctdb->num_nodes;i++){
+ ips->ips[i].vnn = i;
+ ips->ips[i].takeover_vnn = ctdb->nodes[i]->takeover_vnn;
+ ips->ips[i].sin.sin_family = AF_INET;
+ inet_aton(ctdb->nodes[i]->public_address, &ips->ips[i].sin.sin_addr);
+ }
+
+ return 0;
+ }