|
Packit |
34410b |
/*
|
|
Packit |
34410b |
*
|
|
Packit |
34410b |
* BlueZ - Bluetooth protocol stack for Linux
|
|
Packit |
34410b |
*
|
|
Packit |
34410b |
* Copyright (C) 2017 Intel Corporation. All rights reserved.
|
|
Packit |
34410b |
*
|
|
Packit |
34410b |
*
|
|
Packit |
34410b |
* This library is free software; you can redistribute it and/or
|
|
Packit |
34410b |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
34410b |
* License as published by the Free Software Foundation; either
|
|
Packit |
34410b |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
34410b |
*
|
|
Packit |
34410b |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
34410b |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
34410b |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
34410b |
* Lesser General Public License for more details.
|
|
Packit |
34410b |
*
|
|
Packit |
34410b |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
34410b |
* License along with this library; if not, write to the Free Software
|
|
Packit |
34410b |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
Packit |
34410b |
*
|
|
Packit |
34410b |
*/
|
|
Packit |
34410b |
|
|
Packit |
34410b |
/* Proxy PDU Types */
|
|
Packit |
34410b |
#define PROXY_NETWORK_PDU 0x00
|
|
Packit |
34410b |
#define PROXY_MESH_BEACON 0x01
|
|
Packit |
34410b |
#define PROXY_CONFIG_PDU 0x02
|
|
Packit |
34410b |
#define PROXY_PROVISIONING_PDU 0x03
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define CTL 0x80
|
|
Packit |
34410b |
#define TTL_MASK 0x7f
|
|
Packit |
34410b |
#define SEQ_MASK 0xffffff
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define CREDFLAG_MASK 0x1000
|
|
Packit |
34410b |
#define APP_IDX_MASK 0x0fff
|
|
Packit |
34410b |
#define APP_IDX_DEV 0x7fff
|
|
Packit |
34410b |
#define APP_IDX_ANY 0x8000
|
|
Packit |
34410b |
#define APP_IDX_NET 0xffff
|
|
Packit |
34410b |
#define APP_IDX_INVALID 0xffff
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define NET_IDX_INVALID 0xffff
|
|
Packit |
34410b |
#define NET_IDX_PRIMARY 0x0000
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define KEY_CACHE_SIZE 64
|
|
Packit |
34410b |
#define FRND_CACHE_MAX 32
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define UNASSIGNED_ADDRESS 0x0000
|
|
Packit |
34410b |
#define PROXIES_ADDRESS 0xfffc
|
|
Packit |
34410b |
#define FRIENDS_ADDRESS 0xfffd
|
|
Packit |
34410b |
#define RELAYS_ADDRESS 0xfffe
|
|
Packit |
34410b |
#define ALL_NODES_ADDRESS 0xffff
|
|
Packit |
34410b |
#define VIRTUAL_ADDRESS_LOW 0x8000
|
|
Packit |
34410b |
#define VIRTUAL_ADDRESS_HIGH 0xbfff
|
|
Packit |
34410b |
#define GROUP_ADDRESS_LOW 0xc000
|
|
Packit |
34410b |
#define GROUP_ADDRESS_HIGH 0xff00
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define DEFAULT_TTL 0xff
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define PRIMARY_ELEMENT_IDX 0x00
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define MAX_UNSEG_LEN 15 /* msg_len == 11 + sizeof(MIC) */
|
|
Packit |
34410b |
#define MAX_SEG_LEN 12 /* UnSeg length - 3 octets overhead */
|
|
Packit |
34410b |
#define SEG_MAX(len) (((len) <= MAX_UNSEG_LEN) ? 0 : \
|
|
Packit |
34410b |
(((len) - 1) / MAX_SEG_LEN))
|
|
Packit |
34410b |
#define SEG_OFF(seg) ((seg) * MAX_SEG_LEN)
|
|
Packit |
34410b |
#define MAX_SEG_TO_LEN(seg) ((seg) ? SEG_OFF((seg) + 1) : MAX_UNSEG_LEN)
|
|
Packit |
34410b |
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define IS_UNASSIGNED(x) ((x) == UNASSIGNED_ADDRESS)
|
|
Packit |
34410b |
#define IS_UNICAST(x) (((x) > UNASSIGNED_ADDRESS) && \
|
|
Packit |
34410b |
((x) < VIRTUAL_ADDRESS_LOW))
|
|
Packit |
34410b |
#define IS_VIRTUAL(x) (((x) >= VIRTUAL_ADDRESS_LOW) && \
|
|
Packit |
34410b |
((x) <= VIRTUAL_ADDRESS_HIGH))
|
|
Packit |
34410b |
#define IS_GROUP(x) (((x) >= GROUP_ADDRESS_LOW) && \
|
|
Packit |
34410b |
((x) <= GROUP_ADDRESS_HIGH))
|
|
Packit |
34410b |
#define IS_ALL_NODES(x) ((x) == ALL_NODES_ADDRESS)
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define SEGMENTED 0x80
|
|
Packit |
34410b |
#define UNSEGMENTED 0x00
|
|
Packit |
34410b |
#define SEG_HDR_SHIFT 31
|
|
Packit |
34410b |
#define IS_SEGMENTED(hdr) (!!((hdr) & (true << SEG_HDR_SHIFT)))
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define KEY_ID_MASK 0x7f
|
|
Packit |
34410b |
#define KEY_AID_MASK 0x3f
|
|
Packit |
34410b |
#define KEY_ID_AKF 0x40
|
|
Packit |
34410b |
#define KEY_AID_SHIFT 0
|
|
Packit |
34410b |
#define AKF_HDR_SHIFT 30
|
|
Packit |
34410b |
#define KEY_HDR_SHIFT 24
|
|
Packit |
34410b |
#define HAS_APP_KEY(hdr) (!!((hdr) & (true << AKF_HDR_SHIFT)))
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define OPCODE_MASK 0x7f
|
|
Packit |
34410b |
#define OPCODE_HDR_SHIFT 24
|
|
Packit |
34410b |
#define RELAY 0x80
|
|
Packit |
34410b |
#define RELAY_HDR_SHIFT 23
|
|
Packit |
34410b |
#define SZMIC 0x80
|
|
Packit |
34410b |
#define SZMIC_HDR_SHIFT 23
|
|
Packit |
34410b |
#define SEQ_ZERO_MASK 0x1fff
|
|
Packit |
34410b |
#define SEQ_ZERO_HDR_SHIFT 10
|
|
Packit |
34410b |
#define IS_RELAYED(hdr) (!!((hdr) & (true << RELAY_HDR_SHIFT)))
|
|
Packit |
34410b |
#define HAS_MIC64(hdr) (!!((hdr) & (true << SZMIC_HDR_SHIFT)))
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define SEG_MASK 0x1f
|
|
Packit |
34410b |
#define SEGO_HDR_SHIFT 5
|
|
Packit |
34410b |
#define SEGN_HDR_SHIFT 0
|
|
Packit |
34410b |
#define SEG_TOTAL(hdr) (((hdr) >> SEGN_HDR_SHIFT) & SEG_MASK)
|
|
Packit |
34410b |
/* Proxy Configuration Opcodes */
|
|
Packit |
34410b |
#define PROXY_OP_SET_FILTER_TYPE 0x00
|
|
Packit |
34410b |
#define PROXY_OP_FILTER_ADD 0x01
|
|
Packit |
34410b |
#define PROXY_OP_FILTER_DEL 0x02
|
|
Packit |
34410b |
#define PROXY_OP_FILTER_STATUS 0x03
|
|
Packit |
34410b |
|
|
Packit |
34410b |
/* Proxy Filter Defines */
|
|
Packit |
34410b |
#define PROXY_FILTER_WHITELIST 0x00
|
|
Packit |
34410b |
#define PROXY_FILTER_BLACKLIST 0x01
|
|
Packit |
34410b |
|
|
Packit |
34410b |
/* Network Tranport Opcodes */
|
|
Packit |
34410b |
#define NET_OP_SEG_ACKNOWLEDGE 0x00
|
|
Packit |
34410b |
#define NET_OP_FRND_POLL 0x01
|
|
Packit |
34410b |
#define NET_OP_FRND_UPDATE 0x02
|
|
Packit |
34410b |
#define NET_OP_FRND_REQUEST 0x03
|
|
Packit |
34410b |
#define NET_OP_FRND_OFFER 0x04
|
|
Packit |
34410b |
#define NET_OP_FRND_CLEAR 0x05
|
|
Packit |
34410b |
#define NET_OP_FRND_CLEAR_CONFIRM 0x06
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define NET_OP_PROXY_SUB_ADD 0x07
|
|
Packit |
34410b |
#define NET_OP_PROXY_SUB_REMOVE 0x08
|
|
Packit |
34410b |
#define NET_OP_PROXY_SUB_CONFIRM 0x09
|
|
Packit |
34410b |
#define NET_OP_HEARTBEAT 0x0a
|
|
Packit |
34410b |
|
|
Packit |
34410b |
/* Key refresh state on the mesh */
|
|
Packit |
34410b |
#define NET_KEY_REFRESH_PHASE_NONE 0x00
|
|
Packit |
34410b |
#define NET_KEY_REFRESH_PHASE_ONE 0x01
|
|
Packit |
34410b |
#define NET_KEY_REFRESH_PHASE_TWO 0x02
|
|
Packit |
34410b |
#define NET_KEY_REFRESH_PHASE_THREE 0x03
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define MESH_FEATURE_RELAY 1
|
|
Packit |
34410b |
#define MESH_FEATURE_PROXY 2
|
|
Packit |
34410b |
#define MESH_FEATURE_FRIEND 4
|
|
Packit |
34410b |
#define MESH_FEATURE_LPN 8
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define MESH_MAX_ACCESS_PAYLOAD 380
|
|
Packit |
34410b |
|
|
Packit |
34410b |
#define MESH_STATUS_SUCCESS 0x00
|
|
Packit |
34410b |
#define MESH_STATUS_INVALID_ADDRESS 0x01
|
|
Packit |
34410b |
#define MESH_STATUS_INVALID_MODEL 0x02
|
|
Packit |
34410b |
#define MESH_STATUS_INVALID_APPKEY 0x03
|
|
Packit |
34410b |
#define MESH_STATUS_INVALID_NETKEY 0x04
|
|
Packit |
34410b |
#define MESH_STATUS_INSUFF_RESOURCES 0x05
|
|
Packit |
34410b |
#define MESH_STATUS_IDX_ALREADY_STORED 0x06
|
|
Packit |
34410b |
#define MESH_STATUS_INVALID_PUB_PARAM 0x07
|
|
Packit |
34410b |
#define MESH_STATUS_NOT_SUB_MOD 0x08
|
|
Packit |
34410b |
#define MESH_STATUS_STORAGE_FAIL 0x09
|
|
Packit |
34410b |
#define MESH_STATUS_FEAT_NOT_SUP 0x0a
|
|
Packit |
34410b |
#define MESH_STATUS_CANNOT_UPDATE 0x0b
|
|
Packit |
34410b |
#define MESH_STATUS_CANNOT_REMOVE 0x0c
|
|
Packit |
34410b |
#define MESH_STATUS_CANNOT_BIND 0x0d
|
|
Packit |
34410b |
#define MESH_STATUS_UNABLE_CHANGE_STATE 0x0e
|
|
Packit |
34410b |
#define MESH_STATUS_CANNOT_SET 0x0f
|
|
Packit |
34410b |
#define MESH_STATUS_UNSPECIFIED_ERROR 0x10
|
|
Packit |
34410b |
#define MESH_STATUS_INVALID_BINDING 0x11
|