diff --git a/userspace/netutils/src/dhcp_client.rs b/userspace/netutils/src/dhcp_client.rs index 50086abd..1c636f8e 100644 --- a/userspace/netutils/src/dhcp_client.rs +++ b/userspace/netutils/src/dhcp_client.rs @@ -53,7 +53,7 @@ enum DhcpOption { SubnetMask(u32), Router(Ipv4Addr), ServerId(Ipv4Addr), - // ParameterRequestList(Vec), + ParameterRequestList(Vec), RequestedAddress(Ipv4Addr), } @@ -117,7 +117,10 @@ impl DhcpOption { Self::MessageType(ty) => { buffer.extend_from_slice(&[53, 0x01, (*ty).into()]); } - // Self::ParameterRequestList(list) => todo!(), + Self::ParameterRequestList(list) => { + buffer.extend_from_slice(&[55, list.len() as u8]); + buffer.extend_from_slice(list); + } Self::RequestedAddress(addr) => { buffer.extend_from_slice(&[50, 0x04]); buffer.extend_from_slice(&u32::from(*addr).to_be_bytes()); @@ -469,7 +472,11 @@ fn attempt_request( cookie: 0x63825363u32.to_be(), ..DhcpMessageHeader::zeroed() }, - options: vec![DhcpOption::MessageType(DhcpMessageType::Discover)], + options: vec![ + DhcpOption::MessageType(DhcpMessageType::Discover), + // Request subnet mask and router + DhcpOption::ParameterRequestList(vec![0x01, 0x03]), + ], }; message.header.chaddr[..6].copy_from_slice(&iface_mac_bytes); let data = message.to_vec();