Merge branch 'ieee802154'

This commit is contained in:
Gregory Nutt 2017-06-19 13:36:04 -06:00
commit d8759ffe51
15 changed files with 609 additions and 147 deletions

View File

@ -12,9 +12,79 @@ config EXAMPLES_UDP
if EXAMPLES_UDP
config EXAMPLES_UDP_SERVER
bool "Target is the server"
config EXAMPLES_UDP_SERVER1
bool "Target1 is the server"
default n
---help---
By default Target1 is the client and the host PC is the server
config EXAMPLES_UDP_PROGNAME1
string "Target1 program name"
default "udpserver" if EXAMPLES_UDP_SERVER1
default "udpclient" if !EXAMPLES_UDP_SERVER1
depends on BUILD_KERNEL
---help---
This is the name of the Target1 program that will be use when the
NSH ELF program is installed.
config EXAMPLES_UDP_PRIORITY1
int "Target1 task priority"
default 100
config EXAMPLES_UDP_STACKSIZE1
int "Target1 stack size"
default 2048
config EXAMPLES_UDP_TARGET2
bool "Second endpoint is a target"
default n
---help---
By default, the host PC is configured as the second endpoint of the
UDP test. If this option is selected, then the second endpoint
will be built into the FLASH image as well. This means that you
can use two target boards to run the test with not host PC
involvement.
if EXAMPLES_UDP_TARGET2
config EXAMPLES_UDP_PROGNAME2
string "Target2 program name"
default "udpserver" if !EXAMPLES_UDP_SERVER2
default "udpclient" if EXAMPLES_UDP_SERVER2
depends on BUILD_KERNEL
---help---
This is the name of the Target2 program that will be use when the
NSH ELF program is installed.
config EXAMPLES_UDP_PRIORITY2
int "Target2 task priority"
default 100
config EXAMPLES_UDP_STACKSIZE2
int "Target2 stack size"
default 2048
endif # EXAMPLES_UDP_TARGET2
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"
@ -35,6 +105,8 @@ if EXAMPLES_UDP_IPv4
comment "IPv4 addresses"
if EXAMPLES_UDP_NETINIT
config EXAMPLES_UDP_IPADDR
hex "Target IP address"
default 0x0a000002
@ -47,16 +119,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
default 0x0a000001 if !EXAMPLES_UDP_SERVER1
default 0x0a000002 if EXAMPLES_UDP_SERVER1
endif # EXAMPLES_UDP_IPv4
if EXAMPLES_UDP_IPv6
if !NET_ICMPv6_AUTOCONF
if !NET_ICMPv6_AUTOCONF && EXAMPLES_UDP_NETINIT
comment "Target IPv6 address"
@ -306,7 +379,7 @@ config EXAMPLES_UDP_IPv6NETMASK_8
endif # NET_ICMPv6_AUTOCONF
comment "Server IPv6 address"
comment "Default Server IPv6 address"
config EXAMPLES_UDP_SERVERIPv6ADDR_1
hex "[0]"
@ -422,8 +495,8 @@ config EXAMPLES_UDP_SERVERIPv6ADDR_7
config EXAMPLES_UDP_SERVERIPv6ADDR_8
hex "[7]"
default 0x0001 if !EXAMPLES_UDP_SERVER
default 0x0002 if EXAMPLES_UDP_SERVER
default 0x0001 if !EXAMPLES_UDP_SERVER1
default 0x0002 if EXAMPLES_UDP_SERVER1
range 0x0 0xffff
---help---
IP address of the server. If the target is the server, then

View File

@ -39,25 +39,94 @@ include $(APPDIR)/Make.defs
# UDP Test
TARG_ASRCS =
TARG_CSRCS =
ifeq ($(CONFIG_EXAMPLES_UDP_SERVER),y)
TARG_CSRCS += udp-server.c
else
TARG_CSRCS += udp-client.c
TARGCMN_CSRCS = udp_cmdline.c
ifeq ($(CONFIG_EXAMPLES_UDP_NETINIT),y)
TARGCMN_CSRCS += target_netinit.c
endif
TARG_MAINSRC = target.c
TARGCMN_COBJS = $(TARGCMN_CSRCS:.c=$(OBJEXT))
TARG_AOBJS = $(TARG_ASRCS:.S=$(OBJEXT))
TARG_COBJS = $(TARG_CSRCS:.c=$(OBJEXT))
TARG_MAINOBJ = $(TARG_MAINSRC:.c=$(OBJEXT))
# Target 1
TARG_SRCS = $(TARG_ASRCS) $(TARG_CSRCS) $(TARG_MAINSRC)
TARG_OBJS = $(TARG_AOBJS) $(TARG_COBJS)
TARG1_CRCS =
ifeq ($(CONFIG_EXAMPLES_UDP_SERVER1),y)
TARG1_CRCS += udp_server.c
else
TARG1_CRCS += udp_client.c
endif
TARG1_MAINSRC = target1.c
TARG1_COBJS = $(TARG1_CRCS:.c=$(OBJEXT))
TARG1_MAINOBJ = $(TARG1_MAINSRC:.c=$(OBJEXT))
ifeq ($(CONFIG_EXAMPLES_UDP_SERVER1),y)
CONFIG_EXAMPLES_UDP_PROGNAME1 ?= udpserver
APPNAME1 = udpserver
else
CONFIG_EXAMPLES_UDP_PROGNAME1 ?= udpclient
APPNAME1 = udpclient
endif
CONFIG_EXAMPLES_UDP_PRIORITY1 ?= 100
CONFIG_EXAMPLES_UDP_STACKSIZE1 ?= 2048
PROGNAME1 = $(CONFIG_EXAMPLES_UDP_PROGNAME1)
PRIORITY1 = $(CONFIG_EXAMPLES_UDP_PRIORITY1)
STACKSIZE1 = $(CONFIG_EXAMPLES_UDP_STACKSIZE1)
# Target 2
ifeq ($(CONFIG_EXAMPLES_UDP_TARGET2),y)
TARG2_CRCS =
ifeq ($(CONFIG_EXAMPLES_UDP_SERVER1),y)
TARG2_CRCS += udp_client.c
else
TARG2_CRCS += udp_server.c
endif
TARG2_MAINSRC = target2.c
TARG2_COBJS = $(TARG2_CRCS:.c=$(OBJEXT))
TARG2_MAINOBJ = $(TARG2_MAINSRC:.c=$(OBJEXT))
ifeq ($(CONFIG_EXAMPLES_UDP_SERVER1),y)
CONFIG_EXAMPLES_UDP_PROGNAME2 ?= udpclient
APPNAME2 = udpclient
else
CONFIG_EXAMPLES_UDP_PROGNAME2 ?= udpserver
APPNAME2 = udpserver
endif
CONFIG_EXAMPLES_UDP_PRIORITY2 ?= 100
CONFIG_EXAMPLES_UDP_STACKSIZE2 ?= 2048
PROGNAME2 = $(CONFIG_EXAMPLES_UDP_PROGNAME2)
PRIORITY2 = $(CONFIG_EXAMPLES_UDP_PRIORITY2)
STACKSIZE2 = $(CONFIG_EXAMPLES_UDP_STACKSIZE2)
endif
TARG_SRCS = $(TARG1_CRCS) $(TARG1_MAINSRC) $(TARG2_CRCS) $(TARG2_MAINSRC) $(TARGCMN_CSRCS)
TARG_OBJS = $(TARG1_COBJS) $(TARG2_COBJS) $(TARGCMN_COBJS)
ifneq ($(CONFIG_BUILD_KERNEL),y)
TARG_OBJS += $(TARG_MAINOBJ)
TARG_OBJS += $(TARG1_MAINOBJ) $(TARG2_MAINOBJ)
endif
# Host
ifneq ($(CONFIG_EXAMPLES_UDP_TARGET2),y)
HOSTCFLAGS += -DEXAMPLES_UDP_HOST=1
HOSTOBJSEXT ?= o1
HOST_SRCS = host.c udp_cmdline.c
ifeq ($(CONFIG_EXAMPLES_UDP_SERVER1),y)
HOST_SRCS += udp_client.c
else
HOST_SRCS += udp_server.c
endif
HOST_OBJS = $(HOST_SRCS:.c=.$(HOSTOBJSEXT))
HOST_BIN = host$(EXEEXT)
endif
ifeq ($(CONFIG_WINDOWS_NATIVE),y)
@ -70,27 +139,19 @@ else
endif
endif
HOSTCFLAGS += -DEXAMPLES_UDP_HOST=1
HOST_SRCS = host.c
ifeq ($(CONFIG_EXAMPLES_UDP_SERVER),y)
HOST_SRCS += udp-client.c
ifeq ($(CONFIG_EXAMPLES_UDP_TARGET2),y)
MAINNAME1 = udp1_main
MAINNAME2 = udp2_main
else
HOST_SRCS += udp-server.c
MAINNAME1 = udp_main
endif
HOST_OBJS = $(HOST_SRCS:.c=.o)
HOST_BIN = host
ifeq ($(WINTOOL),y)
INSTALL_DIR = "${shell cygpath -w $(BIN_DIR)}"
else
INSTALL_DIR = $(BIN_DIR)
endif
CONFIG_XYZ_PROGNAME ?= udp$(EXEEXT)
PROGNAME = $(CONFIG_XYZ_PROGNAME)
ROOTDEPPATH = --dep-path .
# Common build
@ -98,45 +159,61 @@ ROOTDEPPATH = --dep-path .
VPATH =
all: .built
.PHONY: clean depend distclean
.PHONY: clean depend distclean preconfig
$(TARG_AOBJS): %$(OBJEXT): %.S
$(call ASSEMBLE, $<, $@)
$(TARG_COBJS) $(TARG_MAINOBJ): %$(OBJEXT): %.c
$(TARG1_COBJS) $(TARG1_MAINOBJ)$(TARG2_COBJS) $(TARG2_MAINOBJ) $(TARGCMN_COBJS): %$(OBJEXT): %.c
$(call COMPILE, $<, $@)
$(TARG_BIN): $(TARG_OBJS) $(HOST_BIN)
$(call ARCHIVE, $@, $(TARG_OBJS))
$(HOST_OBJS): %.o: %.c
ifneq ($(CONFIG_EXAMPLES_UDP_TARGET2),y)
$(HOST_OBJS): %.$(HOSTOBJSEXT): %.c
@echo "CC: $<"
$(Q) $(HOSTCC) -c $(HOSTCFLAGS) $< -o $@
endif
config.h: $(TOPDIR)/include/nuttx/config.h
@echo "CP: $<"
$(Q) cp $< $@
ifneq ($(CONFIG_EXAMPLES_UDP_TARGET2),y)
$(HOST_BIN): config.h $(HOST_OBJS)
$(Q) $(HOSTCC) $(HOSTLDFLAGS) $(HOST_OBJS) -o $@
endif
.built: config.h $(TARG_BIN) $(HOST_BIN)
$(Q) touch .built
ifeq ($(CONFIG_BUILD_KERNEL),y)
$(BIN_DIR)$(DELIM)$(PROGNAME): $(OBJS) $(TARG_MAINOBJ)
@echo "LD: $(PROGNAME)"
$(Q) $(LD) $(LDELFFLAGS) $(LDLIBPATH) -o $(INSTALL_DIR)$(DELIM)$(PROGNAME) $(ARCHCRT0OBJ) $(TARG_MAINOBJ) $(LDLIBS)
$(Q) $(NM) -u $(INSTALL_DIR)$(DELIM)$(PROGNAME)
$(BIN_DIR)$(DELIM)$(PROGNAME1): $(OBJS) $(TARG1_MAINOBJ)
@echo "LD: $(PROGNAME1)"
$(Q) $(LD) $(LDELFFLAGS) $(LDLIBPATH) -o $(INSTALL_DIR)$(DELIM)$(PROGNAME1) $(ARCHCRT0OBJ) $(TARG1_MAINOBJ) $(LDLIBS)
$(Q) $(NM) -u $(INSTALL_DIR)$(DELIM)$(PROGNAME1)
install: $(BIN_DIR)$(DELIM)$(PROGNAME)
install: $(BIN_DIR)$(DELIM)$(PROGNAME1)
else
install:
endif
ifeq ($(CONFIG_NSH_BUILTIN_APPS),y)
$(BUILTIN_REGISTRY)$(DELIM)$(APPNAME1)_main.bdat: $(DEPCONFIG) Makefile
$(call REGISTER,$(APPNAME1),$(PRIORITY1),$(STACKSIZE1),$(MAINNAME1))
ifeq ($(CONFIG_EXAMPLES_UDP_TARGET2),y)
$(BUILTIN_REGISTRY)$(DELIM)$(APPNAME2)_main.bdat: $(DEPCONFIG) Makefile
$(call REGISTER,$(APPNAME2),$(PRIORITY2),$(STACKSIZE2),$(MAINNAME2))
context: $(BUILTIN_REGISTRY)$(DELIM)$(APPNAME1)_main.bdat \
$(BUILTIN_REGISTRY)$(DELIM)$(APPNAME2)_main.bdat
else
context: $(BUILTIN_REGISTRY)$(DELIM)$(APPNAME1)_main.bdat
endif
else
context:
endif
.depend: Makefile config.h $(TARG_SRCS)
@$(MKDEP) $(ROOTDEPPATH) "$(CC)" -- $(CFLAGS) -- $(TARG_SRCS) >Make.dep
@ -146,8 +223,11 @@ depend: .depend
clean:
$(call DELFILE, .built)
$(call DELFILE, $(TARG_BIN))
#$(call DELFILE, $(TARG_BIN))
ifneq ($(CONFIG_EXAMPLES_UDP_TARGET2),y)
$(call DELFILE, $(HOST_BIN))
$(call DELFILE, *.$(HOSTOBJSEXT))
endif
$(call DELFILE, *.dSYM)
$(call DELFILE, config.h)
$(call CLEAN)
@ -156,7 +236,6 @@ distclean: clean
$(call DELFILE, Make.dep)
$(call DELFILE, .depend)
-include Make.dep
.PHONY: preconfig
preconfig:
-include Make.dep

View File

@ -38,7 +38,7 @@
****************************************************************************/
#include "config.h"
#include "udp-internal.h"
#include "udp.h"
/****************************************************************************
* Private Data
@ -54,7 +54,13 @@
int main(int argc, char **argv, char **envp)
{
#ifdef CONFIG_EXAMPLES_UDP_SERVER
/* Parse any command line options */
parse_cmdline(argc, argv);
/* Run the server or client, depending upon how target1 was configured */
#ifdef CONFIG_EXAMPLES_UDP_SERVER1
send_client();
#else
recv_server();

View File

@ -1,7 +1,7 @@
/****************************************************************************
* examples/udp/udp-internal.h
* examples/udp/target1.c
*
* Copyright (C) 2007, 2008, 2015 Gregory Nutt. All rights reserved.
* 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
@ -33,49 +33,46 @@
*
****************************************************************************/
#ifndef __EXAMPLES_UDP_INTERNAL_H
#define __EXAMPLES_UDP_INTERNAL_H
/****************************************************************************
* Included Files
****************************************************************************/
#ifdef EXAMPLES_UDP_HOST
#else
# include <debug.h>
#endif
#include <arpa/inet.h>
#include "config.h"
#include "udp.h"
/****************************************************************************
* Pre-processor Definitions
* Public Functions
****************************************************************************/
#ifdef EXAMPLES_UDP_HOST
/* HTONS/L macros are unique to uIP */
# define HTONS(a) htons(a)
# define HTONL(a) htonl(a)
#endif
#ifdef CONFIG_EXAMPLES_UDP_IPv6
# define AF_INETX AF_INET6
# define PF_INETX PF_INET6
#else
# define AF_INETX AF_INET
# define PF_INETX PF_INET
#endif
#define PORTNO 5471
#define ASCIISIZE (0x7f - 0x20)
#define SENDSIZE (ASCIISIZE+1)
/****************************************************************************
* Public Function Prototypes
* udp1_main
****************************************************************************/
extern void send_client(void);
extern void recv_server(void);
#if defined(CONFIG_BUILD_KERNEL)
int main(int argc, FAR char *argv[])
#elif defined(CONFIG_EXAMPLES_UDP_TARGET2)
int udp1_main(int argc, char *argv[])
#else
int udp_main(int argc, char *argv[])
#endif
{
/* Parse any command line options */
#endif /* __EXAMPLES_UDP_INTERNAL_H */
parse_cmdline(argc, argv);
#ifdef CONFIG_EXAMPLES_UDP_NETINIT
/* Initialize the network */
(void)target_netinit();
#endif
/* Run the server or client, depending upon how we are configured */
#ifdef CONFIG_EXAMPLES_UDP_SERVER1
recv_server();
#else
send_client();
#endif
return 0;
}

76
examples/udp/target2.c Normal file
View File

@ -0,0 +1,76 @@
/****************************************************************************
* examples/udp/target2.c
*
* Copyright (C) 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 "udp.h"
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* udp2_main
****************************************************************************/
#if defined(CONFIG_BUILD_KERNEL)
int main(int argc, FAR char *argv[])
#else
int udp2_main(int argc, char *argv[])
#endif
{
/* Parse any command line options */
parse_cmdline(argc, argv);
#ifdef CONFIG_EXAMPLES_UDP_NETINIT
/* Initialize the network */
(void)target_netinit();
#endif
/* Run the server or client, depending upon how target1 was configured */
#ifdef CONFIG_EXAMPLES_UDP_SERVER1
send_client();
#else
recv_server();
#endif
return 0;
}

View File

@ -1,7 +1,7 @@
/****************************************************************************
* examples/udp/target.c
* examples/udp/target_netinit.c
*
* Copyright (C) 2007, 2011, 2015 Gregory Nutt. All rights reserved.
* 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
@ -39,6 +39,7 @@
#include "config.h"
#include <stdbool.h>
#include <stdio.h>
#include <debug.h>
@ -47,12 +48,20 @@
#include "netutils/netlib.h"
#include "udp-internal.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
****************************************************************************/
@ -101,76 +110,75 @@ static const uint16_t g_ipv6_netmask[8] =
};
#endif /* CONFIG_EXAMPLES_UDP_IPv6 && !CONFIG_NET_ICMPv6_AUTOCONF */
static bool g_initialized;
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* udp_main
* target_netinit
****************************************************************************/
#ifdef CONFIG_BUILD_KERNEL
int main(int argc, FAR char *argv[])
#else
int udp_main(int argc, char *argv[])
#endif
int target_netinit(void)
{
if (!g_initialized)
{
#ifdef CONFIG_EXAMPLES_UDP_IPv6
#ifdef CONFIG_NET_ICMPv6_AUTOCONF
/* Perform ICMPv6 auto-configuration */
/* Perform ICMPv6 auto-configuration */
netlib_icmpv6_autoconfiguration("eth0");
netlib_icmpv6_autoconfiguration(DEVNAME);
#else /* CONFIG_NET_ICMPv6_AUTOCONF */
/* Set up our fixed host address */
/* Set up our fixed host address */
netlib_set_ipv6addr("eth0",
(FAR const struct in6_addr *)g_ipv6_hostaddr);
netlib_set_ipv6addr(DEVNAME,
(FAR const struct in6_addr *)g_ipv6_hostaddr);
/* Set up the default router address */
/* Set up the default router address */
netlib_set_dripv6addr("eth0",
(FAR const struct in6_addr *)g_ipv6_draddr);
netlib_set_dripv6addr(DEVNAME,
(FAR const struct in6_addr *)g_ipv6_draddr);
/* Setup the subnet mask */
/* Setup the subnet mask */
netlib_set_ipv6netmask("eth0",
(FAR const struct in6_addr *)g_ipv6_netmask);
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;
struct in_addr addr;
/* Set up our host address */
/* Set up our host address */
addr.s_addr = HTONL(CONFIG_EXAMPLES_UDP_IPADDR);
netlib_set_ipv4addr("eth0", &addr);
addr.s_addr = HTONL(CONFIG_EXAMPLES_UDP_IPADDR);
netlib_set_ipv4addr(DEVNAME, &addr);
/* Set up the default router address */
/* Set up the default router address */
addr.s_addr = HTONL(CONFIG_EXAMPLES_UDP_DRIPADDR);
netlib_set_dripv4addr("eth0", &addr);
addr.s_addr = HTONL(CONFIG_EXAMPLES_UDP_DRIPADDR);
netlib_set_dripv4addr(DEVNAME, &addr);
/* Setup the subnet mask */
/* Setup the subnet mask */
addr.s_addr = HTONL(CONFIG_EXAMPLES_UDP_NETMASK);
netlib_set_ipv4netmask("eth0", &addr);
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.
*/
/* 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");
#ifdef CONFIG_EXAMPLES_UDP_SERVER
recv_server();
#else
send_client();
#endif
netlib_ifup(DEVNAME);
g_initialized = true;
}
return 0;
}
#endif /* CONFIG_EXAMPLES_UDP_NETINIT */

113
examples/udp/udp.h Normal file
View File

@ -0,0 +1,113 @@
/****************************************************************************
* examples/udp/udp.h
*
* 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
* 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.
*
****************************************************************************/
#ifndef __EXAMPLES_UDP_UDP_H
#define __EXAMPLES_UDP_UDP_H
/****************************************************************************
* Included Files
****************************************************************************/
#ifdef EXAMPLES_UDP_HOST
#else
# include <debug.h>
#endif
#include <arpa/inet.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#ifdef EXAMPLES_UDP_HOST
/* HTONS/L macros are unique to uIP-based networks */
# ifdef CONFIG_ENDIAN_BIG
# define HTONS(ns) (ns)
# define HTONL(nl) (nl)
# else
# define HTONS(ns) \
(unsigned short) \
(((((unsigned short)(ns)) & 0x00ff) << 8) | \
((((unsigned short)(ns)) >> 8) & 0x00ff))
# define HTONL(nl) \
(unsigned long) \
(((((unsigned long)(nl)) & 0x000000ffUL) << 24) | \
((((unsigned long)(nl)) & 0x0000ff00UL) << 8) | \
((((unsigned long)(nl)) & 0x00ff0000UL) >> 8) | \
((((unsigned long)(nl)) & 0xff000000UL) >> 24))
# endif
# define NTOHS(hs) HTONS(hs)
# define NTOHL(hl) HTONL(hl)
# define FAR
#endif
#ifdef CONFIG_EXAMPLES_UDP_IPv6
# define AF_INETX AF_INET6
# define PF_INETX PF_INET6
#else
# define AF_INETX AF_INET
# define PF_INETX PF_INET
#endif
#define PORTNO 5471
#define ASCIISIZE (0x7f - 0x20)
#define SENDSIZE (ASCIISIZE+1)
/****************************************************************************
* Public Data
****************************************************************************/
#ifdef CONFIG_EXAMPLES_UDP_IPv6
uint16_t g_server_ipv6[8];
#else
uint32_t g_server_ipv4;
#endif
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
#ifdef CONFIG_EXAMPLES_UDP_NETINIT
int target_netinit(void);
#endif
void parse_cmdline(int argc, char **argv);
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
@ -112,22 +112,12 @@ void send_client(void)
#ifdef CONFIG_EXAMPLES_UDP_IPv6
server.sin6_family = AF_INET6;
server.sin6_port = HTONS(PORTNO);
server.sin6_addr.s6_addr16[0] = HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_1);
server.sin6_addr.s6_addr16[1] = HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_2);
server.sin6_addr.s6_addr16[2] = HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_3);
server.sin6_addr.s6_addr16[3] = HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_4);
server.sin6_addr.s6_addr16[4] = HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_5);
server.sin6_addr.s6_addr16[5] = HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_6);
server.sin6_addr.s6_addr16[6] = HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_7);
server.sin6_addr.s6_addr16[7] = HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_8);
memcpy(server.sin6_addr.s6_addr16, g_server_ipv6, 8 * sizeof(uint16_t));
addrlen = sizeof(struct sockaddr_in6);
#else
server.sin_family = AF_INET;
server.sin_port = HTONS(PORTNO);
server.sin_addr.s_addr = HTONL(CONFIG_EXAMPLES_UDP_SERVERIP);
server.sin_addr.s_addr = (in_addr_t)g_server_ipv4;
addrlen = sizeof(struct sockaddr_in);
#endif

118
examples/udp/udp_cmdline.c Normal file
View File

@ -0,0 +1,118 @@
/****************************************************************************
* examples/udp/udp_cmdline.c
*
* Copyright (C) 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 <stdlib.h>
#include <stdio.h>
#include <arpa/inet.h>
#include "udp.h"
/****************************************************************************
* Public Data
****************************************************************************/
#ifdef CONFIG_EXAMPLES_UDP_IPv6
uint16_t g_server_ipv6[8] =
{
HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_1),
HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_2),
HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_3),
HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_4),
HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_5),
HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_6),
HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_7),
HTONS(CONFIG_EXAMPLES_UDP_SERVERIPv6ADDR_8)
};
#else
uint32_t g_server_ipv4 = HTONL(CONFIG_EXAMPLES_UDP_SERVERIP);
#endif
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* show_usage
****************************************************************************/
static void show_usage(FAR const char *progname)
{
fprintf(stderr, "USAGE: %s [<server-addr>]\n", progname);
exit(1);
}
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* parse_cmdline
****************************************************************************/
void parse_cmdline(int argc, char **argv)
{
/* Currently only a single command line option is supported: The server
* IP address.
*/
if (argc == 2)
{
int ret;
/* Convert the <server-addr> argument into a binary address */
#ifdef CONFIG_EXAMPLES_UDP_IPv6
ret = inet_pton(AF_INET6, argv[1], g_server_ipv6);
#else
ret = inet_pton(AF_INET, argv[1], &g_server_ipv4);
#endif
if (ret < 0)
{
fprintf(stderr, "ERROR: <server-addr> is invalid\n");
show_usage(argv[0]);
}
}
else if (argc != 1)
{
fprintf(stderr, "ERROR: Too many arguments\n");
show_usage(argv[0]);
}
}

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

View File

@ -279,7 +279,7 @@ static void nsh_set_macaddr(void)
#if defined(CONFIG_NET_ETHERNET)
uint8_t mac[IFHWADDRLEN];
#elif defined(CONFIG_NET_6LOWPAN)
uint8_t eaddr[NET_6LOWPAN_ADDRSIZE];
uint8_t eaddr[8];
#endif
/* Many embedded network interfaces must have a software assigned MAC */

View File

@ -42,6 +42,7 @@
#include <sys/ioctl.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <nuttx/wireless/ieee802154/ieee802154_mac.h>
@ -61,6 +62,5 @@ int ieee802154_getpanid(int fd, FAR uint8_t *panid)
ret = ieee802154_get_req(fd, &req);
IEEE802154_PANIDCOPY(panid, req.attrval.mac.panid);
return ret;
}

View File

@ -42,6 +42,7 @@
#include <sys/ioctl.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <nuttx/wireless/ieee802154/ieee802154_mac.h>
@ -61,6 +62,5 @@ int ieee802154_getsaddr(int fd, FAR uint8_t *saddr)
ret = ieee802154_get_req(fd, &req);
IEEE802154_SADDRCOPY(saddr, req.attrval.mac.saddr);
return ret;
}

View File

@ -43,6 +43,7 @@
#include <sys/ioctl.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <nuttx/wireless/ieee802154/ieee802154_mac.h>

View File

@ -43,6 +43,7 @@
#include <sys/ioctl.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <nuttx/wireless/ieee802154/ieee802154_mac.h>