diff --git a/src/servers/net/DHCPClient.cpp b/src/servers/net/DHCPClient.cpp index d1105ff358..a2ae864305 100644 --- a/src/servers/net/DHCPClient.cpp +++ b/src/servers/net/DHCPClient.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -541,6 +542,12 @@ DHCPClient::_Negotiate(dhcp_state state) uint32 tries; _ResetTimeout(socket, timeout, tries); + char hostName[MAXHOSTNAMELEN]; + if (gethostname(hostName, MAXHOSTNAMELEN) == 0) + fHostName.SetTo(hostName, MAXHOSTNAMELEN); + else + fHostName.Truncate(0); + dhcp_message discover(DHCP_DISCOVER); _PrepareMessage(discover, state); @@ -842,12 +849,24 @@ DHCPClient::_PrepareMessage(dhcp_message& message, dhcp_state state) case DHCP_DISCOVER: next = message.PutOption(next, OPTION_REQUEST_PARAMETERS, kRequestParameters, sizeof(kRequestParameters)); + + if (fHostName.Length() > 0) { + next = message.PutOption(next, OPTION_HOST_NAME, + reinterpret_cast(fHostName.String()), + fHostName.Length()); + } break; case DHCP_REQUEST: next = message.PutOption(next, OPTION_REQUEST_PARAMETERS, kRequestParameters, sizeof(kRequestParameters)); + if (fHostName.Length() > 0) { + next = message.PutOption(next, OPTION_HOST_NAME, + reinterpret_cast(fHostName.String()), + fHostName.Length()); + } + if (state == REQUESTING) { const sockaddr_in& server = (sockaddr_in&)fServer.SockAddr(); next = message.PutOption(next, OPTION_SERVER_ADDRESS, diff --git a/src/servers/net/DHCPClient.h b/src/servers/net/DHCPClient.h index d48fc983c4..9cce7e1d7a 100644 --- a/src/servers/net/DHCPClient.h +++ b/src/servers/net/DHCPClient.h @@ -66,6 +66,7 @@ private: BMessage fResolverConfiguration; BMessageRunner* fRunner; uint8 fMAC[6]; + BString fHostName; uint32 fTransactionID; in_addr_t fAssignedAddress; BNetworkAddress fServer;