Просмотр исходного кода

cfg: Fix cfg_get_node_addrs so that DLM works

Also update copyright dates

Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
Reviewed-by: Jan Friesse <jfriesse@redhat.com>
Christine Caulfield 8 лет назад
Родитель
Сommit
386d710ed1
7 измененных файлов с 32 добавлено и 14 удалено
  1. 10 3
      exec/cfg.c
  2. 1 1
      exec/totemconfig.c
  3. 1 1
      exec/totemknet.c
  4. 1 1
      exec/totemnet.c
  5. 17 6
      exec/totemsrp.c
  6. 1 1
      exec/totemudp.c
  7. 1 1
      exec/totemudpu.c

+ 10 - 3
exec/cfg.c

@@ -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;
 	}

+ 1 - 1
exec/totemconfig.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2002-2005 MontaVista Software, Inc.
- * Copyright (c) 2006-2013 Red Hat, Inc.
+ * Copyright (c) 2006-2018 Red Hat, Inc.
  *
  * All rights reserved.
  *

+ 1 - 1
exec/totemknet.c

@@ -1,6 +1,6 @@
 
 /*
- * Copyright (c) 2016-2017 Red Hat, Inc.
+ * Copyright (c) 2016-2018 Red Hat, Inc.
  *
  * All rights reserved.
  *

+ 1 - 1
exec/totemnet.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2005 MontaVista Software, Inc.
- * Copyright (c) 2006-2012 Red Hat, Inc.
+ * Copyright (c) 2006-2018 Red Hat, Inc.
  *
  * All rights reserved.
  *

+ 17 - 6
exec/totemsrp.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2003-2006 MontaVista Software, Inc.
- * Copyright (c) 2006-2009 Red Hat, Inc.
+ * Copyright (c) 2006-2018 Red Hat, Inc.
  *
  * All rights reserved.
  *
@@ -1039,19 +1039,30 @@ int totemsrp_ifaces_get (
 	unsigned int *iface_count)
 {
 	struct totemsrp_instance *instance = (struct totemsrp_instance *)srp_context;
+	struct totem_ip_address *iface_ptr = interfaces;
 	int res = 0;
+	int i,n;
+	int num_ifs = 0;
 
 	memset(interfaces, 0, sizeof(struct totem_ip_address) * interfaces_size);
 	*iface_count = INTERFACE_MAX;
 
-	if (interfaces_size >= *iface_count) {
-		memcpy (interfaces, instance->my_addrs,
-			sizeof (struct totem_ip_address) * *iface_count);
-	} else {
-		res = -2;
+	for (i=0; i<INTERFACE_MAX; i++) {
+		for (n=0; n < instance->totem_config->interfaces[i].member_count; n++) {
+			if (instance->totem_config->interfaces[i].configured &&
+			    instance->totem_config->interfaces[i].member_list[n].nodeid == nodeid) {
+				memcpy(iface_ptr, &instance->totem_config->interfaces[i].member_list[n], sizeof(struct totem_ip_address));
+				iface_ptr += sizeof(struct totem_ip_address);
+				if (++num_ifs > interfaces_size) {
+					res = -2;
+					break;
+				}
+			}
+		}
 	}
 
 	totemnet_ifaces_get(instance->totemnet_context, status, iface_count);
+	*iface_count = num_ifs;
 	return (res);
 }
 

+ 1 - 1
exec/totemudp.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2005 MontaVista Software, Inc.
- * Copyright (c) 2006-2012 Red Hat, Inc.
+ * Copyright (c) 2006-2018 Red Hat, Inc.
  *
  * All rights reserved.
  *

+ 1 - 1
exec/totemudpu.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2005 MontaVista Software, Inc.
- * Copyright (c) 2006-2012 Red Hat, Inc.
+ * Copyright (c) 2006-2018 Red Hat, Inc.
  *
  * All rights reserved.
  *