Skip to content

Commit d71d5dc

Browse files
committed
uefi-test-runner: SNP: use smoltcp to UDP packet
Properly deconstruct the response. This improves the maintainability of this test and to better understand what is going on.
1 parent 0e10c55 commit d71d5dc

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed

Cargo.lock

Lines changed: 45 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

uefi-test-runner/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ edition = "2024"
88
[dependencies]
99
uefi-raw = { path = "../uefi-raw" }
1010
uefi = { path = "../uefi", features = ["alloc", "global_allocator", "panic_handler", "logger", "qemu", "log-debugcon"] }
11+
smoltcp = { version = "0.12.0", default-features = false, features = ["medium-ethernet", "proto-ipv4", "socket-udp"] }
1112

1213
log.workspace = true
1314

uefi-test-runner/src/proto/network/snp.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ fn receive(simple_network: &mut SimpleNetwork, buffer: &mut [u8]) -> uefi::Resul
4343
{
4444
// UEFI reports proper DST MAC
4545
assert_eq!(recv_dst_mac.0[0..6], EXPECTED_MAC);
46+
47+
// Ethernet frame header reports proper DST MAC
48+
let recv_frame = smoltcp::wire::EthernetFrame::new_checked(&buffer).unwrap();
49+
assert_eq!(
50+
recv_frame.dst_addr(),
51+
smoltcp::wire::EthernetAddress::from_bytes(&EXPECTED_MAC)
52+
);
4653
}
4754

4855
// Ensure that we do not accidentally get an ARP packet, which we
@@ -186,7 +193,12 @@ pub fn test() {
186193
debug!("Reply has {n} bytes");
187194

188195
// Check payload in UDP packet that was reversed by our EchoService.
189-
assert_eq!(buffer[42..47], [4, 4, 3, 2, 1]);
196+
{
197+
let recv_frame = smoltcp::wire::EthernetFrame::new_checked(&buffer).unwrap();
198+
let recv_ipv4 = smoltcp::wire::Ipv4Packet::new_checked(recv_frame.payload()).unwrap();
199+
let udp_packet = smoltcp::wire::UdpPacket::new_checked(recv_ipv4.payload()).unwrap();
200+
assert_eq!(udp_packet.payload(), &[4, 4, 3, 2, 1]);
201+
}
190202

191203
// Get stats
192204
let res = simple_network.collect_statistics();

0 commit comments

Comments
 (0)