Merge branch 'ieee802154'

This commit is contained in:
Gregory Nutt 2017-06-17 11:33:42 -06:00
commit b4000aeb61
5 changed files with 178 additions and 106 deletions

View File

@ -810,7 +810,8 @@ CONFIG_NETDEV_TELNET=y
CONFIG_TELNET_RXBUFFER_SIZE=256
CONFIG_TELNET_TXBUFFER_SIZE=256
# CONFIG_NETDEV_MULTINIC is not set
# CONFIG_ARCH_HAVE_NETDEV_STATISTICS is not set
CONFIG_ARCH_HAVE_NETDEV_STATISTICS=y
CONFIG_NETDEV_STATISTICS=y
CONFIG_NETDEV_LATEINIT=y
#
@ -1141,7 +1142,8 @@ CONFIG_MAC802154_HPWORK=y
CONFIG_IEEE802154_NTXDESC=3
CONFIG_IEEE802154_IND_PREALLOC=20
CONFIG_IEEE802154_IND_IRQRESERVE=10
# CONFIG_IEEE802154_NETDEV is not set
CONFIG_IEEE802154_NETDEV=y
CONFIG_IEEE802154_NETDEV_HPWORK=y
# CONFIG_IEEE802154_LOOPBACK is not set
#
@ -1507,50 +1509,9 @@ CONFIG_NSH_ARCHINIT=y
#
CONFIG_NSH_NETINIT=y
CONFIG_NSH_NETLOCAL=y
#
# IP Address Configuration
#
#
# Target IPv6 address
#
CONFIG_NSH_IPv6ADDR_1=0xfc00
CONFIG_NSH_IPv6ADDR_2=0x0000
CONFIG_NSH_IPv6ADDR_3=0x0000
CONFIG_NSH_IPv6ADDR_4=0x0000
CONFIG_NSH_IPv6ADDR_5=0x0000
CONFIG_NSH_IPv6ADDR_6=0x00ff
CONFIG_NSH_IPv6ADDR_7=0xfe00
CONFIG_NSH_IPv6ADDR_8=0xa9cd
#
# Router IPv6 address
#
CONFIG_NSH_DRIPv6ADDR_1=0xfc00
CONFIG_NSH_DRIPv6ADDR_2=0x0000
CONFIG_NSH_DRIPv6ADDR_3=0x0000
CONFIG_NSH_DRIPv6ADDR_4=0x0000
CONFIG_NSH_DRIPv6ADDR_5=0x0000
CONFIG_NSH_DRIPv6ADDR_6=0x00ff
CONFIG_NSH_DRIPv6ADDR_7=0xfe00
CONFIG_NSH_DRIPv6ADDR_8=0x1034
#
# IPv6 Network mask
#
CONFIG_NSH_IPv6NETMASK_1=0xffff
CONFIG_NSH_IPv6NETMASK_2=0xffff
CONFIG_NSH_IPv6NETMASK_3=0xffff
CONFIG_NSH_IPv6NETMASK_4=0xffff
CONFIG_NSH_IPv6NETMASK_5=0xffff
CONFIG_NSH_IPv6NETMASK_6=0xffff
CONFIG_NSH_IPv6NETMASK_7=0xffff
CONFIG_NSH_IPv6NETMASK_8=0x0000
CONFIG_NSH_NOMAC=y
CONFIG_NSH_SWMAC=y
CONFIG_NSH_MACADDR=0xabcd
CONFIG_NSH_PANID=0xface
CONFIG_NSH_MACADDR=0x00fade00deadbeef
CONFIG_NSH_MAX_ROUNDTRIP=20
#

View File

@ -34,6 +34,7 @@ CONFIG_BUILD_FLAT=y
# CONFIG_MOTOROLA_SREC is not set
CONFIG_RAW_BINARY=y
# CONFIG_UBOOT_UIMAGE is not set
# CONFIG_DFU_BINARY is not set
#
# Customize Header Files
@ -88,6 +89,8 @@ CONFIG_SIM_X8664_MICROSOFT=y
# CONFIG_SIM_FRAMEBUFFER is not set
# CONFIG_SIM_SPIFLASH is not set
# CONFIG_SIM_QSPIFLASH is not set
# CONFIG_ARCH_TOOLCHAIN_IAR is not set
# CONFIG_ARCH_TOOLCHAIN_GNU is not set
#
# Architecture Options
@ -108,6 +111,7 @@ CONFIG_ARCH_HAVE_MULTICPU=y
# CONFIG_ARCH_HAVE_EXTCLK is not set
CONFIG_ARCH_HAVE_POWEROFF=y
# CONFIG_ARCH_HAVE_RESET is not set
# CONFIG_ARCH_HAVE_RTC_SUBSECONDS is not set
CONFIG_ARCH_STACKDUMP=y
# CONFIG_ENDIAN_BIG is not set
# CONFIG_ARCH_IDLE_CUSTOM is not set
@ -294,15 +298,6 @@ CONFIG_DEV_NULL=y
#
# Buffering
#
#
# Common I/O Buffer Support
#
CONFIG_MM_IOB=y
CONFIG_IOB_NBUFFERS=36
CONFIG_IOB_BUFSIZE=196
CONFIG_IOB_NCHAINS=8
CONFIG_IOB_THROTTLE=8
# CONFIG_DRVR_WRITEBUFFER is not set
# CONFIG_DRVR_READAHEAD is not set
# CONFIG_RAMDISK is not set
@ -481,14 +476,21 @@ CONFIG_STANDARD_SERIAL=y
# CONFIG_USBHOST is not set
# CONFIG_USBMISC is not set
# CONFIG_HAVE_USBTRACE is not set
# CONFIG_DRIVERS_WIRELESS is not set
CONFIG_DRIVERS_WIRELESS=y
# CONFIG_WL_CC1101 is not set
# CONFIG_WL_CC3000 is not set
# CONFIG_DRIVERS_IEEE802154 is not set
# CONFIG_DRIVERS_IEEE80211 is not set
# CONFIG_WL_NRF24L01 is not set
# CONFIG_DRIVERS_CONTACTLESS is not set
#
# System Logging
#
# CONFIG_ARCH_SYSLOG is not set
CONFIG_SYSLOG_WRITE=y
# CONFIG_RAMLOG is not set
# CONFIG_SYSLOG_BUFFER is not set
# CONFIG_SYSLOG_INTBUFFER is not set
# CONFIG_SYSLOG_TIMESTAMP is not set
CONFIG_SYSLOG_SERIAL_CONSOLE=y
@ -527,6 +529,7 @@ CONFIG_NET_6LOWPAN=y
#
CONFIG_NETDEV_IOCTL=y
CONFIG_NETDEV_PHY_IOCTL=y
# CONFIG_NETDEV_WIRELESS_IOCTL is not set
#
# Internet Protocol Selection
@ -687,6 +690,15 @@ CONFIG_MM_REGIONS=1
# CONFIG_ARCH_HAVE_HEAP2 is not set
# CONFIG_GRAN is not set
#
# Common I/O Buffer Support
#
CONFIG_MM_IOB=y
CONFIG_IOB_NBUFFERS=36
CONFIG_IOB_BUFSIZE=196
CONFIG_IOB_NCHAINS=8
CONFIG_IOB_THROTTLE=8
#
# Audio Support
#
@ -697,6 +709,13 @@ CONFIG_MM_REGIONS=1
#
CONFIG_WIRELESS=y
CONFIG_WIRELESS_IEEE802154=y
CONFIG_IEEE802154_DEFAULT_EADDR=0x00fade00deadbeef
# CONFIG_IEEE802154_MAC_DEV is not set
CONFIG_MAC802154_HPWORK=y
CONFIG_IEEE802154_NTXDESC=3
CONFIG_IEEE802154_IND_PREALLOC=20
CONFIG_IEEE802154_IND_IRQRESERVE=10
# CONFIG_IEEE802154_NETDEV is not set
CONFIG_IEEE802154_LOOPBACK=y
CONFIG_IEEE802154_LOOPBACK_HPWORK=y
@ -897,6 +916,7 @@ CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_5=0x0000
CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_6=0x00ff
CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_7=0xfe00
CONFIG_EXAMPLES_NETTEST_CLIENTIPv6ADDR_8=0x1034
# CONFIG_EXAMPLES_NRF24L01TERM is not set
CONFIG_EXAMPLES_NSH=y
# CONFIG_EXAMPLES_NULL is not set
# CONFIG_EXAMPLES_NX is not set
@ -1117,52 +1137,12 @@ CONFIG_NSH_ARCHINIT=y
# Networking Configuration
#
CONFIG_NSH_NETINIT=y
# CONFIG_NSH_NETLOCAL is not set
# CONFIG_NSH_NETINIT_THREAD is not set
#
# IP Address Configuration
#
#
# Target IPv6 address
#
CONFIG_NSH_IPv6ADDR_1=0xfe80
CONFIG_NSH_IPv6ADDR_2=0x0000
CONFIG_NSH_IPv6ADDR_3=0x0000
CONFIG_NSH_IPv6ADDR_4=0x0000
CONFIG_NSH_IPv6ADDR_5=0x0000
CONFIG_NSH_IPv6ADDR_6=0x00ff
CONFIG_NSH_IPv6ADDR_7=0xfe00
CONFIG_NSH_IPv6ADDR_8=0xa9cd
#
# Router IPv6 address
#
CONFIG_NSH_DRIPv6ADDR_1=0xfe80
CONFIG_NSH_DRIPv6ADDR_2=0x0000
CONFIG_NSH_DRIPv6ADDR_3=0x0000
CONFIG_NSH_DRIPv6ADDR_4=0x0000
CONFIG_NSH_DRIPv6ADDR_5=0x0000
CONFIG_NSH_DRIPv6ADDR_6=0x00ff
CONFIG_NSH_DRIPv6ADDR_7=0xfe00
CONFIG_NSH_DRIPv6ADDR_8=0x1034
#
# IPv6 Network mask
#
CONFIG_NSH_IPv6NETMASK_1=0xffff
CONFIG_NSH_IPv6NETMASK_2=0xffff
CONFIG_NSH_IPv6NETMASK_3=0xffff
CONFIG_NSH_IPv6NETMASK_4=0xffff
CONFIG_NSH_IPv6NETMASK_5=0xffff
CONFIG_NSH_IPv6NETMASK_6=0xffff
CONFIG_NSH_IPv6NETMASK_7=0xffff
CONFIG_NSH_IPv6NETMASK_8=0x0000
# CONFIG_NSH_DNS is not set
CONFIG_NSH_NOMAC=y
CONFIG_NSH_SWMAC=y
CONFIG_NSH_MACADDR=0xabcd
CONFIG_NSH_PANID=0xface
CONFIG_NSH_MACADDR=0x00fade00deadbeef
CONFIG_NSH_MAX_ROUNDTRIP=20
# CONFIG_NSH_LOGIN is not set
# CONFIG_NSH_CONSOLE_LOGIN is not set
@ -1195,6 +1175,7 @@ CONFIG_I2CTOOL_DEFFREQ=400000
# CONFIG_SYSTEM_INSTALL is not set
# CONFIG_SYSTEM_MDIO is not set
# CONFIG_SYSTEM_NETDB is not set
# CONFIG_SYSTEM_NTPC is not set
# CONFIG_SYSTEM_RAMTEST is not set
CONFIG_READLINE_HAVE_EXTMATCH=y
CONFIG_SYSTEM_READLINE=y
@ -1211,3 +1192,12 @@ CONFIG_READLINE_ECHO=y
#
# Wireless Libraries and NSH Add-Ons
#
#
# IEEE 802.15.4 applications
#
CONFIG_IEEE802154_LIBMAC=y
# CONFIG_IEEE802154_LIBUTILS is not set
# CONFIG_IEEE802154_I8SAK is not set
# CONFIG_WIRELESS_IWPAN is not set
# CONFIG_WIRELESS_WAPI is not set

View File

@ -56,12 +56,8 @@
* Pre-processor Definitions
************************************************************************************/
/* IEEE 802.15.4 Radio Character Driver IOCTL commands ******************************/
/* None defined */
/* IEEE 802.15.4 MAC Character Driver IOCTL commands ********************************/
#define MAC802154IOC_NOTIFY_REGISTER _WLCIOC(IEEE802154_FIRST)
#define MAC802154IOC_GET_EVENT _WLCIOC(IEEE802154_FIRST+1)
#define MAC802154IOC_ENABLE_EVENTS _WLCIOC(IEEE802154_FIRST+2)

View File

@ -95,7 +95,7 @@ static void mac802154_purge_worker(FAR void *arg);
/* Watchdog Timeout Functions */
static void mac802154_timeout_expiry(int argc, uint32_t arg, ...);
static void mac802154_timeout_expiry(int argc, wdparm_t arg, ...);
static uint32_t mac802154_symtoticks(FAR struct ieee802154_privmac_s *priv,
uint32_t symbols);
@ -1271,7 +1271,8 @@ int mac802154_timerstart(FAR struct ieee802154_privmac_s *priv,
/* Start the watchdog */
wd_start(priv->timeout, (int32_t)ticks, mac802154_timeout_expiry, 1, (uint32_t)priv);
wd_start(priv->timeout, (int32_t)ticks, mac802154_timeout_expiry,
1, (wdparm_t)priv);
return OK;
}
@ -1294,7 +1295,7 @@ int mac802154_timerstart(FAR struct ieee802154_privmac_s *priv,
*
****************************************************************************/
static void mac802154_timeout_expiry(int argc, uint32_t arg, ...)
static void mac802154_timeout_expiry(int argc, wdparm_t arg, ...)
{
FAR struct ieee802154_privmac_s *priv = (FAR struct ieee802154_privmac_s *)arg;

View File

@ -116,10 +116,22 @@ struct lo_driver_s
static struct lo_driver_s g_loopback;
static uint8_t g_iobuffer[CONFIG_NET_6LOWPAN_MTU + CONFIG_NET_GUARDSIZE];
static uint8_t g_eaddr[8] =
{
0x00, 0xfa, 0xde, 0x00, 0xde, 0xad, 0xbe, 0xef
};
static uint16_t g_saddr = 0xabcd;
static uint16_t g_panid = 0xcafe;
/****************************************************************************
* Private Function Prototypes
****************************************************************************/
/* IP address conversion */
static void lo_addr2ip(FAR struct net_driver_s *dev);
/* Polling logic */
static int lo_loopback(FAR struct net_driver_s *dev);
@ -153,6 +165,48 @@ static int lo_req_data(FAR struct ieee802154_driver_s *netdev,
* Private Functions
****************************************************************************/
/****************************************************************************
* Name: lo_addr2ip
*
* Description:
* Create a MAC-based IP address from the IEEE 802.15.14 short or extended
* address of the MAC.
*
* 128 112 96 80 64 48 32 16
* ---- ---- ---- ---- ---- ---- ---- ----
* fe80 0000 0000 0000 0000 00ff fe00 xxxx 2-byte short address IEEE 48-bit MAC
* fe80 0000 0000 0000 xxxx xxxx xxxx xxxx 8-byte extended address IEEE EUI-64
*
****************************************************************************/
#ifdef CONFIG_NET_6LOWPAN_EXTENDEDADDR
static void lo_addr2ip(FAR struct net_driver_s *dev)
{
dev->d_ipv6addr[0] = HTONS(0xfe80);
dev->d_ipv6addr[1] = 0;
dev->d_ipv6addr[2] = 0;
dev->d_ipv6addr[3] = 0;
dev->d_ipv6addr[4] = (uint16_t)g_eaddr[0] << 8 | (uint16_t)g_eaddr[1];
dev->d_ipv6addr[5] = (uint16_t)g_eaddr[2] << 8 | (uint16_t)g_eaddr[3];
dev->d_ipv6addr[6] = (uint16_t)g_eaddr[4] << 8 | (uint16_t)g_eaddr[5];
dev->d_ipv6addr[6] = (uint16_t)g_eaddr[6] << 8 | (uint16_t)g_eaddr[6];
dev->d_ipv6addr[6] ^= 0x200;
}
#else
static void lo_addr2ip(FAR struct net_driver_s *dev)
{
dev->d_ipv6addr[0] = HTONS(0xfe80);
dev->d_ipv6addr[1] = 0;
dev->d_ipv6addr[2] = 0;
dev->d_ipv6addr[3] = 0;
dev->d_ipv6addr[4] = 0;
dev->d_ipv6addr[5] = HTONS(0x00ff);
dev->d_ipv6addr[0] = HTONS(0xfe00);
dev->d_ipv6addr[0] = htons(g_saddr) ^ 0x0200;
dev->d_ipv6addr[6] ^= 0x200;
}
#endif
/****************************************************************************
* Name: lo_loopback
*
@ -580,8 +634,12 @@ static int lo_rmmac(FAR struct net_driver_s *dev, FAR const uint8_t *mac)
static int lo_ioctl(FAR struct net_driver_s *dev, int cmd,
unsigned long arg)
{
#if 0
FAR struct lo_driver_s *priv = (FAR struct lo_driver_s *)dev->d_private;
FAR struct lo_driver_s *priv;
DEBUGASSERT(dev != NULL && dev->d_private != NULL);
priv = (FAR struct lo_driver_s *)dev->d_private;
UNUSED(priv);
/* Check for IOCTLs aimed at the IEEE802.15.4 MAC layer */
@ -589,9 +647,71 @@ static int lo_ioctl(FAR struct net_driver_s *dev, int cmd,
{
FAR struct ieee802154_netmac_s *netmac =
(FAR struct ieee802154_netmac_s *)arg;
DEBUGASSERT(netmac != NULL);
if (cmd == MAC802154IOC_MLME_SET_REQUEST)
{
FAR struct ieee802154_set_req_s *setreq = &netmac->u.setreq;
switch (setreq->attr)
{
case IEEE802154_ATTR_MAC_PANID:
g_panid = setreq->attrval.mac.panid;
break;
case IEEE802154_ATTR_MAC_EXTENDED_ADDR:
memcpy(setreq->attrval.mac.eaddr, g_eaddr, 8);
#ifdef CONFIG_NET_6LOWPAN_EXTENDEDADDR
lo_addr2ip(dev);
#endif
break;
case IEEE802154_ATTR_MAC_SHORT_ADDRESS:
g_saddr = setreq->attrval.mac.saddr;
#ifndef CONFIG_NET_6LOWPAN_EXTENDEDADDR
lo_addr2ip(dev);
#endif
break;
default:
return -ENOTTY;
}
return OK;
}
else if (cmd == MAC802154IOC_MLME_GET_REQUEST)
{
FAR struct ieee802154_get_req_s *getreq = &netmac->u.getreq;
switch (getreq->attr)
{
case IEEE802154_ATTR_MAC_PANID:
getreq->attrval.mac.panid = g_panid;
break;
case IEEE802154_ATTR_MAC_EXTENDED_ADDR:
memcpy(g_eaddr, getreq->attrval.mac.eaddr, 8);
break;
case IEEE802154_ATTR_MAC_SHORT_ADDRESS:
getreq->attrval.mac.saddr = g_saddr;
break;
default:
return -ENOTTY;
}
return OK;
}
else
{
/* Not a supported IEEE 802.15.4 MAC IOCTL command */
return -ENOTTY;
}
}
else
#endif
{
/* Not a valid IEEE 802.15.4 MAC IOCTL command */
@ -741,6 +861,10 @@ int ieee8021514_loopback(void)
dev->d_buf = g_iobuffer; /* Attach the IO buffer */
dev->d_private = (FAR void *)priv; /* Used to recover private state from dev */
/* Advertise our MAC-based IP address */
lo_addr2ip(dev);
/* Initialize the Network frame-related callbacks */
ieee->i_get_mhrlen = lo_get_mhrlen; /* Get MAC header length */