1
0

qcacld-3.0: Fix AP state mismatch between hostapd and driver

AGO/AP is started and beaconing, but the hostapd_cli status cmd still
show "dfs". This will happen when the STA connected on DFS
channel and AGO/AP is starting on same DFS channel.
By design the AGO/AP CAC is skipped due to STA+SAP DFS concurrency.
If we skip CAC timer, we will need to indicate the CAC event
even though driver doesn't perform CAC, otherwise hostapd will
stuck in "DFS" state.

Change-Id: I7961d0b976fd84fc1f29449d98eb150d1463a92f
CRs-Fixed: 2733624
Este cometimento está contido em:
Liangwei Dong
2020-07-16 19:09:00 +08:00
cometido por snandini
ascendente 90bf2af3f6
cometimento 198eb3bdea

Ver ficheiro

@@ -2483,6 +2483,43 @@ static QDF_STATUS sap_fsm_handle_start_failure(struct sap_context *sap_ctx,
return qdf_status;
}
/**
* sap_propagate_cac_events() - Indicate CAC START/END event
* @sap_ctx: SAP context
*
* This function is to indicate CAC START/END event if CAC process
* is skipped.
*
* Return: void
*/
static void sap_propagate_cac_events(struct sap_context *sap_ctx)
{
QDF_STATUS qdf_status;
qdf_status = sap_signal_hdd_event(sap_ctx, NULL,
eSAP_DFS_CAC_START,
(void *)
eSAP_STATUS_SUCCESS);
if (qdf_status != QDF_STATUS_SUCCESS) {
QDF_TRACE(QDF_MODULE_ID_SAP,
QDF_TRACE_LEVEL_DEBUG,
"failed to indicate CAC START vdev %d",
sap_ctx->sessionId);
return;
}
qdf_status = sap_signal_hdd_event(sap_ctx, NULL,
eSAP_DFS_CAC_END,
(void *)
eSAP_STATUS_SUCCESS);
if (qdf_status != QDF_STATUS_SUCCESS) {
QDF_TRACE(QDF_MODULE_ID_SAP,
QDF_TRACE_LEVEL_DEBUG,
"failed to indicate CAC End vdev %d",
sap_ctx->sessionId);
}
}
/**
* sap_fsm_state_starting() - utility function called from sap fsm
* @sap_ctx: SAP context
@@ -2588,6 +2625,16 @@ static QDF_STATUS sap_fsm_state_starting(struct sap_context *sap_ctx,
QDF_TRACE(QDF_MODULE_ID_SAP,
QDF_TRACE_LEVEL_INFO_HIGH,
FL("skip cac timer"));
/*
* If hostapd starts AP on dfs channel,
* hostapd will wait for CAC START/CAC END
* event and finish AP start process.
* If we skip CAC timer, we will need to
* indicate the CAC event even though driver
* doesn't perform CAC.
*/
sap_propagate_cac_events(sap_ctx);
wlansap_start_beacon_req(sap_ctx);
}
}