From 5f25cf08b3f018456f117c6b7bdabb9f46efc4d0 Mon Sep 17 00:00:00 2001 From: Siarzhuk Zharski Date: Sun, 20 May 2012 12:46:58 +0200 Subject: [PATCH] Put hostname option into DHCPDISCOVER/DHCPREQUEST if provided by system If Haiku has the hostname set, inform DHCP server with corresponding option in DHCPDISCOVER and DHCPREQUEST messages. That should simplify accessing Haiku hosts by using it's hostname instead of raw addresses. --- src/servers/net/DHCPClient.cpp | 19 +++++++++++++++++++ src/servers/net/DHCPClient.h | 1 + 2 files changed, 20 insertions(+) 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;