chore(connlib): fix echo request and reply packets (#5169)

When creating an echo request or reply packet using pnet it uses the
whole packet since the identifier and sequence is part of the icmp
header not the payload.

Those fields aren't accessible unless the packet is converted to an echo
request or reply because the interpretation of that header field depends
on the specific type of packet.
This commit is contained in:
Gabi
2024-05-31 08:15:46 -03:00
committed by GitHub
parent ce929e1204
commit 499edd2dd4
2 changed files with 7 additions and 7 deletions

View File

@@ -349,14 +349,14 @@ impl<'a> IcmpPacket<'a> {
match self {
IcmpPacket::Ipv4(v4) if matches!(v4.get_icmp_type(), icmp::IcmpTypes::EchoRequest) => {
Some(IcmpEchoRequest::Ipv4(
icmp::echo_request::EchoRequestPacket::new(v4.payload())?,
icmp::echo_request::EchoRequestPacket::new(v4.packet())?,
))
}
IcmpPacket::Ipv6(v6)
if matches!(v6.get_icmpv6_type(), icmpv6::Icmpv6Types::EchoRequest) =>
{
Some(IcmpEchoRequest::Ipv6(
icmpv6::echo_request::EchoRequestPacket::new(v6.payload())?,
icmpv6::echo_request::EchoRequestPacket::new(v6.packet())?,
))
}
IcmpPacket::Ipv4(_) | IcmpPacket::Ipv6(_) => None,
@@ -367,14 +367,14 @@ impl<'a> IcmpPacket<'a> {
match self {
IcmpPacket::Ipv4(v4) if matches!(v4.get_icmp_type(), icmp::IcmpTypes::EchoReply) => {
Some(IcmpEchoReply::Ipv4(icmp::echo_reply::EchoReplyPacket::new(
v4.payload(),
v4.packet(),
)?))
}
IcmpPacket::Ipv6(v6)
if matches!(v6.get_icmpv6_type(), icmpv6::Icmpv6Types::EchoReply) =>
{
Some(IcmpEchoReply::Ipv6(
icmpv6::echo_reply::EchoReplyPacket::new(v6.payload())?,
icmpv6::echo_reply::EchoReplyPacket::new(v6.packet())?,
))
}
IcmpPacket::Ipv4(_) | IcmpPacket::Ipv6(_) => None,

View File

@@ -78,7 +78,7 @@ fn icmp_packet(
icmp_packet.set_checksum(0);
let mut echo_request_packet =
MutableEchoRequestPacket::new(icmp_packet.payload_mut()).unwrap();
MutableEchoRequestPacket::new(icmp_packet.packet_mut()).unwrap();
echo_request_packet.set_sequence_number(seq);
echo_request_packet.set_identifier(identifier);
echo_request_packet.set_checksum(crate::util::checksum(
@@ -116,13 +116,13 @@ fn icmp_packet(
}
let mut echo_request_packet =
MutableEchoRequestPacket::new(icmp_packet.payload_mut()).unwrap();
MutableEchoRequestPacket::new(icmp_packet.packet_mut()).unwrap();
echo_request_packet.set_identifier(identifier);
echo_request_packet.set_sequence_number(seq);
echo_request_packet.set_checksum(0);
let checksum = crate::icmpv6::checksum(&icmp_packet.to_immutable(), &src, &dst);
MutableEchoRequestPacket::new(icmp_packet.payload_mut())
MutableEchoRequestPacket::new(icmp_packet.packet_mut())
.unwrap()
.set_checksum(checksum);