xref: /nrf52832-nimble/packages/NimBLE-latest/nimble/host/mesh/src/transport.h (revision 042d53a763ad75cb1465103098bb88c245d95138)
1*042d53a7SEvalZero /*  Bluetooth Mesh */
2*042d53a7SEvalZero 
3*042d53a7SEvalZero /*
4*042d53a7SEvalZero  * Copyright (c) 2017 Intel Corporation
5*042d53a7SEvalZero  *
6*042d53a7SEvalZero  * SPDX-License-Identifier: Apache-2.0
7*042d53a7SEvalZero  */
8*042d53a7SEvalZero 
9*042d53a7SEvalZero #include "syscfg/syscfg.h"
10*042d53a7SEvalZero #include "mesh/mesh.h"
11*042d53a7SEvalZero 
12*042d53a7SEvalZero #define TRANS_SEQ_AUTH_NVAL 0xffffffffffffffff
13*042d53a7SEvalZero 
14*042d53a7SEvalZero #define BT_MESH_TX_SDU_MAX             (CONFIG_BT_MESH_TX_SEG_MAX * 12)
15*042d53a7SEvalZero 
16*042d53a7SEvalZero #define TRANS_CTL_OP_MASK              ((u8_t)BIT_MASK(7))
17*042d53a7SEvalZero #define TRANS_CTL_OP(data)             ((data)[0] & TRANS_CTL_OP_MASK)
18*042d53a7SEvalZero #define TRANS_CTL_HDR(op, seg)         ((op & TRANS_CTL_OP_MASK) | (seg << 7))
19*042d53a7SEvalZero 
20*042d53a7SEvalZero #define TRANS_CTL_OP_ACK               0x00
21*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_POLL       0x01
22*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_UPDATE     0x02
23*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_REQ        0x03
24*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_OFFER      0x04
25*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_CLEAR      0x05
26*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_CLEAR_CFM  0x06
27*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_SUB_ADD    0x07
28*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_SUB_REM    0x08
29*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_SUB_CFM    0x09
30*042d53a7SEvalZero #define TRANS_CTL_OP_HEARTBEAT         0x0a
31*042d53a7SEvalZero 
32*042d53a7SEvalZero struct bt_mesh_ctl_friend_poll {
33*042d53a7SEvalZero 	u8_t  fsn;
34*042d53a7SEvalZero }__attribute__((__packed__));
35*042d53a7SEvalZero 
36*042d53a7SEvalZero struct bt_mesh_ctl_friend_update {
37*042d53a7SEvalZero 	u8_t  flags;
38*042d53a7SEvalZero 	u32_t iv_index;
39*042d53a7SEvalZero 	u8_t  md;
40*042d53a7SEvalZero }__attribute__((__packed__));
41*042d53a7SEvalZero 
42*042d53a7SEvalZero struct bt_mesh_ctl_friend_req {
43*042d53a7SEvalZero 	u8_t  criteria;
44*042d53a7SEvalZero 	u8_t  recv_delay;
45*042d53a7SEvalZero 	u8_t  poll_to[3];
46*042d53a7SEvalZero 	u16_t prev_addr;
47*042d53a7SEvalZero 	u8_t  num_elem;
48*042d53a7SEvalZero 	u16_t lpn_counter;
49*042d53a7SEvalZero }__attribute__((__packed__));
50*042d53a7SEvalZero 
51*042d53a7SEvalZero struct bt_mesh_ctl_friend_offer {
52*042d53a7SEvalZero 	u8_t  recv_win;
53*042d53a7SEvalZero 	u8_t  queue_size;
54*042d53a7SEvalZero 	u8_t  sub_list_size;
55*042d53a7SEvalZero 	s8_t  rssi;
56*042d53a7SEvalZero 	u16_t frnd_counter;
57*042d53a7SEvalZero }__attribute__((__packed__));
58*042d53a7SEvalZero 
59*042d53a7SEvalZero struct bt_mesh_ctl_friend_clear {
60*042d53a7SEvalZero 	u16_t lpn_addr;
61*042d53a7SEvalZero 	u16_t lpn_counter;
62*042d53a7SEvalZero }__attribute__((__packed__));
63*042d53a7SEvalZero 
64*042d53a7SEvalZero struct bt_mesh_ctl_friend_clear_confirm {
65*042d53a7SEvalZero 	u16_t lpn_addr;
66*042d53a7SEvalZero 	u16_t lpn_counter;
67*042d53a7SEvalZero }__attribute__((__packed__));
68*042d53a7SEvalZero 
69*042d53a7SEvalZero #define BT_MESH_FRIEND_SUB_MIN_LEN (1 + 2)
70*042d53a7SEvalZero struct bt_mesh_ctl_friend_sub {
71*042d53a7SEvalZero 	u8_t  xact;
72*042d53a7SEvalZero 	u16_t addr_list[5];
73*042d53a7SEvalZero }__attribute__((__packed__));
74*042d53a7SEvalZero 
75*042d53a7SEvalZero struct bt_mesh_ctl_friend_sub_confirm {
76*042d53a7SEvalZero 	u8_t  xact;
77*042d53a7SEvalZero }__attribute__((__packed__));
78*042d53a7SEvalZero 
79*042d53a7SEvalZero void bt_mesh_set_hb_sub_dst(u16_t addr);
80*042d53a7SEvalZero 
81*042d53a7SEvalZero struct bt_mesh_app_key *bt_mesh_app_key_find(u16_t app_idx);
82*042d53a7SEvalZero 
83*042d53a7SEvalZero bool bt_mesh_tx_in_progress(void);
84*042d53a7SEvalZero 
85*042d53a7SEvalZero void bt_mesh_rx_reset(void);
86*042d53a7SEvalZero void bt_mesh_tx_reset(void);
87*042d53a7SEvalZero 
88*042d53a7SEvalZero int bt_mesh_ctl_send(struct bt_mesh_net_tx *tx, u8_t ctl_op, void *data,
89*042d53a7SEvalZero 		     size_t data_len, u64_t *seq_auth,
90*042d53a7SEvalZero 		     const struct bt_mesh_send_cb *cb, void *cb_data);
91*042d53a7SEvalZero 
92*042d53a7SEvalZero int bt_mesh_trans_send(struct bt_mesh_net_tx *tx, struct os_mbuf *msg,
93*042d53a7SEvalZero 		       const struct bt_mesh_send_cb *cb, void *cb_data);
94*042d53a7SEvalZero 
95*042d53a7SEvalZero int bt_mesh_trans_recv(struct os_mbuf *buf, struct bt_mesh_net_rx *rx);
96*042d53a7SEvalZero 
97*042d53a7SEvalZero void bt_mesh_trans_init(void);
98*042d53a7SEvalZero 
99*042d53a7SEvalZero void bt_mesh_rpl_clear(void);
100