net - Support ping reply when processing net-loop
PATCH 1/1 net - Support ping reply when processing net-loop
Add ICMP_ECHO_REQUEST packet support by responding with a ICMP_ECHO_REPLY.
This permits the ping command to test the phy interface when the phy is put in loopback mode (typically by setting register 0 bit 14).
It also allows the port to respond to an external ping when u-boot is processing some other net command (such as tftp). This is useful when tftp appears to hang.
Signed-off-by Ed Swarthout <[email protected]>
---
This version does not add unused variable i.
net/net.c | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+), 0 deletions(-)
net/net.c +23 -0
@@ -1424,6 +1424,29 @@ NetReceive(volatile uchar * inpkt, int len)/* XXX point to ip packet */ (*packetHandler)((uchar *)ip,0 ,0 ,0 );return ; + +case ICMP_ECHO_REQUEST : + { +int rlen =ETHER_HDR_SIZE + len; +#ifdef ET_DEBUG +printf ("Got ICMP ECHO REQUEST, return %d bytes \n" ,rlen); +#endif +memcpy (&et->et_dest[0 ], &et->et_src[0 ],6 ); +memcpy (&et->et_src[0 ], NetOurEther,6 ); + + ip->ip_sum =0 ; + ip->ip_off =0 ; +NetCopyIP ((void *)&ip->ip_dst, &ip->ip_src); +NetCopyIP ((void *)&ip->ip_src, &NetOurIP); + ip->ip_sum = ~NetCksum ((uchar *)ip,IP_HDR_SIZE_NO_UDP >>1 ); + + icmph->type =ICMP_ECHO_REPLY ; + icmph->checksum =0 ; + icmph->checksum = ~NetCksum ((uchar *)icmph, + (len -IP_HDR_SIZE_NO_UDP ) >>1 ); + (void )eth_send ((uchar *)et, rlen); +return ; + }#endif default :return ;
Signature · 1 line
1.5.0.2.279.g4808