Account for lease time, router and subnet options in DhcpRepr::buffer_len
parent
a2302412e7
commit
6dca868aed
|
@ -697,6 +697,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
|
||||
|
@ -1012,6 +1015,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,
|
||||
|
@ -1055,6 +1080,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];
|
||||
|
|
Loading…
Reference in New Issue