Fix ICMP and UDP IP checksums
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@871 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
4dd12b73af
commit
9e16305afd
@ -447,4 +447,5 @@
|
||||
* Add support to uIP for application access to ICMP protocol stacks; Add
|
||||
ping request logic.
|
||||
* NSH: Add ping command
|
||||
* Correct IP checksum calculation in ICMP and UDP message send logic.
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
<tr align="center" bgcolor="#e4e4e4">
|
||||
<td>
|
||||
<h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1>
|
||||
<p>Last Updated: September 2, 2008</p>
|
||||
<p>Last Updated: September 3, 2008</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@ -1074,6 +1074,7 @@ nuttx-0.3.14 2008-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
* Add support to uIP for application access to ICMP protocol stacks; Add
|
||||
ping request logic.
|
||||
* NSH: Add ping command
|
||||
* Correct IP checksum calculation in ICMP and UDP message send logic.
|
||||
|
||||
pascal-0.1.3 2008-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
|
||||
|
@ -92,7 +92,7 @@ void uip_icmpsend(struct uip_driver_s *dev, uip_ipaddr_t *destaddr)
|
||||
{
|
||||
if (dev->d_sndlen > 0)
|
||||
{
|
||||
/* The total lenth to send is the size of the application data plus
|
||||
/* The total length to send is the size of the application data plus
|
||||
* the IP and ICMP headers (and, eventually, the ethernet header)
|
||||
*/
|
||||
|
||||
@ -130,19 +130,19 @@ void uip_icmpsend(struct uip_driver_s *dev, uip_ipaddr_t *destaddr)
|
||||
++g_ipid;
|
||||
ICMPBUF->ipid[0] = g_ipid >> 8;
|
||||
ICMPBUF->ipid[1] = g_ipid & 0xff;
|
||||
ICMPBUF->ipoffset[0] = 0;
|
||||
ICMPBUF->ipoffset[1] = 0;
|
||||
ICMPBUF->ipoffset[0] = UIP_TCPFLAG_DONTFRAG >> 8;
|
||||
ICMPBUF->ipoffset[1] = UIP_TCPFLAG_DONTFRAG & 0xff;
|
||||
ICMPBUF->ttl = UIP_TTL;
|
||||
ICMPBUF->proto = UIP_PROTO_ICMP;
|
||||
|
||||
uiphdr_ipaddr_copy(ICMPBUF->srcipaddr, &dev->d_ipaddr);
|
||||
uiphdr_ipaddr_copy(ICMPBUF->destipaddr, destaddr);
|
||||
|
||||
/* Calculate IP checksum. */
|
||||
|
||||
ICMPBUF->ipchksum = 0;
|
||||
ICMPBUF->ipchksum = ~(uip_ipchksum(dev));
|
||||
|
||||
uiphdr_ipaddr_copy(ICMPBUF->srcipaddr, &dev->d_ipaddr);
|
||||
uiphdr_ipaddr_copy(ICMPBUF->destipaddr, destaddr);
|
||||
|
||||
#endif /* CONFIG_NET_IPv6 */
|
||||
|
||||
/* Calculate the ICMP checksum. */
|
||||
|
@ -134,14 +134,14 @@ void uip_udpsend(struct uip_driver_s *dev, struct uip_udp_conn *conn)
|
||||
UDPBUF->ttl = conn->ttl;
|
||||
UDPBUF->proto = UIP_PROTO_UDP;
|
||||
|
||||
uiphdr_ipaddr_copy(UDPBUF->srcipaddr, &dev->d_ipaddr);
|
||||
uiphdr_ipaddr_copy(UDPBUF->destipaddr, &conn->ripaddr);
|
||||
|
||||
/* Calculate IP checksum. */
|
||||
|
||||
UDPBUF->ipchksum = 0;
|
||||
UDPBUF->ipchksum = ~(uip_ipchksum(dev));
|
||||
|
||||
uiphdr_ipaddr_copy(UDPBUF->srcipaddr, &dev->d_ipaddr);
|
||||
uiphdr_ipaddr_copy(UDPBUF->destipaddr, &conn->ripaddr);
|
||||
|
||||
#endif /* CONFIG_NET_IPv6 */
|
||||
|
||||
/* Initialize the UDP header */
|
||||
|
Loading…
x
Reference in New Issue
Block a user