aboutsummaryrefslogtreecommitdiff
path: root/apps/examples/telnetd
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-09-17 18:18:44 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-09-17 18:18:44 +0000
commit57623d42ebb04f0a0b9e6eb7c0847a3ece2aa0ff (patch)
tree25d07d14e920d31c0b1947c9ca586f2a01fc32d8 /apps/examples/telnetd
downloadpx4-firmware-57623d42ebb04f0a0b9e6eb7c0847a3ece2aa0ff.tar.gz
px4-firmware-57623d42ebb04f0a0b9e6eb7c0847a3ece2aa0ff.tar.bz2
px4-firmware-57623d42ebb04f0a0b9e6eb7c0847a3ece2aa0ff.zip
Resync new repository with old repo r5166
git-svn-id: http://svn.code.sf.net/p/nuttx/code/trunk@5153 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'apps/examples/telnetd')
-rw-r--r--apps/examples/telnetd/Kconfig13
-rw-r--r--apps/examples/telnetd/Makefile105
-rw-r--r--apps/examples/telnetd/README.txt8
-rw-r--r--apps/examples/telnetd/shell.c255
-rw-r--r--apps/examples/telnetd/shell.h92
5 files changed, 473 insertions, 0 deletions
diff --git a/apps/examples/telnetd/Kconfig b/apps/examples/telnetd/Kconfig
new file mode 100644
index 000000000..11f94a86f
--- /dev/null
+++ b/apps/examples/telnetd/Kconfig
@@ -0,0 +1,13 @@
+#
+# For a description of the syntax of this configuration file,
+# see misc/tools/kconfig-language.txt.
+#
+
+config EXAMPLES_TELNETD
+ bool "Telnet daemon example"
+ default n
+ ---help---
+ Enable the Telnet daemon example
+
+if EXAMPLES_TELNETD
+endif
diff --git a/apps/examples/telnetd/Makefile b/apps/examples/telnetd/Makefile
new file mode 100644
index 000000000..fe892670e
--- /dev/null
+++ b/apps/examples/telnetd/Makefile
@@ -0,0 +1,105 @@
+############################################################################
+# apps/examples/telnetd/Makefile
+#
+# Copyright (C) 2012 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.
+#
+############################################################################
+
+-include $(TOPDIR)/.config
+-include $(TOPDIR)/Make.defs
+include $(APPDIR)/Make.defs
+
+# Hello, World! Example
+
+ASRCS =
+CSRCS = shell.c
+
+AOBJS = $(ASRCS:.S=$(OBJEXT))
+COBJS = $(CSRCS:.c=$(OBJEXT))
+
+SRCS = $(ASRCS) $(CSRCS)
+OBJS = $(AOBJS) $(COBJS)
+
+ifeq ($(WINTOOL),y)
+ BIN = "${shell cygpath -w $(APPDIR)/libapps$(LIBEXT)}"
+else
+ BIN = "$(APPDIR)/libapps$(LIBEXT)"
+endif
+
+ROOTDEPPATH = --dep-path .
+
+# Buttons built-in application info
+
+APPNAME = telnetd
+PRIORITY = SCHED_PRIORITY_DEFAULT
+STACKSIZE = 2048
+
+# Common build
+
+VPATH =
+
+all: .built
+.PHONY: context clean depend distclean
+
+$(AOBJS): %$(OBJEXT): %.S
+ $(call ASSEMBLE, $<, $@)
+
+$(COBJS): %$(OBJEXT): %.c
+ $(call COMPILE, $<, $@)
+
+.built: $(OBJS)
+ @( for obj in $(OBJS) ; do \
+ $(call ARCHIVE, $(BIN), $${obj}); \
+ done ; )
+ @touch .built
+
+.context:
+ifeq ($(CONFIG_NSH_BUILTIN_APPS),y)
+ $(call REGISTER,$(APPNAME),$(PRIORITY),$(STACKSIZE),$(APPNAME)_main)
+ @touch $@
+endif
+
+context: .context
+
+.depend: Makefile $(SRCS)
+ @$(MKDEP) $(ROOTDEPPATH) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep
+ @touch $@
+
+depend: .depend
+
+clean:
+ @rm -f *.o *~ .*.swp .built
+ $(call CLEAN)
+
+distclean: clean
+ @rm -f Make.dep .depend
+
+-include Make.dep
diff --git a/apps/examples/telnetd/README.txt b/apps/examples/telnetd/README.txt
new file mode 100644
index 000000000..ebc9684ca
--- /dev/null
+++ b/apps/examples/telnetd/README.txt
@@ -0,0 +1,8 @@
+README.txt
+^^^^^^^^^^
+
+This directory contains a functional port of the tiny uIP shell. In the
+NuttX environment, the NuttShell (at apps/nshlib) supercedes this tiny
+shell and also supports telnetd.
+
+This example is retained here for reference purposes only.
diff --git a/apps/examples/telnetd/shell.c b/apps/examples/telnetd/shell.c
new file mode 100644
index 000000000..3033698c5
--- /dev/null
+++ b/apps/examples/telnetd/shell.c
@@ -0,0 +1,255 @@
+/****************************************************************************
+ * examples/telnetd/shell.c
+ *
+ * Copyright (C) 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * This is a leverage of 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <net/if.h>
+
+#include <apps/netutils/telnetd.h>
+#include <apps/netutils/uiplib.h>
+
+#include "shell.h"
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct ptentry_s
+{
+ FAR const char *commandstr;
+ void (*pfunc)(int argc, char **argv);
+};
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+static void shell_help(int argc, char **argv);
+static void shell_quit(int argc, char **argv);
+static void shell_unknown(int argc, char **argv);
+static void shell_parse(FAR char *line, int len);
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static struct ptentry_s g_parsetab[] =
+{
+ {"help", shell_help},
+ {"exit", shell_quit},
+ {"?", shell_help},
+ {NULL, shell_unknown}
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: shell_help
+ ****************************************************************************/
+
+static void shell_help(int argc, char **argv)
+{
+ printf("Available commands:\n");
+ printf(" help, ? - show help\n");
+ printf(" exit - exit shell\n");
+}
+
+/****************************************************************************
+ * Name: shell_help
+ ****************************************************************************/
+
+static void shell_unknown(int argc, char **argv)
+{
+ if (argv[0])
+ {
+ printf("Unknown command: %s\n", argv[0]);
+ }
+}
+
+/****************************************************************************
+ * Name: shell_quit
+ ****************************************************************************/
+
+static void shell_quit(int argc, char **argv)
+{
+ printf("Bye!\n");
+ exit(0);
+}
+
+/****************************************************************************
+ * Name: shell_parse
+ ****************************************************************************/
+
+static void shell_parse(FAR char *line, int len)
+{
+ struct ptentry_s *entry;
+ FAR char *cmd;
+ FAR char *saveptr;
+
+ /* Get the command from the beginning the line */
+
+ cmd = strtok_r(line, " \t\n\r\f\v", &saveptr);
+ if (cmd)
+ {
+ /* Now find the matching command in the command table */
+
+ for (entry = g_parsetab; entry->commandstr != NULL; entry++)
+ {
+ if (strncmp(entry->commandstr, cmd, strlen(entry->commandstr)) == 0)
+ {
+ break;
+ }
+ }
+
+ entry->pfunc(1, &cmd);
+ }
+}
+
+/****************************************************************************
+ * Name: shell_session
+ ****************************************************************************/
+
+int shell_session(int argc, char *argv[])
+{
+ char line[128];
+
+ printf("uIP command shell -- NuttX style\n");
+ printf("Type '?' and return for help\n");
+
+ for(;;)
+ {
+ printf(SHELL_PROMPT);
+ fflush(stdout);
+
+ if (fgets(line, 128, stdin) == NULL)
+ {
+ break;
+ }
+
+ shell_parse(line, 128);
+ }
+
+ return 0;
+}
+
+/****************************************************************************
+ * Name: shell_netinit
+ ****************************************************************************/
+
+static void shell_netinit(void)
+{
+ struct in_addr addr;
+#ifdef CONFIG_EXAMPLE_TELNETD_NOMAC
+ uint8_t mac[IFHWADDRLEN];
+#endif
+
+/* Many embedded network interfaces must have a software assigned MAC */
+
+#ifdef CONFIG_EXAMPLE_TELNETD_NOMAC
+ mac[0] = 0x00;
+ mac[1] = 0xe0;
+ mac[2] = 0xde;
+ mac[3] = 0xad;
+ mac[4] = 0xbe;
+ mac[5] = 0xef;
+ uip_setmacaddr("eth0", mac);
+#endif
+
+ /* Set up our host address */
+
+ addr.s_addr = HTONL(CONFIG_EXAMPLE_TELNETD_IPADDR);
+ uip_sethostaddr("eth0", &addr);
+
+ /* Set up the default router address */
+
+ addr.s_addr = HTONL(CONFIG_EXAMPLE_TELNETD_DRIPADDR);
+ uip_setdraddr("eth0", &addr);
+
+ /* Setup the subnet mask */
+
+ addr.s_addr = HTONL(CONFIG_EXAMPLE_TELNETD_NETMASK);
+ uip_setnetmask("eth0", &addr);
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+int shell_main(int argc, char *argv[])
+{
+ struct telnetd_config_s config;
+ int ret;
+
+ /* Configure the network */
+
+ printf("shell_main: Initializing the network\n");
+ shell_netinit();
+
+ /* Configure the telnet daemon */
+
+ config.d_port = HTONS(23);
+ config.d_priority = CONFIG_EXAMPLES_TELNETD_DAEMONPRIO;
+ config.d_stacksize = CONFIG_EXAMPLES_TELNETD_DAEMONSTACKSIZE;
+ config.t_priority = CONFIG_EXAMPLES_TELNETD_CLIENTPRIO;
+ config.t_stacksize = CONFIG_EXAMPLES_TELNETD_CLIENTSTACKSIZE;
+ config.t_entry = shell_session;
+
+ /* Start the telnet daemon */
+
+ printf("shell_main: Starting the Telnet daemon\n");
+ ret = telnetd_start(&config);
+ if (ret < 0)
+ {
+ printf("Failed to tart the Telnet daemon\n");
+ }
+
+ printf("shell_main: Exiting\n");
+ return 0;
+}
diff --git a/apps/examples/telnetd/shell.h b/apps/examples/telnetd/shell.h
new file mode 100644
index 000000000..a5cec32b3
--- /dev/null
+++ b/apps/examples/telnetd/shell.h
@@ -0,0 +1,92 @@
+/****************************************************************************
+ * apps/examples/telnetd/shell.h
+ * Interface for the Contiki shell.
+ *
+ * Copyright (C) 2012 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. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ *
+ ****************************************************************************/
+
+#ifndef __APPS_EXAMPLES_TELNETD_SHELL_H
+#define __APPS_EXAMPLES_TELNETD_SHELL_H
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+/* Configuration ************************************************************/
+/* CONFIG_EXAMPLES_TELNETD_DAEMONPRIO - Priority of the Telnet daemon.
+ * Default: SCHED_PRIORITY_DEFAULT
+ * CONFIG_EXAMPLES_TELNETD_DAEMONSTACKSIZE - Stack size allocated for the
+ * Telnet daemon. Default: 2048
+ * CONFIG_EXAMPLES_TELNETD_CLIENTPRIO- Priority of the Telnet client.
+ * Default: SCHED_PRIORITY_DEFAULT
+ * CONFIG_EXAMPLES_TELNETD_CLIENTSTACKSIZE - Stack size allocated for the
+ * Telnet client. Default: 2048
+ * CONFIG_EXAMPLE_TELNETD_NOMAC - If the hardware has no MAC address of its
+ * own, define this =y to provide a bogus address for testing.
+ * CONFIG_EXAMPLE_TELNETD_IPADDR - The target IP address. Default 10.0.0.2
+ * CONFIG_EXAMPLE_TELNETD_DRIPADDR - The default router address. Default
+ * 10.0.0.1
+ * CONFIG_EXAMPLE_TELNETD_NETMASK - The network mask. Default: 255.255.255.0
+ */
+
+#ifndef CONFIG_EXAMPLES_TELNETD_DAEMONPRIO
+# define CONFIG_EXAMPLES_TELNETD_DAEMONPRIO SCHED_PRIORITY_DEFAULT
+#endif
+
+#ifndef CONFIG_EXAMPLES_TELNETD_DAEMONSTACKSIZE
+# define CONFIG_EXAMPLES_TELNETD_DAEMONSTACKSIZE 2048
+#endif
+
+#ifndef CONFIG_EXAMPLES_TELNETD_CLIENTPRIO
+# define CONFIG_EXAMPLES_TELNETD_CLIENTPRIO SCHED_PRIORITY_DEFAULT
+#endif
+
+#ifndef CONFIG_EXAMPLES_TELNETD_CLIENTSTACKSIZE
+# define CONFIG_EXAMPLES_TELNETD_CLIENTSTACKSIZE 2048
+#endif
+
+#ifndef CONFIG_EXAMPLE_TELNETD_IPADDR
+# define CONFIG_EXAMPLE_TELNETD_IPADDR 0x0a000002
+#endif
+#ifndef CONFIG_EXAMPLE_TELNETD_DRIPADDR
+# define CONFIG_EXAMPLE_TELNETD_DRIPADDR 0x0a000002
+#endif
+#ifndef CONFIG_EXAMPLE_TELNETD_NETMASK
+# define CONFIG_EXAMPLE_TELNETD_NETMASK 0xffffff00
+#endif
+
+/* Other definitions ********************************************************/
+
+#define SHELL_PROMPT "uIP 1.0> "
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+#endif /* __APPS_EXAMPLES_TELNETD_SHELL_H */