mesh-net.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /* SPDX-License-Identifier: LGPL-2.1-or-later */
  2. /*
  3. *
  4. * BlueZ - Bluetooth protocol stack for Linux
  5. *
  6. * Copyright (C) 2017 Intel Corporation. All rights reserved.
  7. *
  8. *
  9. */
  10. /* Proxy PDU Types */
  11. #define PROXY_NETWORK_PDU 0x00
  12. #define PROXY_MESH_BEACON 0x01
  13. #define PROXY_CONFIG_PDU 0x02
  14. #define PROXY_PROVISIONING_PDU 0x03
  15. #define CTL 0x80
  16. #define TTL_MASK 0x7f
  17. #define SEQ_MASK 0xffffff
  18. #define CREDFLAG_MASK 0x1000
  19. #define APP_IDX_MASK 0x0fff
  20. #define APP_IDX_DEV 0x7fff
  21. #define APP_IDX_ANY 0x8000
  22. #define APP_IDX_NET 0xffff
  23. #define APP_IDX_INVALID 0xffff
  24. #define NET_IDX_INVALID 0xffff
  25. #define NET_IDX_PRIMARY 0x0000
  26. #define KEY_CACHE_SIZE 64
  27. #define FRND_CACHE_MAX 32
  28. #define UNASSIGNED_ADDRESS 0x0000
  29. #define PROXIES_ADDRESS 0xfffc
  30. #define FRIENDS_ADDRESS 0xfffd
  31. #define RELAYS_ADDRESS 0xfffe
  32. #define ALL_NODES_ADDRESS 0xffff
  33. #define VIRTUAL_ADDRESS_LOW 0x8000
  34. #define VIRTUAL_ADDRESS_HIGH 0xbfff
  35. #define GROUP_ADDRESS_LOW 0xc000
  36. #define GROUP_ADDRESS_HIGH 0xff00
  37. #define DEFAULT_TTL 0xff
  38. #define PRIMARY_ELEMENT_IDX 0x00
  39. #define MAX_UNSEG_LEN 15 /* msg_len == 11 + sizeof(MIC) */
  40. #define MAX_SEG_LEN 12 /* UnSeg length - 3 octets overhead */
  41. #define SEG_MAX(len) (((len) <= MAX_UNSEG_LEN) ? 0 : \
  42. (((len) - 1) / MAX_SEG_LEN))
  43. #define SEG_OFF(seg) ((seg) * MAX_SEG_LEN)
  44. #define MAX_SEG_TO_LEN(seg) ((seg) ? SEG_OFF((seg) + 1) : MAX_UNSEG_LEN)
  45. #define IS_UNASSIGNED(x) ((x) == UNASSIGNED_ADDRESS)
  46. #define IS_UNICAST(x) (((x) > UNASSIGNED_ADDRESS) && \
  47. ((x) < VIRTUAL_ADDRESS_LOW))
  48. #define IS_VIRTUAL(x) (((x) >= VIRTUAL_ADDRESS_LOW) && \
  49. ((x) <= VIRTUAL_ADDRESS_HIGH))
  50. #define IS_GROUP(x) (((x) >= GROUP_ADDRESS_LOW) && \
  51. ((x) <= GROUP_ADDRESS_HIGH))
  52. #define IS_ALL_NODES(x) ((x) == ALL_NODES_ADDRESS)
  53. #define SEGMENTED 0x80
  54. #define UNSEGMENTED 0x00
  55. #define SEG_HDR_SHIFT 31
  56. #define IS_SEGMENTED(hdr) (!!((hdr) & (true << SEG_HDR_SHIFT)))
  57. #define KEY_ID_MASK 0x7f
  58. #define KEY_AID_MASK 0x3f
  59. #define KEY_ID_AKF 0x40
  60. #define KEY_AID_SHIFT 0
  61. #define AKF_HDR_SHIFT 30
  62. #define KEY_HDR_SHIFT 24
  63. #define HAS_APP_KEY(hdr) (!!((hdr) & (true << AKF_HDR_SHIFT)))
  64. #define OPCODE_MASK 0x7f
  65. #define OPCODE_HDR_SHIFT 24
  66. #define RELAY 0x80
  67. #define RELAY_HDR_SHIFT 23
  68. #define SZMIC 0x80
  69. #define SZMIC_HDR_SHIFT 23
  70. #define SEQ_ZERO_MASK 0x1fff
  71. #define SEQ_ZERO_HDR_SHIFT 10
  72. #define IS_RELAYED(hdr) (!!((hdr) & (true << RELAY_HDR_SHIFT)))
  73. #define HAS_MIC64(hdr) (!!((hdr) & (true << SZMIC_HDR_SHIFT)))
  74. #define SEG_MASK 0x1f
  75. #define SEGO_HDR_SHIFT 5
  76. #define SEGN_HDR_SHIFT 0
  77. #define SEG_TOTAL(hdr) (((hdr) >> SEGN_HDR_SHIFT) & SEG_MASK)
  78. /* Proxy Configuration Opcodes */
  79. #define PROXY_OP_SET_FILTER_TYPE 0x00
  80. #define PROXY_OP_FILTER_ADD 0x01
  81. #define PROXY_OP_FILTER_DEL 0x02
  82. #define PROXY_OP_FILTER_STATUS 0x03
  83. /* Proxy Filter Defines */
  84. #define PROXY_FILTER_ACCEPT_LIST 0x00
  85. #define PROXY_FILTER_REJECT_LIST 0x01
  86. /* Network Tranport Opcodes */
  87. #define NET_OP_SEG_ACKNOWLEDGE 0x00
  88. #define NET_OP_FRND_POLL 0x01
  89. #define NET_OP_FRND_UPDATE 0x02
  90. #define NET_OP_FRND_REQUEST 0x03
  91. #define NET_OP_FRND_OFFER 0x04
  92. #define NET_OP_FRND_CLEAR 0x05
  93. #define NET_OP_FRND_CLEAR_CONFIRM 0x06
  94. #define NET_OP_PROXY_SUB_ADD 0x07
  95. #define NET_OP_PROXY_SUB_REMOVE 0x08
  96. #define NET_OP_PROXY_SUB_CONFIRM 0x09
  97. #define NET_OP_HEARTBEAT 0x0a
  98. /* Key refresh state on the mesh */
  99. #define NET_KEY_REFRESH_PHASE_NONE 0x00
  100. #define NET_KEY_REFRESH_PHASE_ONE 0x01
  101. #define NET_KEY_REFRESH_PHASE_TWO 0x02
  102. #define NET_KEY_REFRESH_PHASE_THREE 0x03
  103. #define MESH_FEATURE_RELAY 1
  104. #define MESH_FEATURE_PROXY 2
  105. #define MESH_FEATURE_FRIEND 4
  106. #define MESH_FEATURE_LPN 8
  107. #define MESH_MAX_ACCESS_PAYLOAD 380
  108. #define MESH_STATUS_SUCCESS 0x00
  109. #define MESH_STATUS_INVALID_ADDRESS 0x01
  110. #define MESH_STATUS_INVALID_MODEL 0x02
  111. #define MESH_STATUS_INVALID_APPKEY 0x03
  112. #define MESH_STATUS_INVALID_NETKEY 0x04
  113. #define MESH_STATUS_INSUFF_RESOURCES 0x05
  114. #define MESH_STATUS_IDX_ALREADY_STORED 0x06
  115. #define MESH_STATUS_INVALID_PUB_PARAM 0x07
  116. #define MESH_STATUS_NOT_SUB_MOD 0x08
  117. #define MESH_STATUS_STORAGE_FAIL 0x09
  118. #define MESH_STATUS_FEAT_NOT_SUP 0x0a
  119. #define MESH_STATUS_CANNOT_UPDATE 0x0b
  120. #define MESH_STATUS_CANNOT_REMOVE 0x0c
  121. #define MESH_STATUS_CANNOT_BIND 0x0d
  122. #define MESH_STATUS_UNABLE_CHANGE_STATE 0x0e
  123. #define MESH_STATUS_CANNOT_SET 0x0f
  124. #define MESH_STATUS_UNSPECIFIED_ERROR 0x10
  125. #define MESH_STATUS_INVALID_BINDING 0x11