In Repr::emit, do not assume that the packet is pre-zeroed.
This commit is contained in:
parent
77b2819691
commit
31040bf0fc
|
@ -266,6 +266,15 @@ impl<T: AsRef<[u8]> + AsMut<[u8]>> Packet<T> {
|
||||||
NetworkEndian::write_u16(&mut data[field::IDENT], value)
|
NetworkEndian::write_u16(&mut data[field::IDENT], value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Clear the entire flags field.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn clear_flags(&mut self) {
|
||||||
|
let data = self.buffer.as_mut();
|
||||||
|
let raw = NetworkEndian::read_u16(&data[field::FLG_OFF]);
|
||||||
|
let raw = raw & !0xe000;
|
||||||
|
NetworkEndian::write_u16(&mut data[field::FLG_OFF], raw);
|
||||||
|
}
|
||||||
|
|
||||||
/// Set the "don't fragment" flag.
|
/// Set the "don't fragment" flag.
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn set_dont_frag(&mut self, value: bool) {
|
pub fn set_dont_frag(&mut self, value: bool) {
|
||||||
|
@ -398,6 +407,7 @@ impl Repr {
|
||||||
let total_len = packet.header_len() as u16 + payload_len as u16;
|
let total_len = packet.header_len() as u16 + payload_len as u16;
|
||||||
packet.set_total_len(total_len);
|
packet.set_total_len(total_len);
|
||||||
packet.set_ident(0);
|
packet.set_ident(0);
|
||||||
|
packet.clear_flags();
|
||||||
packet.set_more_frags(false);
|
packet.set_more_frags(false);
|
||||||
packet.set_dont_frag(true);
|
packet.set_dont_frag(true);
|
||||||
packet.set_frag_offset(0);
|
packet.set_frag_offset(0);
|
||||||
|
|
|
@ -235,6 +235,13 @@ impl<T: AsRef<[u8]> + AsMut<[u8]>> Packet<T> {
|
||||||
NetworkEndian::write_u32(&mut data[field::ACK_NUM], value)
|
NetworkEndian::write_u32(&mut data[field::ACK_NUM], value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Clear the entire flags field.
|
||||||
|
#[inline(always)]
|
||||||
|
pub fn clear_flags(&mut self) {
|
||||||
|
let data = self.buffer.as_mut();
|
||||||
|
NetworkEndian::write_u16(&mut data[field::FLAGS], 0)
|
||||||
|
}
|
||||||
|
|
||||||
/// Set the FIN flag.
|
/// Set the FIN flag.
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn set_fin(&mut self, value: bool) {
|
pub fn set_fin(&mut self, value: bool) {
|
||||||
|
|
Loading…
Reference in New Issue