@@ -458,63 +458,17 @@ fn parse_icmp_time_exceeded_raw(ip_payload: Ip<&[u8], &[u8]>) -> anyhow::Result<
458
458
Ok ( ( ) )
459
459
}
460
460
461
- IpProtocol :: Icmpv6 => {
462
- let original_icmp_packet =
463
- icmpv6:: echo_request:: EchoRequestPacket :: new ( original_ip_payload)
464
- . ok_or_else ( too_small) ?;
461
+ IpProtocol :: Icmp => parse_icmp_probe ( Ip :: V4 ( original_ip_payload) ) ,
465
462
466
- ensure ! (
467
- original_icmp_packet. get_icmpv6_type( ) == Icmpv6Types :: EchoRequest ,
468
- "Not ICMP6/EchoRequest"
469
- ) ;
470
-
471
- // check if payload looks right
472
- // some network nodes will strip the payload, that's fine.
473
- let echo_payload = original_icmp_packet. payload ( ) ;
474
- if !echo_payload. is_empty ( ) && !echo_payload. starts_with ( & PROBE_PAYLOAD ) {
475
- let echo_payload: String = echo_payload
476
- . iter ( )
477
- . copied ( )
478
- . flat_map ( escape_default)
479
- . map ( char:: from)
480
- . collect ( ) ;
481
- bail ! ( "Wrong ICMP6/Echo payload: {echo_payload:?}" ) ;
482
- }
483
-
484
- Ok ( ( ) )
485
- }
486
-
487
- IpProtocol :: Icmp => {
488
- let original_icmp_packet =
489
- icmp:: echo_request:: EchoRequestPacket :: new ( original_ip_payload)
490
- . ok_or_else ( too_small) ?;
491
-
492
- ensure ! (
493
- original_icmp_packet. get_icmp_type( ) == IcmpTypes :: EchoRequest ,
494
- "Not ICMP/EchoRequest"
495
- ) ;
496
-
497
- // check if payload looks right
498
- // some network nodes will strip the payload, that's fine.
499
- let echo_payload = original_icmp_packet. payload ( ) ;
500
- if !echo_payload. is_empty ( ) && !echo_payload. starts_with ( & PROBE_PAYLOAD ) {
501
- let echo_payload: String = echo_payload
502
- . iter ( )
503
- . copied ( )
504
- . flat_map ( escape_default)
505
- . map ( char:: from)
506
- . collect ( ) ;
507
- bail ! ( "Wrong ICMP/Echo payload: {echo_payload:?}" ) ;
508
- }
509
-
510
- Ok ( ( ) )
511
- }
463
+ IpProtocol :: Icmpv6 => parse_icmp_probe ( Ip :: V6 ( original_ip_payload) ) ,
512
464
513
465
_ => bail ! ( "Not UDP/ICMP" ) ,
514
466
}
515
467
}
516
468
517
- fn parse_icmp_echo_raw ( icmp_bytes : Ip < & [ u8 ] , & [ u8 ] > ) -> anyhow:: Result < ( ) > {
469
+ /// Try to parse bytes as an ICMP/ICMP6 Echo Request matching the probe packets send by
470
+ /// [send_icmp_probes].
471
+ fn parse_icmp_probe ( icmp_bytes : Ip < & [ u8 ] , & [ u8 ] > ) -> anyhow:: Result < ( ) > {
518
472
let echo_packet_v4;
519
473
let echo_packet_v6;
520
474
let echo_payload = match icmp_bytes {
0 commit comments