blob: 6a794f4ecc740e8cb3067597d7c89610fe374787 [file] [log] [blame]
/*
* Copyright (c) 2016 Intel Corporation.
*
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file
* @brief IEEE 802.15.4 L2 stack public header
*/
#ifndef __IEEE802154_H__
#define __IEEE802154_H__
#include <limits.h>
#include <net/net_mgmt.h>
#include <crypto/cipher_structs.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief IEEE 802.15.4 library
* @defgroup ieee802154 IEEE 802.15.4 Library
* @ingroup networking
* @{
*/
#define IEEE802154_MAX_ADDR_LENGTH 8
#define IEEE802154_NO_CHANNEL USHRT_MAX
struct ieee802154_security_ctx {
u32_t frame_counter;
struct cipher_ctx enc;
struct cipher_ctx dec;
u8_t key[16];
u8_t key_len;
u8_t level : 3;
u8_t key_mode : 2;
u8_t _unused : 3;
};
/* This not meant to be used by any code but 802.15.4 L2 stack */
struct ieee802154_context {
u16_t pan_id;
u16_t channel;
struct k_sem ack_lock;
u16_t short_addr;
u8_t ext_addr[IEEE802154_MAX_ADDR_LENGTH];
#ifdef CONFIG_NET_L2_IEEE802154_MGMT
struct ieee802154_req_params *scan_ctx;
union {
struct k_sem res_lock;
struct k_sem req_lock;
};
union {
u8_t ext_addr[IEEE802154_MAX_ADDR_LENGTH];
u16_t short_addr;
} coord;
u8_t coord_addr_len;
#endif
#ifdef CONFIG_NET_L2_IEEE802154_SECURITY
struct ieee802154_security_ctx sec_ctx;
#endif
s16_t tx_power;
u8_t sequence;
u8_t ack_seq;
u8_t ack_received : 1;
u8_t ack_requested : 1;
u8_t associated : 1;
u8_t _unused : 5;
};
#define IEEE802154_L2_CTX_TYPE struct ieee802154_context
#ifdef __cplusplus
}
#endif
/**
* @}
*/
#endif /* __IEEE802154_H__ */