Author: phoudoin Date: 2011-04-23 03:56:02 +0200 (Sat, 23 Apr 2011) New Revision: 41279 Changeset: https://dev.haiku-os.org/changeset/41279 Modified: haiku/trunk/src/servers/net/AutoconfigLooper.cpp haiku/trunk/src/servers/net/DHCPClient.cpp haiku/trunk/src/servers/net/DHCPClient.h Log: Revert files that were commit by mistake in previous commit. Sorry. Modified: haiku/trunk/src/servers/net/AutoconfigLooper.cpp =================================================================== --- haiku/trunk/src/servers/net/AutoconfigLooper.cpp 2011-04-23 01:52:16 UTC (rev 41278) +++ haiku/trunk/src/servers/net/AutoconfigLooper.cpp 2011-04-23 01:56:02 UTC (rev 41279) @@ -58,19 +58,21 @@ void AutoconfigLooper::_Configure() { - // start with DHCP - - if (fCurrentClient == NULL) { - fCurrentClient = new DHCPClient(fTarget, fDevice.String()); - AddHandler(fCurrentClient); - } - // set IFF_CONFIGURING flag on interface BNetworkInterface interface(fDevice.String()); int32 flags = interface.Flags() & ~IFF_AUTO_CONFIGURED; interface.SetFlags(flags | IFF_CONFIGURING); + // remove current handler + + _RemoveClient(); + + // start with DHCP + + fCurrentClient = new DHCPClient(fTarget, fDevice.String()); + AddHandler(fCurrentClient); + if (fCurrentClient->Initialize() == B_OK) return; @@ -89,7 +91,7 @@ BMessage message(kMsgConfigureInterface); message.AddString("device", fDevice.String()); - message.AddBool("auto_configured", true); + message.AddBool("auto", true); BNetworkAddress link; uint8 last = 56; Modified: haiku/trunk/src/servers/net/DHCPClient.cpp =================================================================== --- haiku/trunk/src/servers/net/DHCPClient.cpp 2011-04-23 01:52:16 UTC (rev 41278) +++ haiku/trunk/src/servers/net/DHCPClient.cpp 2011-04-23 01:56:02 UTC (rev 41279) @@ -422,7 +422,6 @@ fConfiguration(kMsgConfigureInterface), fResolverConfiguration(kMsgConfigureResolver), fRunner(NULL), - fAssignedAddress(0), fServer(AF_INET, NULL, DHCP_SERVER_PORT), fLeaseTime(0) { @@ -437,18 +436,6 @@ memcpy(fMAC, link.LinkLevelAddress(), sizeof(fMAC)); - if ((interface.Flags() & IFF_AUTO_CONFIGURED) != 0) { - // Check for interface previous auto-configured address, if any. - BNetworkInterfaceAddress interfaceAddress; - int index = interface.FindFirstAddress(AF_INET); - if (index >= 0 - && interface.GetAddressAt(index, interfaceAddress) == B_OK) { - BNetworkAddress address = interfaceAddress.Address(); - const sockaddr_in& addr = (sockaddr_in&)address.SockAddr(); - fAssignedAddress = addr.sin_addr.s_addr; - } - } - openlog_thread("DHCP", 0, LOG_DAEMON); } @@ -479,8 +466,8 @@ status_t DHCPClient::Initialize() { - fStatus = _Negotiate(fAssignedAddress == 0 ? INIT : INIT_REBOOT); - syslog(LOG_DEBUG, "%s: DHCP status = %s\n", Device(), strerror(fStatus)); + fStatus = _Negotiate(INIT); + syslog(LOG_DEBUG, "DHCP for %s, status: %s\n", Device(), strerror(fStatus)); return fStatus; } @@ -540,15 +527,13 @@ // send discover/request message _SendMessage(socket, state == INIT ? discover : request, - state != RENEWING ? broadcast : fServer); + state != RENEWAL ? broadcast : fServer); // no need to check the status; in case of an error we'll just send // the message again // receive loop until we've got an offer and acknowledged it - while (state != BOUND) { - printf("DHCPClient::_Negotiate(%d)\n", (int)state); - + while (state != ACKNOWLEDGED) { char buffer[2048]; struct sockaddr_in from; socklen_t fromLength = sizeof(from); @@ -561,8 +546,12 @@ return B_TIMED_OUT; } - _SendMessage(socket, state == INIT ? discover : request, - state != RENEWING ? broadcast : fServer); + if (state == INIT) + _SendMessage(socket, discover, broadcast); + else { + _SendMessage(socket, request, + state != RENEWAL ? broadcast : fServer); + } continue; } else if (bytesReceived < 0) @@ -577,16 +566,10 @@ continue; } - // advance from startup state - if (state == INIT) - state = SELECTING; - else if (state == INIT_REBOOT) - state = REBOOTING; + syslog(LOG_DEBUG, "Received %s from %s for %s\n", + dhcp_message::TypeToString(message->Type()), + _AddressToString(from.sin_addr.s_addr).String(), Device()); - syslog(LOG_DEBUG, "%s: Received %s from %s\n", - Device(), dhcp_message::TypeToString(message->Type()), - _AddressToString(from.sin_addr.s_addr).String()); - switch (message->Type()) { case DHCP_NONE: default: @@ -596,7 +579,7 @@ case DHCP_OFFER: { // first offer wins - if (state != SELECTING) + if (state != INIT) break; // collect interface options @@ -607,7 +590,7 @@ fConfiguration.MakeEmpty(); fConfiguration.AddString("device", Device()); - fConfiguration.AddBool("auto_configured", true); + fConfiguration.AddBool("auto", true); BMessage address; address.AddString("family", "inet"); @@ -631,10 +614,8 @@ case DHCP_ACK: { - if (state != REQUESTING - && state != REBOOTING - && state != REBINDING - && state != RENEWING) + if (state != REQUESTING && state != REBINDING + && state != RENEWAL) continue; // TODO: we might want to configure the stuff, don't we? @@ -645,7 +626,7 @@ // way // our address request has been acknowledged - state = BOUND; + state = ACKNOWLEDGED; // configure interface BMessage reply; @@ -663,18 +644,9 @@ } case DHCP_NACK: - if (state != REQUESTING - && state != REBOOTING - && state != REBINDING - && state != RENEWING) + if (state != REQUESTING) continue; - if (state == REBOOTING) { - // server reject our request on previous assigned address - // back to square one... - fAssignedAddress = 0; - } - // try again (maybe we should prefer other servers if this // happens more than once) status = _SendMessage(socket, discover, broadcast); @@ -847,8 +819,7 @@ (uint32)server.sin_addr.s_addr); } - if (state == INIT || state == INIT_REBOOT - || state == REQUESTING) { + if (state == INIT || state == REQUESTING) { next = message.PutOption(next, OPTION_REQUEST_IP_ADDRESS, (uint32)fAssignedAddress); } else @@ -895,7 +866,7 @@ if (++tries > 2) return false; } - syslog(LOG_DEBUG, "%s: Timeout shift: %lu secs (try %lu)\n", + syslog(LOG_DEBUG, "Timeout shift for %s: %lu secs (try %lu)\n", Device(), timeout, tries); struct timeval value; @@ -927,16 +898,9 @@ DHCPClient::_SendMessage(int socket, dhcp_message& message, const BNetworkAddress& address) const { - 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(), - address.ToString().String()); + syslog(LOG_DEBUG, "Send %s to %s on %s\n", + dhcp_message::TypeToString(message.Type()), + address.ToString().String(), Device()); ssize_t bytesSent = sendto(socket, &message, message.Size(), address.IsBroadcast() ? MSG_BCAST : 0, address, address.Length()); @@ -957,7 +921,7 @@ if (now >= fRebindingTime) return REBINDING; if (now >= fRenewalTime) - return RENEWING; + return RENEWAL; return BOUND; } @@ -974,7 +938,7 @@ bigtime_t next; if (_Negotiate(state) == B_OK) { switch (state) { - case RENEWING: + case RENEWAL: next = fRebindingTime; break; case REBINDING: @@ -984,7 +948,7 @@ } } else { switch (state) { - case RENEWING: + case RENEWAL: next = (fLeaseTime - fRebindingTime) / 4 + system_time(); break; case REBINDING: Modified: haiku/trunk/src/servers/net/DHCPClient.h =================================================================== --- haiku/trunk/src/servers/net/DHCPClient.h 2011-04-23 01:52:16 UTC (rev 41278) +++ haiku/trunk/src/servers/net/DHCPClient.h 2011-04-23 01:56:02 UTC (rev 41279) @@ -22,13 +22,11 @@ enum dhcp_state { INIT, - SELECTING, - INIT_REBOOT, - REBOOTING, REQUESTING, BOUND, - RENEWING, + RENEWAL, REBINDING, + ACKNOWLEDGED, }; @@ -57,9 +55,9 @@ bool _TimeoutShift(int socket, time_t& timeout, uint32& tries); void _RestartLease(bigtime_t lease); - + static BString _AddressToString(const uint8* data); - static BString _AddressToString(in_addr_t address); + static BString _AddressToString(in_addr_t address); private: BMessage fConfiguration;