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.

Reply via email to