[bt][l2cap] Block channel ID reuse on Disconnection Complete

Added a DisconnectDoneCallback parameter to DynamicChannel::Disconnect
that is called when the L2CAP Disconnection Response is received from
the peer.

Wire up the callback to DynamicChannelRegistry::RemoveChannel so that
performs channel cleanup after disconnection completes.

This improves Wireshark display of locally-snooped data because a
channel opened immediately after closing another channel will have
different ID.

BT-811 #done

Test: In bt-host-unitttests,
L2CAP_DynamicChannelRegistryTest.ChannelIdNotReusedUntilDisconnectionCompletes
L2CAP_BrEdrDynamicChannelTest.ChannelIdNotReusedUntilDisconnectionCompletes

Change-Id: Ib406d84bfa96bea55ea116d86a2601a88b98380a
7 files changed
tree: d46ad150f042a78015470fa7e25699248dbcd4f6
  1. .allstar/
  2. .vscode/
  3. build_overrides/
  4. docker/
  5. docs/
  6. kudzu/
  7. pw_alignment/
  8. pw_allocator/
  9. pw_analog/
  10. pw_android_toolchain/
  11. pw_arduino_build/
  12. pw_assert/
  13. pw_assert_basic/
  14. pw_assert_log/
  15. pw_assert_tokenized/
  16. pw_assert_zephyr/
  17. pw_async/
  18. pw_async_basic/
  19. pw_base64/
  20. pw_bloat/
  21. pw_blob_store/
  22. pw_bluetooth/
  23. pw_bluetooth_hci/
  24. pw_bluetooth_profiles/
  25. pw_bluetooth_sapphire/
  26. pw_boot/
  27. pw_boot_cortex_m/
  28. pw_build/
  29. pw_build_info/
  30. pw_build_mcuxpresso/
  31. pw_bytes/
  32. pw_checksum/
  33. pw_chre/
  34. pw_chrono/
  35. pw_chrono_embos/
  36. pw_chrono_freertos/
  37. pw_chrono_rp2040/
  38. pw_chrono_stl/
  39. pw_chrono_threadx/
  40. pw_chrono_zephyr/
  41. pw_cli/
  42. pw_compilation_testing/
  43. pw_console/
  44. pw_containers/
  45. pw_cpu_exception/
  46. pw_cpu_exception_cortex_m/
  47. pw_crypto/
  48. pw_digital_io/
  49. pw_digital_io_mcuxpresso/
  50. pw_digital_io_rp2040/
  51. pw_docgen/
  52. pw_doctor/
  53. pw_emu/
  54. pw_env_setup/
  55. pw_file/
  56. pw_format/
  57. pw_function/
  58. pw_fuzzer/
  59. pw_hdlc/
  60. pw_hex_dump/
  61. pw_i2c/
  62. pw_i2c_linux/
  63. pw_i2c_mcuxpresso/
  64. pw_ide/
  65. pw_interrupt/
  66. pw_interrupt_cortex_m/
  67. pw_interrupt_xtensa/
  68. pw_interrupt_zephyr/
  69. pw_intrusive_ptr/
  70. pw_kvs/
  71. pw_libc/
  72. pw_libcxx/
  73. pw_log/
  74. pw_log_android/
  75. pw_log_basic/
  76. pw_log_null/
  77. pw_log_rpc/
  78. pw_log_string/
  79. pw_log_tokenized/
  80. pw_log_zephyr/
  81. pw_malloc/
  82. pw_malloc_freelist/
  83. pw_metric/
  84. pw_minimal_cpp_stdlib/
  85. pw_module/
  86. pw_multibuf/
  87. pw_multisink/
  88. pw_package/
  89. pw_perf_test/
  90. pw_persistent_ram/
  91. pw_polyfill/
  92. pw_preprocessor/
  93. pw_presubmit/
  94. pw_protobuf/
  95. pw_protobuf_compiler/
  96. pw_random/
  97. pw_result/
  98. pw_ring_buffer/
  99. pw_router/
  100. pw_rpc/
  101. pw_rpc_transport/
  102. pw_rust/
  103. pw_snapshot/
  104. pw_software_update/
  105. pw_span/
  106. pw_spi/
  107. pw_spi_mcuxpresso/
  108. pw_status/
  109. pw_stm32cube_build/
  110. pw_stream/
  111. pw_stream_shmem_mcuxpresso/
  112. pw_stream_uart_linux/
  113. pw_stream_uart_mcuxpresso/
  114. pw_string/
  115. pw_symbolizer/
  116. pw_sync/
  117. pw_sync_baremetal/
  118. pw_sync_embos/
  119. pw_sync_freertos/
  120. pw_sync_stl/
  121. pw_sync_threadx/
  122. pw_sync_zephyr/
  123. pw_sys_io/
  124. pw_sys_io_ambiq_sdk/
  125. pw_sys_io_arduino/
  126. pw_sys_io_baremetal_lm3s6965evb/
  127. pw_sys_io_baremetal_stm32f429/
  128. pw_sys_io_emcraft_sf2/
  129. pw_sys_io_mcuxpresso/
  130. pw_sys_io_rp2040/
  131. pw_sys_io_stdio/
  132. pw_sys_io_stm32cube/
  133. pw_sys_io_zephyr/
  134. pw_system/
  135. pw_target_runner/
  136. pw_thread/
  137. pw_thread_embos/
  138. pw_thread_freertos/
  139. pw_thread_stl/
  140. pw_thread_threadx/
  141. pw_thread_zephyr/
  142. pw_tls_client/
  143. pw_tls_client_boringssl/
  144. pw_tls_client_mbedtls/
  145. pw_tokenizer/
  146. pw_tool/
  147. pw_toolchain/
  148. pw_toolchain_bazel/
  149. pw_trace/
  150. pw_trace_tokenized/
  151. pw_transfer/
  152. pw_unit_test/
  153. pw_unit_test_zephyr/
  154. pw_varint/
  155. pw_watch/
  156. pw_web/
  157. pw_work_queue/
  158. seed/
  159. targets/
  160. third_party/
  161. ts/
  162. zephyr/
  163. .bazelignore
  164. .bazelrc
  165. .black.toml
  166. .clang-format
  167. .clang-tidy
  168. .eslintrc.cjs
  169. .git-blame-ignore-revs
  170. .gitattributes
  171. .gitignore
  172. .gn
  173. .mypy.ini
  174. .prettierignore
  175. .prettierrc.cjs
  176. .pw_ide.yaml
  177. .pylintrc
  178. activate.bat
  179. Android.bp
  180. AUTHORS
  181. bootstrap.bat
  182. bootstrap.sh
  183. BUILD.bazel
  184. BUILD.gn
  185. BUILDCONFIG.gn
  186. CMakeLists.txt
  187. jest.config.ts
  188. Kconfig.zephyr
  189. LICENSE
  190. modules.gni
  191. OWNERS
  192. package-lock.json
  193. package.json
  194. pigweed.json
  195. PIGWEED_MODULES
  196. README.md
  197. rollup.config.js
  198. tsconfig.json
  199. WORKSPACE
README.md

Pigweed

Pigweed is an open source collection of embedded-targeted libraries–or as we like to call them, modules. These modules are building blocks and infrastructure that enable faster and more reliable development on small-footprint MMU-less 32-bit microcontrollers like the STMicroelectronics STM32L452 or the Nordic nRF52832.

For more information please see our website: https://pigweed.dev/.

Links