traceroute: even with -v, don't show other ping processes reply's
function old new delta traceroute_init 1135 1151 +16 common_ping_main 1919 1935 +16 common_traceroute_main 1715 1668 -47 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 32/-47) Total: -15 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
d067acb005
commit
623e55a396
@ -332,6 +332,11 @@ static int common_ping_main(sa_family_t af, char **argv)
|
|||||||
|
|
||||||
create_icmp_socket(lsa);
|
create_icmp_socket(lsa);
|
||||||
G.myid = (uint16_t) getpid();
|
G.myid = (uint16_t) getpid();
|
||||||
|
/* we can use native-endian ident, but other Unix ping/traceroute
|
||||||
|
* utils use *big-endian pid*, and e.g. traceroute on our machine may be
|
||||||
|
* *not* from busybox, idents may collide. Follow the convention:
|
||||||
|
*/
|
||||||
|
G.myid = htons(G.myid);
|
||||||
#if ENABLE_PING6
|
#if ENABLE_PING6
|
||||||
if (lsa->u.sa.sa_family == AF_INET6)
|
if (lsa->u.sa.sa_family == AF_INET6)
|
||||||
ping6(lsa);
|
ping6(lsa);
|
||||||
@ -927,6 +932,11 @@ static int common_ping_main(int opt, char **argv)
|
|||||||
G.interval_us = interval * 1000000;
|
G.interval_us = interval * 1000000;
|
||||||
|
|
||||||
myid = (uint16_t) getpid();
|
myid = (uint16_t) getpid();
|
||||||
|
/* we can use native-endian ident, but other Unix ping/traceroute
|
||||||
|
* utils use *big-endian pid*, and e.g. traceroute on our machine may be
|
||||||
|
* *not* from busybox, idents may collide. Follow the convention:
|
||||||
|
*/
|
||||||
|
myid = htons(myid);
|
||||||
hostname = argv[optind];
|
hostname = argv[optind];
|
||||||
#if ENABLE_PING6
|
#if ENABLE_PING6
|
||||||
{
|
{
|
||||||
|
@ -659,9 +659,11 @@ packet4_ok(int read_len, int seq)
|
|||||||
|
|
||||||
if ((option_mask32 & OPT_USE_ICMP)
|
if ((option_mask32 & OPT_USE_ICMP)
|
||||||
&& type == ICMP_ECHOREPLY
|
&& type == ICMP_ECHOREPLY
|
||||||
&& icp->icmp_id == ident
|
|
||||||
&& icp->icmp_seq == htons(seq)
|
&& icp->icmp_seq == htons(seq)
|
||||||
) {
|
) {
|
||||||
|
if (icp->icmp_id != ident)
|
||||||
|
/* reply to another ping/traceroute from this box? */
|
||||||
|
return 0; /* ignore, silently */
|
||||||
/* In UDP mode, when we reach the machine, we (usually)
|
/* In UDP mode, when we reach the machine, we (usually)
|
||||||
* would get "port unreachable" - in ICMP we got "echo reply".
|
* would get "port unreachable" - in ICMP we got "echo reply".
|
||||||
* Simulate "port unreachable" for caller:
|
* Simulate "port unreachable" for caller:
|
||||||
@ -726,9 +728,11 @@ packet6_ok(int read_len, int seq)
|
|||||||
|
|
||||||
if ((option_mask32 & OPT_USE_ICMP)
|
if ((option_mask32 & OPT_USE_ICMP)
|
||||||
&& type == ICMP6_ECHO_REPLY
|
&& type == ICMP6_ECHO_REPLY
|
||||||
&& icp->icmp6_id == ident
|
|
||||||
&& icp->icmp6_seq == htons(seq)
|
&& icp->icmp6_seq == htons(seq)
|
||||||
) {
|
) {
|
||||||
|
if (icp->icmp6_id != ident)
|
||||||
|
/* reply to another ping/traceroute from this box? */
|
||||||
|
return 0; /* ignore, silently */
|
||||||
/* In UDP mode, when we reach the machine, we (usually)
|
/* In UDP mode, when we reach the machine, we (usually)
|
||||||
* would get "port unreachable" - in ICMP we got "echo reply".
|
* would get "port unreachable" - in ICMP we got "echo reply".
|
||||||
* Simulate "port unreachable" for caller:
|
* Simulate "port unreachable" for caller:
|
||||||
@ -988,6 +992,11 @@ traceroute_init(int op, char **argv)
|
|||||||
outip = xzalloc(packlen);
|
outip = xzalloc(packlen);
|
||||||
|
|
||||||
ident = getpid();
|
ident = getpid();
|
||||||
|
/* we can use native-endian ident, but other Unix ping/traceroute
|
||||||
|
* utils use *big-endian pid*, and e.g. ping on our machine may be
|
||||||
|
* *not* from busybox, idents may collide. Follow the convention:
|
||||||
|
*/
|
||||||
|
ident = htons(ident);
|
||||||
|
|
||||||
outdata = (void*)(outudp + 1);
|
outdata = (void*)(outudp + 1);
|
||||||
if (af == AF_INET) {
|
if (af == AF_INET) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user