mirror of
https://github.com/apache/nuttx.git
synced 2026-05-31 14:27:37 +08:00
Spirit: Correct setting of the length width field; Add multicast and broadcast addresses to radio properities.
This commit is contained in:
@@ -369,9 +369,10 @@ Configuration sub-directories
|
|||||||
|
|
||||||
2017-08-01: Testing began. The Spirit1 no configurations with no
|
2017-08-01: Testing began. The Spirit1 no configurations with no
|
||||||
errors, but there are no tests yet in place to exercise it.
|
errors, but there are no tests yet in place to exercise it.
|
||||||
|
|
||||||
2017-08-02: The nettest, udp, telnet test programs were added.
|
2017-08-02: The nettest, udp, telnet test programs were added.
|
||||||
|
2017-08-05: Successfully exchanging packets, but there there are
|
||||||
|
issues with address filtering, CRC calculation, and data integrity
|
||||||
|
(like bad UDP checksums). Lot's more to be done!
|
||||||
|
|
||||||
Test Matrix:
|
Test Matrix:
|
||||||
The following configurations have been tested:
|
The following configurations have been tested:
|
||||||
|
|||||||
@@ -69,4 +69,10 @@ config SPIRIT_BROADCAST
|
|||||||
---help---
|
---help---
|
||||||
Enables address filtering for the broadcast addess 0xff.
|
Enables address filtering for the broadcast addess 0xff.
|
||||||
|
|
||||||
|
config SPIRIT_CRCDISABLE
|
||||||
|
bool "Disable CRC"
|
||||||
|
default n
|
||||||
|
---help---
|
||||||
|
Disables CRC calculation and filtering. Default is enabled.
|
||||||
|
|
||||||
endif # SPIRIT_NETDEV
|
endif # SPIRIT_NETDEV
|
||||||
|
|||||||
@@ -110,36 +110,38 @@
|
|||||||
* transfer the packet length.
|
* transfer the packet length.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if CONFIG_SPIRIT_PKTLEN < 2
|
||||||
|
# define PKT_LENGTH_WIDTH 1 /* 0 - 1 */
|
||||||
#if CONFIG_SPIRIT_PKTLEN < 4
|
#if CONFIG_SPIRIT_PKTLEN < 4
|
||||||
# define PKT_LENGTH_WIDTH (2 - 1)
|
# define PKT_LENGTH_WIDTH 2 /* 2 - 3 */
|
||||||
#elif CONFIG_SPIRIT_PKTLEN < 8
|
#elif CONFIG_SPIRIT_PKTLEN < 8
|
||||||
# define PKT_LENGTH_WIDTH (3 - 1)
|
# define PKT_LENGTH_WIDTH 3 /* 4 - 7 */
|
||||||
#elif CONFIG_SPIRIT_PKTLEN < 16
|
#elif CONFIG_SPIRIT_PKTLEN < 16
|
||||||
# define PKT_LENGTH_WIDTH (4 - 1)
|
# define PKT_LENGTH_WIDTH 4 /* 8 - 15 */
|
||||||
#elif CONFIG_SPIRIT_PKTLEN < 32
|
#elif CONFIG_SPIRIT_PKTLEN < 32
|
||||||
# define PKT_LENGTH_WIDTH (5 - 1)
|
# define PKT_LENGTH_WIDTH 5 /* 16 - 31 */
|
||||||
#elif CONFIG_SPIRIT_PKTLEN < 64
|
#elif CONFIG_SPIRIT_PKTLEN < 64
|
||||||
# define PKT_LENGTH_WIDTH (6 - 1)
|
# define PKT_LENGTH_WIDTH 6 /* 32 - 63 */
|
||||||
#elif CONFIG_SPIRIT_PKTLEN < 128
|
#elif CONFIG_SPIRIT_PKTLEN < 128
|
||||||
# define PKT_LENGTH_WIDTH (7 - 1)
|
# define PKT_LENGTH_WIDTH 7 /* 63 - 127 */
|
||||||
#elif CONFIG_SPIRIT_PKTLEN < 256
|
#elif CONFIG_SPIRIT_PKTLEN < 256
|
||||||
# define PKT_LENGTH_WIDTH (8 - 1)
|
# define PKT_LENGTH_WIDTH 8 /* 128 - 255 */
|
||||||
#elif CONFIG_SPIRIT_PKTLEN < 512
|
#elif CONFIG_SPIRIT_PKTLEN < 512
|
||||||
# define PKT_LENGTH_WIDTH (9 - 1)
|
# define PKT_LENGTH_WIDTH 9 /* 256 - 255 */
|
||||||
#elif CONFIG_SPIRIT_PKTLEN < 1024
|
#elif CONFIG_SPIRIT_PKTLEN < 1024
|
||||||
# define PKT_LENGTH_WIDTH (10 - 1)
|
# define PKT_LENGTH_WIDTH 10 /* 512 - 1023 */
|
||||||
#elif CONFIG_SPIRIT_PKTLEN < 2048
|
#elif CONFIG_SPIRIT_PKTLEN < 2048
|
||||||
# define PKT_LENGTH_WIDTH (11 - 1)
|
# define PKT_LENGTH_WIDTH 11 /* 1024 - 2047 */
|
||||||
#elif CONFIG_SPIRIT_PKTLEN < 4096
|
#elif CONFIG_SPIRIT_PKTLEN < 4096
|
||||||
# define PKT_LENGTH_WIDTH (12 - 1)
|
# define PKT_LENGTH_WIDTH 12 /* 2048 - 4095 */
|
||||||
#elif CONFIG_SPIRIT_PKTLEN < 8192
|
#elif CONFIG_SPIRIT_PKTLEN < 8192
|
||||||
# define PKT_LENGTH_WIDTH (13 - 1)
|
# define PKT_LENGTH_WIDTH 13 /* 4096 - 8191 */
|
||||||
#elif CONFIG_SPIRIT_PKTLEN < 16384
|
#elif CONFIG_SPIRIT_PKTLEN < 16384
|
||||||
# define PKT_LENGTH_WIDTH (14 - 1)
|
# define PKT_LENGTH_WIDTH 14 /* 8192 - 16383 */
|
||||||
#elif CONFIG_SPIRIT_PKTLEN < 32768
|
#elif CONFIG_SPIRIT_PKTLEN < 32768
|
||||||
# define PKT_LENGTH_WIDTH (15 - 1)
|
# define PKT_LENGTH_WIDTH 15 /* 16384 - 32767 */
|
||||||
#elif CONFIG_SPIRIT_PKTLEN < 65536
|
#elif CONFIG_SPIRIT_PKTLEN < 65536
|
||||||
# define PKT_LENGTH_WIDTH (16 - 1)
|
# define PKT_LENGTH_WIDTH 16 /* 32768 - 65535 */
|
||||||
#else
|
#else
|
||||||
# error Invalid CONFIG_SPIRIT_PKTLEN
|
# error Invalid CONFIG_SPIRIT_PKTLEN
|
||||||
#endif
|
#endif
|
||||||
@@ -274,32 +276,41 @@ int spirit_hw_initialize(FAR struct spirit_driver_s *dev,
|
|||||||
|
|
||||||
static const struct radio_init_s g_radio_init =
|
static const struct radio_init_s g_radio_init =
|
||||||
{
|
{
|
||||||
SPIRIT_BASE_FREQUENCY, /* base_frequency */
|
SPIRIT_BASE_FREQUENCY, /* base_frequency selected in board.h */
|
||||||
SPIRIT_CHANNEL_SPACE, /* chspace */
|
SPIRIT_CHANNEL_SPACE, /* chspace selected in board.h */
|
||||||
SPIRIT_XTAL_OFFSET_PPM, /* foffset */
|
SPIRIT_XTAL_OFFSET_PPM, /* foffset selected in board.h */
|
||||||
SPIRIT_CHANNEL_NUMBER, /* chnum */
|
SPIRIT_CHANNEL_NUMBER, /* chnum selected in board.h */
|
||||||
SPIRIT_MODULATION_SELECT, /* modselect */
|
SPIRIT_MODULATION_SELECT, /* modselect selected in board.h */
|
||||||
SPIRIT_DATARATE, /* datarate */
|
SPIRIT_DATARATE, /* datarate selected in board.h */
|
||||||
SPIRIT_FREQ_DEVIATION, /* freqdev */
|
SPIRIT_FREQ_DEVIATION, /* freqdev selected in board.h */
|
||||||
SPIRIT_BANDWIDTH /* bandwidth */
|
SPIRIT_BANDWIDTH /* bandwidth selected in board.h */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Spirit PktBasic initialization */
|
/* Spirit PktBasic initialization */
|
||||||
|
|
||||||
static const struct pktbasic_init_s g_pktbasic_init =
|
static const struct pktbasic_init_s g_pktbasic_init =
|
||||||
{
|
{
|
||||||
SPIRIT_SYNC_WORD, /* syncwords */
|
SPIRIT_SYNC_WORD, /* syncword selected in board.h */
|
||||||
SPIRIT_PREAMBLE_LENGTH, /* premblen */
|
SPIRIT_PREAMBLE_LENGTH, /* premblen selected in board.h*/
|
||||||
SPIRIT_SYNC_LENGTH, /* synclen */
|
SPIRIT_SYNC_LENGTH, /* synclen selected in board.h */
|
||||||
PKT_LENGTH_VAR, /* fixvarlen, variable packet length */
|
PKT_LENGTH_VAR, /* fixvarlen variable packet length */
|
||||||
PKT_LENGTH_WIDTH, /* pktlenwidth from CONFIG_SPIRIT_PKTLEN */
|
PKT_LENGTH_WIDTH, /* pktlenwidth from CONFIG_SPIRIT_PKTLEN */
|
||||||
SPIRIT_CRC_MODE, /* crcmode */
|
#ifdef CONFIG_SPIRIT_CRCDISABLE
|
||||||
SPIRIT_CONTROL_LENGTH, /* ctrllen */
|
PKT_NO_CRC, /* crcmode none */
|
||||||
S_ENABLE, /* txdestaddr, need to send address */
|
#else
|
||||||
SPIRIT_EN_FEC, /* fec */
|
SPIRIT_CRC_MODE, /* crcmode selected in board.h */
|
||||||
SPIRIT_EN_WHITENING /* datawhite */
|
#endif
|
||||||
|
SPIRIT_CONTROL_LENGTH, /* ctrllen selected in board.h */
|
||||||
|
S_ENABLE, /* txdestaddr need to send address */
|
||||||
|
SPIRIT_EN_FEC, /* fec selected in board.h */
|
||||||
|
SPIRIT_EN_WHITENING /* datawhite selected in board.h */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* GPIO Configuration.
|
||||||
|
*
|
||||||
|
* REVISIT: Assumes interrupt is on GPIO3. Might need to be configurable.
|
||||||
|
*/
|
||||||
|
|
||||||
static const struct spirit_gpio_init_s g_gpioinit =
|
static const struct spirit_gpio_init_s g_gpioinit =
|
||||||
{
|
{
|
||||||
SPIRIT_GPIO_3, /* gpiopin */
|
SPIRIT_GPIO_3, /* gpiopin */
|
||||||
@@ -307,43 +318,45 @@ static const struct spirit_gpio_init_s g_gpioinit =
|
|||||||
SPIRIT_GPIO_DIG_OUT_IRQ /* gpioio */
|
SPIRIT_GPIO_DIG_OUT_IRQ /* gpioio */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* CSMA initialization */
|
||||||
|
|
||||||
static const struct spirit_csma_init_s g_csma_init =
|
static const struct spirit_csma_init_s g_csma_init =
|
||||||
{
|
{
|
||||||
1, /* BU counter seed */
|
1, /* BU counter seed */
|
||||||
S_ENABLE, /* enable persistent mode */
|
S_ENABLE, /* enable persistent mode */
|
||||||
TBIT_TIME_64, /* Tcca time */
|
TBIT_TIME_64, /* Tcca time */
|
||||||
TCCA_TIME_3, /* Lcca length */
|
TCCA_TIME_3, /* Lcca length */
|
||||||
3, /* max nr of backoffs (<8) */
|
3, /* max nr of backoffs (<8) */
|
||||||
8 /* BU prescaler */
|
8 /* BU prescaler */
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_SPIRIT_PROMISICUOUS
|
#ifdef CONFIG_SPIRIT_PROMISICUOUS
|
||||||
static struct pktbasic_addr_s g_addrinit =
|
static struct pktbasic_addr_s g_addrinit =
|
||||||
{
|
{
|
||||||
S_DISABLE, /* Disable filtering on node address */
|
S_DISABLE, /* Disable filtering on node address */
|
||||||
SPIRIT_NODE_ADDR, /* Node address (Temporary, until assigned) */
|
SPIRIT_NODE_ADDR, /* Node address (Temporary, until assigned) */
|
||||||
S_DISABLE, /* Disable filtering on multicast address */
|
S_DISABLE, /* Disable filtering on multicast address */
|
||||||
0xee, /* Multicast address */
|
SPIRIT_MCAST_ADDRESS, /* Multicast address */
|
||||||
S_DISABLE, /* Disable filtering on broadcast address */
|
S_DISABLE, /* Disable filtering on broadcast address */
|
||||||
0xff /* Broadcast address */
|
SPIRIT_BCAST_ADDRESS /* Broadcast address */
|
||||||
};
|
};
|
||||||
#else
|
#else
|
||||||
static struct pktbasic_addr_s g_addrinit =
|
static struct pktbasic_addr_s g_addrinit =
|
||||||
{
|
{
|
||||||
S_ENABLE, /* Enable filtering on node address */
|
S_ENABLE, /* Enable filtering on node address */
|
||||||
SPIRIT_NODE_ADDR, /* Node address (Temporary, until assigned) */
|
SPIRIT_NODE_ADDR, /* Node address (Temporary, until assigned) */
|
||||||
#ifdef CONFIG_SPIRIT_MULTICAST
|
#ifdef CONFIG_SPIRIT_MULTICAST
|
||||||
S_ENABLE, /* Enable filtering on multicast address */
|
S_ENABLE, /* Enable filtering on multicast address */
|
||||||
#else
|
#else
|
||||||
S_DISABLE, /* Disable filtering on multicast address */
|
S_DISABLE, /* Disable filtering on multicast address */
|
||||||
#endif
|
#endif
|
||||||
0xee, /* Multicast address */
|
SPIRIT_MCAST_ADDRESS, /* Multicast address */
|
||||||
#ifdef CONFIG_SPIRIT_BROADCAST
|
#ifdef CONFIG_SPIRIT_BROADCAST
|
||||||
S_ENABLE, /* Enable filtering on broadcast address */
|
S_ENABLE, /* Enable filtering on broadcast address */
|
||||||
#else
|
#else
|
||||||
S_DISABLE, /* Disable filtering on broadcast address */
|
S_DISABLE, /* Disable filtering on broadcast address */
|
||||||
#endif
|
#endif
|
||||||
0xff /* Broadcast address */
|
SPIRIT_BCAST_ADDRESS /* Broadcast address */
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1922,9 +1935,22 @@ static int spirit_properties(FAR struct sixlowpan_driver_s *netdev,
|
|||||||
FAR struct sixlowpan_properties_s *properties)
|
FAR struct sixlowpan_properties_s *properties)
|
||||||
{
|
{
|
||||||
DEBUGASSERT(netdev != NULL && properties != NULL);
|
DEBUGASSERT(netdev != NULL && properties != NULL);
|
||||||
|
memset(properties, 0, sizeof(struct sixlowpan_properties_s));
|
||||||
|
|
||||||
|
/* General */
|
||||||
|
|
||||||
properties->sp_addrlen = 1; /* Length of an address */
|
properties->sp_addrlen = 1; /* Length of an address */
|
||||||
properties->sp_pktlen = CONFIG_SPIRIT_PKTLEN; /* Fixed packet length */
|
properties->sp_pktlen = CONFIG_SPIRIT_PKTLEN; /* Fixed packet length */
|
||||||
|
|
||||||
|
/* Multicast address */
|
||||||
|
|
||||||
|
properties->sp_mcast.nv_addrlen = 1;
|
||||||
|
properties->sp_mcast.nv_addr[0] = SPIRIT_MCAST_ADDRESS;
|
||||||
|
|
||||||
|
/* Broadcast address */
|
||||||
|
|
||||||
|
properties->sp_bcast.nv_addrlen = 1;
|
||||||
|
properties->sp_bcast.nv_addr[0] = SPIRIT_BCAST_ADDRESS;
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -355,6 +355,8 @@ struct sixlowpan_properties_s
|
|||||||
{
|
{
|
||||||
uint8_t sp_addrlen; /* Length of an address */
|
uint8_t sp_addrlen; /* Length of an address */
|
||||||
uint8_t sp_pktlen; /* Fixed packet/frame size (up to 255) */
|
uint8_t sp_pktlen; /* Fixed packet/frame size (up to 255) */
|
||||||
|
struct netdev_varaddr_s sp_mcast; /* Multicast address */
|
||||||
|
struct netdev_varaddr_s sp_bcast; /* Broadcast address */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The device structure for radio network device differs from the standard
|
/* The device structure for radio network device differs from the standard
|
||||||
|
|||||||
@@ -44,6 +44,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include <nuttx/config.h>
|
#include <nuttx/config.h>
|
||||||
|
#include <nuttx/net/netdev.h>
|
||||||
#include <nuttx/wireless/wireless.h>
|
#include <nuttx/wireless/wireless.h>
|
||||||
|
|
||||||
#ifdef CONFIG_WIRELESS_PKTRADIO
|
#ifdef CONFIG_WIRELESS_PKTRADIO
|
||||||
@@ -92,14 +93,18 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/* This describes an address used by the packet radio. There is no standard
|
/* This describes an address used by the packet radio. There is no standard
|
||||||
* size for such an address. Hence, it is represented simply as a arry of
|
* size for such an address. Hence, it is represented simply as a array of
|
||||||
* bytes.
|
* bytes.
|
||||||
|
*
|
||||||
|
* NOTE: This MUST be the same as the struct netdev_varaddr_s as defined in
|
||||||
|
* netdev.h. It is duplicated here for no particularly good reason other
|
||||||
|
* than to maintain a clean PktRadio namespace.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct pktradio_addr_s
|
struct pktradio_addr_s
|
||||||
{
|
{
|
||||||
uint8_t pa_addrlen; /* Length of the following address */
|
uint8_t pa_addrlen; /* Length of the following address */
|
||||||
uint8_t pa_addr[CONFIG_PKTRADIO_ADDRLEN];
|
uint8_t pa_addr[RADIO_MAX_ADDRLEN];
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Different packet radios may have different properties. If there are
|
/* Different packet radios may have different properties. If there are
|
||||||
@@ -116,6 +121,8 @@ struct pktradio_properties_s
|
|||||||
{
|
{
|
||||||
uint8_t pp_addrlen; /* Length of an address */
|
uint8_t pp_addrlen; /* Length of an address */
|
||||||
uint8_t pp_pktlen; /* Fixed packet/frame size (up to 255) */
|
uint8_t pp_pktlen; /* Fixed packet/frame size (up to 255) */
|
||||||
|
struct pktradio_addr_s pp_mcast; /* Multicast address */
|
||||||
|
struct pktradio_addr_s pp_bcast; /* Broadcast address */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This is the structure passed with all packet radio IOCTL commands.
|
/* This is the structure passed with all packet radio IOCTL commands.
|
||||||
|
|||||||
@@ -46,6 +46,15 @@
|
|||||||
|
|
||||||
#include <nuttx/irq.h>
|
#include <nuttx/irq.h>
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Preprocessor Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/* Special multicast and broadcast addresses */
|
||||||
|
|
||||||
|
#define SPIRIT_MCAST_ADDRESS 0xee
|
||||||
|
#define SPIRIT_BCAST_ADDRESS 0xff
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Types
|
* Public Types
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|||||||
@@ -326,7 +326,10 @@ static int sixlowpan_pktradio_metadata(FAR struct sixlowpan_driver_s *radio,
|
|||||||
radio->r_dev.d_mac.sixlowpan.nv_addr,
|
radio->r_dev.d_mac.sixlowpan.nv_addr,
|
||||||
radio->r_dev.d_mac.sixlowpan.nv_addrlen);
|
radio->r_dev.d_mac.sixlowpan.nv_addrlen);
|
||||||
|
|
||||||
/* Set the destination address */
|
/* Set the destination address.
|
||||||
|
* REVISIT: Do wee need to check for multicast or broadcast addresses
|
||||||
|
* here?
|
||||||
|
*/
|
||||||
|
|
||||||
pktmeta->pm_dest.pa_addrlen = destmac->nv_addrlen;
|
pktmeta->pm_dest.pa_addrlen = destmac->nv_addrlen;
|
||||||
memcpy(pktmeta->pm_dest.pa_addr, destmac->nv_addr, destmac->nv_addrlen);
|
memcpy(pktmeta->pm_dest.pa_addr, destmac->nv_addr, destmac->nv_addrlen);
|
||||||
|
|||||||
@@ -198,9 +198,9 @@ int sixlowpan_meta_data(FAR struct sixlowpan_driver_s *radio,
|
|||||||
{
|
{
|
||||||
/* Broadcast requires short address mode. */
|
/* Broadcast requires short address mode. */
|
||||||
|
|
||||||
meta->destaddr.mode = IEEE802154_ADDRMODE_SHORT;
|
meta->destaddr.mode = IEEE802154_ADDRMODE_SHORT;
|
||||||
meta->destaddr.saddr[0] = 0;
|
meta->destaddr.saddr[0] = 0xff;
|
||||||
meta->destaddr.saddr[1] = 0;
|
meta->destaddr.saddr[1] = 0xff;
|
||||||
}
|
}
|
||||||
else if (pktmeta->dextended != 0)
|
else if (pktmeta->dextended != 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -909,9 +909,32 @@ static int lo_properties(FAR struct sixlowpan_driver_s *netdev,
|
|||||||
FAR struct sixlowpan_properties_s *properties)
|
FAR struct sixlowpan_properties_s *properties)
|
||||||
{
|
{
|
||||||
DEBUGASSERT(netdev != NULL && properties != NULL);
|
DEBUGASSERT(netdev != NULL && properties != NULL);
|
||||||
|
memset(properties, 0, sizeof(struct sixlowpan_properties_s));
|
||||||
|
|
||||||
|
/* General */
|
||||||
|
|
||||||
properties->sp_addrlen = NET_6LOWPAN_ADDRSIZE; /* Length of an address */
|
properties->sp_addrlen = NET_6LOWPAN_ADDRSIZE; /* Length of an address */
|
||||||
properties->sp_pktlen = CONFIG_NET_6LOWPAN_FRAMELEN; /* Fixed frame length */
|
properties->sp_pktlen = CONFIG_NET_6LOWPAN_FRAMELEN; /* Fixed frame length */
|
||||||
|
|
||||||
|
/* Multicast address (uses broadcast address)
|
||||||
|
*
|
||||||
|
* Multicast address should really determined by the first 3 bits
|
||||||
|
* (RFC 4944):
|
||||||
|
*
|
||||||
|
* 0xxxxxxx xxxxxxxx: Unicast address
|
||||||
|
* 100xxxxx xxxxxxxx: Multicast address
|
||||||
|
* 101xxxxx xxxxxxxx: Reserved
|
||||||
|
* 110xxxxx xxxxxxxx: Reserved
|
||||||
|
* 111xxxxx xxxxxxxx: Reserved
|
||||||
|
*/
|
||||||
|
|
||||||
|
properties->sp_mcast.nv_addrlen = NET_6LOWPAN_SADDRSIZE;
|
||||||
|
memset(properties->sp_mcast.nv_addr, 0xff, RADIO_MAX_ADDRLEN);
|
||||||
|
|
||||||
|
/* Broadcast address */
|
||||||
|
|
||||||
|
properties->sp_bcast.nv_addrlen = NET_6LOWPAN_SADDRSIZE;
|
||||||
|
memset(properties->sp_mcast.nv_addr, 0xff, RADIO_MAX_ADDRLEN);
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -973,9 +973,32 @@ static int macnet_properties(FAR struct sixlowpan_driver_s *netdev,
|
|||||||
FAR struct sixlowpan_properties_s *properties)
|
FAR struct sixlowpan_properties_s *properties)
|
||||||
{
|
{
|
||||||
DEBUGASSERT(netdev != NULL && properties != NULL);
|
DEBUGASSERT(netdev != NULL && properties != NULL);
|
||||||
|
memset(properties, 0, sizeof(struct sixlowpan_properties_s));
|
||||||
|
|
||||||
|
/* General */
|
||||||
|
|
||||||
properties->sp_addrlen = NET_6LOWPAN_ADDRSIZE; /* Length of an address */
|
properties->sp_addrlen = NET_6LOWPAN_ADDRSIZE; /* Length of an address */
|
||||||
properties->sp_pktlen = CONFIG_NET_6LOWPAN_FRAMELEN; /* Fixed frame length */
|
properties->sp_pktlen = CONFIG_NET_6LOWPAN_FRAMELEN; /* Fixed frame length */
|
||||||
|
|
||||||
|
/* Multicast address (uses broadcast address)
|
||||||
|
*
|
||||||
|
* Multicast address should really determined by the first 3 bits
|
||||||
|
* (RFC 4944):
|
||||||
|
*
|
||||||
|
* 0xxxxxxx xxxxxxxx: Unicast address
|
||||||
|
* 100xxxxx xxxxxxxx: Multicast address
|
||||||
|
* 101xxxxx xxxxxxxx: Reserved
|
||||||
|
* 110xxxxx xxxxxxxx: Reserved
|
||||||
|
* 111xxxxx xxxxxxxx: Reserved
|
||||||
|
*/
|
||||||
|
|
||||||
|
properties->sp_mcast.nv_addrlen = NET_6LOWPAN_SADDRSIZE;
|
||||||
|
memset(properties->sp_mcast.nv_addr, 0xff, RADIO_MAX_ADDRLEN);
|
||||||
|
|
||||||
|
/* Broadcast address */
|
||||||
|
|
||||||
|
properties->sp_bcast.nv_addrlen = NET_6LOWPAN_SADDRSIZE;
|
||||||
|
memset(properties->sp_mcast.nv_addr, 0xff, RADIO_MAX_ADDRLEN);
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -751,7 +751,7 @@ static int lo_ioctl(FAR struct net_driver_s *dev, int cmd,
|
|||||||
FAR struct sixlowpan_properties_s *props =
|
FAR struct sixlowpan_properties_s *props =
|
||||||
(FAR struct sixlowpan_properties_s *)&cmddata->pifr_props;
|
(FAR struct sixlowpan_properties_s *)&cmddata->pifr_props;
|
||||||
|
|
||||||
ret = spirit_properties(radio, props);
|
ret = lo_properties(radio, props);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -932,9 +932,22 @@ static int lo_properties(FAR struct sixlowpan_driver_s *netdev,
|
|||||||
FAR struct sixlowpan_properties_s *properties)
|
FAR struct sixlowpan_properties_s *properties)
|
||||||
{
|
{
|
||||||
DEBUGASSERT(netdev != NULL && properties != NULL);
|
DEBUGASSERT(netdev != NULL && properties != NULL);
|
||||||
|
memset(properties, 0, sizeof(struct sixlowpan_properties_s));
|
||||||
|
|
||||||
|
/* General */
|
||||||
|
|
||||||
properties->sp_addrlen = CONFIG_PKTRADIO_ADDRLEN; /* Length of an address */
|
properties->sp_addrlen = CONFIG_PKTRADIO_ADDRLEN; /* Length of an address */
|
||||||
properties->sp_pktlen = CONFIG_NET_6LOWPAN_FRAMELEN; /* Fixed frame length */
|
properties->sp_pktlen = CONFIG_NET_6LOWPAN_FRAMELEN; /* Fixed frame length */
|
||||||
|
|
||||||
|
/* Multicast address */
|
||||||
|
|
||||||
|
properties->sp_mcast.nv_addrlen = CONFIG_PKTRADIO_ADDRLEN;
|
||||||
|
memset(properties->sp_mcast.nv_addr, 0xee, RADIO_MAX_ADDRLEN);
|
||||||
|
|
||||||
|
/* Broadcast address */
|
||||||
|
|
||||||
|
properties->sp_bcast.nv_addrlen = CONFIG_PKTRADIO_ADDRLEN;
|
||||||
|
memset(properties->sp_mcast.nv_addr, 0xff, RADIO_MAX_ADDRLEN);
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user