apps/examples/nettest: Extend the test so that it can be down using the local loopback device

This commit is contained in:
Gregory Nutt 2015-08-26 10:35:40 -06:00
parent 6cedfcd632
commit a7853cdc89
5 changed files with 114 additions and 27 deletions

View File

@ -1415,4 +1415,6 @@
* apps/nettest: Add option to suppress network initialization. This
is necessary if the nettest is run from NSH which has already
initialized the network (2015-08-26).
* apps/nettest: Extend test so that can be performed using the local
loopback device (2015-08-26).

View File

@ -12,19 +12,40 @@ config EXAMPLES_NETTEST
if EXAMPLES_NETTEST
config EXAMPLES_NETTEST_LOOPBACK
bool "Loopback test"
default n
depends on NET_LOOPBACK
---help---
Perform the test using the local loopback device. In this case,
both the client and the server reside on the target.
if EXAMPLES_NETTEST_LOOPBACK
config EXAMPLES_NETTEST_STACKSIZE
int "Server stack size"
default 2048
config EXAMPLES_NETTEST_PRIORITY
int "Server priority"
default 100
endif # EXAMPLES_NETTEST_LOOPBACK
config EXAMPLES_NETTEST_SERVER
bool "Target is server"
default n
depends on !EXAMPLES_NETTEST_LOOPBACK
---help---
Select to use the host as the client side of the test. Default: The
target is the client side of the test
Select to use the host as the client side of the test. Default: The
target is the client side of the test
config EXAMPLES_NETTEST_PERFORMANCE
bool "Test for Performance"
default n
---help---
Configure the example to test for network performance. Default: Test
is for network functionality.
Configure the example to test for network performance. Default: Test
is for network functionality.
choice
prompt "IP Domain"
@ -45,7 +66,7 @@ config EXAMPLES_NETTEST_INIT
bool "Initialize network"
default n if NSH_BUILTIN_APPS
default y if !NSH_BUILTIN_APPS
depends on !BUILD_KERNEL
depends on !BUILD_KERNEL && !EXAMPLES_NETTEST_LOOPBACK
---help---
Include logic to initialize the network. This should not be done if
the network is already initialized when nettest runs. This is
@ -77,6 +98,8 @@ config EXAMPLES_NETTEST_NETMASK
endif # EXAMPLES_NETTEST_INIT
if !EXAMPLES_NETTEST_LOOPBACK
config EXAMPLES_NETTEST_CLIENTIP
hex "Client IP Address"
default 0x0a000001 if !EXAMPLES_NETTEST_SERVER
@ -89,6 +112,7 @@ config EXAMPLES_NETTEST_CLIENTIP
host PC IP address (possibly the gateway address,
EXAMPLES_NETTEST_DRIPADDR?).
endif # !EXAMPLES_NETTEST_LOOPBACK
endif # EXAMPLES_NETTEST_IPv4
if EXAMPLES_NETTEST_IPv6
@ -345,6 +369,8 @@ config EXAMPLES_NETTEST_IPv6NETMASK_8
endif # NET_ICMPv6_AUTOCONF
endif # EXAMPLES_NETTEST_INIT
if !EXAMPLES_NETTEST_LOOPBACK
comment "Client IPv6 address"
config EXAMPLES_NETTEST_CLIENTIPv6ADDR_1
@ -476,5 +502,6 @@ config EXAMPLES_NETTEST_CLIENTIPv6ADDR_8
values forming the full IP address must be specified individually.
This is the last of the 8-values.
endif # !EXAMPLES_NETTEST_LOOPBACK
endif # EXAMPLES_NETTEST_IPv6
endif # EXAMPLES_NETTEST

View File

@ -43,7 +43,9 @@ TARG_ASRCS =
TARG_AOBJS = $(TARG_ASRCS:.S=$(OBJEXT))
TARG_CSRCS =
ifeq ($(CONFIG_EXAMPLES_NETTEST_SERVER),y)
ifeq ($(CONFIG_EXAMPLES_NETTEST_LOOPBACK),y)
TARG_CSRCS += nettest_server.c nettest_client.c
else ifeq ($(CONFIG_EXAMPLES_NETTEST_SERVER),y)
TARG_CSRCS += nettest_server.c
else
TARG_CSRCS += nettest_client.c
@ -70,24 +72,26 @@ else
endif
endif
HOSTCFLAGS += -DNETTEST_HOST=1
ifeq ($(CONFIG_EXAMPLES_NETTEST_SERVER),y)
HOSTCFLAGS += -DCONFIG_EXAMPLES_NETTEST_SERVER=1 -DCONFIG_EXAMPLES_NETTEST_CLIENTIP="$(CONFIG_EXAMPLES_NETTEST_CLIENTIP)"
endif
ifeq ($(CONFIG_EXAMPLES_NETTEST_PERFORMANCE),y)
HOSTCFLAGS += -DCONFIG_EXAMPLES_NETTEST_PERFORMANCE=1
endif
ifneq ($(CONFIG_EXAMPLES_NETTEST_LOOPBACK),y)
HOSTCFLAGS += -DNETTEST_HOST=1
ifeq ($(CONFIG_EXAMPLES_NETTEST_SERVER),y)
HOSTCFLAGS += -DCONFIG_EXAMPLES_NETTEST_SERVER=1 -DCONFIG_EXAMPLES_NETTEST_CLIENTIP="$(CONFIG_EXAMPLES_NETTEST_CLIENTIP)"
endif
ifeq ($(CONFIG_EXAMPLES_NETTEST_PERFORMANCE),y)
HOSTCFLAGS += -DCONFIG_EXAMPLES_NETTEST_PERFORMANCE=1
endif
HOST_SRCS = host.c
ifeq ($(CONFIG_EXAMPLES_NETTEST_SERVER),y)
HOST_SRCS += nettest_client.c
else
HOST_SRCS += nettest_server.c
endif
HOST_SRCS = host.c
ifeq ($(CONFIG_EXAMPLES_NETTEST_SERVER),y)
HOST_SRCS += nettest_client.c
else
HOST_SRCS += nettest_server.c
endif
HOSTOBJEXT ?= .hobj
HOST_OBJS = $(HOST_SRCS:.c=$(HOSTOBJEXT))
HOST_BIN = host
HOSTOBJEXT ?= .hobj
HOST_OBJS = $(HOST_SRCS:.c=$(HOSTOBJEXT))
HOST_BIN = host
endif
ifeq ($(WINTOOL),y)
INSTALL_DIR = "${shell cygpath -w $(BIN_DIR)}"
@ -119,17 +123,21 @@ $(TARG_AOBJS): %$(OBJEXT): %.S
$(TARG_COBJS) $(TARG_MAINOBJ): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
ifneq ($(CONFIG_EXAMPLES_NETTEST_LOOPBACK),y)
$(HOST_OBJS): %$(HOSTOBJEXT): %.c
@echo "CC: $<"
$(Q) $(HOSTCC) -c $(HOSTCFLAGS) $< -o $@
endif
config.h: $(TOPDIR)/include/nuttx/config.h
@echo "CP: $<"
$(Q) cp $< $@
ifneq ($(CONFIG_EXAMPLES_NETTEST_LOOPBACK),y)
$(HOST_BIN): config.h $(HOST_OBJS)
@echo "LD: $@"
$(Q) $(HOSTCC) $(HOSTLDFLAGS) $(HOST_OBJS) -o $@
endif
.built: config.h $(TARG_OBJS)
$(call ARCHIVE, $(TARG_BIN), $(TARG_OBJS))
@ -164,8 +172,10 @@ endif
depend: .depend
clean:
ifneq ($(CONFIG_EXAMPLES_NETTEST_LOOPBACK),y)
$(call DELFILE, *$(HOSTOBJEXT))
$(call DELFILE, $(HOST_BIN))
endif
$(call DELFILE, .built)
$(call DELFILE, *.dSYM)
$(call DELFILE, config.h)

View File

@ -41,7 +41,10 @@
//#include <nuttx/config.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sched.h>
#include <debug.h>
#include <net/if.h>
@ -177,6 +180,14 @@ static void netest_initialize(void)
}
#endif /*CONFIG_EXAMPLES_NETTEST_INIT */
#ifdef CONFIG_EXAMPLES_NETTEST_LOOPBACK
static int server_child(int argc, char *argv[])
{
recv_server();
return EXIT_SUCCESS;
}
#endif
/****************************************************************************
* Public Functions
****************************************************************************/
@ -191,21 +202,42 @@ int main(int argc, FAR char *argv[])
int nettest_main(int argc, char *argv[])
#endif
{
#if defined(CONFIG_EXAMPLES_NETTEST_LOOPBACK)
pid_t child;
#endif
#ifdef CONFIG_EXAMPLES_NETTEST_INIT
/* Initialize the network */
netest_initialize();
#endif
#ifdef CONFIG_EXAMPLES_NETTEST_SERVER
/* Then perform the server side of the test */
#if defined(CONFIG_EXAMPLES_NETTEST_LOOPBACK)
/* Then perform the server side of the test on a child task */
child = task_create("Nettest Child", CONFIG_EXAMPLES_NETTEST_PRIORITY,
CONFIG_EXAMPLES_NETTEST_STACKSIZE, server_child,
NULL);
if (child < 0)
{
fprintf(stderr, "ERROR: Failed to server daemon\n");
return EXIT_FAILURE;
}
usleep(500*10000);
#elif defined(CONFIG_EXAMPLES_NETTEST_SERVER)
/* Then perform the server side of the test on this thread */
recv_server();
#else
/* Then perform the client side of the test */
#endif
#if !defined(CONFIG_EXAMPLES_NETTEST_SERVER) || \
defined(CONFIG_EXAMPLES_NETTEST_LOOPBACK)
/* Then perform the client side of the test on this thread */
send_client();
#endif
return 0;
return EXIT_SUCCESS;
}

View File

@ -106,6 +106,16 @@ void send_client(void)
myaddr.sin6_family = AF_INET6;
myaddr.sin6_port = HTONS(PORTNO);
#ifdef CONFIG_EXAMPLES_NETTEST_LOOPBACK
myaddr.sin6_addr.s6_addr16[0] = 0;
myaddr.sin6_addr.s6_addr16[1] = 0;
myaddr.sin6_addr.s6_addr16[2] = 0;
myaddr.sin6_addr.s6_addr16[3] = 0;
myaddr.sin6_addr.s6_addr16[4] = 0;
myaddr.sin6_addr.s6_addr16[5] = 0;
myaddr.sin6_addr.s6_addr16[6] = 0;
myaddr.sin6_addr.s6_addr16[7] = HTONS(1);
#else
myaddr.sin6_addr.s6_addr16[0] = HTONS(CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_1);
myaddr.sin6_addr.s6_addr16[1] = HTONS(CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_2);
myaddr.sin6_addr.s6_addr16[2] = HTONS(CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_3);
@ -114,12 +124,18 @@ void send_client(void)
myaddr.sin6_addr.s6_addr16[5] = HTONS(CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_6);
myaddr.sin6_addr.s6_addr16[6] = HTONS(CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_7);
myaddr.sin6_addr.s6_addr16[7] = HTONS(CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_8);
#endif
addrlen = sizeof(struct sockaddr_in6);
#else
myaddr.sin_family = AF_INET;
myaddr.sin_port = HTONS(PORTNO);
#ifdef CONFIG_EXAMPLES_NETTEST_LOOPBACK
myaddr.sin_addr.s_addr = HTONL(0x7f000001);
#else
myaddr.sin_addr.s_addr = HTONL(CONFIG_EXAMPLES_NETTEST_CLIENTIP);
#endif
addrlen = sizeof(struct sockaddr_in);
#endif