Debug UDP send logic
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@401 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
961336e574
commit
ef651cc6bc
@ -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
|
||||
|
@ -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%">
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
11
net/sendto.c
11
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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
@ -153,6 +153,7 @@ void uip_udpsend(struct uip_driver_s *dev, struct uip_udp_conn *conn)
|
||||
#ifdef CONFIG_NET_UDP_CHECKSUMS
|
||||
/* Calculate UDP checksum. */
|
||||
|
||||
UDPBUF->udpchksum = 0;
|
||||
UDPBUF->udpchksum = ~(uip_udpchksum(dev));
|
||||
if (UDPBUF->udpchksum == 0)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user