Commit eee10e9a authored by Vinayak Kariappa Chettimada's avatar Vinayak Kariappa Chettimada Committed by Johan Hedberg
Browse files

Bluetooth: controller: split: Fix DLE duplicate requests

Fix implementation to handle back-to-back and duplicate
LENGTH_REQ PDU reception.

Relates to #23707.

Signed-off-by: default avatarVinayak Kariappa Chettimada <vich@nordicsemi.no>
parent b7e7153b
Loading
Loading
Loading
Loading
+14 −3
Changes for subsys/bluetooth/controller/ll_sw/ull_conn.c: 14 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -4666,9 +4666,20 @@ static inline int length_req_rsp_recv(struct ll_conn *conn, memq_link_t *link,
#endif /* CONFIG_BT_CTLR_PHY */
		}
	} else {
		/* Drop response with no Local initiated request. */
		LL_ASSERT(pdu_rx->llctrl.opcode ==
			  PDU_DATA_LLCTRL_TYPE_LENGTH_RSP);
		/* Drop response with no Local initiated request and duplicate
		 * requests.
		 */
		if (pdu_rx->llctrl.opcode != PDU_DATA_LLCTRL_TYPE_LENGTH_RSP) {
			mem_release(tx, &mem_conn_tx_ctrl.free);

			/* Defer new request if previous in resize state */
			if (conn->llcp_length.state ==
			    LLCP_LENGTH_STATE_RESIZE) {
				return -EBUSY;
			}
		}

		return 0;
	}

send_length_resp: