/* packet-ieee802154.h * * IEEE 802.15.4 Dissectors for Wireshark * By Owen Kirby * Copyright 2007 Exegin Technologies Limited * * Wireshark - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef PACKET_IEEE802154_H #define PACKET_IEEE802154_H /* Protocol Abbreviation */ #define IEEE802154_PROTOABBREV_WPAN "wpan" #define IEEE802154_PROTOABBREV_WPAN_BEACON "wpan.beacon" /* PANID dissector list is for Decode-As and stateful dissection only. */ #define IEEE802154_PROTOABBREV_WPAN_PANID "wpan.panid" /* Dissector tables for the Header IEs and Payload IEs */ #define IEEE802154_HEADER_IE_DTABLE "wpan.header_ie" #define IEEE802154_PAYLOAD_IE_DTABLE "wpan.payload_ie" #define IEEE802154_MLME_IE_DTABLE "wpan.mlme_ie" /* Packet Overhead from MAC header + footer (excluding addressing) */ #define IEEE802154_MAX_FRAME_LEN 127 #define IEEE802154_FCS_LEN 2 /* Command Frame Identifier Types Definions */ #define IEEE802154_CMD_ASSOC_REQ 0x01 #define IEEE802154_CMD_ASSOC_RSP 0x02 #define IEEE802154_CMD_DISASSOC_NOTIFY 0x03 #define IEEE802154_CMD_DATA_RQ 0x04 #define IEEE802154_CMD_PANID_CONFLICT 0x05 #define IEEE802154_CMD_ORPHAN_NOTIFY 0x06 #define IEEE802154_CMD_BEACON_REQ 0x07 #define IEEE802154_CMD_COORD_REALIGN 0x08 #define IEEE802154_CMD_GTS_REQ 0x09 #define IEEE802154_CMD_TRLE_MGMT_REQ 0x0a #define IEEE802154_CMD_TRLE_MGMT_RSP 0x0b /* 0x0c-0x12 reserved in IEEE802.15.4-2015 */ #define IEEE802154_CMD_DSME_ASSOC_REQ 0x13 #define IEEE802154_CMD_DSME_ASSOC_RSP 0x14 #define IEEE802154_CMD_DSME_GTS_REQ 0x15 #define IEEE802154_CMD_DSME_GTS_RSP 0x16 #define IEEE802154_CMD_DSME_GTS_NOTIFY 0x17 #define IEEE802154_CMD_DSME_INFO_REQ 0x18 #define IEEE802154_CMD_DSME_INFO_RSP 0x19 #define IEEE802154_CMD_DSME_BEACON_ALLOC_NOTIFY 0x1a #define IEEE802154_CMD_DSME_BEACON_COLL_NOTIFY 0x1b #define IEEE802154_CMD_DSME_LINK_REPORT 0x1c /* 0x1d-0x1f reserved in IEEE802.15.4-2015 */ #define IEEE802154_CMD_RIT_DATA_REQ 0x20 #define IEEE802154_CMD_DBS_REQ 0x21 #define IEEE802154_CMD_DBS_RSP 0x22 /* 0x22-0x1f reserved in IEEE802.15.4-2015 */ /* Definitions for Association Response Command */ #define IEEE802154_CMD_ASRSP_AS_SUCCESS 0x00 #define IEEE802154_CMD_ASRSP_PAN_FULL 0x01 #define IEEE802154_CMD_ASRSP_PAN_DENIED 0x02 /* Bit Masks for Capability Information Field Included in Association Req. command */ #define IEEE802154_CMD_CINFO_ALT_PAN_COORD 0x01 #define IEEE802154_CMD_CINFO_DEVICE_TYPE 0x02 #define IEEE802154_CMD_CINFO_POWER_SRC 0x04 #define IEEE802154_CMD_CINFO_IDLE_RX 0x08 #define IEEE802154_CMD_CINFO_SEC_CAPABLE 0x40 #define IEEE802154_CMD_CINFO_ALLOC_ADDR 0x80 #define IEEE802154_CMD_GTS_REQ_LEN 0x0F #define IEEE802154_CMD_GTS_REQ_DIR 0x10 #define IEEE802154_CMD_GTS_REQ_TYPE 0x20 /* Bit masks & shifts for various beacon fields */ #define IEEE802154_BEACON_ORDER_MASK 0x000F #define IEEE802154_SUPERFRAME_ORDER_MASK 0x00F0 #define IEEE802154_SUPERFRAME_CAP_MASK 0x0F00 #define IEEE802154_BATT_EXTENSION_MASK 0x1000 #define IEEE802154_SUPERFRAME_COORD_MASK 0x4000 #define IEEE802154_ASSOC_PERMIT_MASK 0x8000 #define IEEE802154_SUPERFRAME_ORDER_SHIFT 4 #define IEEE802154_SUPERFRAME_CAP_SHIFT 8 #define IEEE802154_GTS_COUNT_MASK 0x07 #define IEEE802154_GTS_PERMIT_MASK 0x80 #define IEEE802154_GTS_DIRECTION_SLOT(i) (0x01<<(i)) #define IEEE802154_GTS_MAX_SLOTS 7 #define IEEE802154_GTS_DIRECTION_SLOT1 0x01 #define IEEE802154_GTS_DIRECTION_SLOT2 0x02 #define IEEE802154_GTS_DIRECTION_SLOT3 0x04 #define IEEE802154_GTS_DIRECTION_SLOT4 0x08 #define IEEE802154_GTS_DIRECTION_SLOT5 0x10 #define IEEE802154_GTS_DIRECTION_SLOT6 0x20 #define IEEE802154_GTS_DIRECTION_SLOT7 0x40 #define IEEE802154_GTS_SLOT_MASK 0x0F #define IEEE802154_GTS_LENGTH_MASK 0xF0 #define IEEE802154_GTS_LENGTH_SHIFT 4 #define IEEE802154_PENDADDR_SHORT_MASK 0x07 #define IEEE802154_PENDADDR_LONG_MASK 0x70 #define IEEE802154_PENDADDR_LONG_SHIFT 4 #define IEEE802154_SUPERFRAME_DURATION (IEEE802154_BASE_SLOT_DURATION * IEEE802154_SUPERFRAME_SLOTS) #define IEEE802154_BASE_SLOT_DURATION 60 #define IEEE802154_SUPERFRAME_SLOTS 16 /* Bit-masks for the FCF */ #define IEEE802154_FCF_TYPE_MASK 0x0007 /* Frame Type Mask */ #define IEEE802154_FCF_SEC_EN 0x0008 #define IEEE802154_FCF_FRAME_PND 0x0010 #define IEEE802154_FCF_ACK_REQ 0x0020 #define IEEE802154_FCF_PAN_ID_COMPRESSION 0x0040 /* known as Intra PAN prior to IEEE 802.15.4-2006 */ #define IEEE802154_FCF_SEQNO_SUPPRESSION 0x0100 #define IEEE802154_FCF_IE_PRESENT 0x0200 #define IEEE802154_FCF_DADDR_MASK 0x0C00 /* destination addressing mask */ #define IEEE802154_FCF_VERSION 0x3000 #define IEEE802154_FCF_SADDR_MASK 0xC000 /* source addressing mask */ /* Frame Type Definitions */ #define IEEE802154_FCF_BEACON 0x0 /* Beacon Frame */ #define IEEE802154_FCF_DATA 0x1 /* Data Frame */ #define IEEE802154_FCF_ACK 0x2 /* Acknowlegement Frame */ #define IEEE802154_FCF_CMD 0x3 /* MAC Command Frame */ #define IEEE802154_FCF_RESERVED 0x4 /* reserved */ #define IEEE802154_FCF_MULTIPURPOSE 0x5 /* Multipurpose */ #define IEEE802154_FCF_FRAGMENT 0x6 /* Fragment or Frak */ #define IEEE802154_FCF_EXTENDED 0x7 /* Extended */ /* Frame version definitions. */ #define IEEE802154_VERSION_2003 0x0 #define IEEE802154_VERSION_2006 0x1 #define IEEE802154_VERSION_2015 0x2 #define IEEE802154_VERSION_RESERVED 0x3 /* Address Mode Definitions */ #define IEEE802154_FCF_ADDR_NONE 0x0 #define IEEE802154_FCF_ADDR_RESERVED 0x1 #define IEEE802154_FCF_ADDR_SHORT 0x2 #define IEEE802154_FCF_ADDR_EXT 0x3 /* Header IE Fields */ #define IEEE802154_HEADER_IE_TYPE_MASK 0x8000 #define IEEE802154_HEADER_IE_ID_MASK 0x7F80 #define IEEE802154_HEADER_IE_LENGTH_MASK 0x007F /* Payload IE Fields */ #define IEEE802154_PAYLOAD_IE_TYPE_MASK 0x8000 #define IEEE802154_PAYLOAD_IE_ID_MASK 0x7800 #define IEEE802154_PAYLOAD_IE_LENGTH_MASK 0x07FF /* Payload (Nested) Sub IE Fields */ #define IEEE802154_PSIE_TYPE_MASK 0x8000 #define IEEE802154_PSIE_ID_MASK_SHORT 0x7F00 #define IEEE802154_PSIE_LENGTH_MASK_SHORT 0x00FF #define IEEE802154_PSIE_ID_MASK_LONG 0x7800 #define IEEE802154_PSIE_LENGTH_MASK_LONG 0x07FF /* Enhanced Beacon Filter IE */ #define IEEE802154_MLME_PSIE_EB_FLT_PJOIN 0x01 #define IEEE802154_MLME_PSIE_EB_FLT_LQI 0x02 #define IEEE802154_MLME_PSIE_EB_FLT_PERCENT 0x04 #define IEEE802154_MLME_PSIE_EB_FLT_ATTR_LEN 0x18 /* Vendor OUIs */ /* Bit-masks for CC24xx style FCS */ #define IEEE802154_CC24xx_CORRELATION 0x7F00 #define IEEE802154_CC24xx_CRC_OK 0x8000 #define IEEE802154_CC24xx_RSSI 0x00FF /* Special IEEE802.15.4 Addresses */ #define IEEE802154_NO_ADDR16 0xFFFE #define IEEE802154_BCAST_ADDR 0xFFFF #define IEEE802154_BCAST_PAN 0xFFFF /* Bit mask for PHY length field */ #define IEEE802154_PHY_LENGTH_MASK 0x7F /* Auxiliary Security Header */ #define IEEE802154_AUX_SEC_LEVEL_MASK 0x07 /* Security Level */ #define IEEE802154_AUX_KEY_ID_MODE_MASK 0x18 /* Key Identifier Mode */ #define IEEE802154_AUX_KEY_ID_MODE_SHIFT 3 #define IEEE802154_AUX_FRAME_COUNTER_SUPPRESSION_MASK 0x20 /* 802.15.4-2015 */ #define IEEE802154_AUX_ASN_IN_NONCE_MASK 0x40 /* 802.15.4-2015 */ /* Note: 802.15.4-2015 specifies bits 6-7 as reserved, but 6 is used for ASN */ #define IEEE802154_AUX_CTRL_RESERVED_MASK 0x80 /* Reserved */ /* Thread-specific well-known key support */ #define IEEE802154_THR_WELL_KNOWN_KEY_INDEX 0xff #define IEEE802154_THR_WELL_KNOWN_KEY_SRC 0xffffffff #define IEEE802154_THR_WELL_KNOWN_EXT_ADDR 0x3506feb823d48712ULL typedef enum { SECURITY_LEVEL_NONE = 0x00, SECURITY_LEVEL_MIC_32 = 0x01, SECURITY_LEVEL_MIC_64 = 0x02, SECURITY_LEVEL_MIC_128 = 0x03, SECURITY_LEVEL_ENC = 0x04, SECURITY_LEVEL_ENC_MIC_32 = 0x05, SECURITY_LEVEL_ENC_MIC_64 = 0x06, SECURITY_LEVEL_ENC_MIC_128 = 0x07 } ieee802154_security_level; typedef enum { KEY_ID_MODE_IMPLICIT = 0x00, KEY_ID_MODE_KEY_INDEX = 0x01, KEY_ID_MODE_KEY_EXPLICIT_4 = 0x02, KEY_ID_MODE_KEY_EXPLICIT_8 = 0x03 } ieee802154_key_id_mode; typedef enum { KEY_HASH_NONE = 0x00, KEY_HASH_ZIP = 0x01, KEY_HASH_THREAD = 0x02 } ieee802154_key_hash; /* Header IE Element ID */ #define IEEE802154_HEADER_IE_VENDOR_SPECIFIC 0x00 /* Reserved 0x01-0x19 */ #define IEEE802154_HEADER_IE_CSL 0x1a #define IEEE802154_HEADER_IE_RIT 0x1b #define IEEE802154_HEADER_IE_DSME_PAN 0x1c #define IEEE802154_HEADER_IE_RENDEZVOUS 0x1d #define IEEE802154_HEADER_IE_TIME_CORR 0x1e /* Reserved 0x1f-0x20 */ #define IEEE802154_HEADER_IE_EXT_DSME_PAN 0x21 #define IEEE802154_HEADER_IE_FSCD 0x22 #define IEEE802154_HEADER_IE_SMPL_SUPER_FRM 0x23 #define IEEE802154_HEADER_IE_SMPL_GTS 0x24 #define IEEE802154_HEADER_IE_LECIM 0x25 #define IEEE802154_HEADER_IE_TRLE 0x26 #define IEEE802154_HEADER_IE_RCC_CAP 0x27 #define IEEE802154_HEADER_IE_RCCN 0x28 #define IEEE802154_HEADER_IE_GLOBAL_TIME 0x29 #define IEEE802154_HEADER_IE_WISUN 0x2a #define IEEE802154_HEADER_IE_DA_IE 0x2b /* Reserved 0x2c-0x7d */ #define IEEE802154_HEADER_IE_HT1 0x7e #define IEEE802154_HEADER_IE_HT2 0x7f /* Reserved 0x80-0xff */ /* Payload IE Group ID */ #define IEEE802154_PAYLOAD_IE_ESDU 0x0 /* Encapsulated Service Data Unit */ #define IEEE802154_PAYLOAD_IE_MLME 0x1 /* Media Access Control (MAC) subLayer Management Entity */ #define IEEE802154_PAYLOAD_IE_VENDOR 0x2 /* Vendor Specific */ #define IEEE802154_PAYLOAD_IE_MPX 0x3 /* MPX IE (802.15.9) */ #define IEEE802154_PAYLOAD_IE_WISUN 0x4 /* Wi-SUN IE */ #define IEEE802154_PAYLOAD_IE_IETF 0x5 /* IETF IE, RFC 8137 */ /* Reserved 0x6-0xe */ #define IEEE802154_PAYLOAD_IE_TERMINATION 0xf /* Payload IE (Nested) Sub ID */ /* Payload IE (Nested) Sub ID - long format */ /* 0x0 - 0x7 Reserved */ /* 0x0 - 0x8 Vendor Specific */ #define IEEE802154_MLME_SUBIE_CHANNEL_HOPPING 0x9 /* 0xa - 0xf Reserved */ /* 0x10 - 0x19 Short Format Reserved */ #define IEEE802154_MLME_SUBIE_TSCH_SYNCH 0x1A #define IEEE802154_MLME_SUBIE_TSCH_SLOTFR_LINK 0x1B #define IEEE802154_MLME_SUBIE_TSCH_TIMESLOT 0x1C #define IEEE802154_MLME_SUBIE_HOPPING_TIMING 0x1D #define IEEE802154_MLME_SUBIE_ENHANCED_BEACON_FILTER 0x1E #define IEEE802154_MLME_SUBIE_MAC_METRICS 0x1F #define IEEE802154_MLME_SUBIE_ALL_MAC_METRICS 0x20 #define IEEE802154_MLME_SUBIE_COEXISTENCE_SPEC 0x21 #define IEEE802154_MLME_SUBIE_SUN_DEVICE_CAPABILITIES 0x22 #define IEEE802154_MLME_SUBIE_SUN_FSK_GEN_PHY 0x23 #define IEEE802154_MLME_SUBIE_MODE_SWITCH_PARAMETER 0x24 #define IEEE802154_MLME_SUBIE_PHY_PARAMETER_CHANGE 0x25 #define IEEE802154_MLME_SUBIE_O_QPSK_PHY_MODE 0x26 #define IEEE802154_MLME_SUBIE_PCA_ALLOCATION 0x27 #define IEEE802154_MLME_SUBIE_DSSS_OPER_MODE 0x28 #define IEEE802154_MLME_SUBIE_FSK_OPER_MODE 0x29 #define IEEE802154_MLME_SUBIE_TVWS_PHY_OPE_MODE 0x2B #define IEEE802154_MLME_SUBIE_TVWS_DEVICE_CAPAB 0x2C #define IEEE802154_MLME_SUBIE_TVWS_DEVICE_CATEG 0x2D #define IEEE802154_MLME_SUBIE_TVWS_DEVICE_IDENTIF 0x2E #define IEEE802154_MLME_SUBIE_TVWS_DEVICE_LOCATION 0x2F #define IEEE802154_MLME_SUBIE_TVWS_CH_INFOR_QUERY 0x30 #define IEEE802154_MLME_SUBIE_TVWS_CH_INFOR_SOURCE 0x31 #define IEEE802154_MLME_SUBIE_CTM 0x32 #define IEEE802154_MLME_SUBIE_TIMESTAMP 0x33 #define IEEE802154_MLME_SUBIE_TIMESTAMP_DIFF 0x34 #define IEEE802154_MLME_SUBIE_TMCP_SPECIFICATION 0x35 #define IEEE802154_MLME_SUBIE_RCC_PHY_OPER_MODE 0x36 /* 0x37-0x7f Reserved */ /* IETF IE - Sub IE */ #define IEEE802154_IETF_SUBIE_6TOP 0xC9 /* not formally assigned yet */ /* IEEE 802.15.4 cipher block size. */ #define IEEE802154_CIPHER_SIZE 16 /* Macro to compute the MIC length. */ #define IEEE802154_MIC_LENGTH(_level_) ((0x2 << ((_level_) & 0x3)) & ~0x3) /* Macro to check for payload encryption. */ #define IEEE802154_IS_ENCRYPTED(_level_) ((_level_) & 0x4) /*SIXTOP Bit-mask*/ #define IETF_6TOP_VERSION 0x0F #define IETF_6TOP_TYPE 0x30 #define IETF_6TOP_FLAGS_RESERVED 0xC0 #define IETF_6TOP_SEQNUM 0x0F #define IETF_6TOP_GEN 0xF0 /* SIXTOP CMD and RC identifiers */ #define IETF_6TOP_CMD_ADD 0x01 #define IETF_6TOP_CMD_DELETE 0x02 #define IETF_6TOP_CMD_RELOCATE 0x03 #define IETF_6TOP_CMD_COUNT 0x04 #define IETF_6TOP_CMD_LIST 0x05 #define IETF_6TOP_CMD_CLEAR 0x06 #define IETF_6TOP_RC_SUCCESS 0x00 #define IETF_6TOP_RC_ERROR 0x01 #define IETF_6TOP_RC_EOL 0x02 #define IETF_6TOP_RC_RESET 0x03 #define IETF_6TOP_RC_VER_ERR 0x04 #define IETF_6TOP_RC_SFID_ERR 0x05 #define IETF_6TOP_RC_GEN_ERR 0x06 #define IETF_6TOP_RC_BUSY 0x07 #define IETF_6TOP_RC_NORES 0x08 #define IETF_6TOP_RC_CELLLIST_ERR 0x09 /* SIXTOP Message Types */ #define IETF_6TOP_TYPE_REQUEST 0x00 #define IETF_6TOP_TYPE_RESPONSE 0x01 #define IETF_6TOP_TYPE_CONFIRMATION 0x02 #define IETF_6TOP_TYPE_RESERVED 0x03 /* SIXTOP Cell Options */ #define IETF_6TOP_CELL_OPTION_TX 0x01 #define IETF_6TOP_CELL_OPTION_RX 0x02 #define IETF_6TOP_CELL_OPTION_SHARED 0x04 #define IETF_6TOP_CELL_OPTION_RESERVED 0xF8 /* IEEE 802.15.9 MPX IE */ #define IEEE802159_MPX_TRANSFER_TYPE_MASK 0x07 #define IEEE802159_MPX_TRANSACTION_ID_MASK 0xf8 #define IEEE802159_MPX_TRANSACTION_ID_SHIFT 0x03 /* IEEE 802.15.9 Table 19 */ #define IEEE802159_MPX_FULL_FRAME 0 #define IEEE802159_MPX_FULL_FRAME_NO_MUXID 1 #define IEEE802159_MPX_NON_LAST_FRAGMENT 2 #define IEEE802159_MPX_LAST_FRAGMENT 4 #define IEEE802159_MPX_ABORT 6 /* IEEE 802.15.9 Table 20 */ #define IEEE802159_MPX_MULTIPLEX_ID_KMP 1 #define IEEE802159_MPX_MULTIPLEX_ID_WISUN 2 /* IEEE 802.15.9 Table 21 */ #define IEEE802159_MPX_KMP_ID_IEEE8021X 1 #define IEEE802159_MPX_KMP_ID_HIP 2 #define IEEE802159_MPX_KMP_ID_IKEV2 3 #define IEEE802159_MPX_KMP_ID_PANA 4 #define IEEE802159_MPX_KMP_ID_DRAGONFLY 5 #define IEEE802159_MPX_KMP_ID_IEEE80211_4WH 6 #define IEEE802159_MPX_KMP_ID_IEEE80211_GKH 7 #define IEEE802159_MPX_KMP_ID_ETSI_TS_102_887_2 8 #define IEEE802159_MPX_KMP_ID_VENDOR_SPECIFIC 255 /* Wi-SUN MPX Sub-ID values. */ #define IEEE802159_MPX_WISUN_SUBID_MHDS 0 #define IEEE802159_MPX_WISUN_SUBID_6LOWPAN 1 #define IEEE802159_MPX_WISUN_SUBID_SECURITY 2 /* Structure containing information regarding all necessary packet fields. */ typedef struct { /* Frame control field. */ gint32 version; gint32 frame_type; gint32 dst_addr_mode; gint32 src_addr_mode; gboolean security_enable; gboolean frame_pending; gboolean ack_request; gboolean pan_id_compression; gboolean seqno_suppression; gboolean ie_present; guint8 seqno; /* determined during processing of Header IE*/ gboolean payload_ie_present; /* Addressing Info. */ guint16 dst_pan; guint16 src_pan; guint16 dst16; guint64 dst64; guint16 src16; guint64 src64; /* Security Info. */ ieee802154_security_level security_level; ieee802154_key_id_mode key_id_mode; gboolean frame_counter_suppression; /* 802.15.4-2015 */ guint32 frame_counter; guint8 key_sequence_counter; /* Only for 802.15.4-2003 security suite with encryption */ union { guint32 addr32; guint64 addr64; } key_source; guint8 key_index; /* Command ID (only if frame_type == 0x3) */ guint8 command_id; GHashTable *short_table; } ieee802154_packet; /* Structure for two-way mapping table */ typedef struct { GHashTable *long_table; GHashTable *short_table; } ieee802154_map_tab_t; /* Key used by the short address hash table. */ typedef struct { guint16 pan; guint16 addr; } ieee802154_short_addr; /* Key used by the long address hash table. */ typedef struct { guint64 addr; } ieee802154_long_addr; /* A mapping record for a frame, pointed to by hash table */ typedef struct { const char *proto; /* name of protocol that created this record */ guint start_fnum; guint end_fnum; guint64 addr64; /*guint32 frame_counter; TODO for frame counter sequence checks. */ } ieee802154_map_rec; #define IEEE802154_USER_MAPPING 0 typedef struct { guint16 src_pan; guint16 src16; guint16 dst16; ieee802154_map_rec *map_rec; void *packet; } ieee802154_hints_t; typedef enum { DECRYPT_PACKET_SUCCEEDED, DECRYPT_NOT_ENCRYPTED, DECRYPT_FRAME_COUNTER_SUPPRESSION_UNSUPPORTED, DECRYPT_PACKET_TOO_SMALL, DECRYPT_PACKET_NO_EXT_SRC_ADDR, DECRYPT_PACKET_NO_KEY, DECRYPT_PACKET_DECRYPT_FAILED, DECRYPT_PACKET_MIC_CHECK_FAILED } ws_decrypt_status; /* UAT key structure. */ typedef struct { gchar *pref_key; guint key_index; ieee802154_key_hash hash_type; guint8 key[IEEE802154_CIPHER_SIZE]; guint8 mle_key[IEEE802154_CIPHER_SIZE]; } ieee802154_key_t; /* */ void dissect_ieee802154_superframe (tvbuff_t *, packet_info *, proto_tree *, guint *); void dissect_ieee802154_gtsinfo (tvbuff_t *, packet_info *, proto_tree *, guint *); void dissect_ieee802154_pendaddr (tvbuff_t *, packet_info *, proto_tree *, guint *); void dissect_ieee802154_aux_sec_header_and_key(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, ieee802154_packet *packet, guint *offset); void ccm_init_block(gchar *block, gboolean adata, gint M, guint64 addr, guint32 frame_counter, guint8 level, gint ctr_val); gboolean ccm_ctr_encrypt(const gchar *key, const gchar *iv, gchar *mic, gchar *data, gint length); gboolean ccm_cbc_mac(const gchar *key, const gchar *iv, const gchar *a, gint a_len, const gchar *m, gint m_len, gchar *mic); proto_tree *ieee802154_create_hie_tree(tvbuff_t *tvb, proto_tree *tree, int hf, gint ett); proto_tree *ieee802154_create_pie_tree(tvbuff_t *tvb, proto_tree *tree, int hf, gint ett); typedef struct { unsigned char* rx_mic; guint* rx_mic_length; guint aux_offset; guint aux_length; ws_decrypt_status* status; unsigned char *key; guint key_number; } ieee802154_payload_info_t; typedef gboolean (*ieee802154_set_key_func) (ieee802154_packet * packet, unsigned char* key, unsigned char* alt_key, ieee802154_key_t* key_info); typedef tvbuff_t* (*ieee802154_payload_func) (tvbuff_t *, guint, packet_info *, ieee802154_packet *, ieee802154_payload_info_t*); tvbuff_t *dissect_ieee802154_payload(tvbuff_t * tvb, guint offset, packet_info * pinfo, proto_tree* key_tree, ieee802154_packet * packet, ieee802154_payload_info_t* payload_info, ieee802154_set_key_func set_key_func, ieee802154_payload_func payload_func); typedef gboolean (*ieee802154_set_mac_key_func) (ieee802154_packet * packet, unsigned char* key, unsigned char* alt_key, ieee802154_key_t* uat_key); extern void register_ieee802154_mac_key_hash_handler(guint hash_identifier, ieee802154_set_mac_key_func key_func); /* Short to Extended Address Prototypes */ extern ieee802154_map_rec *ieee802154_addr_update(ieee802154_map_tab_t *, guint16, guint16, guint64, const char *, guint); extern guint ieee802154_short_addr_hash(gconstpointer); extern guint ieee802154_long_addr_hash(gconstpointer key); extern gboolean ieee802154_short_addr_equal(gconstpointer, gconstpointer); extern gboolean ieee802154_long_addr_equal(gconstpointer a, gconstpointer b); extern gboolean ieee802154_short_addr_invalidate(guint16, guint16, guint); extern gboolean ieee802154_long_addr_invalidate(guint64, guint); extern ieee802154_map_tab_t ieee802154_map; #endif /* PACKET_IEEE802154_H */