Skip to content

Commit c7d1131

Browse files
committed
don't test PXE Base Code protocol on unsupported platforms
1 parent f822036 commit c7d1131

File tree

1 file changed

+101
-101
lines changed

1 file changed

+101
-101
lines changed

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

Lines changed: 101 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -11,106 +11,106 @@ use uefi::{
1111
pub fn test(image: Handle, bt: &BootServices) {
1212
info!("Testing Network protocols");
1313

14-
let handles = bt
15-
.find_handles::<BaseCode>()
16-
.expect("Failed to get handles for `BaseCode` protocol");
17-
18-
for handle in handles {
19-
let base_code = bt
20-
.open_protocol::<BaseCode>(
21-
OpenProtocolParams {
22-
handle,
23-
agent: image,
24-
controller: None,
25-
},
26-
OpenProtocolAttributes::Exclusive,
27-
)
28-
.unwrap();
29-
30-
let base_code = unsafe { &mut *base_code.interface.get() };
31-
32-
info!("Starting PXE Base Code");
33-
base_code
34-
.start(false)
35-
.expect("failed to start PXE Base Code");
36-
base_code
37-
.dhcp(false)
38-
.expect("failed to complete a dhcpv4 handshake");
39-
40-
assert!(base_code.mode().dhcp_ack_received);
41-
let dhcp_ack: &DhcpV4Packet = base_code.mode().dhcp_ack.as_ref();
42-
let server_ip = dhcp_ack.bootp_si_addr;
43-
let server_ip = IpAddress::new_v4(server_ip);
44-
45-
const EXAMPLE_FILE_NAME: &[u8] = b"example-file.txt\0";
46-
const EXAMPLE_FILE_CONTENT: &[u8] = b"Hello world!";
47-
let example_file_name = CStr8::from_bytes_with_nul(EXAMPLE_FILE_NAME).unwrap();
48-
49-
info!("Getting remote file size");
50-
let file_size = base_code
51-
.tftp_get_file_size(&server_ip, example_file_name)
52-
.expect("failed to query file size");
53-
assert_eq!(file_size, EXAMPLE_FILE_CONTENT.len() as u64);
54-
55-
info!("Reading remote file");
56-
let mut buffer = [0; 512];
57-
let len = base_code
58-
.tftp_read_file(&server_ip, example_file_name, Some(&mut buffer))
59-
.expect("failed to read file");
60-
let len = usize::try_from(len).unwrap();
61-
assert_eq!(EXAMPLE_FILE_CONTENT, &buffer[..len]);
62-
63-
base_code
64-
.set_ip_filter(&IpFilter::new(IpFilters::STATION_IP, &[]))
65-
.expect("failed to set ip filter");
66-
67-
const EXAMPLE_SERVICE_PORT: u16 = 21572;
68-
69-
info!("Writing UDP packet to example service");
70-
71-
let payload = [1, 2, 3, 4];
72-
let header = [payload.len() as u8];
73-
let mut write_src_port = 0;
74-
base_code
75-
.udp_write(
76-
UdpOpFlags::ANY_SRC_PORT,
77-
&server_ip,
78-
EXAMPLE_SERVICE_PORT,
79-
None,
80-
None,
81-
Some(&mut write_src_port),
82-
Some(&header),
83-
&payload,
84-
)
85-
.expect("failed to write UDP packet");
86-
87-
info!("Reading UDP packet from example service");
88-
89-
let mut src_ip = server_ip;
90-
let mut src_port = EXAMPLE_SERVICE_PORT;
91-
let mut dest_ip = base_code.mode().station_ip;
92-
let mut dest_port = write_src_port;
93-
let mut header = [0; 1];
94-
let mut received = [0; 4];
95-
base_code
96-
.udp_read(
97-
UdpOpFlags::USE_FILTER,
98-
Some(&mut dest_ip),
99-
Some(&mut dest_port),
100-
Some(&mut src_ip),
101-
Some(&mut src_port),
102-
Some(&mut header),
103-
&mut received,
104-
)
105-
.unwrap();
106-
107-
// Check the header.
108-
assert_eq!(header[0] as usize, payload.len());
109-
// Check that we receive the reversed payload.
110-
received.reverse();
111-
assert_eq!(payload, received);
112-
113-
info!("Stopping PXE Base Code");
114-
base_code.stop().expect("failed to stop PXE Base Code");
14+
if let Ok(handles) = bt.find_handles::<BaseCode>() {
15+
for handle in handles {
16+
let base_code = bt
17+
.open_protocol::<BaseCode>(
18+
OpenProtocolParams {
19+
handle,
20+
agent: image,
21+
controller: None,
22+
},
23+
OpenProtocolAttributes::Exclusive,
24+
)
25+
.unwrap();
26+
27+
let base_code = unsafe { &mut *base_code.interface.get() };
28+
29+
info!("Starting PXE Base Code");
30+
base_code
31+
.start(false)
32+
.expect("failed to start PXE Base Code");
33+
base_code
34+
.dhcp(false)
35+
.expect("failed to complete a dhcpv4 handshake");
36+
37+
assert!(base_code.mode().dhcp_ack_received);
38+
let dhcp_ack: &DhcpV4Packet = base_code.mode().dhcp_ack.as_ref();
39+
let server_ip = dhcp_ack.bootp_si_addr;
40+
let server_ip = IpAddress::new_v4(server_ip);
41+
42+
const EXAMPLE_FILE_NAME: &[u8] = b"example-file.txt\0";
43+
const EXAMPLE_FILE_CONTENT: &[u8] = b"Hello world!";
44+
let example_file_name = CStr8::from_bytes_with_nul(EXAMPLE_FILE_NAME).unwrap();
45+
46+
info!("Getting remote file size");
47+
let file_size = base_code
48+
.tftp_get_file_size(&server_ip, example_file_name)
49+
.expect("failed to query file size");
50+
assert_eq!(file_size, EXAMPLE_FILE_CONTENT.len() as u64);
51+
52+
info!("Reading remote file");
53+
let mut buffer = [0; 512];
54+
let len = base_code
55+
.tftp_read_file(&server_ip, example_file_name, Some(&mut buffer))
56+
.expect("failed to read file");
57+
let len = usize::try_from(len).unwrap();
58+
assert_eq!(EXAMPLE_FILE_CONTENT, &buffer[..len]);
59+
60+
base_code
61+
.set_ip_filter(&IpFilter::new(IpFilters::STATION_IP, &[]))
62+
.expect("failed to set ip filter");
63+
64+
const EXAMPLE_SERVICE_PORT: u16 = 21572;
65+
66+
info!("Writing UDP packet to example service");
67+
68+
let payload = [1, 2, 3, 4];
69+
let header = [payload.len() as u8];
70+
let mut write_src_port = 0;
71+
base_code
72+
.udp_write(
73+
UdpOpFlags::ANY_SRC_PORT,
74+
&server_ip,
75+
EXAMPLE_SERVICE_PORT,
76+
None,
77+
None,
78+
Some(&mut write_src_port),
79+
Some(&header),
80+
&payload,
81+
)
82+
.expect("failed to write UDP packet");
83+
84+
info!("Reading UDP packet from example service");
85+
86+
let mut src_ip = server_ip;
87+
let mut src_port = EXAMPLE_SERVICE_PORT;
88+
let mut dest_ip = base_code.mode().station_ip;
89+
let mut dest_port = write_src_port;
90+
let mut header = [0; 1];
91+
let mut received = [0; 4];
92+
base_code
93+
.udp_read(
94+
UdpOpFlags::USE_FILTER,
95+
Some(&mut dest_ip),
96+
Some(&mut dest_port),
97+
Some(&mut src_ip),
98+
Some(&mut src_port),
99+
Some(&mut header),
100+
&mut received,
101+
)
102+
.unwrap();
103+
104+
// Check the header.
105+
assert_eq!(header[0] as usize, payload.len());
106+
// Check that we receive the reversed payload.
107+
received.reverse();
108+
assert_eq!(payload, received);
109+
110+
info!("Stopping PXE Base Code");
111+
base_code.stop().expect("failed to stop PXE Base Code");
112+
}
113+
} else {
114+
warn!("PXE Base Code protocol is not supported");
115115
}
116116
}

0 commit comments

Comments
 (0)