nuttx/wireless/ieee802154/Kconfig
Anthony Merlino a8e1620f3c Merged in antmerlino/nuttx/mac802154_fix_eaddr (pull request #985)
mac802154: Fixes issues with extended address. 1) Extended address should be read-only. 2) Extended address should be placed in frame in "reverse-canonical" order.

The extended address is a read-only attribute and thus an attempt to write the extended address should be denied. Instead, the extended address should really be either set by the PHY/radio itself, or provided at board bring-up time to the radio layer. The MAC layer now pulls in the extended address from the radio any time the MAC is reset.

The extended address is also supposed to be sent in the frame in reverse-canonical order. This is very confusing in the standard and it wasn't until I realized it was backwards in Wireshark that I researched this further. Searching online I find documents from the committee for suggestions/feedback on the future standard. It isn't in the 2015 standard but a newer version of the standard will presumably clarify this. It says that the extended address should be written in reverse-canonical form, meaning the OUI comes last, not first inside the frame.

Approved-by: Gregory Nutt <gnutt@nuttx.org>
2019-08-10 18:25:13 +00:00

200 lines
6.8 KiB
Plaintext

#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#
menuconfig WIRELESS_IEEE802154
bool "IEEE 802.15.4 Support"
default n
select MM_IOB
depends on WIRELESS
---help---
Enables a Media Access Controller for any IEEE802.15.4 radio
device. This in turn can be used by higher layer entities
such as 6lowpan.
if WIRELESS_IEEE802154
config IEEE802154_PRIMITIVE_PREALLOC
int "Number of pre-allocated primitive structures"
default 20
---help---
This specifies the total number of preallocated primitive structures.
A primitive is an abstracted data type that provides service information
between the MAC layer and the next highest layer. These may be allocated
from either from tasking logic or from interrupt level logic.
config IEEE802154_PRIMITIVE_IRQRESERVE
int "Reserved pre-allocated primitive structures"
default 0
depends on EXPERIMENTAL
---help---
If primitives can be allocated from interrupt handlers, then this
specifies the number of pre-allocated meta-data structures that are
reserved for for use only by interrupt handlers. This may be zero to
reserve no meta-data structures for interrupt handlers. In that case,
the allocation will fail if tasking logic has allocated them all.
Interrupt logic will first attempt to allocate from the general,
pre-allocated structure pool that will contain up to (size
CONFIG_IEEE802154_PRIMITIVE_PREALLOC - CONFIG_IEEE802154_PRIMITIVE_IRQRESERVE)
entries. If that fails, then it will try to take a structure from
the reserve (size CONFIG_IEEE802154_PRIMITIVE_IRQRESERVE).
Non-interrupt logic will also first attempt to allocate from the
general, pre-allocated structure pool. If that fails, it will
dynamically allocate the primitive with an additional cost in performance.
NOTE: Currently marked as experimental and with a default of zero
because there are no interrupt level allocations performed by the
current IEEE 802.15.4 MAC code.
config IEEE802154_MAC
bool "Software MAC layer"
default n
---help---
There are two types of IEEE 802.15.4 radios supported. Those that provide
all MAC functionality equivalent to the MAC802154 software implementation,
and radios that provide a lower half to the MAC802154 software layer.
This option enables the software MAC layer that can interface with
the lower-half radio drivers.
if IEEE802154_MAC
config MAC802154_NTXDESC
int "Number or TX descriptors"
default 5
---help---
Configured number of Tx descriptors. Default: 3
When used with 6LoWPAN, the descriptor allocator runs on a work
and must avoid blocking if possible. Each frame will be provided in
an IOB and each TX frame will need a TX descriptor. So the safe
thing to do is set CONFIG_MAC802154_NTXDESC to CONFIG_IOB_NBUFFERS.
Then there should be the maximum pre-allocated buffers for each
possible TX frame.
config MAC802154_NPANDESC
int "Number of PAN descriptors"
default 5
---help---
Configured number of PAN descriptors Default: 5
When performing a scan to find a suitable PAN, the MAC must store
information for all unique beacons received. This is the number of unique
descriptors that can be held before the scan cancels with LIMIT_REACHED.
config MAC802154_SFEVENT_VERBOSE
bool "Verbose logging related to superframe events"
default n
depends on DEBUG_WIRELESS_INFO
---help---
Enable verbose logging of superframe events Default: false
config MAC802154_LOCK_VERBOSE
bool "Verbose logging related to MAC lock management"
default n
depends on DEBUG_WIRELESS_INFO
---help---
Enable verbose logging of MAC lock management. Default: false
config IEEE802154_MACDEV
bool "Character driver for IEEE 802.15.4 MAC layer"
default n
depends on WIRELESS_IEEE802154
---help---
Enable the device driver to expose the IEEE 802.15.4 MAC layer
access to user space as IOCTLs
if IEEE802154_MACDEV
config IEEE802154_MACDEV_RECVRPRIO
int "Priority of frame receiver registerd with the MAC layer"
default 0
---help---
When the MAC layer receives an incoming data frame, it passes the frame
to registered receivers, in order of receiver priority, until one of the
receivers claim the frame.
An example case would be when 6LoWPAN and the MAC character driver are
enabled. Both have receivers registered with the MAC. The 6LoWPAN layer
should get assigned a higher priority than the character driver. In this
case, the 6LoWPAN receiver will receive the frame first. If the frame is
a 6LoWPAN frame, it will claim the frame and the MAC will not pass the
frame to any additional receivers. If it does not claim the frame, the
MAC layer will call the next highest priority receiver, in this case,
the MAC character driver (which should always be lowest priority since
it is a "catch-all" type receiver).
endif # IEEE802154_MACDEV
config IEEE802154_NETDEV
bool "IEEE802154 6LoWPAN Network Device"
default n
depends on NET_6LOWPAN || NET_IEEE802154
select ARCH_HAVE_NETDEV_STATISTICS
---help---
Add support for the IEEE802.15.4 6LoWPAN network device built on
the common IEEE802.15.4 MAC.
if IEEE802154_NETDEV
config IEEE802154_NETDEV_RECVRPRIO
int "Priority of frame receiver registerd with the MAC layer"
default 1
---help---
When the MAC layer receives an incoming data frame, it passes the frame
to registered receivers, in order of receiver priority, until one of the
receivers claim the frame.
An example case would be when 6LoWPAN and the MAC character driver are
enabled. Both have receivers registered with the MAC. The 6LoWPAN layer
should get assigned a higher priority than the character driver. In this
case, the 6LoWPAN receiver will receive the frame first. If the frame is
a 6LoWPAN frame, it will claim the frame and the MAC will not pass the
frame to any additional receivers. If it does not claim the frame, the
MAC layer will call the next highest priority receiver, in this case,
the MAC character driver (which should always be lowest priority since
it is a "catch-all" type receiver).
config IEEE802154_NETDEV_DEFAULT_PREFIX_0
hex "IPv6 Prefix 0"
default 0xfe80
---help---
First section of IPv6 Prefix
config IEEE802154_NETDEV_DEFAULT_PREFIX_1
hex "IPv6 Prefix 1"
default 0x0000
---help---
Second section of IPv6 Prefix
config IEEE802154_NETDEV_DEFAULT_PREFIX_2
hex "IPv6 Prefix 2"
default 0x0000
---help---
Third section of IPv6 Prefix
config IEEE802154_NETDEV_DEFAULT_PREFIX_3
hex "IPv6 Prefix 3"
default 0x0000
---help---
Fourth section of IPv6 Prefix
endif # IEEE802154_NETDEV
endif # IEEE802154_MACDEV
config IEEE802154_LOOPBACK
bool "IEEE802154 6LoWPAN Loopback"
default n
depends on NET_6LOWPAN || NET_IEEE802154
select ARCH_HAVE_NETDEV_STATISTICS
---help---
Add support for the IEEE802.15.4 6LoWPAN Loopback test device.
if IEEE802154_LOOPBACK
endif # IEEE802154_LOOPBACK
endif # WIRELESS_IEEE802154