From dc907405494d6c490011daf32ac132006fe18faf Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Sat, 28 Mar 2020 10:34:01 +0100 Subject: [PATCH] nic_router: accept DHCP reply with missing option The options are not always set, which throws exception. This leads to not accepting the selected IP address. Fixes #3716 --- repos/os/src/server/nic_router/dhcp_client.cc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/repos/os/src/server/nic_router/dhcp_client.cc b/repos/os/src/server/nic_router/dhcp_client.cc index acd94b278..b8e662bcb 100644 --- a/repos/os/src/server/nic_router/dhcp_client.cc +++ b/repos/os/src/server/nic_router/dhcp_client.cc @@ -142,12 +142,19 @@ void Dhcp_client::handle_dhcp_reply(Dhcp_packet &dhcp) } _lease_time_sec = dhcp.option().value(); _set_state(State::BOUND, _rerequest_timeout(1)); + Ipv4_address dns_server; + Ipv4_address subnet_mask; + Ipv4_address router_ip; + try { dns_server = dhcp.option().value(); } catch (Dhcp_packet::Option_not_found) { } - _domain().ip_config(dhcp.yiaddr(), - dhcp.option().value(), - dhcp.option().value(), + try { subnet_mask = dhcp.option().value(); } + catch (Dhcp_packet::Option_not_found) { } + try { router_ip = dhcp.option().value(); } + catch (Net::Dhcp_packet::Option_not_found) { } + + _domain().ip_config(dhcp.yiaddr(), subnet_mask, router_ip, dns_server); break; }