ref: fc5424cb72e477c5f1bbfaeddb5c50b851a965ae
src/libs/mynewt-nimble/nimble/controller/include/controller/ble_ll_resolv.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef H_BLE_LL_RESOLV_ #define H_BLE_LL_RESOLV_ #ifdef __cplusplus extern "C" { #endif /* * An entry in the resolving list. * The identity address is stored in little endian format. * The local rpa is stored in little endian format. * The IRKs are stored in big endian format. * * Note: * rl_local_irk and rl_peer_irk need to be word aligned */ struct ble_ll_resolv_entry { uint8_t rl_addr_type; uint8_t rl_priv_mode; uint8_t rl_has_local; uint8_t rl_has_peer; uint8_t rl_local_irk[16]; uint8_t rl_peer_irk[16]; uint8_t rl_identity_addr[BLE_DEV_ADDR_LEN]; uint8_t rl_local_rpa[BLE_DEV_ADDR_LEN]; uint8_t rl_peer_rpa[BLE_DEV_ADDR_LEN]; }; extern struct ble_ll_resolv_entry g_ble_ll_resolv_list[]; /* Clear the resolving list */ int ble_ll_resolv_list_clr(void); /* Read the size of the resolving list */ int ble_ll_resolv_list_read_size(uint8_t *rspbuf, uint8_t *rsplen); /* Add a device to the resolving list */ int ble_ll_resolv_list_add(const uint8_t *cmdbuf, uint8_t len); /* Remove a device from the resolving list */ int ble_ll_resolv_list_rmv(const uint8_t *cmdbuf, uint8_t len); /* Address resolution enable command */ int ble_ll_resolv_enable_cmd(const uint8_t *cmdbuf, uint8_t len); int ble_ll_resolv_peer_addr_rd(const uint8_t *cmdbuf, uint8_t len, uint8_t *rspbuf, uint8_t *rsplen); int ble_ll_resolv_local_addr_rd(const uint8_t *cmdbuf, uint8_t len, uint8_t *rspbuf, uint8_t *rsplen); /* Finds 'addr' in resolving list. Doesnt check if address resolution enabled */ struct ble_ll_resolv_entry * ble_ll_resolv_list_find(const uint8_t *addr, uint8_t addr_type); /* Returns true if address resolution is enabled */ uint8_t ble_ll_resolv_enabled(void); /* Reset private address resolution */ void ble_ll_resolv_list_reset(void); /* Generate local or peer RPA. It is up to caller to make sure required IRK * is present on RL */ void ble_ll_resolv_get_priv_addr(struct ble_ll_resolv_entry *rl, int local, uint8_t *addr); void ble_ll_resolv_set_peer_rpa(int index, uint8_t *rpa); void ble_ll_resolv_set_local_rpa(int index, uint8_t *rpa); /* Generate a resolvable private address. */ int ble_ll_resolv_gen_rpa(uint8_t *addr, uint8_t addr_type, uint8_t *rpa, int local); /* Set the resolvable private address timeout */ int ble_ll_resolv_set_rpa_tmo(const uint8_t *cmdbuf, uint8_t len); /* Set the privacy mode */ int ble_ll_resolve_set_priv_mode(const uint8_t *cmdbuf, uint8_t len); /* Get the RPA timeout, in seconds */ uint32_t ble_ll_resolv_get_rpa_tmo(void); /* Resolve a resolvable private address */ int ble_ll_resolv_rpa(const uint8_t *rpa, const uint8_t *irk); /* Try to resolve peer RPA and return index on RL if matched */ int ble_ll_resolv_peer_rpa_any(const uint8_t *rpa); /* Initialize resolv*/ void ble_ll_resolv_init(void); #ifdef __cplusplus } #endif #endif |