Skip to content

Commit d2788c6

Browse files
committed
Repetitively redefined different ARP requests were streamlined the code to be more generalized, shorter, and easier to follow, by refactoring the code.
Signed-off-by: Andrew Yao <[email protected]>
1 parent 81e8b68 commit d2788c6

File tree

1 file changed

+63
-96
lines changed

1 file changed

+63
-96
lines changed

src/vmm/src/dumbo/pdu/arp.rs

Lines changed: 63 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -403,102 +403,69 @@ mod tests {
403403
ArpError::Operation
404404
);
405405

406-
// TODO: The following test code is way more verbose than it should've been. Make it
407-
// prettier at some point.
408-
409-
// Let's write a valid request.
410-
EthIPv4ArpFrame::write_raw(
411-
&mut a[..ETH_IPV4_FRAME_LEN],
412-
HTYPE_ETHERNET,
413-
ETHERTYPE_IPV4,
414-
MAC_ADDR_LEN,
415-
IPV4_ADDR_LEN,
416-
OPER_REQUEST,
417-
sha,
418-
spa,
419-
tha,
420-
tpa,
421-
)
422-
.unwrap();
423-
EthIPv4ArpFrame::request_from_bytes(&a[..ETH_IPV4_FRAME_LEN]).unwrap();
424-
425-
// Now we start writing invalid requests. We've already tried with an invalid operation.
426-
427-
// Invalid htype.
428-
EthIPv4ArpFrame::write_raw(
429-
&mut a[..ETH_IPV4_FRAME_LEN],
430-
HTYPE_ETHERNET + 1,
431-
ETHERTYPE_IPV4,
432-
MAC_ADDR_LEN,
433-
IPV4_ADDR_LEN,
434-
OPER_REQUEST,
435-
sha,
436-
spa,
437-
tha,
438-
tpa,
439-
)
440-
.unwrap();
441-
assert_eq!(
442-
EthIPv4ArpFrame::request_from_bytes(&a[..ETH_IPV4_FRAME_LEN]).unwrap_err(),
443-
ArpError::HType
444-
);
445-
446-
// Invalid ptype.
447-
EthIPv4ArpFrame::write_raw(
448-
&mut a[..ETH_IPV4_FRAME_LEN],
449-
HTYPE_ETHERNET,
450-
ETHERTYPE_IPV4 + 1,
451-
MAC_ADDR_LEN,
452-
IPV4_ADDR_LEN,
453-
OPER_REQUEST,
454-
sha,
455-
spa,
456-
tha,
457-
tpa,
458-
)
459-
.unwrap();
460-
assert_eq!(
461-
EthIPv4ArpFrame::request_from_bytes(&a[..ETH_IPV4_FRAME_LEN]).unwrap_err(),
462-
ArpError::PType
463-
);
464-
465-
// Invalid hlen.
466-
EthIPv4ArpFrame::write_raw(
467-
&mut a[..ETH_IPV4_FRAME_LEN],
468-
HTYPE_ETHERNET,
469-
ETHERTYPE_IPV4,
470-
MAC_ADDR_LEN + 1,
471-
IPV4_ADDR_LEN,
472-
OPER_REQUEST,
473-
sha,
474-
spa,
475-
tha,
476-
tpa,
477-
)
478-
.unwrap();
479-
assert_eq!(
480-
EthIPv4ArpFrame::request_from_bytes(&a[..ETH_IPV4_FRAME_LEN]).unwrap_err(),
481-
ArpError::HLen
482-
);
483-
484-
// Invalid plen.
485-
EthIPv4ArpFrame::write_raw(
486-
&mut a[..ETH_IPV4_FRAME_LEN],
487-
HTYPE_ETHERNET,
488-
ETHERTYPE_IPV4,
489-
MAC_ADDR_LEN,
490-
IPV4_ADDR_LEN + 1,
491-
OPER_REQUEST,
492-
sha,
493-
spa,
494-
tha,
495-
tpa,
496-
)
497-
.unwrap();
498-
assert_eq!(
499-
EthIPv4ArpFrame::request_from_bytes(&a[..ETH_IPV4_FRAME_LEN]).unwrap_err(),
500-
ArpError::PLen
501-
);
406+
// Various requests
407+
let requests = [
408+
(
409+
HTYPE_ETHERNET,
410+
ETHERTYPE_IPV4,
411+
MAC_ADDR_LEN,
412+
IPV4_ADDR_LEN,
413+
None,
414+
), // Valid request
415+
(
416+
HTYPE_ETHERNET + 1,
417+
ETHERTYPE_IPV4,
418+
MAC_ADDR_LEN,
419+
IPV4_ADDR_LEN,
420+
Some(ArpError::HType),
421+
), // Invalid htype
422+
(
423+
HTYPE_ETHERNET,
424+
ETHERTYPE_IPV4 + 1,
425+
MAC_ADDR_LEN,
426+
IPV4_ADDR_LEN,
427+
Some(ArpError::PType),
428+
), // Invalid ptype
429+
(
430+
HTYPE_ETHERNET,
431+
ETHERTYPE_IPV4,
432+
MAC_ADDR_LEN + 1,
433+
IPV4_ADDR_LEN,
434+
Some(ArpError::HLen),
435+
), // Invalid hlen
436+
(
437+
HTYPE_ETHERNET,
438+
ETHERTYPE_IPV4,
439+
MAC_ADDR_LEN,
440+
IPV4_ADDR_LEN + 1,
441+
Some(ArpError::PLen),
442+
), // Invalid plen
443+
];
444+
445+
for (htype, ptype, hlen, plen, err) in requests.iter() {
446+
EthIPv4ArpFrame::write_raw(
447+
&mut a[..ETH_IPV4_FRAME_LEN],
448+
*htype,
449+
*ptype,
450+
*hlen,
451+
*plen,
452+
OPER_REQUEST,
453+
sha,
454+
spa,
455+
tha,
456+
tpa,
457+
)
458+
.unwrap();
459+
match err {
460+
None => {
461+
EthIPv4ArpFrame::request_from_bytes(&a[..ETH_IPV4_FRAME_LEN]).unwrap();
462+
}
463+
Some(arp_error) => assert_eq!(
464+
EthIPv4ArpFrame::request_from_bytes(&a[..ETH_IPV4_FRAME_LEN]).unwrap_err(),
465+
*arp_error
466+
),
467+
}
468+
}
502469
}
503470

504471
#[test]

0 commit comments

Comments
 (0)