diff --git a/sbin/ping/ping.c b/sbin/ping/ping.c --- a/sbin/ping/ping.c +++ b/sbin/ping/ping.c @@ -227,7 +227,6 @@ static void pr_icmph(struct icmp *, struct ip *, const u_char *const); static void pr_iph(struct ip *, const u_char *); static void pr_pack(char *, ssize_t, struct sockaddr_in *, struct timespec *); -static void pr_retip(struct ip *, const u_char *); static void status(int); static void stopit(int); @@ -1571,11 +1570,11 @@ break; } /* Print returned IP header information */ - pr_retip(oip, oicmp_raw); + pr_iph(oip, oicmp_raw); break; case ICMP_SOURCEQUENCH: (void)printf("Source Quench\n"); - pr_retip(oip, oicmp_raw); + pr_iph(oip, oicmp_raw); break; case ICMP_REDIRECT: switch(icp->icmp_code) { @@ -1596,7 +1595,7 @@ break; } (void)printf("(New addr: %s)\n", inet_ntoa(icp->icmp_gwaddr)); - pr_retip(oip, oicmp_raw); + pr_iph(oip, oicmp_raw); break; case ICMP_ECHO: (void)printf("Echo Request\n"); @@ -1615,12 +1614,12 @@ icp->icmp_code); break; } - pr_retip(oip, oicmp_raw); + pr_iph(oip, oicmp_raw); break; case ICMP_PARAMPROB: (void)printf("Parameter problem: pointer = 0x%02x\n", icp->icmp_hun.ih_pptr); - pr_retip(oip, oicmp_raw); + pr_iph(oip, oicmp_raw); break; case ICMP_TSTAMP: (void)printf("Timestamp\n"); @@ -1712,28 +1711,6 @@ return(buf); } -/* - * pr_retip -- - * Dump some info on a returned (via ICMP) IP packet. - */ -static void -pr_retip(struct ip *ip, const u_char *cp) -{ - int8_t hlen; - - pr_iph(ip, cp); - - hlen = ip->ip_hl << 2; - cp = cp + hlen; - - if (ip->ip_p == 6) - (void)printf("TCP: from port %u, to port %u (decimal)\n", - (*cp * 256 + *(cp + 1)), (*(cp + 2) * 256 + *(cp + 3))); - else if (ip->ip_p == 17) - (void)printf("UDP: from port %u, to port %u (decimal)\n", - (*cp * 256 + *(cp + 1)), (*(cp + 2) * 256 + *(cp + 3))); -} - static char * pr_ntime(n_time timestamp) { diff --git a/sbin/ping/tests/test_ping.py b/sbin/ping/tests/test_ping.py --- a/sbin/ping/tests/test_ping.py +++ b/sbin/ping/tests/test_ping.py @@ -920,6 +920,54 @@ }, id="_3_1_flags_DF", ), + pytest.param( + { + "src": "192.0.2.1", + "dst": "192.0.2.2", + "icmp_type": 3, + "icmp_code": 1, + "special": "tcp", + }, + { + "returncode": 2, + "stdout": """\ +PATTERN: 0x01 +PING 192.0.2.2 (192.0.2.2): 56 data bytes + +--- 192.0.2.2 ping statistics --- +1 packets transmitted, 0 packets received, 100.0% packet loss +""", + "stderr": """\ +ping: quoted data too short (40 bytes) from 192.0.2.2 +""", + "redacted": False, + }, + id="_3_1_special_tcp", + ), + pytest.param( + { + "src": "192.0.2.1", + "dst": "192.0.2.2", + "icmp_type": 3, + "icmp_code": 1, + "special": "udp", + }, + { + "returncode": 2, + "stdout": """\ +PATTERN: 0x01 +PING 192.0.2.2 (192.0.2.2): 56 data bytes + +--- 192.0.2.2 ping statistics --- +1 packets transmitted, 0 packets received, 100.0% packet loss +""", + "stderr": """\ +ping: quoted data too short (28 bytes) from 192.0.2.2 +""", + "redacted": False, + }, + id="_3_1_special_udp", + ), ] @pytest.mark.parametrize("pinger_kargs, expected", pinger_testdata)