Author: phoudoin Date: 2011-05-16 18:00:18 +0200 (Mon, 16 May 2011) New Revision: 41538 Changeset: https://dev.haiku-os.org/changeset/41538 Modified: haiku/trunk/src/servers/net/DHCPClient.cpp Log: There is no point trying to request back from DHCP a link-local auto-configured address... Modified: haiku/trunk/src/servers/net/DHCPClient.cpp =================================================================== --- haiku/trunk/src/servers/net/DHCPClient.cpp 2011-05-16 15:19:02 UTC (rev 41537) +++ haiku/trunk/src/servers/net/DHCPClient.cpp 2011-05-16 16:00:18 UTC (rev 41538) @@ -446,6 +446,13 @@ BNetworkAddress address = interfaceAddress.Address(); const sockaddr_in& addr = (sockaddr_in&)address.SockAddr(); fAssignedAddress = addr.sin_addr.s_addr; + + if ((ntohl(fAssignedAddress) & IN_CLASSB_NET) == 0xa9fe0000) { + // previous auto-configured address is a link-local one: + // there is no point asking a DHCP server to renew such + // server-less assigned address... + fAssignedAddress = 0; + } } } @@ -561,8 +568,8 @@ _SendMessage(socket, state == INIT ? discover : request, state != RENEWING ? broadcast : fServer); + continue; - continue; } else if (bytesReceived < 0) break; @@ -845,7 +852,7 @@ (uint32)server.sin_addr.s_addr); } - if (state == INIT || state == INIT_REBOOT + if (state == INIT || state == INIT_REBOOT || state == REQUESTING) { next = message.PutOption(next, OPTION_REQUEST_IP_ADDRESS, (uint32)fAssignedAddress); @@ -928,12 +935,12 @@ message_type type = message.Type(); BString text; text << dhcp_message::TypeToString(type); - + const uint8* requestAddress = message.FindOption(OPTION_REQUEST_IP_ADDRESS); if (type == DHCP_REQUEST && requestAddress != NULL) text << " for " << _AddressToString(requestAddress).String(); - - syslog(LOG_DEBUG, "%s: Send %s to %s\n", Device(), text.String(), + + syslog(LOG_DEBUG, "%s: Send %s to %s\n", Device(), text.String(), address.ToString().String()); ssize_t bytesSent = sendto(socket, &message, message.Size(),