Blame tools/mesh/mesh-net.h

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