diff --git a/emulator/bthost.c b/emulator/bthost.c
index 6af7af7..4e1eec4 100644
--- a/emulator/bthost.c
+++ b/emulator/bthost.c
}
}
+static bool l2cap_conn_req(struct bthost *bthost, uint16_t handle,
+ uint8_t ident, const void *data, uint16_t len)
+{
+ const struct bt_l2cap_pdu_conn_req *req = data;
+ struct bt_l2cap_pdu_conn_rsp rsp;
+
+ if (len < sizeof(*req))
+ return false;
+
+ memset(&rsp, 0, sizeof(rsp));
+ rsp.scid = req->scid;
+ rsp.result = cpu_to_le16(0x0002); /* PSM Not Supported */
+
+ send_l2cap_sig(bthost, handle, BT_L2CAP_PDU_CONN_RSP, ident, &rsp,
+ sizeof(rsp));
+
+ return true;
+}
+
static bool l2cap_info_req(struct bthost *bthost, uint16_t handle,
uint8_t ident, const void *data, uint16_t len)
{
goto reject;
switch (hdr->code) {
+ case BT_L2CAP_PDU_CONN_REQ:
+ if (!l2cap_conn_req(bthost, handle, hdr->ident,
+ data + sizeof(*hdr), hdr_len))
+ goto reject;
+ break;
+
case BT_L2CAP_PDU_INFO_REQ:
if (!l2cap_info_req(bthost, handle, hdr->ident,
data + sizeof(*hdr), hdr_len))