PktRadio: Add a loopback driver for testing on the simulator.

This commit is contained in:
Gregory Nutt
2017-07-31 07:28:42 -06:00
parent 1e24404dcc
commit 781585cfb4
10 changed files with 1119 additions and 25 deletions
+8
View File
@@ -829,6 +829,12 @@ pashello
Configures to use apps/examples/pashello.
pktradio
This configuration is identical to the 'sixlowpan configuration
described below EXCEPT that is uses the genericl packet radio
loopback network device.
sixlowpan
This configuration was intended only for unit-level testing of the
@@ -841,6 +847,8 @@ sixlowpan
packets on output to the loopback device and correctly decodes the
returned packet.
See also the 'pktradio' configuration.
touchscreen
This configuration uses the simple touchscreen test at
+106
View File
@@ -0,0 +1,106 @@
# CONFIG_MMCSD_MMCSUPPORT is not set
# CONFIG_MMCSD_SPI is not set
# CONFIG_NET_ETHERNET is not set
# CONFIG_NET_IPv4 is not set
# CONFIG_NET_UDP_CHECKSUMS is not set
# CONFIG_NSH_CMDOPT_DF_H is not set
# CONFIG_SIM_NETDEV is not set
CONFIG_ARCH_BOARD_SIM=y
CONFIG_ARCH_BOARD="sim"
CONFIG_ARCH_SIM=y
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARCH="sim"
CONFIG_AT24XX_ADDR=0x57
CONFIG_AT24XX_EXTENDED=y
CONFIG_AT24XX_EXTSIZE=160
CONFIG_AT24XX_SIZE=2
CONFIG_BOARD_LOOPSPERMSEC=51262
CONFIG_BOARDCTL_POWEROFF=y
CONFIG_BUILTIN_PROXY_STACKSIZE=2048
CONFIG_BUILTIN=y
CONFIG_DEBUG_SYMBOLS=y
CONFIG_DISABLE_POLL=y
CONFIG_DRIVERS_WIRELESS=y
CONFIG_EXAMPLES_NETTEST_SERVER_PORTNO=61616
CONFIG_EXAMPLES_NETTEST_SERVERIPv6ADDR_1=0xfe80
CONFIG_EXAMPLES_NETTEST_SERVERIPv6ADDR_6=0x00ff
CONFIG_EXAMPLES_NETTEST_SERVERIPv6ADDR_7=0xfe00
CONFIG_EXAMPLES_NETTEST_SERVERIPv6ADDR_8=0xcda9
CONFIG_EXAMPLES_NETTEST_STACKSIZE1=4096
CONFIG_EXAMPLES_NETTEST=y
CONFIG_EXAMPLES_NSH=y
CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_1=0xfe80
CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_6=0x00ff
CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_7=0xfe00
CONFIG_EXAMPLES_UDPBLASTER_HOSTIPv6_8=0x1034
CONFIG_EXAMPLES_UDPBLASTER_STACKSIZE=8192
CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_1=0xfe80
CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_6=0x00ff
CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_7=0xfe00
CONFIG_EXAMPLES_UDPBLASTER_TARGETIPv6_8=0xa9cd
CONFIG_EXAMPLES_UDPBLASTER=y
CONFIG_EXPERIMENTAL=y
CONFIG_FAT_LCNAMES=y
CONFIG_FAT_LFN=y
CONFIG_FS_FAT=y
CONFIG_FS_PROCFS=y
CONFIG_I2C_DRIVER=y
CONFIG_IDLETHREAD_STACKSIZE=4096
CONFIG_IOB_BUFSIZE=128
CONFIG_IOB_NBUFFERS=48
CONFIG_MAX_TASKS=16
CONFIG_MAX_WDOGPARMS=2
CONFIG_MMCSD_MULTIBLOCK_DISABLE=y
CONFIG_MMCSD=y
CONFIG_MTD_AT24XX=y
CONFIG_MTD_AT25=y
CONFIG_MTD_CONFIG=y
CONFIG_MTD=y
CONFIG_NET_6LOWPAN_TCP_RECVWNDO=102
CONFIG_NET_6LOWPAN=y
CONFIG_NET_BROADCAST=y
CONFIG_NET_HOSTNAME="SAMV71-XULT"
CONFIG_NET_IPv6=y
CONFIG_NET_SOCKOPTS=y
CONFIG_NET_STATISTICS=y
CONFIG_NET_TCP_WRITE_BUFFERS=y
CONFIG_NET_TCP=y
CONFIG_NET_TCPBACKLOG=y
CONFIG_NET_UDP=y
CONFIG_NET=y
CONFIG_NETDB_DNSCLIENT=y
CONFIG_NETDEV_MULTINIC=y
CONFIG_NETDEV_PHY_IOCTL=y
CONFIG_NETDEV_STATISTICS=y
CONFIG_NETDEV_TELNET=y
CONFIG_NETDEVICES=y
CONFIG_NFILE_DESCRIPTORS=8
CONFIG_NFILE_STREAMS=8
CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_FILEIOSIZE=512
CONFIG_NSH_LINELEN=64
CONFIG_NSH_NOMAC=y
CONFIG_NSH_READLINE=y
CONFIG_PKTRADIO_LOOPBACK=y
CONFIG_POSIX_SPAWN_PROXY_STACKSIZE=2048
CONFIG_PREALLOC_MQ_MSGS=4
CONFIG_PREALLOC_TIMERS=4
CONFIG_PTHREAD_STACK_DEFAULT=4096
CONFIG_RAM_SIZE=393216
CONFIG_RAM_START=0x20400000
CONFIG_RAW_BINARY=y
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_HPWORKSTACKSIZE=4096
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y
CONFIG_STANDARD_SERIAL=y
CONFIG_START_DAY=10
CONFIG_START_MONTH=3
CONFIG_START_YEAR=2014
CONFIG_TASK_SPAWN_DEFAULT_STACKSIZE=4096
CONFIG_USER_ENTRYPOINT="nsh_main"
CONFIG_USERMAIN_STACKSIZE=8192
CONFIG_WIRELESS_PKTRADIO=y
CONFIG_WIRELESS=y
+11
View File
@@ -47,6 +47,7 @@
#include <nuttx/board.h>
#include <nuttx/clock.h>
#include <nuttx/timers/oneshot.h>
#include <nuttx/wireless/pktradio.h>
#include <nuttx/wireless/ieee802154/ieee802154_loopback.h>
#include "up_internal.h"
@@ -150,5 +151,15 @@ int sim_bringup(void)
}
#endif
#ifdef CONFIG_PKTRADIO_LOOPBACK
/* Initialize and register the IEEE802.15.4 MAC network loop device */
ret = pktradio_loopback();
if (ret < 0)
{
_err("ERROR: pktradio_loopback() failed: %d\n", ret);
}
#endif
return OK;
}
+20
View File
@@ -159,5 +159,25 @@ FAR struct pktradio_metadata_s *pktradio_metadata_allocate(void);
void pktradio_metadata_free(FAR struct pktradio_metadata_s *metadata);
/****************************************************************************
* Name: pktradio_loopback
*
* Description:
* Initialize and register the Ieee802.15.4 MAC loopback network driver.
*
* Parameters:
* None
*
* Returned Value:
* OK on success; Negated errno on failure.
*
* Assumptions:
*
****************************************************************************/
#ifdef CONFIG_PKTRADIO_LOOPBACK
int pktradio_loopback(void);
#endif
#endif /* CONFIG_WIRELESS_PKTRADIO */
#endif /* __INCLUDE_NUTTX_WIRELESS_PKTRADIO_H */
+4 -4
View File
@@ -51,7 +51,7 @@
****************************************************************************/
/******************************************************************************
* Name: neibhbor_dump_address
* Name: neighbor_dump_address
*
* Description:
* Dump a data buffer to the SYSLOG.
@@ -65,7 +65,7 @@
*
******************************************************************************/
static void neibhbor_dump_address(FAR const uint8_t *buffer, unsigned int buflen)
static void neighbor_dump_address(FAR const uint8_t *buffer, unsigned int buflen)
{
char outbuf[16*3 + 9]; /* 6-byte header header + 16 hex bytes +
* 2 space separator + NUL termination */
@@ -143,7 +143,7 @@ void neighbor_dumpentry(FAR const char *msg,
if (neighbor->ne_addr.u.na_lltype == NET_LL_ETHERNET)
#endif
{
neibhbor_dump_address(neighbor->ne_addr.u.na_ethernet.ether_addr_octet,
neighbor_dump_address(neighbor->ne_addr.u.na_ethernet.ether_addr_octet,
neighbor->ne_addr.na_llsize);
}
#endif
@@ -153,7 +153,7 @@ void neighbor_dumpentry(FAR const char *msg,
else
#endif
{
neibhbor_dump_address(neighbor->ne_addr.u.na_sixlowpan.nm_addr,
neighbor_dump_address(neighbor->ne_addr.u.na_sixlowpan.nm_addr,
neighbor->ne_addr.na_llsize);
}
#endif /* CONFIG_NET_6LOWPAN */
+15 -17
View File
@@ -106,7 +106,7 @@ struct lo_driver_s
/* This holds the information visible to the NuttX network */
struct sixlowpan_driver_s lo_ieee; /* Interface understood by the network */
struct sixlowpan_driver_s lo_radio; /* Interface understood by the network */
};
/****************************************************************************
@@ -153,12 +153,10 @@ static int lo_ifup(FAR struct net_driver_s *dev);
static int lo_ifdown(FAR struct net_driver_s *dev);
static void lo_txavail_work(FAR void *arg);
static int lo_txavail(FAR struct net_driver_s *dev);
#if defined(CONFIG_NET_IGMP) || defined(CONFIG_NET_ICMPv6)
static int lo_addmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac);
#ifdef CONFIG_NET_IGMP
static int lo_addmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac);
static int lo_rmmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac);
#endif
#endif
#ifdef CONFIG_NETDEV_IOCTL
static int lo_ioctl(FAR struct net_driver_s *dev, int cmd,
unsigned long arg);
@@ -323,7 +321,7 @@ static int lo_loopback(FAR struct net_driver_s *dev)
/* Increment statistics */
NETDEV_RXPACKETS(&priv->lo_ieee.r_dev);
NETDEV_RXPACKETS(&priv->lo_radio.r_dev);
/* Remove the IOB from the queue */
@@ -343,17 +341,17 @@ static int lo_loopback(FAR struct net_driver_s *dev)
ninfo("Send frame %p to the network: Offset=%u Length=%u\n",
iob, iob->io_offset, iob->io_len);
ret = sixlowpan_input(&priv->lo_ieee, iob, (FAR void *)&ind);
ret = sixlowpan_input(&priv->lo_radio, iob, (FAR void *)&ind);
/* Increment statistics */
NETDEV_TXPACKETS(&priv->lo_ieee.r_dev);
NETDEV_TXPACKETS(&priv->lo_radio.r_dev);
if (ret < 0)
{
nerr("ERROR: sixlowpan_input returned %d\n", ret);
NETDEV_TXERRORS(&priv->lo_ieee.r_dev);
NETDEV_ERRORS(&priv->lo_ieee.r_dev);
NETDEV_TXERRORS(&priv->lo_radio.r_dev);
NETDEV_ERRORS(&priv->lo_radio.r_dev);
}
}
@@ -384,7 +382,7 @@ static void lo_loopback_work(FAR void *arg)
/* Perform the loopback */
net_lock();
(void)lo_loopback(&priv->lo_ieee.r_dev);
(void)lo_loopback(&priv->lo_radio.r_dev);
net_unlock();
}
@@ -412,7 +410,7 @@ static void lo_poll_work(FAR void *arg)
/* Perform the poll */
net_lock();
(void)devif_timer(&priv->lo_ieee.r_dev, lo_loopback);
(void)devif_timer(&priv->lo_radio.r_dev, lo_loopback);
/* Setup the watchdog poll timer again */
@@ -566,7 +564,7 @@ static void lo_txavail_work(FAR void *arg)
{
/* If so, then poll the network for new XMIT data */
(void)devif_poll(&priv->lo_ieee.r_dev, lo_loopback);
(void)devif_poll(&priv->lo_radio.r_dev, lo_loopback);
}
net_unlock();
@@ -636,7 +634,7 @@ static int lo_txavail(FAR struct net_driver_s *dev)
*
****************************************************************************/
#if defined(CONFIG_NET_IGMP) || defined(CONFIG_NET_ICMPv6)
#ifdef CONFIG_NET_IGMP
static int lo_addmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac)
{
#ifdef CONFIG_NET_6LOWPAN_EXTENDEDADDR
@@ -854,7 +852,7 @@ static int lo_req_data(FAR struct sixlowpan_driver_s *netdev,
{
/* Increment statistics */
NETDEV_RXPACKETS(&priv->lo_ieee.r_dev);
NETDEV_RXPACKETS(&priv->lo_radio.r_dev);
/* Remove the IOB from the queue */
@@ -953,7 +951,7 @@ int ieee8021514_loopback(void)
memset(priv, 0, sizeof(struct lo_driver_s));
radio = &priv->lo_ieee;
radio = &priv->lo_radio;
dev = &radio->r_dev;
dev->d_ifup = lo_ifup; /* I/F up (new IP address) callback */
dev->d_ifdown = lo_ifdown; /* I/F down callback */
@@ -987,12 +985,12 @@ int ieee8021514_loopback(void)
* performed.
*/
(void)netdev_register(&priv->lo_ieee.r_dev, NET_LL_IEEE802154);
(void)netdev_register(&priv->lo_radio.r_dev, NET_LL_IEEE802154);
/* Put the network in the UP state */
dev->d_flags = IFF_UP;
return lo_ifup(&priv->lo_ieee.r_dev);
return lo_ifup(&priv->lo_radio.r_dev);
}
#endif /* CONFIG_IEEE802154_LOOPBACK */
+2 -4
View File
@@ -172,14 +172,12 @@ static int macnet_ifdown(FAR struct net_driver_s *dev);
static void macnet_txavail_work(FAR void *arg);
static int macnet_txavail(FAR struct net_driver_s *dev);
#if defined(CONFIG_NET_IGMP) || defined(CONFIG_NET_ICMPv6)
#ifdef CONFIG_NET_IGMP
static int macnet_addmac(FAR struct net_driver_s *dev,
FAR const uint8_t *mac);
#ifdef CONFIG_NET_IGMP
static int macnet_rmmac(FAR struct net_driver_s *dev,
FAR const uint8_t *mac);
#endif
#endif
#ifdef CONFIG_NETDEV_IOCTL
static int macnet_ioctl(FAR struct net_driver_s *dev, int cmd,
unsigned long arg);
@@ -742,7 +740,7 @@ static int macnet_txavail(FAR struct net_driver_s *dev)
*
****************************************************************************/
#if defined(CONFIG_NET_IGMP) || defined(CONFIG_NET_ICMPv6)
#ifdef CONFIG_NET_IGMP
static int macnet_addmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac)
{
FAR struct macnet_driver_s *priv = (FAR struct macnet_driver_s *)dev->d_private;
+8
View File
@@ -32,4 +32,12 @@ config PKTRADIO_NRXMETA
This specifies the total number of preallocated meta data structures
must be allocated with each incoming packet.
config PKTRADIO_LOOPBACK
bool "PktRadio 6LoWPAN Loopback"
default n
depends on NET_6LOWPAN && NET_IPv6
select ARCH_HAVE_NETDEV_STATISTICS
---help---
Add support for the PktRadio 6LoWPAN Loopback test device.
endif # WIRELESS_PKTRADIO
+4
View File
@@ -39,6 +39,10 @@ ifeq ($(CONFIG_WIRELESS_PKTRADIO),y)
CSRCS += pktradio_metadata.c
ifeq ($(CONFIG_PKTRADIO_LOOPBACK),y)
CSRCS += pktradio_loopback.c
endif
DEPPATH += --dep-path pktradio
VPATH += :pktradio
CFLAGS += ${shell $(INCDIR) $(INCDIROPT) "$(CC)" $(TOPDIR)$(DELIM)wireless$(DELIM)pktradio}
File diff suppressed because it is too large Load Diff