diff --git a/exec/totemip.c b/exec/totemip.c index 9e1bc441..f6613e89 100644 --- a/exec/totemip.c +++ b/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 */ }