mirror of https://github.com/ARMmbed/mbed-os.git
534 lines
16 KiB
C
534 lines
16 KiB
C
/*
|
||
* Copyright (c) 2013-2016 ARM Limited. All rights reserved.
|
||
*
|
||
* SPDX-License-Identifier: LicenseRef-PBL
|
||
*
|
||
* Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use this file except in compliance with the License.
|
||
* You may obtain a copy of the License at
|
||
*
|
||
* https://www.mbed.com/licenses/PBL-1.0
|
||
*
|
||
* See the License for the specific language governing permissions and limitations under the License.
|
||
*
|
||
*/
|
||
|
||
/** \file mlme.h
|
||
* \brief MLME API
|
||
*/
|
||
|
||
#ifndef MLME_H_
|
||
#define MLME_H_
|
||
|
||
#include <stdbool.h>
|
||
#include "mac_common_defines.h"
|
||
#include "net_interface.h"
|
||
|
||
/**
|
||
* @brief struct mlme_pan_descriptor_t PAN descriptor
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 55) for more details
|
||
*/
|
||
typedef struct mlme_pan_descriptor_s {
|
||
unsigned CoordAddrMode:2;
|
||
uint16_t CoordPANId;
|
||
uint8_t CoordAddress[8];
|
||
uint8_t LogicalChannel;
|
||
uint8_t ChannelPage;
|
||
uint8_t SuperframeSpec[2];
|
||
bool GTSPermit:1;
|
||
uint8_t LinkQuality;
|
||
uint32_t Timestamp;
|
||
uint8_t SecurityFailure;
|
||
mlme_security_t Key;
|
||
} mlme_pan_descriptor_t;
|
||
|
||
/**
|
||
* @brief struct mlme_command_type_t Command type enumeration
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 82) for more details
|
||
*/
|
||
typedef enum {
|
||
ASSOCIATION_REQUEST = 1,
|
||
ASSOCIATION_RESPONSE = 2,
|
||
DISASSOCIATION_NOTIFICATION = 3,
|
||
DATA_REQUEST = 4,
|
||
PAN_ID_CONFLICT_NOTIFICATION = 5,
|
||
ORPHAN_NOTIFICATION = 6,
|
||
BEACON_REQUEST = 7,
|
||
COORDINATOR_REALIGNMENT = 8,
|
||
GTS_REQUEST = 9
|
||
//Reserved
|
||
} mlme_command_type_t;
|
||
|
||
/**
|
||
* @brief struct mlme_key_usage_descriptor_t Key usage descriptor
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 90) for more details
|
||
*/
|
||
typedef struct mlme_key_usage_descriptor_s {
|
||
unsigned FrameType:3; //See mlme_frame_types
|
||
unsigned CommandFrameIdentifier:4; //See mlme_command_type_t
|
||
} mlme_key_usage_descriptor_t;
|
||
|
||
/**
|
||
* @brief struct mlme_key_device_descriptor_t Key usage descriptor
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 91) for more details
|
||
*/
|
||
typedef struct mlme_key_device_descriptor_s {
|
||
uint8_t DeviceDescriptorHandle; //Index of an entry in macDeviceTable
|
||
bool UniqueDevice:1;
|
||
bool Blacklisted:1;
|
||
} mlme_key_device_descriptor_t;
|
||
|
||
/**
|
||
* @brief enum mlme_security_type_t Security type enumeration
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 95) for more details
|
||
*/
|
||
typedef enum {
|
||
SEC_NONE = 0,
|
||
SEC_MIC32 = 1,
|
||
SEC_MIC64 = 2,
|
||
SEC_MIC128 = 3,
|
||
SEC_ENC = 4,
|
||
SEC_ENC_MIC32 = 5,
|
||
SEC_ENC_MIC64 = 6,
|
||
SEC_ENC_MIC128 = 7
|
||
} mlme_security_type_t;
|
||
|
||
/**
|
||
* @brief struct mlme_security_level_descriptor_t Security level descriptor
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 92) for more details
|
||
*/
|
||
typedef struct mlme_security_level_descriptor_s {
|
||
unsigned FrameType:3; //See mlme_frame_types
|
||
unsigned CommandFrameIdentifier:4; //See mlme_command_type_t
|
||
unsigned SecurityMinimum:3; //See mlme_security_type_t
|
||
bool DeviceOverrideSecurityMinimum:1;
|
||
} mlme_security_level_descriptor_t;
|
||
|
||
/**
|
||
* @brief struct mlme_device_descriptor_t Device descriptor
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 93) for more details
|
||
*/
|
||
typedef struct mlme_device_descriptor_s {
|
||
uint16_t PANId;
|
||
uint16_t ShortAddress;
|
||
uint8_t ExtAddress[8];
|
||
uint32_t FrameCounter;
|
||
bool Exempt:1;
|
||
} mlme_device_descriptor_t;
|
||
|
||
/**
|
||
* @brief struct mlme_key_id_lookup_descriptor_t Key id lookup descriptor
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 94) for more details
|
||
*/
|
||
typedef struct mlme_key_id_lookup_descriptor_s {
|
||
uint8_t LookupData[9];
|
||
unsigned LookupDataSize:1; //0 == 5, 1 == 9
|
||
} mlme_key_id_lookup_descriptor_t;
|
||
|
||
|
||
/**
|
||
* @brief struct mlme_key_descriptor_entry_t Key descriptor entry
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 89) for more details
|
||
*/
|
||
typedef struct mlme_key_descriptor_entry_s {
|
||
mlme_key_id_lookup_descriptor_t *KeyIdLookupList;
|
||
uint8_t KeyIdLookupListEntries;
|
||
mlme_key_device_descriptor_t *KeyDeviceList;
|
||
uint8_t KeyDeviceListEntries;
|
||
mlme_key_usage_descriptor_t *KeyUsageList;
|
||
uint8_t KeyUsageListEntries;
|
||
uint8_t Key[16];
|
||
}mlme_key_descriptor_entry_t;
|
||
|
||
/**
|
||
* @brief MLME primitive error statuses
|
||
*
|
||
* See IEEE standard 802.15.4-2006 for more details
|
||
*/
|
||
#define MLME_SUCCESS 0x00
|
||
#define MLME_BUSY_CHAN 0xe1
|
||
#define MLME_BUSY_RX 0x01
|
||
#define MLME_BUSY_TX 0x02
|
||
#define MLME_FORCE_TRX_OFF 0x03
|
||
#define MLME_IDLE 0x04
|
||
#define MLME_RX_ON 0x06
|
||
#define MLME_TRX_OFF 0x08
|
||
#define MLME_TX_ON 0x09
|
||
#define MLME_COUNTER_ERROR 0xdb
|
||
#define MLME_IMPROPER_KEY_TYPE 0xdc
|
||
#define MLME_IMPROPER_SECURITY_LEVEL 0xdd
|
||
#define MLME_UNSUPPORTED_LEGACY 0xde
|
||
#define MLME_UNSUPPORTED_SECURITY 0xdf
|
||
#define MLME_SECURITY_FAIL 0xe4
|
||
#define MLME_FRAME_TOO_LONG 0xe5
|
||
#define MLME_INVALID_HANDLE 0xe7
|
||
#define MLME_INVALID_PARAMETER 0xe8
|
||
#define MLME_TX_NO_ACK 0xe9
|
||
#define MLME_NO_BEACON 0xea
|
||
#define MLME_NO_DATA 0xeb
|
||
#define MLME_NO_SHORT_ADDRESS 0xec
|
||
#define MLME_PAN_ID_CONFLICT 0xee
|
||
#define MLME_TRANSACTION_EXPIRED 0xf0
|
||
#define MLME_TRANSACTION_OVERFLOW 0xf1
|
||
#define MLME_UNAVAILABLE_KEY 0xf3
|
||
#define MLME_UNSUPPORTED_ATTRIBUTE 0xf4
|
||
#define MLME_INVALID_ADDRESS 0xf5
|
||
#define MLME_INVALID_INDEX 0xf9
|
||
#define MLME_LIMIT_REACHED 0xfa
|
||
#define MLME_READ_ONLY 0xfb
|
||
#define MLME_SCAN_IN_PROGRESS 0xfc
|
||
#define MLME_DATA_POLL_NOTIFICATION 0xff
|
||
|
||
/**
|
||
* @brief enum mac_scan_type_t MAC scan type
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 67) for more details
|
||
*/
|
||
typedef enum {
|
||
MAC_ED_SCAN_TYPE = 0,
|
||
MAC_ACTIVE_SCAN = 1,
|
||
MAC_PASSIVE_SCAN = 2,
|
||
MAC_ORPHAN_SCAN = 3
|
||
} mac_scan_type_t;
|
||
|
||
/**
|
||
* @brief enum mlme_attr_t MLME attributes used with GET and SET primitives
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 86) for more details
|
||
*/
|
||
typedef enum {
|
||
phyCurrentChannel = 0x00, /*>Current RF channel*/
|
||
macAckWaitDuration = 0x40, /*>Integer, n. of symbols*/
|
||
macAssociatedPANCoord = 0x56, /*>Boolean, associated to PAN coordinator*/
|
||
macAssociationPermit = 0x41, /*>Boolean, if association is allowed (in coordinator)*/
|
||
macAutoRequest = 0x42, /*>Boolean, if device automatically sends data request on beacon*/
|
||
macBattLifeExt = 0x43, /*>Boolean, if BLE is enabled*/
|
||
macBattLifeExtPeriods = 0x44, /*>Integer 6-41, BLE backoff periods */
|
||
macBeaconPayload = 0x45, /*>Set of bytes, beacon payload*/
|
||
macBeaconPayloadLength = 0x46, /*>Integer 0-MaxPayLoadLen*/
|
||
macBeaconOrder = 0x47, /*>Integer 0–15, Beacon tx period, 15 = no periodic beacon*/
|
||
macBeaconTxTime = 0x48, /*>Integer 0x000000–0xffffff, symbols, when last beacon was transmitted*/
|
||
macBSN = 0x49, /*>Integer 0x00–0xff, Beacon sequence number*/
|
||
macCoordExtendedAddress = 0x4a, /*>64-bit IEEE of coordinator*/
|
||
macCoordShortAddress = 0x4b, /*>16-bit addr of coordinator*/
|
||
macDSN = 0x4c, /*>Integer 0x00–0xff, Data frame sequence number*/
|
||
macGTSPermit = 0x4d, /*>Boolean, GTS allowed?*/
|
||
macMaxBE = 0x57, /*>Integer 3–8, max value of backoff exponent*/
|
||
macMaxCSMABackoffs = 0x4e, /*>Integer 0–5*/
|
||
macMaxFrameTotalWaitTime = 0x58,/*>Integer, max of CAP symbols while waiting for data requested by DREQ or PEND*/
|
||
macMaxFrameRetries = 0x59, /*>Integer 0–7*/
|
||
macMinBE = 0x4f, /*>Integer 0–macMaxBE*/
|
||
macPANId = 0x50, /*>PAN ID, 16 bits*/
|
||
macPromiscuousMode = 0x51, /*>Boolean*/
|
||
macResponseWaitTime = 0x5a, /*>Integer 2–64 The maximum time in SuperFrameDurations to wait for responses*/
|
||
macRxOnWhenIdle = 0x52, /*>Boolean*/
|
||
macSecurityEnabled = 0x5d, /*>Boolean*/
|
||
macShortAddress = 0x53, /*>Short address, 16 bits*/
|
||
macSuperframeOrder = 0x54, /*>Integer 0–15, The length of the active portion of the outgoing superframe, 15 = none*/
|
||
macSyncSymbolOffset = 0x5b, /*>Integer 0x000–0x100 (symbols) timestamp offset*/
|
||
macTimestampSupported = 0x5c, /*>Boolean*/
|
||
macTransactionPersistenceTime = 0x55, /*>Integer 0x0000–0xffff (unit periods)*/
|
||
macKeyTable = 0x71, /*>A table of KeyDescriptor entries, each containing keys and related information required for secured communications.*/
|
||
macKeyTableEntries = 0x72, /*>The number of entries in macKeyTable.*/
|
||
macDeviceTable = 0x73, /*>List of Descriptor entries, each indicating a remote device*/
|
||
macDeviceTableEntries = 0x74, /*>The number of entries in macDeviceTable.*/
|
||
macSecurityLevelTable = 0x75, /*>A table of SecurityLevelDescriptor entries*/
|
||
macSecurityLevelTableEntries = 0x76, /*>The number of entries in macSecurityLevelTable*/
|
||
macFrameCounter = 0x77, /*>The outgoing frame counter*/
|
||
macAutoRequestSecurityLevel = 0x78, /*>0x00–0x07 The security level used for automatic data requests.*/
|
||
macAutoRequestKeyIdMode = 0x79, /*> The key identifier mode used for automatic data requests.*/
|
||
macAutoRequestKeySource = 0x7a, /*>Key source for automatic data*/
|
||
macAutoRequestKeyIndex = 0x7b, /*>The index of the key used for automatic data*/
|
||
macDefaultKeySource = 0x7c, /*>Default key source*/
|
||
//NON standard extension
|
||
macThreadForceLongAddressForBeacon = 0xff /*>Thread standard force beacon source address for extended 64-bit*/
|
||
} mlme_attr_t;
|
||
|
||
//typedef struct mlme_associate_s {
|
||
// uint8_t LogicalChannel;
|
||
// uint8_t ChannelPage;
|
||
// unsigned CoordAddrMode:2;
|
||
// uint16_t CoordPANId;
|
||
// uint8_t CoordAddress[8];
|
||
// uint8_t CapabilityInformation;
|
||
// mlme_security_t Key;
|
||
//} mlme_associate_t;
|
||
|
||
//typedef struct mlme_associate_ind_s {
|
||
// uint8_t DeviceAddress[8];
|
||
// uint8_t CapabilityInformation;
|
||
// mlme_security_t Key;
|
||
//} mlme_associate_ind_t;
|
||
|
||
//typedef struct mlme_associate_resp_s {
|
||
// uint8_t DeviceAddress[8];
|
||
// uint16_t AssocShortAddress;
|
||
// uint8_t status;
|
||
// mlme_security_t Key;
|
||
//} mlme_associate_resp_t;
|
||
|
||
//typedef struct mlme_associate_conf_s {
|
||
// uint16_t AssocShortAddress;
|
||
// uint8_t status;
|
||
// mlme_security_t Key;
|
||
//} mlme_associate_conf_t;
|
||
|
||
//typedef struct mlme_disassociate_s {
|
||
// unsigned DeviceAddrMode:2;
|
||
// uint16_t DevicePANId;
|
||
// uint8_t DeviceAddress[8];
|
||
// uint8_t DisassociateReason;
|
||
// bool TxIndirect:1;
|
||
// mlme_security_t Key;
|
||
//} mlme_disassociate_t;
|
||
|
||
//typedef struct mlme_disassociate_ind_s {
|
||
// uint8_t DeviceAddress[8];
|
||
// uint8_t DisassociateReason;
|
||
// mlme_security_t Key;
|
||
//} mlme_disassociate_ind_t;
|
||
|
||
//typedef struct mlme_disassociate_conf_s {
|
||
// uint8_t status;
|
||
// unsigned DeviceAddrMode:2;
|
||
// uint16_t DevicePANId;
|
||
// uint8_t DeviceAddress[8];
|
||
//} mlme_disassociate_conf_t;
|
||
|
||
/**
|
||
* @brief struct mlme_beacon_pending_address_spec_t Pending address specification field
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (figure 51) for more details
|
||
*/
|
||
typedef struct mlme_beacon_pending_address_spec_s{
|
||
unsigned short_address_count:3;
|
||
unsigned extended_address_count:3;
|
||
}mlme_beacon_pending_address_spec_t;
|
||
|
||
/**
|
||
* @brief struct mlme_beacon_gts_spec_t Format of GTS specification field
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (figure 48) for more details
|
||
*/
|
||
typedef struct mlme_beacon_gts_spec_s{
|
||
unsigned description_count:3;
|
||
unsigned gts_permit:1;
|
||
}mlme_beacon_gts_spec_t;
|
||
|
||
/**
|
||
* @brief struct mlme_beacon_ind_t Beacon notify structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 54) for more details
|
||
*/
|
||
typedef struct mlme_beacon_ind_s {
|
||
uint8_t BSN;
|
||
mlme_pan_descriptor_t PANDescriptor;
|
||
mlme_beacon_pending_address_spec_t PendAddrSpec;
|
||
uint8_t *AddrList;
|
||
uint16_t beacon_data_length;
|
||
uint8_t *beacon_data;
|
||
} mlme_beacon_ind_t;
|
||
|
||
/**
|
||
* @brief struct mlme_scan_t Scan request structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 67) for more details
|
||
*/
|
||
typedef struct mlme_scan_s {
|
||
mac_scan_type_t ScanType; /*> ED=0, active=1, passive=2, orphan=3*/
|
||
channel_list_s ScanChannels; /*>bit field, low 27 bits used*/
|
||
uint8_t ScanDuration; /*>0-14, scan duration/channel*/
|
||
uint8_t ChannelPage; /*>0-31*/
|
||
mlme_security_t Key;
|
||
} mlme_scan_t;
|
||
|
||
/**
|
||
* @brief struct mlme_set_t Set request structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 70) for more details
|
||
*/
|
||
typedef struct mlme_set_s {
|
||
mlme_attr_t attr;
|
||
uint8_t attr_index;
|
||
const void *value_pointer;
|
||
uint8_t value_size;
|
||
} mlme_set_t;
|
||
|
||
/**
|
||
* @brief struct mlme_get_t Get request structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 56) for more details
|
||
*/
|
||
typedef struct mlme_get_s {
|
||
mlme_attr_t attr;
|
||
uint8_t attr_index;
|
||
} mlme_get_t;
|
||
|
||
/**
|
||
* @brief struct mlme_get_conf_t Get confirm structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 57) for more details
|
||
*/
|
||
typedef struct mlme_get_conf_s {
|
||
uint8_t status;
|
||
mlme_attr_t attr;
|
||
uint8_t attr_index;
|
||
void *value_pointer;
|
||
uint8_t value_size;
|
||
} mlme_get_conf_t;
|
||
|
||
/**
|
||
* @brief struct mlme_set_conf_t Set confirm structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 71) for more details
|
||
*/
|
||
typedef struct mlme_set_conf_s {
|
||
uint8_t status;
|
||
mlme_attr_t attr;
|
||
uint8_t attr_index;
|
||
} mlme_set_conf_t;
|
||
|
||
|
||
#define MLME_MAC_RES_SIZE_MAX 16
|
||
|
||
/**
|
||
* @brief struct mlme_scan_conf_t Scan confirm structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 68) for more details
|
||
*/
|
||
typedef struct mlme_scan_conf_s {
|
||
uint8_t status;
|
||
unsigned ScanType:2;
|
||
uint8_t ChannelPage;
|
||
channel_list_s UnscannedChannels;
|
||
uint8_t ResultListSize;
|
||
uint8_t *ED_values;
|
||
mlme_pan_descriptor_t *PAN_values[MLME_MAC_RES_SIZE_MAX];
|
||
} mlme_scan_conf_t;
|
||
|
||
/**
|
||
* @brief struct mlme_reset_t Reset request structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 63) for more details
|
||
*/
|
||
typedef struct mlme_reset_s {
|
||
bool SetDefaultPIB;
|
||
} mlme_reset_t;
|
||
|
||
/**
|
||
* @brief struct mlme_reset_conf_t Reset confirm structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 64) for more details
|
||
*/
|
||
typedef struct mlme_reset_conf_s {
|
||
uint8_t status;
|
||
} mlme_reset_conf_t;
|
||
|
||
/**
|
||
* @brief struct mlme_rx_enable_t Rx enable request structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 65) for more details
|
||
*/
|
||
//typedef struct mlme_rx_enable_s {
|
||
// bool DeferPermit;
|
||
// uint32_t RxOnTime;
|
||
// uint32_t RxOnDuration;
|
||
//} mlme_rx_enable_t;
|
||
|
||
/**
|
||
* @brief struct mlme_rx_enable_conf_t Rx enable confirm structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 66) for more details
|
||
*/
|
||
//typedef struct mlme_rx_enable_conf_s {
|
||
// uint8_t status;
|
||
//} mlme_rx_enable_conf_t;
|
||
|
||
/**
|
||
* @brief struct mlme_comm_status_t Comm status indication structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 69) for more details
|
||
*/
|
||
typedef struct mlme_comm_status_s {
|
||
uint16_t PANId;
|
||
unsigned SrcAddrMode:2;
|
||
uint8_t SrcAddr[8];
|
||
unsigned DstAddrMode:2;
|
||
uint8_t DstAddr[8];
|
||
uint8_t status;
|
||
mlme_security_t Key;
|
||
} mlme_comm_status_t;
|
||
|
||
/**
|
||
* @brief struct mlme_start_t Start request structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 72) for more details
|
||
*/
|
||
typedef struct mlme_start_s {
|
||
uint16_t PANId;
|
||
uint8_t LogicalChannel;
|
||
uint8_t ChannelPage;
|
||
uint32_t StartTime;
|
||
unsigned BeaconOrder:4;
|
||
unsigned SuperframeOrder:4;
|
||
bool PANCoordinator:1;
|
||
bool BatteryLifeExtension:1;
|
||
bool CoordRealignment:1;
|
||
mlme_security_t CoordRealignKey;
|
||
mlme_security_t BeaconRealignKey;
|
||
} mlme_start_t;
|
||
|
||
/**
|
||
* @brief struct mlme_start_conf_t Start confirm structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 73) for more details
|
||
*/
|
||
typedef struct mlme_start_conf_s {
|
||
uint8_t status;
|
||
} mlme_start_conf_t;
|
||
|
||
//typedef struct mlme_sync_s {
|
||
// uint8_t LogicalChannel;
|
||
// uint8_t ChannelPage;
|
||
// bool TrackBeacon;
|
||
//} mlme_sync_t;
|
||
|
||
//typedef struct mlme_sync_loss_s {
|
||
// uint8_t LossReason;
|
||
// uint16_t PANId;
|
||
// uint8_t LogicalChannel;
|
||
// uint8_t ChannelPage;
|
||
// mlme_security_t Key;
|
||
//} mlme_sync_loss_t;
|
||
|
||
/**
|
||
* @brief struct mlme_poll_t Poll request structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 76) for more details
|
||
*/
|
||
typedef struct mlme_poll_s {
|
||
unsigned CoordAddrMode:2;
|
||
uint16_t CoordPANId;
|
||
uint8_t CoordAddress[8];
|
||
mlme_security_t Key;
|
||
} mlme_poll_t;
|
||
|
||
/**
|
||
* @brief struct mlme_poll_conf_t Poll confirm structure
|
||
*
|
||
* See IEEE standard 802.15.4-2006 (table 77) for more details
|
||
*/
|
||
typedef struct mlme_poll_conf_s {
|
||
uint8_t status;
|
||
} mlme_poll_conf_t;
|
||
|
||
#endif /* MLME_H_ */
|