diff --git a/tools/rootcanal/model/controller/le_advertiser.cc b/tools/rootcanal/model/controller/le_advertiser.cc
index 732d1c2abfa19bbf5a716bcf64f8c86e3d3ffec0..22548eccb9730a9536e0b0d047182520aeb86e04 100644
--- a/tools/rootcanal/model/controller/le_advertiser.cc
+++ b/tools/rootcanal/model/controller/le_advertiser.cc
@@ -1343,16 +1343,20 @@ void LinkLayerController::LeAdvertising() {
         break;
     }
 
-    SendLeLinkLayerPacket(model::packets::LeLegacyAdvertisingPduBuilder::Create(
+    SendLeLinkLayerPacketWithRssi(
         legacy_advertiser_.advertising_address.GetAddress(),
         legacy_advertiser_.target_address.GetAddress(),
-        static_cast<model::packets::AddressType>(
-            legacy_advertiser_.advertising_address.GetAddressType()),
-        static_cast<model::packets::AddressType>(
-            legacy_advertiser_.target_address.GetAddressType()),
-        type,
-        attach_advertising_data ? legacy_advertiser_.advertising_data
-                                : std::vector<uint8_t>{}));
+        properties_.le_advertising_physical_channel_tx_power,
+        model::packets::LeLegacyAdvertisingPduBuilder::Create(
+            legacy_advertiser_.advertising_address.GetAddress(),
+            legacy_advertiser_.target_address.GetAddress(),
+            static_cast<model::packets::AddressType>(
+                legacy_advertiser_.advertising_address.GetAddressType()),
+            static_cast<model::packets::AddressType>(
+                legacy_advertiser_.target_address.GetAddressType()),
+            type,
+            attach_advertising_data ? legacy_advertiser_.advertising_data
+                                    : std::vector<uint8_t>{}));
   }
 
   for (auto& [_, advertiser] : extended_advertisers_) {
@@ -1454,7 +1458,10 @@ void LinkLayerController::LeAdvertising() {
             break;
         }
 
-        SendLeLinkLayerPacket(
+        SendLeLinkLayerPacketWithRssi(
+            advertiser.advertising_address.GetAddress(),
+            advertiser.target_address.GetAddress(),
+            advertiser.advertising_tx_power,
             model::packets::LeLegacyAdvertisingPduBuilder::Create(
                 advertiser.advertising_address.GetAddress(),
                 advertiser.target_address.GetAddress(),
@@ -1464,7 +1471,10 @@ void LinkLayerController::LeAdvertising() {
                     advertiser.target_address.GetAddressType()),
                 type, advertiser.advertising_data));
       } else {
-        SendLeLinkLayerPacket(
+        SendLeLinkLayerPacketWithRssi(
+            advertiser.advertising_address.GetAddress(),
+            advertiser.target_address.GetAddress(),
+            advertiser.advertising_tx_power,
             model::packets::LeExtendedAdvertisingPduBuilder::Create(
                 advertiser.advertising_address.GetAddress(),
                 advertiser.target_address.GetAddress(),
diff --git a/tools/rootcanal/model/controller/link_layer_controller.cc b/tools/rootcanal/model/controller/link_layer_controller.cc
index 7c87b5a941987881e76af80efbc4113db6d0d316..29ba90cab7a0e337478d7bc5e04a3e3f069ded9e 100644
--- a/tools/rootcanal/model/controller/link_layer_controller.cc
+++ b/tools/rootcanal/model/controller/link_layer_controller.cc
@@ -1349,17 +1349,6 @@ void LinkLayerController::SetExtendedInquiryResponse(
             extended_inquiry_response_.begin());
 }
 
-void LinkLayerController::SendLeLinkLayerPacketWithRssi(
-    Address source, Address dest, uint8_t rssi,
-    std::unique_ptr<model::packets::LinkLayerPacketBuilder> packet) {
-  std::shared_ptr<model::packets::RssiWrapperBuilder> shared_packet =
-      model::packets::RssiWrapperBuilder::Create(source, dest, rssi,
-                                                 std::move(packet));
-  ScheduleTask(kNoDelayMs, [this, shared_packet]() {
-    send_to_remote_(shared_packet, Phy::Type::LOW_ENERGY);
-  });
-}
-
 #ifdef ROOTCANAL_LMP
 LinkLayerController::LinkLayerController(const Address& address,
                                          const ControllerProperties& properties)
@@ -1445,6 +1434,17 @@ void LinkLayerController::SendLinkLayerPacket(
   });
 }
 
+void LinkLayerController::SendLeLinkLayerPacketWithRssi(
+    Address source_address, Address destination_address, uint8_t rssi,
+    std::unique_ptr<model::packets::LinkLayerPacketBuilder> packet) {
+  std::shared_ptr<model::packets::RssiWrapperBuilder> shared_packet =
+      model::packets::RssiWrapperBuilder::Create(
+          source_address, destination_address, rssi, std::move(packet));
+  ScheduleTask(kNoDelayMs, [this, shared_packet]() {
+    send_to_remote_(shared_packet, Phy::Type::LOW_ENERGY);
+  });
+}
+
 ErrorCode LinkLayerController::SendLeCommandToRemoteByAddress(
     OpCode opcode, const Address& own_address, const Address& peer_address) {
   switch (opcode) {
@@ -4268,11 +4268,14 @@ void LinkLayerController::ProcessIncomingLegacyScanRequest(
   // device address (AdvA field) in the SCAN_RSP PDU shall be the same as
   // the advertiser’s device address (AdvA field) in the SCAN_REQ PDU to
   // which it is responding.
-  SendLeLinkLayerPacket(model::packets::LeScanResponseBuilder::Create(
+  SendLeLinkLayerPacketWithRssi(
       advertising_address.GetAddress(), scanning_address.GetAddress(),
-      static_cast<model::packets::AddressType>(
-          advertising_address.GetAddressType()),
-      legacy_advertiser_.scan_response_data));
+      properties_.le_advertising_physical_channel_tx_power,
+      model::packets::LeScanResponseBuilder::Create(
+          advertising_address.GetAddress(), scanning_address.GetAddress(),
+          static_cast<model::packets::AddressType>(
+              advertising_address.GetAddressType()),
+          legacy_advertiser_.scan_response_data));
 }
 
 void LinkLayerController::ProcessIncomingExtendedScanRequest(
@@ -4350,11 +4353,14 @@ void LinkLayerController::ProcessIncomingExtendedScanRequest(
   // device address (AdvA field) in the SCAN_RSP PDU shall be the same as
   // the advertiser’s device address (AdvA field) in the SCAN_REQ PDU to
   // which it is responding.
-  SendLeLinkLayerPacket(model::packets::LeScanResponseBuilder::Create(
+  SendLeLinkLayerPacketWithRssi(
       advertising_address.GetAddress(), scanning_address.GetAddress(),
-      static_cast<model::packets::AddressType>(
-          advertising_address.GetAddressType()),
-      advertiser.scan_response_data));
+      advertiser.advertising_tx_power,
+      model::packets::LeScanResponseBuilder::Create(
+          advertising_address.GetAddress(), scanning_address.GetAddress(),
+          static_cast<model::packets::AddressType>(
+              advertising_address.GetAddressType()),
+          advertiser.scan_response_data));
 }
 
 void LinkLayerController::IncomingLeScanPacket(
diff --git a/tools/rootcanal/model/controller/link_layer_controller.h b/tools/rootcanal/model/controller/link_layer_controller.h
index a21bcb8eead1e71e0cf40a4f7074fcc2aa6070b5..c9cfdf73d0e94e4c8c9d57d95e05b291f4518637 100644
--- a/tools/rootcanal/model/controller/link_layer_controller.h
+++ b/tools/rootcanal/model/controller/link_layer_controller.h
@@ -525,12 +525,12 @@ class LinkLayerController {
           initiating_phy_parameters);
 
  protected:
-  void SendLeLinkLayerPacketWithRssi(
-      Address source, Address dest, uint8_t rssi,
+  void SendLinkLayerPacket(
       std::unique_ptr<model::packets::LinkLayerPacketBuilder> packet);
   void SendLeLinkLayerPacket(
       std::unique_ptr<model::packets::LinkLayerPacketBuilder> packet);
-  void SendLinkLayerPacket(
+  void SendLeLinkLayerPacketWithRssi(
+      Address source_address, Address destination_address, uint8_t rssi,
       std::unique_ptr<model::packets::LinkLayerPacketBuilder> packet);
 
   void IncomingAclPacket(model::packets::LinkLayerPacketView packet);