shared/att: Always queue BT_ATT_OP_MTU_REQ on the fixed channel
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Tue, 7 Mar 2023 21:00:22 +0000 (13:00 -0800)
committerAyush Garg <ayush.garg@samsung.com>
Fri, 5 Jan 2024 10:21:48 +0000 (15:51 +0530)
BT_ATT_OP_MTU_REQ shall only be sent on the so called fixed channel
since EATT channels shall use L2CAP procedure to update its MTU.

src/shared/att.c

index 0c96eeb..1872067 100755 (executable)
@@ -1614,6 +1614,14 @@ unsigned int bt_att_send(struct bt_att *att, uint8_t opcode,
 
        op->id = att->next_send_id++;
 
+       /* Always use fixed channel for BT_ATT_OP_MTU_REQ */
+       if (opcode == BT_ATT_OP_MTU_REQ) {
+               struct bt_att_chan *chan = queue_peek_tail(att->chans);
+
+               result = queue_push_tail(chan->queue, op);
+               goto done;
+       }
+
        /* Add the op to the correct queue based on its type */
        switch (op->type) {
        case ATT_OP_TYPE_REQ:
@@ -1632,6 +1640,7 @@ unsigned int bt_att_send(struct bt_att *att, uint8_t opcode,
                break;
        }
 
+done:
        if (!result) {
                free(op->pdu);
                free(op);