summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2010-11-30 01:06:46 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2010-11-30 01:06:46 +0000
commit0e37090fe20e9df40888e73ff6cc95ad4cffcfb1 (patch)
tree8a63d40929add5022694fb5b18d53f70ff45d41d
parent7549ec2dc9034240a2fb26131a4b971f0395b473 (diff)
downloadpx4-nuttx-0e37090fe20e9df40888e73ff6cc95ad4cffcfb1.tar.gz
px4-nuttx-0e37090fe20e9df40888e73ff6cc95ad4cffcfb1.tar.bz2
px4-nuttx-0e37090fe20e9df40888e73ff6cc95ad4cffcfb1.zip
Allow network when telnetd not configured
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3146 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r--nuttx/TODO10
-rwxr-xr-xnuttx/configs/olimex-lpc1766stk/nsh/defconfig2
-rw-r--r--nuttx/examples/nsh/Makefile2
-rw-r--r--nuttx/examples/nsh/nsh.h8
-rw-r--r--nuttx/examples/nsh/nsh_main.c4
-rw-r--r--nuttx/examples/nsh/nsh_netinit.c169
-rw-r--r--nuttx/examples/nsh/nsh_telnetd.c81
7 files changed, 190 insertions, 86 deletions
diff --git a/nuttx/TODO b/nuttx/TODO
index 6658aecd5..64d19d42c 100644
--- a/nuttx/TODO
+++ b/nuttx/TODO
@@ -1,4 +1,4 @@
-NuttX TODO List (Last updated November 27, 2010)
+NuttX TODO List (Last updated November 29, 2010)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(5) Task/Scheduler (sched/)
@@ -17,7 +17,7 @@ NuttX TODO List (Last updated November 27, 2010)
(1) Pascal add-on (pcode/)
(1) Documentation (Documentation/)
(6) Build system / Toolchains
- (3) NuttShell (NSH) (examples/nsh)
+ (4) NuttShell (NSH) (examples/nsh)
(3) Other Applications & Tests (examples/)
(5) Linux/Cywgin simulation (arch/sim)
(3) ARM (arch/arm/)
@@ -549,7 +549,11 @@ o NuttShell (NSH) (examples/nsh)
Description: Add support to NSH to run NXFLAT programs from a ROMFS file system
Status: Open
- Priority: Low
+ Priority: Low (enhancement)
+
+ Description: Add an ARP command so that we can see the contents of the ARP table.
+ Status: Open
+ Priority: Low (enhancement)
o Other Applications & Tests (examples/)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/nuttx/configs/olimex-lpc1766stk/nsh/defconfig b/nuttx/configs/olimex-lpc1766stk/nsh/defconfig
index 260d10e08..272555f1c 100755
--- a/nuttx/configs/olimex-lpc1766stk/nsh/defconfig
+++ b/nuttx/configs/olimex-lpc1766stk/nsh/defconfig
@@ -769,7 +769,7 @@ CONFIG_EXAMPLES_NSH_DISABLESCRIPT=n
CONFIG_EXAMPLES_NSH_DISABLEBG=n
CONFIG_EXAMPLES_NSH_ROMFSETC=n
CONFIG_EXAMPLES_NSH_CONSOLE=y
-CONFIG_EXAMPLES_NSH_TELNET=n
+CONFIG_EXAMPLES_NSH_TELNET=y
CONFIG_EXAMPLES_NSH_ARCHINIT=y
CONFIG_EXAMPLES_NSH_IOBUFFER_SIZE=512
CONFIG_EXAMPLES_NSH_DHCPC=n
diff --git a/nuttx/examples/nsh/Makefile b/nuttx/examples/nsh/Makefile
index 41f1aa44e..961858666 100644
--- a/nuttx/examples/nsh/Makefile
+++ b/nuttx/examples/nsh/Makefile
@@ -44,7 +44,7 @@ CSRCS += nsh_romfsetc.c
endif
ifeq ($(CONFIG_NET),y)
-CSRCS += nsh_netcmds.c
+CSRCS += nsh_netinit.c nsh_netcmds.c
endif
ifeq ($(CONFIG_EXAMPLES_NSH_CONSOLE),y)
diff --git a/nuttx/examples/nsh/nsh.h b/nuttx/examples/nsh/nsh.h
index c7821406f..9e072614a 100644
--- a/nuttx/examples/nsh/nsh.h
+++ b/nuttx/examples/nsh/nsh.h
@@ -1,7 +1,7 @@
/****************************************************************************
* examples/nsh/nsh.h
*
- * Copyright (C) 2007-2009 Gregory Nutt. All rights reserved.
+ * Copyright (C) 2007-2010 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
*
* Redistribution and use in source and binary forms, with or without
@@ -293,6 +293,12 @@ extern int nsh_romfsetc(void);
# define nsh_romfsetc() (-ENOSYS)
#endif
+#ifdef CONFIG_NET
+extern int nsh_netinit(void);
+#else
+# define nsh_netinit()
+#endif
+
#if CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NFILE_STREAMS > 0 && !defined(CONFIG_EXAMPLES_NSH_DISABLESCRIPT)
extern int nsh_script(FAR struct nsh_vtbl_s *vtbl, const char *cmd, const char *path);
#endif
diff --git a/nuttx/examples/nsh/nsh_main.c b/nuttx/examples/nsh/nsh_main.c
index 046ab562f..223a3537c 100644
--- a/nuttx/examples/nsh/nsh_main.c
+++ b/nuttx/examples/nsh/nsh_main.c
@@ -989,6 +989,10 @@ int user_start(int argc, char *argv[])
(void)nsh_archinitialize();
+ /* Bring up the network */
+
+ (void)nsh_netinit();
+
/* Set the priority of this task to something in the middle so that 'nice'
* can both raise and lower the priority.
*/
diff --git a/nuttx/examples/nsh/nsh_netinit.c b/nuttx/examples/nsh/nsh_netinit.c
new file mode 100644
index 000000000..356cc268e
--- /dev/null
+++ b/nuttx/examples/nsh/nsh_netinit.c
@@ -0,0 +1,169 @@
+/****************************************************************************
+ * examples/nsh/nsh_netinit.c
+ *
+ * Copyright (C) 2010 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * This is influenced by similar logic from uIP:
+ *
+ * Author: Adam Dunkels <adam@sics.se>
+ * Copyright (c) 2003, Adam Dunkels.
+ * All rights reserved.
+ *
+ * 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 of the Institute 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 INSTITUTE 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 INSTITUTE 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 <debug.h>
+
+#include <net/if.h>
+#include <net/uip/uip-lib.h>
+#if defined(CONFIG_EXAMPLES_NSH_DHCPC)
+# include <net/uip/resolv.h>
+# include <net/uip/dhcpc.h>
+#endif
+
+#include "nsh.h"
+
+#ifdef CONFIG_NET
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: nsh_netinit
+ *
+ * Description:
+ * Initialize the network per the selected NuttX configuration
+ *
+ ****************************************************************************/
+
+int nsh_netinit(void)
+{
+ struct in_addr addr;
+#if defined(CONFIG_EXAMPLES_NSH_DHCPC)
+ FAR void *handle;
+#endif
+#if defined(CONFIG_EXAMPLES_NSH_DHCPC) || defined(CONFIG_EXAMPLES_NSH_NOMAC)
+ uint8_t mac[IFHWADDRLEN];
+#endif
+
+/* Many embedded network interfaces must have a software assigned MAC */
+
+#ifdef CONFIG_EXAMPLES_NSH_NOMAC
+ mac[0] = 0x00;
+ mac[1] = 0xe0;
+ mac[2] = 0xb0;
+ mac[3] = 0x0b;
+ mac[4] = 0xba;
+ mac[5] = 0xbe;
+ uip_setmacaddr("eth0", mac);
+#endif
+
+ /* Set up our host address */
+
+#if !defined(CONFIG_EXAMPLES_NSH_DHCPC)
+ addr.s_addr = HTONL(CONFIG_EXAMPLES_NSH_IPADDR);
+#else
+ addr.s_addr = 0;
+#endif
+ uip_sethostaddr("eth0", &addr);
+
+ /* Set up the default router address */
+
+ addr.s_addr = HTONL(CONFIG_EXAMPLES_NSH_DRIPADDR);
+ uip_setdraddr("eth0", &addr);
+
+ /* Setup the subnet mask */
+
+ addr.s_addr = HTONL(CONFIG_EXAMPLES_NSH_NETMASK);
+ uip_setnetmask("eth0", &addr);
+
+#if defined(CONFIG_EXAMPLES_NSH_DHCPC)
+ /* Set up the resolver */
+
+ resolv_init();
+#endif
+
+#if defined(CONFIG_EXAMPLES_NSH_DHCPC)
+ /* Get the MAC address of the NIC */
+
+ uip_getmacaddr("eth0", mac);
+
+ /* Set up the DHCPC modules */
+
+ handle = dhcpc_open(&mac, IFHWADDRLEN);
+
+ /* Get an IP address. Note that there is no logic for renewing the IP address in this
+ * example. The address should be renewed in ds.lease_time/2 seconds.
+ */
+
+ if (handle)
+ {
+ struct dhcpc_state ds;
+ (void)dhcpc_request(handle, &ds);
+ uip_sethostaddr("eth1", &ds.ipaddr);
+ if (ds.netmask.s_addr != 0)
+ {
+ uip_setnetmask("eth0", &ds.netmask);
+ }
+ if (ds.default_router.s_addr != 0)
+ {
+ uip_setdraddr("eth0", &ds.default_router);
+ }
+ if (ds.dnsaddr.s_addr != 0)
+ {
+ resolv_conf(&ds.dnsaddr);
+ }
+ dhcpc_close(handle);
+ }
+#endif
+ return OK;
+}
+
+#endif /* CONFIG_NET */
diff --git a/nuttx/examples/nsh/nsh_telnetd.c b/nuttx/examples/nsh/nsh_telnetd.c
index 26a7f854a..42eb5a9e9 100644
--- a/nuttx/examples/nsh/nsh_telnetd.c
+++ b/nuttx/examples/nsh/nsh_telnetd.c
@@ -785,86 +785,7 @@ static void nsh_telnetexit(FAR struct nsh_vtbl_s *vtbl)
int nsh_telnetmain(int argc, char *argv[])
{
- struct in_addr addr;
-#if defined(CONFIG_EXAMPLES_NSH_DHCPC)
- FAR void *handle;
-#endif
-#if defined(CONFIG_EXAMPLES_NSH_DHCPC) || defined(CONFIG_EXAMPLES_NSH_NOMAC)
- uint8_t mac[IFHWADDRLEN];
-#endif
-
-/* Many embedded network interfaces must have a software assigned MAC */
-
-#ifdef CONFIG_EXAMPLES_NSH_NOMAC
- mac[0] = 0x00;
- mac[1] = 0xe0;
- mac[2] = 0xb0;
- mac[3] = 0x0b;
- mac[4] = 0xba;
- mac[5] = 0xbe;
- uip_setmacaddr("eth0", mac);
-#endif
-
- /* Set up our host address */
-
-#if !defined(CONFIG_EXAMPLES_NSH_DHCPC)
- addr.s_addr = HTONL(CONFIG_EXAMPLES_NSH_IPADDR);
-#else
- addr.s_addr = 0;
-#endif
- uip_sethostaddr("eth0", &addr);
-
- /* Set up the default router address */
-
- addr.s_addr = HTONL(CONFIG_EXAMPLES_NSH_DRIPADDR);
- uip_setdraddr("eth0", &addr);
-
- /* Setup the subnet mask */
-
- addr.s_addr = HTONL(CONFIG_EXAMPLES_NSH_NETMASK);
- uip_setnetmask("eth0", &addr);
-
-#if defined(CONFIG_EXAMPLES_NSH_DHCPC)
- /* Set up the resolver */
-
- resolv_init();
-#endif
-
-#if defined(CONFIG_EXAMPLES_NSH_DHCPC)
- /* Get the MAC address of the NIC */
-
- uip_getmacaddr("eth0", mac);
-
- /* Set up the DHCPC modules */
-
- handle = dhcpc_open(&mac, IFHWADDRLEN);
-
- /* Get an IP address. Note that there is no logic for renewing the IP address in this
- * example. The address should be renewed in ds.lease_time/2 seconds.
- */
-
- if (handle)
- {
- struct dhcpc_state ds;
- (void)dhcpc_request(handle, &ds);
- uip_sethostaddr("eth1", &ds.ipaddr);
- if (ds.netmask.s_addr != 0)
- {
- uip_setnetmask("eth0", &ds.netmask);
- }
- if (ds.default_router.s_addr != 0)
- {
- uip_setdraddr("eth0", &ds.default_router);
- }
- if (ds.dnsaddr.s_addr != 0)
- {
- resolv_conf(&ds.dnsaddr);
- }
- dhcpc_close(handle);
- }
-#endif
-
- /* Execute nsh_connection on each connection to port 23 */
+ /* Execute nsh_connection() on each connection to port 23 */
uip_server(HTONS(23), nsh_connection, CONFIG_EXAMPLES_NSH_STACKSIZE);
return OK;