apps/system/ping and ping6: Send ID and seqno in network byte order.

This commit is contained in:
Xiang Xiao 2018-08-23 06:47:33 -06:00 committed by Gregory Nutt
parent 32182421a9
commit 604885cbef
2 changed files with 20 additions and 20 deletions

View File

@ -202,7 +202,7 @@ static void icmp_ping(FAR struct ping_info_s *info)
memset(&outhdr, 0, sizeof(struct icmp_hdr_s)); memset(&outhdr, 0, sizeof(struct icmp_hdr_s));
outhdr.type = ICMP_ECHO_REQUEST; outhdr.type = ICMP_ECHO_REQUEST;
outhdr.id = ping_newid(); outhdr.id = htons(ping_newid());
outhdr.seqno = 0; outhdr.seqno = 0;
printf("PING %u.%u.%u.%u %d bytes of data\n", printf("PING %u.%u.%u.%u %d bytes of data\n",
@ -240,7 +240,7 @@ static void icmp_ping(FAR struct ping_info_s *info)
if (nsent < 0) if (nsent < 0)
{ {
fprintf(stderr, "ERROR: sendto failed at seqno %u: %d\n", fprintf(stderr, "ERROR: sendto failed at seqno %u: %d\n",
outhdr.seqno, errno); ntohs(outhdr.seqno), errno);
return; return;
} }
else if (nsent != outsize) else if (nsent != outsize)
@ -276,7 +276,7 @@ static void icmp_ping(FAR struct ping_info_s *info)
(info->dest.s_addr >> 8 ) & 0xff, (info->dest.s_addr >> 8 ) & 0xff,
(info->dest.s_addr >> 16) & 0xff, (info->dest.s_addr >> 16) & 0xff,
(info->dest.s_addr >> 24) & 0xff, (info->dest.s_addr >> 24) & 0xff,
outhdr.seqno, info->delay); ntohs(outhdr.seqno), info->delay);
continue; continue;
} }
@ -307,15 +307,15 @@ static void icmp_ping(FAR struct ping_info_s *info)
fprintf(stderr, fprintf(stderr,
"WARNING: Ignoring ICMP reply with ID %u. " "WARNING: Ignoring ICMP reply with ID %u. "
"Expected %u\n", "Expected %u\n",
inhdr->id, outhdr.id); ntohs(inhdr->id), ntohs(outhdr.id));
retry = true; retry = true;
} }
else if (inhdr->seqno > outhdr.seqno) else if (ntohs(inhdr->seqno) > ntohs(outhdr.seqno))
{ {
fprintf(stderr, fprintf(stderr,
"WARNING: Ignoring ICMP reply to sequence %u. " "WARNING: Ignoring ICMP reply to sequence %u. "
"Expected <= &u\n", "Expected <= &u\n",
inhdr->seqno, outhdr.seqno); ntohs(inhdr->seqno), ntohs(outhdr.seqno));
retry = true; retry = true;
} }
else else
@ -323,7 +323,7 @@ static void icmp_ping(FAR struct ping_info_s *info)
bool verified = true; bool verified = true;
int32_t pktdelay = elapsed; int32_t pktdelay = elapsed;
if (inhdr->seqno < outhdr.seqno) if (ntohs(inhdr->seqno) < ntohs(outhdr.seqno))
{ {
fprintf(stderr, "WARNING: Received after timeout\n"); fprintf(stderr, "WARNING: Received after timeout\n");
pktdelay += info->delay; pktdelay += info->delay;
@ -336,7 +336,7 @@ static void icmp_ping(FAR struct ping_info_s *info)
(info->dest.s_addr >> 8 ) & 0xff, (info->dest.s_addr >> 8 ) & 0xff,
(info->dest.s_addr >> 16) & 0xff, (info->dest.s_addr >> 16) & 0xff,
(info->dest.s_addr >> 24) & 0xff, (info->dest.s_addr >> 24) & 0xff,
inhdr->seqno, pktdelay); ntohs(inhdr->seqno), pktdelay);
/* Verify the payload data */ /* Verify the payload data */
@ -407,7 +407,7 @@ static void icmp_ping(FAR struct ping_info_s *info)
(void)nanosleep(&rqt, NULL); (void)nanosleep(&rqt, NULL);
} }
outhdr.seqno++; outhdr.seqno = htons(ntohs(outhdr.seqno) + 1);
} }
} }
@ -422,8 +422,8 @@ static void show_usage(FAR const char *progname, int exitcode)
printf("\nUsage: %s [-c <count>] [-i <interval>] <hostname>\n", progname); printf("\nUsage: %s [-c <count>] [-i <interval>] <hostname>\n", progname);
printf(" %s -h\n", progname); printf(" %s -h\n", progname);
printf("\nWhere:\n"); printf("\nWhere:\n");
printf(" <hostname> is either an IPv6 address or the name of the remote host\n"); printf(" <hostname> is either an IPv4 address or the name of the remote host\n");
printf(" that is requested the ICMPv6 ECHO reply.\n"); printf(" that is requested the ICMPv4 ECHO reply.\n");
#else #else
printf("\nUsage: %s [-c <count>] [-i <interval>] <ip-address>\n", progname); printf("\nUsage: %s [-c <count>] [-i <interval>] <ip-address>\n", progname);
printf(" %s -h\n", progname); printf(" %s -h\n", progname);

View File

@ -208,7 +208,7 @@ static void icmpv6_ping(FAR struct ping6_info_s *info)
memset(&outhdr, 0, SIZEOF_ICMPV6_ECHO_REQUEST_S(0)); memset(&outhdr, 0, SIZEOF_ICMPV6_ECHO_REQUEST_S(0));
outhdr.type = ICMPv6_ECHO_REQUEST; outhdr.type = ICMPv6_ECHO_REQUEST;
outhdr.id = ping6_newid(); outhdr.id = htons(ping6_newid());
outhdr.seqno = 0; outhdr.seqno = 0;
(void)inet_ntop(AF_INET6, info->dest.s6_addr16, info->strbuffer, (void)inet_ntop(AF_INET6, info->dest.s6_addr16, info->strbuffer,
@ -244,7 +244,7 @@ static void icmpv6_ping(FAR struct ping6_info_s *info)
if (nsent < 0) if (nsent < 0)
{ {
fprintf(stderr, "ERROR: sendto failed at seqno %u: %d\n", fprintf(stderr, "ERROR: sendto failed at seqno %u: %d\n",
outhdr.seqno, errno); ntohs(outhdr.seqno), errno);
return; return;
} }
else if (nsent != outsize) else if (nsent != outsize)
@ -278,7 +278,7 @@ static void icmpv6_ping(FAR struct ping6_info_s *info)
(void)inet_ntop(AF_INET6, info->dest.s6_addr16, (void)inet_ntop(AF_INET6, info->dest.s6_addr16,
info->strbuffer, INET6_ADDRSTRLEN); info->strbuffer, INET6_ADDRSTRLEN);
printf("No response from %s: icmp_seq=%u time=%u ms\n", printf("No response from %s: icmp_seq=%u time=%u ms\n",
info->strbuffer, outhdr.seqno, info->delay); info->strbuffer, ntohs(outhdr.seqno), info->delay);
continue; continue;
} }
@ -310,15 +310,15 @@ static void icmpv6_ping(FAR struct ping6_info_s *info)
fprintf(stderr, fprintf(stderr,
"WARNING: Ignoring ICMP reply with ID %u. " "WARNING: Ignoring ICMP reply with ID %u. "
"Expected %u\n", "Expected %u\n",
inhdr->id, outhdr.id); ntohs(inhdr->id), ntohs(outhdr.id));
retry = true; retry = true;
} }
else if (inhdr->seqno > outhdr.seqno) else if (ntohs(inhdr->seqno) > ntohs(outhdr.seqno))
{ {
fprintf(stderr, fprintf(stderr,
"WARNING: Ignoring ICMP reply to sequence %u. " "WARNING: Ignoring ICMP reply to sequence %u. "
"Expected <= &u\n", "Expected <= &u\n",
inhdr->seqno, outhdr.seqno); ntohs(inhdr->seqno), ntohs(outhdr.seqno));
retry = true; retry = true;
} }
else else
@ -326,7 +326,7 @@ static void icmpv6_ping(FAR struct ping6_info_s *info)
bool verified = true; bool verified = true;
int32_t pktdelay = elapsed; int32_t pktdelay = elapsed;
if (inhdr->seqno < outhdr.seqno) if (ntohs(inhdr->seqno) < ntohs(outhdr.seqno))
{ {
fprintf(stderr, "WARNING: Received after timeout\n"); fprintf(stderr, "WARNING: Received after timeout\n");
pktdelay += info->delay; pktdelay += info->delay;
@ -337,7 +337,7 @@ static void icmpv6_ping(FAR struct ping6_info_s *info)
info->strbuffer, INET6_ADDRSTRLEN); info->strbuffer, INET6_ADDRSTRLEN);
printf("%ld bytes from %s icmp_seq=%u time=%u ms\n", printf("%ld bytes from %s icmp_seq=%u time=%u ms\n",
nrecvd - SIZEOF_ICMPV6_ECHO_REPLY_S(0), nrecvd - SIZEOF_ICMPV6_ECHO_REPLY_S(0),
info->strbuffer, inhdr->seqno, pktdelay); info->strbuffer, ntohs(inhdr->seqno), pktdelay);
/* Verify the payload data */ /* Verify the payload data */
@ -408,7 +408,7 @@ static void icmpv6_ping(FAR struct ping6_info_s *info)
(void)nanosleep(&rqt, NULL); (void)nanosleep(&rqt, NULL);
} }
outhdr.seqno++; outhdr.seqno = htons(ntohs(outhdr.seqno) + 1);
} }
} }