summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2007-11-23 13:31:28 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2007-11-23 13:31:28 +0000
commit403a4936c8fc3756003a28328c18c770bc914b6d (patch)
tree1f09ba2f05bd7c92efe529d4f4bc0a065b4b3298
parent797f58d1f0e2265f7c3c054eb1b8f7bfe4fcecfc (diff)
downloadnuttx-403a4936c8fc3756003a28328c18c770bc914b6d.tar.gz
nuttx-403a4936c8fc3756003a28328c18c770bc914b6d.tar.bz2
nuttx-403a4936c8fc3756003a28328c18c770bc914b6d.zip
Debug UDP send logic
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@401 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r--nuttx/ChangeLog2
-rw-r--r--nuttx/Documentation/NuttX.html1
-rw-r--r--nuttx/configs/ntosd-dm320/README.txt9
-rw-r--r--nuttx/examples/README.txt6
-rw-r--r--nuttx/examples/udp/Makefile2
-rw-r--r--nuttx/examples/udp/udp-client.c2
-rw-r--r--nuttx/net/sendto.c15
-rw-r--r--nuttx/net/uip/uip-send.c8
-rw-r--r--nuttx/net/uip/uip-udpsend.c17
9 files changed, 40 insertions, 22 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog
index 255bfce5a..3c3207b6f 100644
--- a/nuttx/ChangeLog
+++ b/nuttx/ChangeLog
@@ -239,4 +239,4 @@
* Moved urgent data info into device structure.
* TCP and ICMP protocols can now be disabled.
* Added UDP test in examples/udp
-
+ * Verified/debugged UDP send logic using examples/udp
diff --git a/nuttx/Documentation/NuttX.html b/nuttx/Documentation/NuttX.html
index 7acf1be62..1b74db809 100644
--- a/nuttx/Documentation/NuttX.html
+++ b/nuttx/Documentation/NuttX.html
@@ -710,6 +710,7 @@ Other memory:
* Moved urgent data info into device structure.
* TCP and ICMP protocols can now be disabled.
* Added UDP test in examples/udp
+ * Verified/debugged UDP send logic using examples/udp
</pre></ul>
<table width ="100%">
diff --git a/nuttx/configs/ntosd-dm320/README.txt b/nuttx/configs/ntosd-dm320/README.txt
index 7b98eacba..5269fe448 100644
--- a/nuttx/configs/ntosd-dm320/README.txt
+++ b/nuttx/configs/ntosd-dm320/README.txt
@@ -14,11 +14,11 @@ configuration as follows:
netconfig
^^^^^^^^^
-The alternative configuration file, netconfig, may be used
+This alternative configuration file, netconfig, may be used
instead of the default configuration (defconfig). This
configuration enables networking using the OSDs DM9000A
Ethernet interface. It uses examples/nettest to excercise
-the network.
+the TCP/IP network.
uipconfig
^^^^^^^^^
@@ -30,3 +30,8 @@ These alternative configurations can be selected by
(Seleted the default configuration as show above)
cp config/ntosd-dm320/uiponfig .config
+udpconfig
+^^^^^^^^^
+This alternative configuration file, is similar to netconfig
+except that is use examples/upd to exercise UDP.
+
diff --git a/nuttx/examples/README.txt b/nuttx/examples/README.txt
index 6ef65e924..0ba708925 100644
--- a/nuttx/examples/README.txt
+++ b/nuttx/examples/README.txt
@@ -61,3 +61,9 @@ examples/netttest
This is a simple network test for verifying client- and server-
functionality in a TCP/IP connection.
+examples/udp
+^^^^^^^^^^^^
+
+ This is a simple network test for verifying client- and server-
+ functionality over UDP.
+
diff --git a/nuttx/examples/udp/Makefile b/nuttx/examples/udp/Makefile
index 6fec19147..3dcc57213 100644
--- a/nuttx/examples/udp/Makefile
+++ b/nuttx/examples/udp/Makefile
@@ -58,7 +58,7 @@ TARG_BIN = lib$(CONFIG_EXAMPLE)$(LIBEXT)
HOSTCFLAGS += -DCONFIG_EXAMPLE_UDP_HOST=1
ifeq ($(CONFIG_EXAMPLE_UDP_SERVER),y)
HOSTCFLAGS += -DCONFIG_EXAMPLE_UDP_SERVER=1 \
- -DCONFIG_EXAMPLE_UDP_CLIENTIP="$(CONFIG_EXAMPLE_UDP_CLIENTIP)"
+ -DCONFIG_EXAMPLE_UDP_SERVERIP="$(CONFIG_EXAMPLE_UDP_SERVERIP)"
endif
HOST_SRCS = host.c
diff --git a/nuttx/examples/udp/udp-client.c b/nuttx/examples/udp/udp-client.c
index 8ea9cffb6..545a3a6c3 100644
--- a/nuttx/examples/udp/udp-client.c
+++ b/nuttx/examples/udp/udp-client.c
@@ -107,7 +107,7 @@ void send_client(void)
message("client: %d. Sending %d bytes\n", offset, SENDSIZE);
nbytes = sendto(sockfd, outbuf, SENDSIZE, 0,
(struct sockaddr*)&server, sizeof(struct sockaddr_in));
- message("client: %d. Sent %d bytes\n", nbytes);
+ message("client: %d. Sent %d bytes\n", offset, nbytes);
if (nbytes < 0)
{
diff --git a/nuttx/net/sendto.c b/nuttx/net/sendto.c
index e6f267a69..ba9bac0af 100644
--- a/nuttx/net/sendto.c
+++ b/nuttx/net/sendto.c
@@ -95,18 +95,19 @@ void sendto_interrupt(struct uip_driver_s *dev, struct uip_udp_conn *conn, uint8
struct sendto_s *pstate = (struct sendto_s *)conn->private;
if (pstate)
{
- /* Check if the connectin was rejected */
+ /* Check if the connection was rejected */
if ((flags & (UIP_CLOSE|UIP_ABORT|UIP_TIMEDOUT)) != 0)
{
+ /* Yes.. then terminate with an error */
+
pstate->st_sndlen = -ENOTCONN;
}
else
{
- /* Copy the user data into d_appdata and send it */
+ /* No.. Copy the user data into d_snddata and send it */
- memcpy(dev->d_appdata, pstate->st_buffer, pstate->st_buflen);
- uip_send(dev, dev->d_appdata, pstate->st_buflen);
+ uip_send(dev, pstate->st_buffer, pstate->st_buflen);
pstate->st_sndlen = pstate->st_buflen;
}
@@ -264,7 +265,7 @@ ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
* are ready.
*/
- save = irqsave();
+ save = irqsave();
memset(&state, 0, sizeof(struct sendto_s));
sem_init(&state.st_sem, 0, 0);
state.st_buflen = len;
@@ -282,7 +283,7 @@ ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
/* Set up the callback in the connection */
- udp_conn = (struct uip_udp_conn *)psock->s_conn;
+ udp_conn = (struct uip_udp_conn *)psock->s_conn;
udp_conn->private = (void*)&state;
udp_conn->event = sendto_interrupt;
@@ -290,7 +291,7 @@ ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
uip_udpenable(psock->s_conn);
- /* Notify the device driver of the availaibilty of TX data */
+ /* Notify the device driver of the availabilty of TX data */
netdev_txnotify(&udp_conn->ripaddr);
diff --git a/nuttx/net/uip/uip-send.c b/nuttx/net/uip/uip-send.c
index 93096168a..c9899db9e 100644
--- a/nuttx/net/uip/uip-send.c
+++ b/nuttx/net/uip/uip-send.c
@@ -93,9 +93,13 @@
void uip_send(struct uip_driver_s *dev, const void *buf, int len)
{
+ /* Some sanity checks -- note that the actually available length in the
+ * buffer is considerably less than CONFIG_NET_BUFSIZE.
+ */
+
if (dev && len > 0 && len < CONFIG_NET_BUFSIZE)
{
+ memcpy(dev->d_snddata, buf, len);
dev->d_sndlen = len;
- memcpy(dev->d_snddata, buf, len );
- }
+ }
}
diff --git a/nuttx/net/uip/uip-udpsend.c b/nuttx/net/uip/uip-udpsend.c
index 8f77f78a2..8936c64bd 100644
--- a/nuttx/net/uip/uip-udpsend.c
+++ b/nuttx/net/uip/uip-udpsend.c
@@ -95,7 +95,7 @@
void uip_udpsend(struct uip_driver_s *dev, struct uip_udp_conn *conn)
{
- if (dev->d_sndlen == 0)
+ if (dev->d_sndlen > 0)
{
/* The total lenth to send is the size of the application data plus
* the IP and UDP headers (and, eventually, the ethernet header)
@@ -131,8 +131,8 @@ void uip_udpsend(struct uip_driver_s *dev, struct uip_udp_conn *conn)
UDPBUF->ipid[1] = g_ipid & 0xff;
UDPBUF->ipoffset[0] = 0;
UDPBUF->ipoffset[1] = 0;
- UDPBUF->ttl = conn->ttl;
- UDPBUF->proto = UIP_PROTO_UDP;
+ UDPBUF->ttl = conn->ttl;
+ UDPBUF->proto = UIP_PROTO_UDP;
/* Calculate IP checksum. */
@@ -146,20 +146,21 @@ void uip_udpsend(struct uip_driver_s *dev, struct uip_udp_conn *conn)
/* Initialize the UDP header */
- UDPBUF->srcport = conn->lport;
- UDPBUF->destport = conn->rport;
- UDPBUF->udplen = HTONS(dev->d_sndlen + UIP_UDPH_LEN);
+ UDPBUF->srcport = conn->lport;
+ UDPBUF->destport = conn->rport;
+ UDPBUF->udplen = HTONS(dev->d_sndlen + UIP_UDPH_LEN);
#ifdef CONFIG_NET_UDP_CHECKSUMS
/* Calculate UDP checksum. */
- UDPBUF->udpchksum = ~(uip_udpchksum(dev));
+ UDPBUF->udpchksum = 0;
+ UDPBUF->udpchksum = ~(uip_udpchksum(dev));
if (UDPBUF->udpchksum == 0)
{
UDPBUF->udpchksum = 0xffff;
}
#else
- UDPBUF->udpchksum = 0;
+ UDPBUF->udpchksum = 0;
#endif
vdbg("Outgoing UDP packet length: %d (%d)\n",