diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2010-11-30 01:06:46 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2010-11-30 01:06:46 +0000 |
commit | 0e37090fe20e9df40888e73ff6cc95ad4cffcfb1 (patch) | |
tree | 8a63d40929add5022694fb5b18d53f70ff45d41d | |
parent | 7549ec2dc9034240a2fb26131a4b971f0395b473 (diff) | |
download | px4-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/TODO | 10 | ||||
-rwxr-xr-x | nuttx/configs/olimex-lpc1766stk/nsh/defconfig | 2 | ||||
-rw-r--r-- | nuttx/examples/nsh/Makefile | 2 | ||||
-rw-r--r-- | nuttx/examples/nsh/nsh.h | 8 | ||||
-rw-r--r-- | nuttx/examples/nsh/nsh_main.c | 4 | ||||
-rw-r--r-- | nuttx/examples/nsh/nsh_netinit.c | 169 | ||||
-rw-r--r-- | nuttx/examples/nsh/nsh_telnetd.c | 81 |
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; |