diff --git a/src/wire/dhcpv4.rs b/src/wire/dhcpv4.rs index 7ef39d9..3614937 100644 --- a/src/wire/dhcpv4.rs +++ b/src/wire/dhcpv4.rs @@ -704,6 +704,9 @@ impl<'a> Repr<'a> { if self.client_identifier.is_some() { len += 9; } if self.server_identifier.is_some() { len += 6; } if self.max_size.is_some() { len += 4; } + if self.router.is_some() { len += 6; } + if self.subnet_mask.is_some() { len += 6; } + if self.lease_duration.is_some() { len += 6; } if let Some(list) = self.parameter_request_list { len += list.len() + 2; } len @@ -1019,6 +1022,28 @@ mod test { assert_eq!(packet, DISCOVER_BYTES); } + fn offer_repr() -> Repr<'static> { + Repr { + message_type: MessageType::Offer, + transaction_id: 0x3d1d, + client_hardware_address: CLIENT_MAC, + client_ip: IP_NULL, + your_ip: IP_NULL, + server_ip: IP_NULL, + router: Some(IP_NULL), + subnet_mask: Some(IP_NULL), + relay_agent_ip: IP_NULL, + broadcast: false, + requested_ip: None, + client_identifier: Some(CLIENT_MAC), + server_identifier: None, + parameter_request_list: None, + dns_servers: None, + max_size: None, + lease_duration: Some(u32::MAX), // Infinite lease + } + } + fn discover_repr() -> Repr<'static> { Repr { message_type: MessageType::Discover, @@ -1062,6 +1087,14 @@ mod test { } } + #[test] + fn test_emit_offer() { + let repr = offer_repr(); + let mut bytes = vec![0xa5; repr.buffer_len()]; + let mut packet = Packet::new_unchecked(&mut bytes); + repr.emit(&mut packet).unwrap(); + } + #[test] fn test_emit_dhcp_option() { static DATA: &[u8] = &[1, 3, 6];