Thanks Justin. On my side I tested against AWS and VMware with InfoBlox.
Waldek Sent from my iPhone > On Mar 30, 2017, at 09:58, Justin Cinkelj <[email protected]> wrote: > > works for me, also on openstack and on HLRS testbed. Drop my patch, accept > that one please :) > >> On Thursday, March 30, 2017 at 3:00:17 PM UTC+2, Waldek Kozaczuk wrote: >> During init phase some DHCP servers may send suggested hostname as part of >> DHCPOFFER >> reply message. Right now OSv ignores suggested hostname and always sends >> back osv.local. >> This patch slightly changes this logic to make OSv return back suggested >> hostname >> if present as part of the DHCPREQUEST message. >> >> Fixes #866 >> >> Signed-off-by: Waldemar Kozaczuk <[email protected]> >> --- >> core/dhcp.cc | 34 +++++++++++++++++++++++++++------- >> include/osv/dhcp.hh | 3 ++- >> 2 files changed, 29 insertions(+), 8 deletions(-) >> >> diff --git a/core/dhcp.cc b/core/dhcp.cc >> index 5d3ec9a..5cbfeea 100644 >> --- a/core/dhcp.cc >> +++ b/core/dhcp.cc >> @@ -221,7 +221,8 @@ namespace dhcp { >> u32 xid, >> ip::address_v4 yip, >> ip::address_v4 sip, >> - dhcp_request_packet_type >> request_packet_type) >> + dhcp_request_packet_type >> request_packet_type, >> + std::string hostname) >> { >> size_t dhcp_len = sizeof(struct dhcp_packet); >> struct dhcp_packet* pkt = pdhcp(); >> @@ -256,10 +257,10 @@ namespace dhcp { >> if(request_packet_type == DHCP_REQUEST_SELECTING) { >> options = add_option(options, DHCP_OPTION_DHCP_SERVER, 4, >> (u8*)&dhcp_server_ip); >> } >> - char hostname[256]; >> - if (0 == gethostname(hostname, sizeof(hostname))) { >> - options = add_option(options, DHCP_OPTION_HOSTNAME, >> strlen(hostname), (u8*)hostname); >> + if (hostname.length() > 0) { >> + options = add_option(options, DHCP_OPTION_HOSTNAME, >> hostname.length(), (u8*)(hostname.c_str())); >> } >> + >> if(request_packet_type == DHCP_REQUEST_SELECTING) { >> options = add_option(options, DHCP_OPTION_REQUESTED_ADDRESS, 4, >> (u8*)&requested_ip); >> } >> @@ -588,11 +589,17 @@ namespace dhcp { >> // Compose a dhcp request packet >> dhcp_mbuf dm(false); >> _xid = rand(); >> + std::string hostname_str(""); >> + char hostname[256]; >> + if (0 == gethostname(hostname, sizeof(hostname))) { >> + hostname_str.assign(hostname); >> + } >> dm.compose_request(_ifp, >> _xid, >> _client_addr, >> _server_addr, >> - dhcp_mbuf::DHCP_REQUEST_RENEWING); >> + dhcp_mbuf::DHCP_REQUEST_RENEWING, >> + hostname_str); >> >> // Send >> dhcp_i( "Unicasting DHCPREQUEST message with xid: [%d] from client: >> %s to server: %s in order to RENEW lease of: %s", >> @@ -638,11 +645,23 @@ namespace dhcp { >> // Send a DHCP Request >> _state = DHCP_REQUEST; >> dhcp_mbuf dm_req(false); >> + std::string hostname_str(""); >> + if(dm.get_hostname().length() > 0) { >> + // Get from the offer message >> + hostname_str = dm.get_hostname(); >> + } >> + else { >> + char hostname[256]; >> + if (0 == gethostname(hostname, sizeof(hostname))) { >> + hostname_str = hostname; >> + } >> + } >> dm_req.compose_request(_ifp, >> _xid, >> dm.get_your_ip(), >> dm.get_dhcp_server_ip(), >> - dhcp_mbuf::DHCP_REQUEST_SELECTING); >> + dhcp_mbuf::DHCP_REQUEST_SELECTING, >> + hostname_str); >> dhcp_i( "Broadcasting DHCPREQUEST message with xid: [%d] to SELECT >> offered IP: %s", >> _xid, dm.get_your_ip().to_string().c_str()); >> _sock->dhcp_send(dm_req); >> @@ -702,7 +721,8 @@ namespace dhcp { >> >> osv::set_dns_config(dm.get_dns_ips(), >> std::vector<std::string>()); >> if (dm.get_hostname().size()) { >> - sethostname(dm.get_hostname().c_str(), >> dm.get_hostname().size()); >> + sethostname(dm.get_hostname().c_str(), >> dm.get_hostname().size()); >> + dhcp_i("Set hostname to: %s", dm.get_hostname().c_str()); >> } >> // TODO: setup lease >> } else if (dm.get_message_type() == DHCP_MT_NAK) { >> diff --git a/include/osv/dhcp.hh b/include/osv/dhcp.hh >> index 6797b7f..7309db9 100644 >> --- a/include/osv/dhcp.hh >> +++ b/include/osv/dhcp.hh >> @@ -137,7 +137,8 @@ namespace dhcp { >> u32 xid, >> boost::asio::ip::address_v4 yip, >> boost::asio::ip::address_v4 sip, >> - dhcp_request_packet_type request_packet_type); >> + dhcp_request_packet_type request_packet_type, >> + std::string hostname); >> void compose_release(struct ifnet* ifp, >> boost::asio::ip::address_v4 yip, >> boost::asio::ip::address_v4 sip); >> -- >> 2.7.4 >> -- You received this message because you are subscribed to the Google Groups "OSv Development" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
