|
|
@@ -1002,8 +1002,10 @@ static void message_handler_req_lib_cfg_get_node_addrs (void *conn,
|
|
|
char buf[PIPE_BUF];
|
|
|
char **status;
|
|
|
unsigned int num_interfaces = 0;
|
|
|
+ struct sockaddr_storage *ss;
|
|
|
int ret = CS_OK;
|
|
|
int i;
|
|
|
+ int live_addrs = 0;
|
|
|
const struct req_lib_cfg_get_node_addrs *req_lib_cfg_get_node_addrs = msg;
|
|
|
struct res_lib_cfg_get_node_addrs *res_lib_cfg_get_node_addrs = (struct res_lib_cfg_get_node_addrs *)buf;
|
|
|
unsigned int nodeid = req_lib_cfg_get_node_addrs->nodeid;
|
|
|
@@ -1020,13 +1022,18 @@ static void message_handler_req_lib_cfg_get_node_addrs (void *conn,
|
|
|
res_lib_cfg_get_node_addrs->header.size = sizeof(struct res_lib_cfg_get_node_addrs) + (num_interfaces * TOTEMIP_ADDRLEN);
|
|
|
res_lib_cfg_get_node_addrs->header.id = MESSAGE_RES_CFG_GET_NODE_ADDRS;
|
|
|
res_lib_cfg_get_node_addrs->header.error = ret;
|
|
|
- res_lib_cfg_get_node_addrs->num_addrs = num_interfaces;
|
|
|
if (num_interfaces) {
|
|
|
res_lib_cfg_get_node_addrs->family = node_ifs[0].family;
|
|
|
for (i = 0, addr_buf = (char *)res_lib_cfg_get_node_addrs->addrs;
|
|
|
- i < num_interfaces; i++, addr_buf += TOTEMIP_ADDRLEN) {
|
|
|
- memcpy(addr_buf, node_ifs[i].addr, TOTEMIP_ADDRLEN);
|
|
|
+ i < num_interfaces; i++) {
|
|
|
+ ss = (struct sockaddr_storage *)&node_ifs[i].addr;
|
|
|
+ if (ss->ss_family) {
|
|
|
+ memcpy(addr_buf, node_ifs[i].addr, TOTEMIP_ADDRLEN);
|
|
|
+ live_addrs++;
|
|
|
+ addr_buf += TOTEMIP_ADDRLEN;
|
|
|
+ }
|
|
|
}
|
|
|
+ res_lib_cfg_get_node_addrs->num_addrs = live_addrs;
|
|
|
} else {
|
|
|
res_lib_cfg_get_node_addrs->header.error = CS_ERR_NOT_EXIST;
|
|
|
}
|