summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2008-09-03 14:57:36 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2008-09-03 14:57:36 +0000
commit32082a46190ea27f7e958fce73167b3a368d7666 (patch)
treebdd8a10255529f954ff577a4017c6a3d1b935566
parent9f60d09c6faaac732a62a188228a88321aad7368 (diff)
downloadpx4-nuttx-32082a46190ea27f7e958fce73167b3a368d7666.tar.gz
px4-nuttx-32082a46190ea27f7e958fce73167b3a368d7666.tar.bz2
px4-nuttx-32082a46190ea27f7e958fce73167b3a368d7666.zip
Fix ICMP and UDP IP checksums
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@871 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r--nuttx/ChangeLog1
-rw-r--r--nuttx/Documentation/NuttX.html3
-rw-r--r--nuttx/net/uip/uip-icmpsend.c12
-rw-r--r--nuttx/net/uip/uip-udpsend.c6
4 files changed, 12 insertions, 10 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog
index 7c9f79e58..e0af7c0af 100644
--- a/nuttx/ChangeLog
+++ b/nuttx/ChangeLog
@@ -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.
diff --git a/nuttx/Documentation/NuttX.html b/nuttx/Documentation/NuttX.html
index f05fdc6ce..06169e4ea 100644
--- a/nuttx/Documentation/NuttX.html
+++ b/nuttx/Documentation/NuttX.html
@@ -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;
diff --git a/nuttx/net/uip/uip-icmpsend.c b/nuttx/net/uip/uip-icmpsend.c
index c0076b0e8..fc8ac2e83 100644
--- a/nuttx/net/uip/uip-icmpsend.c
+++ b/nuttx/net/uip/uip-icmpsend.c
@@ -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. */
diff --git a/nuttx/net/uip/uip-udpsend.c b/nuttx/net/uip/uip-udpsend.c
index 563d31a81..79ab36856 100644
--- a/nuttx/net/uip/uip-udpsend.c
+++ b/nuttx/net/uip/uip-udpsend.c
@@ -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 */