summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-06-23 19:25:16 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-06-23 19:25:16 -0600
commit9de1aa22302e1eae4e094794266ab83b5afb79f1 (patch)
tree86bca29bde64222bb7a6626757ca30066bf1447b
parent753895c39d42d92cfdbedaf1a06c0daf7afee67e (diff)
downloadnuttx-9de1aa22302e1eae4e094794266ab83b5afb79f1.tar.gz
nuttx-9de1aa22302e1eae4e094794266ab83b5afb79f1.tar.bz2
nuttx-9de1aa22302e1eae4e094794266ab83b5afb79f1.zip
CONFIG_NET_PKT is compatible with current TCP writebuffering logic because the share too much code; move sending of packet socket data from net_send_unbufferer.c to a new uip/uip_pktsend.c file for consistency
-rw-r--r--nuttx/include/nuttx/net/uip/uip.h26
-rw-r--r--nuttx/net/net_send_unbuffered.c23
-rw-r--r--nuttx/net/tcp/Kconfig1
-rw-r--r--nuttx/net/uip/Make.defs6
-rw-r--r--nuttx/net/uip/uip_iobsend.c2
-rw-r--r--nuttx/net/uip/uip_pktsend.c115
6 files changed, 141 insertions, 32 deletions
diff --git a/nuttx/include/nuttx/net/uip/uip.h b/nuttx/include/nuttx/net/uip/uip.h
index a0cf88f5c..65f05a5ec 100644
--- a/nuttx/include/nuttx/net/uip/uip.h
+++ b/nuttx/include/nuttx/net/uip/uip.h
@@ -311,11 +311,11 @@ extern struct uip_stats uip_stat;
* TCP/IP stack.
*/
-extern void uip_initialize(void);
+void uip_initialize(void);
/* This function may be used at boot time to set the initial ip_id.*/
-extern void uip_setipid(uint16_t id);
+void uip_setipid(uint16_t id);
/* Critical section management. The NuttX configuration setting
* CONFIG_NET_NOINT indicates that uIP not called from the interrupt level.
@@ -338,10 +338,10 @@ extern void uip_setipid(uint16_t id);
typedef uint8_t uip_lock_t; /* Not really used */
-extern void uip_lockinit(void);
-extern uip_lock_t uip_lock(void);
-extern void uip_unlock(uip_lock_t flags);
-extern int uip_lockedwait(sem_t *sem);
+void uip_lockinit(void);
+uip_lock_t uip_lock(void);
+void uip_unlock(uip_lock_t flags);
+int uip_lockedwait(sem_t *sem);
#else
@@ -391,13 +391,17 @@ extern int uip_lockedwait(sem_t *sem);
* len The maximum amount of data bytes to be sent.
*/
-extern void uip_send(FAR struct uip_driver_s *dev, FAR const void *buf,
- int len);
+void uip_send(FAR struct uip_driver_s *dev, FAR const void *buf, int len);
#ifdef CONFIG_NET_IOB
struct iob_s;
-extern void uip_iobsend(FAR struct uip_driver_s *dev, FAR struct iob_s *buf,
- unsigned int len, unsigned int offset);
+void uip_iobsend(FAR struct uip_driver_s *dev, FAR struct iob_s *buf,
+ unsigned int len, unsigned int offset);
+#endif
+
+#ifdef CONFIG_NET_PKT
+void uip_pktsend(FAR struct uip_driver_s *dev, FAR const void *buf,
+ unsigned int len);
#endif
/* uIP convenience and converting functions.
@@ -547,7 +551,7 @@ extern void uip_iobsend(FAR struct uip_driver_s *dev, FAR struct iob_s *buf,
(((in_addr_t)(addr1) & (in_addr_t)(mask)) == \
((in_addr_t)(addr2) & (in_addr_t)(mask)))
#else
-extern bool uip_ipaddr_maskcmp(uip_ipaddr_t addr1, uip_ipaddr_t addr2,
+bool uip_ipaddr_maskcmp(uip_ipaddr_t addr1, uip_ipaddr_t addr2,
uip_ipaddr_t mask);
#endif
diff --git a/nuttx/net/net_send_unbuffered.c b/nuttx/net/net_send_unbuffered.c
index 5c3b4f626..f6f7a597e 100644
--- a/nuttx/net/net_send_unbuffered.c
+++ b/nuttx/net/net_send_unbuffered.c
@@ -181,29 +181,10 @@ static uint16_t pktsend_interrupt(FAR struct uip_driver_s *dev,
else
{
- /* Copy the user data into d_snddata and send it */
+ /* Copy the packet data into the device packet buffer and send it */
-#if 0
- uip_send(dev, pstate->snd_buffer, pstate->snd_buflen);
+ uip_pktsend(dev, pstate->snd_buffer, pstate->snd_buflen);
pstate->snd_sent = pstate->snd_buflen;
-#else
- /* NOTE: This is almost identical to calling uip_send() while
- * the data from the sent operation buffer is copied into dev->d_buf
- * instead of dev->d_snddata
- */
-
- if (pstate->snd_buflen > 0 && pstate->snd_buflen < CONFIG_NET_BUFSIZE)
- {
- memcpy(dev->d_buf, pstate->snd_buffer, pstate->snd_buflen);
-
- /* Set the number of bytes to send */
-
- dev->d_len = pstate->snd_buflen;
- dev->d_sndlen = pstate->snd_buflen;
- }
-
- pstate->snd_sent = pstate->snd_buflen;
-#endif
}
/* Don't allow any further call backs. */
diff --git a/nuttx/net/tcp/Kconfig b/nuttx/net/tcp/Kconfig
index 5989d3d90..d6237c35f 100644
--- a/nuttx/net/tcp/Kconfig
+++ b/nuttx/net/tcp/Kconfig
@@ -83,6 +83,7 @@ config NET_TCP_WRITE_BUFFERS
bool "Enable TCP/IP write buffering"
default n
select NET_IOB
+ depends on !NET_PKT
---help---
Write buffers allows buffering of ongoing TCP/IP packets, providing
for higher performance, streamed output.
diff --git a/nuttx/net/uip/Make.defs b/nuttx/net/uip/Make.defs
index 6b780152d..0137ae32b 100644
--- a/nuttx/net/uip/Make.defs
+++ b/nuttx/net/uip/Make.defs
@@ -46,6 +46,12 @@ ifeq ($(CONFIG_NET_IOB),y)
NET_CSRCS += uip_iobsend.c
endif
+# Raw packet socket support
+
+ifeq ($(CONFIG_NET_PKT),y)
+NET_CSRCS += uip_pktsend.c
+endif
+
# Non-interrupt level support required?
ifeq ($(CONFIG_NET_NOINTS),y)
diff --git a/nuttx/net/uip/uip_iobsend.c b/nuttx/net/uip/uip_iobsend.c
index c3bec5f99..fc1d716f3 100644
--- a/nuttx/net/uip/uip_iobsend.c
+++ b/nuttx/net/uip/uip_iobsend.c
@@ -37,6 +37,8 @@
* Included Files
****************************************************************************/
+#include <nuttx/config.h>
+
#include <string.h>
#include <assert.h>
#include <debug.h>
diff --git a/nuttx/net/uip/uip_pktsend.c b/nuttx/net/uip/uip_pktsend.c
new file mode 100644
index 000000000..c9aa2bfc9
--- /dev/null
+++ b/nuttx/net/uip/uip_pktsend.c
@@ -0,0 +1,115 @@
+/****************************************************************************
+ * net/uip/uip_pktsend.c
+ *
+ * Copyright (C) 2014 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <string.h>
+#include <assert.h>
+#include <debug.h>
+
+#include <nuttx/net/uip/uip.h>
+#include <nuttx/net/uip/uip-arch.h>
+
+#ifdef CONFIG_NET_PKT
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Type Declarations
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Global Constant Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Global Variables
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Constant Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Variables
+ ****************************************************************************/
+
+/****************************************************************************
+ * Global Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: uip_pktsend
+ *
+ * Description:
+ * Called from socket logic in order to send a raw packet in response to
+ * an xmit or poll request from the the network interface driver.
+ *
+ * This is almost identical to calling uip_send() except that the data to
+ * be sent is copied into dev->d_buf (vs. dev->d_snddata), since there is
+ * no header on the data.
+ *
+ * Assumptions:
+ * Called from the interrupt level or, at a minimum, with interrupts
+ * disabled.
+ *
+ ****************************************************************************/
+
+void uip_pktsend(FAR struct uip_driver_s *dev, FAR const void *buf,
+ unsigned int len)
+{
+ DEBUGASSERT(dev && len > 0 && len < CONFIG_NET_BUFSIZE);
+
+ /* Copy the data into the device packet buffer */
+
+ memcpy(dev->d_buf, buf, len);
+
+ /* Set the number of bytes to send */
+
+ dev->d_len = len;
+ dev->d_sndlen = len;
+}
+
+#endif /* CONFIG_NET_PKT */