Bluetooth: controller: Reject CIS_TERMINATE when unsupported for role
If a central or peripheral is not configured for ISO connected streams, reject a remote LL_CIS_TERMINATE_IND procedure, responding with an unsupported feature error (BT_HCI_ERR_UNSUPP_FEATURE). This fixes EBQ test /LL/PAC/CEN/BV-01-C. Signed-off-by: Morten Priess <mtpr@oticon.com>
This commit is contained in:
parent
a803588d2c
commit
ee2a43b5dc
1 changed files with 18 additions and 2 deletions
|
@ -1118,6 +1118,15 @@ static void rp_comm_tx(struct ll_conn *conn, struct proc_ctx *ctx)
|
||||||
ctx->rx_opcode = PDU_DATA_LLCTRL_TYPE_UNUSED;
|
ctx->rx_opcode = PDU_DATA_LLCTRL_TYPE_UNUSED;
|
||||||
break;
|
break;
|
||||||
#endif /* CONFIG_BT_CTLR_SCA_UPDATE */
|
#endif /* CONFIG_BT_CTLR_SCA_UPDATE */
|
||||||
|
#if !defined(CONFIG_BT_CTLR_CENTRAL_ISO) || !defined(CONFIG_BT_CTLR_PERIPHERAL_ISO)
|
||||||
|
case PROC_CIS_TERMINATE:
|
||||||
|
/* Only possible response to LL_CIS_TERMINATE is if a central or peripheral
|
||||||
|
* does not have ISO support. Then reject with error 'unsupported feature'.
|
||||||
|
*/
|
||||||
|
llcp_pdu_encode_reject_ext_ind(pdu, PDU_DATA_LLCTRL_TYPE_CIS_TERMINATE_IND,
|
||||||
|
BT_HCI_ERR_UNSUPP_FEATURE_PARAM_VAL);
|
||||||
|
break;
|
||||||
|
#endif /* !CONFIG_BT_CTLR_CENTRAL_ISO || !CONFIG_BT_CTLR_PERIPHERAL_ISO */
|
||||||
default:
|
default:
|
||||||
/* Unknown procedure */
|
/* Unknown procedure */
|
||||||
LL_ASSERT(0);
|
LL_ASSERT(0);
|
||||||
|
@ -1275,10 +1284,17 @@ static void rp_comm_send_rsp(struct ll_conn *conn, struct proc_ctx *ctx, uint8_t
|
||||||
break;
|
break;
|
||||||
#if defined(CONFIG_BT_CTLR_CENTRAL_ISO) || defined(CONFIG_BT_CTLR_PERIPHERAL_ISO)
|
#if defined(CONFIG_BT_CTLR_CENTRAL_ISO) || defined(CONFIG_BT_CTLR_PERIPHERAL_ISO)
|
||||||
case PROC_CIS_TERMINATE:
|
case PROC_CIS_TERMINATE:
|
||||||
/* No response */
|
/* Make sure role is configured for ISO, otherwise reject */
|
||||||
|
if ((!IS_ENABLED(CONFIG_BT_CTLR_CENTRAL_ISO) &&
|
||||||
|
conn->lll.role == BT_HCI_ROLE_CENTRAL) ||
|
||||||
|
(!IS_ENABLED(CONFIG_BT_CTLR_PERIPHERAL_ISO) &&
|
||||||
|
conn->lll.role == BT_HCI_ROLE_PERIPHERAL)) {
|
||||||
|
rp_comm_tx(conn, ctx);
|
||||||
|
/* Fall through */
|
||||||
|
}
|
||||||
|
|
||||||
llcp_rr_complete(conn);
|
llcp_rr_complete(conn);
|
||||||
ctx->state = RP_COMMON_STATE_IDLE;
|
ctx->state = RP_COMMON_STATE_IDLE;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
#endif /* CONFIG_BT_CTLR_CENTRAL_ISO || CONFIG_BT_CTLR_PERIPHERAL_ISO */
|
#endif /* CONFIG_BT_CTLR_CENTRAL_ISO || CONFIG_BT_CTLR_PERIPHERAL_ISO */
|
||||||
#if defined(CONFIG_BT_CTLR_DATA_LENGTH)
|
#if defined(CONFIG_BT_CTLR_DATA_LENGTH)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue