Loading tools/rootcanal/Android.bp +16 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ cc_defaults { ], generated_headers: [ "RootCanalGeneratedPackets_h", "RootCanalBrEdrBBGeneratedPackets_h", "BluetoothGeneratedPackets_h", "libbt_init_flags_bridge_header", ], Loading @@ -57,6 +58,7 @@ cc_library_static { "model/controller/link_layer_controller.cc", "model/controller/sco_connection.cc", "model/controller/security_manager.cc", "model/devices/baseband_sniffer.cc", "model/devices/beacon.cc", "model/devices/beacon_swarm.cc", "model/devices/broken_adv.cc", Loading Loading @@ -228,6 +230,20 @@ filegroup { ], } genrule { name: "RootCanalBrEdrBBGeneratedPackets_h", tools: [ "bluetooth_packetgen", ], cmd: "$(location bluetooth_packetgen) --root_namespace=bredr_bb --include=packages/modules/Bluetooth/tools/rootcanal/packets --out=$(genDir) $(in)", srcs: [ "packets/bredr_bb.pdl", ], out: [ "bredr_bb.h", ], } // bt_vhci_forwarder in cuttlefish depends on this H4Packetizer implementation. cc_library_static { name: "h4_packetizer_lib", Loading tools/rootcanal/desktop/root_canal_main.cc +2 −1 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ DEFINE_string(controller_properties_file, "", DEFINE_string(default_commands_file, "", "commands file which root-canal runs it as default"); DEFINE_bool(enable_hci_sniffer, false, "enable hci sniffer"); DEFINE_bool(enable_baseband_sniffer, false, "enable baseband sniffer"); constexpr uint16_t kTestPort = 6401; constexpr uint16_t kHciServerPort = 6402; Loading Loading @@ -123,7 +124,7 @@ int main(int argc, char** argv) { std::make_shared<PosixAsyncSocketServer>(link_ble_server_port, &am), std::make_shared<PosixAsyncSocketConnector>(&am), FLAGS_controller_properties_file, FLAGS_default_commands_file, FLAGS_enable_hci_sniffer); FLAGS_enable_hci_sniffer, FLAGS_enable_baseband_sniffer); std::promise<void> barrier; std::future<void> barrier_future = barrier.get_future(); root_canal.initialize(std::move(barrier)); Loading tools/rootcanal/desktop/test_environment.cc +12 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <utility> // for move #include <vector> // for vector #include "model/devices/baseband_sniffer.h" #include "model/devices/link_layer_socket_device.h" // for LinkLayerSocketDevice #include "model/hci/hci_sniffer.h" // for HciSniffer #include "model/hci/hci_socket_transport.h" // for HciSocketTransport Loading @@ -33,6 +34,7 @@ namespace bluetooth { namespace root_canal { using rootcanal::AsyncTaskId; using rootcanal::BaseBandSniffer; using rootcanal::HciDevice; using rootcanal::HciSniffer; using rootcanal::HciSocketTransport; Loading Loading @@ -81,6 +83,16 @@ void TestEnvironment::initialize(std::promise<void> barrier) { SetUpLinkLayerServer(); SetUpLinkBleLayerServer(); if (enable_baseband_sniffer_) { std::string filename = "baseband.pcap"; for (auto i = 0; std::filesystem::exists(filename); i++) { filename = "baseband_" + std::to_string(i) + ".pcap"; } test_model_.AddLinkLayerConnection(BaseBandSniffer::Create(filename), Phy::Type::BR_EDR); } LOG_INFO("%s: Finished", __func__); } Loading tools/rootcanal/desktop/test_environment.h +4 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,8 @@ class TestEnvironment { std::shared_ptr<AsyncDataChannelConnector> connector, const std::string& controller_properties_file = "", const std::string& default_commands_file = "", bool enable_hci_sniffer = false) bool enable_hci_sniffer = false, bool enable_baseband_sniffer = false) : test_socket_server_(test_port), hci_socket_server_(hci_server_port), link_socket_server_(link_server_port), Loading @@ -64,6 +65,7 @@ class TestEnvironment { controller_properties_file_(controller_properties_file), default_commands_file_(default_commands_file), enable_hci_sniffer_(enable_hci_sniffer), enable_baseband_sniffer_(enable_baseband_sniffer), controller_(std::make_shared<rootcanal::DualModeController>( controller_properties_file)) {} Loading @@ -81,6 +83,7 @@ class TestEnvironment { std::string controller_properties_file_; std::string default_commands_file_; bool enable_hci_sniffer_; bool enable_baseband_sniffer_; bool test_channel_open_{false}; std::promise<void> barrier_; Loading tools/rootcanal/lmp/lmp_packets.pdl +3 −3 Original line number Diff line number Diff line Loading @@ -107,19 +107,19 @@ packet ExtendedPacket : Packet(opcode = ESCAPED) { } packet Accepted : Packet(opcode = ACCEPTED) { _fixed_ = 0 : 1, accepted_opcode: Opcode, _fixed_ = 0 : 1, } packet NotAccepted : Packet(opcode = NOT_ACCEPTED) { _fixed_ = 0 : 1, not_accepted_opcode: Opcode, _fixed_ = 0 : 1, error_code: 8, } packet AcceptedExt : ExtendedPacket(extended_opcode = ACCEPTED) { _fixed_ = 0 : 1, accepted_opcode: Opcode, _fixed_ = 0 : 1, accepted_extended_opcode: ExtendedOpcode, } Loading Loading
tools/rootcanal/Android.bp +16 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ cc_defaults { ], generated_headers: [ "RootCanalGeneratedPackets_h", "RootCanalBrEdrBBGeneratedPackets_h", "BluetoothGeneratedPackets_h", "libbt_init_flags_bridge_header", ], Loading @@ -57,6 +58,7 @@ cc_library_static { "model/controller/link_layer_controller.cc", "model/controller/sco_connection.cc", "model/controller/security_manager.cc", "model/devices/baseband_sniffer.cc", "model/devices/beacon.cc", "model/devices/beacon_swarm.cc", "model/devices/broken_adv.cc", Loading Loading @@ -228,6 +230,20 @@ filegroup { ], } genrule { name: "RootCanalBrEdrBBGeneratedPackets_h", tools: [ "bluetooth_packetgen", ], cmd: "$(location bluetooth_packetgen) --root_namespace=bredr_bb --include=packages/modules/Bluetooth/tools/rootcanal/packets --out=$(genDir) $(in)", srcs: [ "packets/bredr_bb.pdl", ], out: [ "bredr_bb.h", ], } // bt_vhci_forwarder in cuttlefish depends on this H4Packetizer implementation. cc_library_static { name: "h4_packetizer_lib", Loading
tools/rootcanal/desktop/root_canal_main.cc +2 −1 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ DEFINE_string(controller_properties_file, "", DEFINE_string(default_commands_file, "", "commands file which root-canal runs it as default"); DEFINE_bool(enable_hci_sniffer, false, "enable hci sniffer"); DEFINE_bool(enable_baseband_sniffer, false, "enable baseband sniffer"); constexpr uint16_t kTestPort = 6401; constexpr uint16_t kHciServerPort = 6402; Loading Loading @@ -123,7 +124,7 @@ int main(int argc, char** argv) { std::make_shared<PosixAsyncSocketServer>(link_ble_server_port, &am), std::make_shared<PosixAsyncSocketConnector>(&am), FLAGS_controller_properties_file, FLAGS_default_commands_file, FLAGS_enable_hci_sniffer); FLAGS_enable_hci_sniffer, FLAGS_enable_baseband_sniffer); std::promise<void> barrier; std::future<void> barrier_future = barrier.get_future(); root_canal.initialize(std::move(barrier)); Loading
tools/rootcanal/desktop/test_environment.cc +12 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ #include <utility> // for move #include <vector> // for vector #include "model/devices/baseband_sniffer.h" #include "model/devices/link_layer_socket_device.h" // for LinkLayerSocketDevice #include "model/hci/hci_sniffer.h" // for HciSniffer #include "model/hci/hci_socket_transport.h" // for HciSocketTransport Loading @@ -33,6 +34,7 @@ namespace bluetooth { namespace root_canal { using rootcanal::AsyncTaskId; using rootcanal::BaseBandSniffer; using rootcanal::HciDevice; using rootcanal::HciSniffer; using rootcanal::HciSocketTransport; Loading Loading @@ -81,6 +83,16 @@ void TestEnvironment::initialize(std::promise<void> barrier) { SetUpLinkLayerServer(); SetUpLinkBleLayerServer(); if (enable_baseband_sniffer_) { std::string filename = "baseband.pcap"; for (auto i = 0; std::filesystem::exists(filename); i++) { filename = "baseband_" + std::to_string(i) + ".pcap"; } test_model_.AddLinkLayerConnection(BaseBandSniffer::Create(filename), Phy::Type::BR_EDR); } LOG_INFO("%s: Finished", __func__); } Loading
tools/rootcanal/desktop/test_environment.h +4 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,8 @@ class TestEnvironment { std::shared_ptr<AsyncDataChannelConnector> connector, const std::string& controller_properties_file = "", const std::string& default_commands_file = "", bool enable_hci_sniffer = false) bool enable_hci_sniffer = false, bool enable_baseband_sniffer = false) : test_socket_server_(test_port), hci_socket_server_(hci_server_port), link_socket_server_(link_server_port), Loading @@ -64,6 +65,7 @@ class TestEnvironment { controller_properties_file_(controller_properties_file), default_commands_file_(default_commands_file), enable_hci_sniffer_(enable_hci_sniffer), enable_baseband_sniffer_(enable_baseband_sniffer), controller_(std::make_shared<rootcanal::DualModeController>( controller_properties_file)) {} Loading @@ -81,6 +83,7 @@ class TestEnvironment { std::string controller_properties_file_; std::string default_commands_file_; bool enable_hci_sniffer_; bool enable_baseband_sniffer_; bool test_channel_open_{false}; std::promise<void> barrier_; Loading
tools/rootcanal/lmp/lmp_packets.pdl +3 −3 Original line number Diff line number Diff line Loading @@ -107,19 +107,19 @@ packet ExtendedPacket : Packet(opcode = ESCAPED) { } packet Accepted : Packet(opcode = ACCEPTED) { _fixed_ = 0 : 1, accepted_opcode: Opcode, _fixed_ = 0 : 1, } packet NotAccepted : Packet(opcode = NOT_ACCEPTED) { _fixed_ = 0 : 1, not_accepted_opcode: Opcode, _fixed_ = 0 : 1, error_code: 8, } packet AcceptedExt : ExtendedPacket(extended_opcode = ACCEPTED) { _fixed_ = 0 : 1, accepted_opcode: Opcode, _fixed_ = 0 : 1, accepted_extended_opcode: ExtendedOpcode, } Loading