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

Generate nodeid value when unset on BSD

Generated nodeid is generated in same way as
on Linux is.


git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2641 fd59a12c-fef9-0310-b244-a6a79926bd2f
Jan Friesse 16 лет назад
Родитель
Сommit
4d2e24a2c3
1 измененных файлов с 19 добавлено и 0 удалено
  1. 19 0
      exec/totemip.c

+ 19 - 0
exec/totemip.c

@@ -447,6 +447,25 @@ int totemip_iface_check(struct totem_ip_address *bindnet,
 			 */
 			*interface_up = ifa->ifa_flags & IFF_UP;
 			*interface_num = if_nametoindex(ifa->ifa_name);
+
+			/*
+			 * Handle case, when nodeid is set to 0 or not set.
+			 */
+			if (bindnet->family == AF_INET && bindnet->nodeid == 0) {
+				unsigned int nodeid = 0;
+				memcpy (&nodeid, boundto->addr, sizeof (int));
+#if _BYTE_ORDER == _BIG_ENDIAN
+				nodeid = swab32 (nodeid);
+#endif
+				/*
+				 * Mask 32nd bit off to workaround bugs in other peoples code
+				 * (if configuration requests it).
+				 */
+				if (mask_high_bit) {
+					nodeid &= 0x7FFFFFFF;
+				}
+				boundto->nodeid = nodeid;
+			}
 			res = 0;
 			break; /* for */
 		}