diff --git a/subsys/bluetooth/host/rfcomm.c b/subsys/bluetooth/host/rfcomm.c index 10e2aa89d39..bc05528d72c 100644 --- a/subsys/bluetooth/host/rfcomm.c +++ b/subsys/bluetooth/host/rfcomm.c @@ -865,6 +865,21 @@ static void rfcomm_handle_ua(struct bt_rfcomm_session *session, uint8_t dlci) } } +static void rfcomm_handle_dm(struct bt_rfcomm_session *session, uint8_t dlci) +{ + struct bt_rfcomm_dlc *dlc; + + BT_DBG("dlci %d", dlci); + + dlc = rfcomm_dlcs_remove_dlci(session->dlcs, dlci); + if (!dlc) { + return; + } + + rfcomm_dlc_disconnect(dlc); + rfcomm_session_disconnect(session); +} + static void rfcomm_handle_msc(struct bt_rfcomm_session *session, struct net_buf *buf, uint8_t cr) { @@ -1141,6 +1156,9 @@ static void rfcomm_recv(struct bt_l2cap_chan *chan, struct net_buf *buf) case BT_RFCOMM_UA: rfcomm_handle_ua(session, dlci); break; + case BT_RFCOMM_DM: + rfcomm_handle_dm(session, dlci); + break; default: BT_WARN("Unknown/Unsupported RFCOMM Frame type 0x%02x", frame_type);