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:
patacongo 2008-09-03 14:57:36 +00:00
parent 4dd12b73af
commit 9e16305afd
4 changed files with 12 additions and 10 deletions

View File

@ -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.

View File

@ -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 &lt;spudmonkey@racsa.co.cr&gt;
* 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 &lt;spudmonkey@racsa.co.cr&gt;

View File

@ -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. */

View File

@ -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 */