examples/udp: Add configurable network device name; Add option to suppress network initialization which is not needed if started by NSH or for 6LoWPAN.

This commit is contained in:
Gregory Nutt 2017-06-19 09:46:40 -06:00
parent 1774ae812c
commit 7bee5ecec5
8 changed files with 239 additions and 128 deletions

View File

@ -16,6 +16,26 @@ config EXAMPLES_UDP_SERVER
bool "Target is the server"
default n
config EXAMPLES_UDP_DEVNAME
string "Network device"
default "eth0"
config EXAMPLES_UDP_NETINIT
bool "Initialize network"
default n if NSH_NETINIT
default y if !NSH_NETINIT
---help---
Selecting this option will enable logic in the example to perform
some basic initialization of the network. You would probably only
want to do this if the example is running stand-alone. If the
example is running as an NSH command, then the network as already
been initialized.
This basic initialization currently only supports basic
initialization of Ethernet network devices. For other exotic
network devices this initialization should be suppressed. Such
devices will require other, external initialization.
choice
prompt "IP Domain"
default EXAMPLES_UDP_IPv4 if NET_IPv4
@ -35,6 +55,8 @@ if EXAMPLES_UDP_IPv4
comment "IPv4 addresses"
if !EXAMPLES_UDP_NETINIT
config EXAMPLES_UDP_IPADDR
hex "Target IP address"
default 0x0a000002
@ -47,16 +69,17 @@ config EXAMPLES_UDP_NETMASK
hex "Network mask"
default 0xffffff00
endif # !EXAMPLES_UDP_NETINIT
config EXAMPLES_UDP_SERVERIP
hex "Server IP address"
default 0x0a000001 if !EXAMPLES_UDP_SERVER
default 0x0a000002 if EXAMPLES_UDP_SERVER
endif # EXAMPLES_UDP_IPv4
if EXAMPLES_UDP_IPv6
if !NET_ICMPv6_AUTOCONF
if !NET_ICMPv6_AUTOCONF && EXAMPLES_UDP_NETINIT
comment "Target IPv6 address"

View File

@ -43,10 +43,14 @@ TARG_ASRCS =
TARG_CSRCS =
ifeq ($(CONFIG_EXAMPLES_UDP_SERVER),y)
TARG_CSRCS += udp-server.c
TARG_CSRCS += udp_server.c
else
TARG_CSRCS += udp-client.c
TARG_CSRCS += udp_client.c
endif
ifeq ($(CONFIG_EXAMPLES_UDP_NETINIT),y)
TARG_CSRCS += target_netinit.c
endif
TARG_MAINSRC = target.c
TARG_AOBJS = $(TARG_ASRCS:.S=$(OBJEXT))
@ -74,9 +78,9 @@ HOSTCFLAGS += -DEXAMPLES_UDP_HOST=1
HOST_SRCS = host.c
ifeq ($(CONFIG_EXAMPLES_UDP_SERVER),y)
HOST_SRCS += udp-client.c
HOST_SRCS += udp_client.c
else
HOST_SRCS += udp-server.c
HOST_SRCS += udp_server.c
endif
HOST_OBJS = $(HOST_SRCS:.c=.o)

View File

@ -38,7 +38,7 @@
****************************************************************************/
#include "config.h"
#include "udp-internal.h"
#include "udp.h"
/****************************************************************************
* Private Data

View File

@ -38,68 +38,7 @@
****************************************************************************/
#include "config.h"
#include <stdio.h>
#include <debug.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include "netutils/netlib.h"
#include "udp-internal.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Private Data
****************************************************************************/
#if defined(CONFIG_EXAMPLES_UDP_IPv6) && !defined(CONFIG_NET_ICMPv6_AUTOCONF)
/* Our host IPv6 address */
static const uint16_t g_ipv6_hostaddr[8] =
{
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_1),
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_2),
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_3),
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_4),
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_5),
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_6),
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_7),
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_8),
};
/* Default routine IPv6 address */
static const uint16_t g_ipv6_draddr[8] =
{
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_1),
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_2),
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_3),
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_4),
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_5),
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_6),
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_7),
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_8),
};
/* IPv6 netmask */
static const uint16_t g_ipv6_netmask[8] =
{
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_1),
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_2),
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_3),
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_4),
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_5),
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_6),
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_7),
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_8),
};
#endif /* CONFIG_EXAMPLES_UDP_IPv6 && !CONFIG_NET_ICMPv6_AUTOCONF */
#include "udp.h"
/****************************************************************************
* Public Functions
@ -115,56 +54,13 @@ int main(int argc, FAR char *argv[])
int udp_main(int argc, char *argv[])
#endif
{
#ifdef CONFIG_EXAMPLES_UDP_IPv6
#ifdef CONFIG_NET_ICMPv6_AUTOCONF
/* Perform ICMPv6 auto-configuration */
#ifdef CONFIG_EXAMPLES_UDP_NETINIT
/* Initialize the network */
netlib_icmpv6_autoconfiguration("eth0");
(void)target_netinit();
#endif
#else /* CONFIG_NET_ICMPv6_AUTOCONF */
/* Set up our fixed host address */
netlib_set_ipv6addr("eth0",
(FAR const struct in6_addr *)g_ipv6_hostaddr);
/* Set up the default router address */
netlib_set_dripv6addr("eth0",
(FAR const struct in6_addr *)g_ipv6_draddr);
/* Setup the subnet mask */
netlib_set_ipv6netmask("eth0",
(FAR const struct in6_addr *)g_ipv6_netmask);
#endif /* CONFIG_NET_ICMPv6_AUTOCONF */
#else /* CONFIG_EXAMPLES_UDP_IPv6 */
struct in_addr addr;
/* Set up our host address */
addr.s_addr = HTONL(CONFIG_EXAMPLES_UDP_IPADDR);
netlib_set_ipv4addr("eth0", &addr);
/* Set up the default router address */
addr.s_addr = HTONL(CONFIG_EXAMPLES_UDP_DRIPADDR);
netlib_set_dripv4addr("eth0", &addr);
/* Setup the subnet mask */
addr.s_addr = HTONL(CONFIG_EXAMPLES_UDP_NETMASK);
netlib_set_ipv4netmask("eth0", &addr);
#endif /* CONFIG_EXAMPLES_UDP_IPv6 */
/* New versions of netlib_set_ipvXaddr will not bring the network up,
* So ensure the network is really up at this point.
*/
netlib_ifup("eth0");
/* Run the server or client, depending upon how we are configured */
#ifdef CONFIG_EXAMPLES_UDP_SERVER
recv_server();

View File

@ -0,0 +1,184 @@
/****************************************************************************
* examples/udp/target_netinit.c
*
* Copyright (C) 2007, 2011, 2015, 2017 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 "config.h"
#include <stdbool.h>
#include <stdio.h>
#include <debug.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include "netutils/netlib.h"
#include "udp.h"
#ifdef CONFIG_EXAMPLES_UDP_NETINIT
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#ifdef CONFIG_EXAMPLES_UDP_DEVNAME
# define DEVNAME CONFIG_EXAMPLES_UDP_DEVNAME
#else
# define DEVNAME "eth0"
#endif
/****************************************************************************
* Private Data
****************************************************************************/
#if defined(CONFIG_EXAMPLES_UDP_IPv6) && !defined(CONFIG_NET_ICMPv6_AUTOCONF)
/* Our host IPv6 address */
static const uint16_t g_ipv6_hostaddr[8] =
{
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_1),
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_2),
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_3),
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_4),
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_5),
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_6),
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_7),
HTONS(CONFIG_EXAMPLES_UDP_IPv6ADDR_8),
};
/* Default routine IPv6 address */
static const uint16_t g_ipv6_draddr[8] =
{
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_1),
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_2),
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_3),
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_4),
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_5),
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_6),
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_7),
HTONS(CONFIG_EXAMPLES_UDP_DRIPv6ADDR_8),
};
/* IPv6 netmask */
static const uint16_t g_ipv6_netmask[8] =
{
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_1),
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_2),
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_3),
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_4),
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_5),
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_6),
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_7),
HTONS(CONFIG_EXAMPLES_UDP_IPv6NETMASK_8),
};
#endif /* CONFIG_EXAMPLES_UDP_IPv6 && !CONFIG_NET_ICMPv6_AUTOCONF */
static bool g_initialized;
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* target_netinit
****************************************************************************/
int target_netinit(void)
{
if (!g_initialized)
{
#ifdef CONFIG_EXAMPLES_UDP_IPv6
#ifdef CONFIG_NET_ICMPv6_AUTOCONF
/* Perform ICMPv6 auto-configuration */
netlib_icmpv6_autoconfiguration(DEVNAME);
#else /* CONFIG_NET_ICMPv6_AUTOCONF */
/* Set up our fixed host address */
netlib_set_ipv6addr(DEVNAME,
(FAR const struct in6_addr *)g_ipv6_hostaddr);
/* Set up the default router address */
netlib_set_dripv6addr(DEVNAME,
(FAR const struct in6_addr *)g_ipv6_draddr);
/* Setup the subnet mask */
netlib_set_ipv6netmask(DEVNAME,
(FAR const struct in6_addr *)g_ipv6_netmask);
#endif /* CONFIG_NET_ICMPv6_AUTOCONF */
#else /* CONFIG_EXAMPLES_UDP_IPv6 */
struct in_addr addr;
/* Set up our host address */
addr.s_addr = HTONL(CONFIG_EXAMPLES_UDP_IPADDR);
netlib_set_ipv4addr(DEVNAME, &addr);
/* Set up the default router address */
addr.s_addr = HTONL(CONFIG_EXAMPLES_UDP_DRIPADDR);
netlib_set_dripv4addr(DEVNAME, &addr);
/* Setup the subnet mask */
addr.s_addr = HTONL(CONFIG_EXAMPLES_UDP_NETMASK);
netlib_set_ipv4netmask(DEVNAME, &addr);
#endif /* CONFIG_EXAMPLES_UDP_IPv6 */
/* New versions of netlib_set_ipvXaddr will not bring the network up,
* So ensure the network is really up at this point.
*/
netlib_ifup(DEVNAME);
g_initialized = true;
}
return 0;
}
#endif /* CONFIG_EXAMPLES_UDP_NETINIT */

View File

@ -1,7 +1,7 @@
/****************************************************************************
* examples/udp/udp-internal.h
* examples/udp/udp.h
*
* Copyright (C) 2007, 2008, 2015 Gregory Nutt. All rights reserved.
* Copyright (C) 2007, 2008, 2015, 2017 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@ -33,8 +33,8 @@
*
****************************************************************************/
#ifndef __EXAMPLES_UDP_INTERNAL_H
#define __EXAMPLES_UDP_INTERNAL_H
#ifndef __EXAMPLES_UDP_UDP_H
#define __EXAMPLES_UDP_UDP_H
/****************************************************************************
* Included Files
@ -75,7 +75,11 @@
* Public Function Prototypes
****************************************************************************/
extern void send_client(void);
extern void recv_server(void);
#ifdef CONFIG_EXAMPLES_UDP_NETINIT
int target_netinit(void);
#endif
#endif /* __EXAMPLES_UDP_INTERNAL_H */
void send_client(void);
void recv_server(void);
#endif /* __EXAMPLES_UDP_UDP_H */

View File

@ -1,5 +1,5 @@
/****************************************************************************
* examples/udp/udp-client.c
* examples/udp/udp_client.c
*
* Copyright (C) 2007, 2015 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
@ -51,7 +51,7 @@
#include <arpa/inet.h>
#include <netinet/in.h>
#include "udp-internal.h"
#include "udp.h"
/****************************************************************************
* Private Functions

View File

@ -1,5 +1,5 @@
/****************************************************************************
* examples/udp/udp-server.c
* examples/udp/udp_server.c
*
* Copyright (C) 2007, 2009, 2012, 2015 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
@ -50,7 +50,7 @@
#include <arpa/inet.h>
#include "udp-internal.h"
#include "udp.h"
/****************************************************************************
* Private Functions