diff --git a/repos/os/src/server/nic_router/dhcp_client.cc b/repos/os/src/server/nic_router/dhcp_client.cc index b606bb3ae..8a6c02036 100644 --- a/repos/os/src/server/nic_router/dhcp_client.cc +++ b/repos/os/src/server/nic_router/dhcp_client.cc @@ -18,12 +18,37 @@ #include #include +enum { PKT_SIZE = 1024 }; + using namespace Genode; using namespace Net; using Message_type = Dhcp_packet::Message_type; using Drop_packet_inform = Net::Interface::Drop_packet_inform; +using Size_guard = Size_guard_tpl; +using Dhcp_options = Dhcp_packet::Options_aggregator; +/*************** + ** Utilities ** + ***************/ + +void append_param_req_list(Dhcp_options &dhcp_opts) +{ + dhcp_opts.append_param_req_list([&] (Dhcp_options::Parameter_request_list_data &data) { + data.append_param_req(); + data.append_param_req(); + data.append_param_req(); + data.append_param_req(); + data.append_param_req(); + data.append_param_req(); + }); +} + + +/***************** + ** Dhcp_client ** + *****************/ + Configuration &Dhcp_client::_config() { return _domain().config(); }; @@ -175,8 +200,6 @@ void Dhcp_client::_send(Message_type msg_type, Ipv4_address server_ip, Ipv4_address requested_ip) { - enum { PKT_SIZE = 1024 }; - using Size_guard = Size_guard_tpl; Mac_address client_mac = _interface.router_mac(); _interface.send(PKT_SIZE, [&] (void *pkt_base) { @@ -233,17 +256,17 @@ void Dhcp_client::_send(Message_type msg_type, dhcp.default_magic_cookie(); /* append DHCP option fields to the request */ - Dhcp_packet::Options_aggregator - dhcp_opts(dhcp, size); + Dhcp_options dhcp_opts(dhcp, size); dhcp_opts.append_option(msg_type); - switch (msg_type) { case Message_type::DISCOVER: + append_param_req_list(dhcp_opts); dhcp_opts.append_option(client_mac); dhcp_opts.append_option(PKT_SIZE - dhcp_off); break; case Message_type::REQUEST: + append_param_req_list(dhcp_opts); dhcp_opts.append_option(client_mac); dhcp_opts.append_option(PKT_SIZE - dhcp_off); if (_state == State::REQUEST) {