qcacld-3.0: Relocate wlan_hdd_set_filter()
Function wlan_hdd_set_filter() is currently located in wlan_hdd_wext.c, but this function is independent of wireless extensions, so relocate it as part of the plan to omit wlan_hdd_wext.c from the build when wireless extensions is not enabled. Change-Id: I7377806ad27ec8d6fa361523d290156a7facacac CRs-Fixed: 2228938
Cette révision appartient à :
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@@ -99,3 +99,163 @@ int hdd_disable_default_pkt_filters(struct hdd_adapter *adapter)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int wlan_hdd_set_filter(struct hdd_context *hdd_ctx,
|
||||
struct pkt_filter_cfg *request,
|
||||
uint8_t sessionId)
|
||||
{
|
||||
struct pmo_rcv_pkt_fltr_cfg *pmo_set_pkt_fltr_req = NULL;
|
||||
struct pmo_rcv_pkt_fltr_clear_param *pmo_clr_pkt_fltr_param = NULL;
|
||||
int i = 0;
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
|
||||
if (hdd_ctx->config->disablePacketFilter) {
|
||||
hdd_warn("Packet filtering disabled in ini");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Debug display of request components. */
|
||||
hdd_debug("Packet Filter Request : FA %d params %d",
|
||||
request->filter_action, request->num_params);
|
||||
|
||||
switch (request->filter_action) {
|
||||
case HDD_RCV_FILTER_SET:
|
||||
hdd_debug("Set Packet Filter Request for Id: %d",
|
||||
request->filter_id);
|
||||
|
||||
pmo_set_pkt_fltr_req =
|
||||
qdf_mem_malloc(sizeof(*pmo_set_pkt_fltr_req));
|
||||
if (!pmo_set_pkt_fltr_req) {
|
||||
hdd_err("unable to allocate pmo_set_pkt_fltr_req");
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
pmo_set_pkt_fltr_req->filter_id = request->filter_id;
|
||||
if (request->num_params >= HDD_MAX_CMP_PER_PACKET_FILTER) {
|
||||
hdd_err("Number of Params exceed Max limit %d",
|
||||
request->num_params);
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto out;
|
||||
}
|
||||
pmo_set_pkt_fltr_req->num_params = request->num_params;
|
||||
pmo_set_pkt_fltr_req->coalesce_time = 0;
|
||||
pmo_set_pkt_fltr_req->filter_type = PMO_RCV_FILTER_TYPE_FILTER_PKT;
|
||||
for (i = 0; i < request->num_params; i++) {
|
||||
pmo_set_pkt_fltr_req->params_data[i].protocol_layer =
|
||||
request->params_data[i].protocol_layer;
|
||||
pmo_set_pkt_fltr_req->params_data[i].compare_flag =
|
||||
request->params_data[i].compare_flag;
|
||||
pmo_set_pkt_fltr_req->params_data[i].data_offset =
|
||||
request->params_data[i].data_offset;
|
||||
pmo_set_pkt_fltr_req->params_data[i].data_length =
|
||||
request->params_data[i].data_length;
|
||||
pmo_set_pkt_fltr_req->params_data[i].reserved = 0;
|
||||
|
||||
if (request->params_data[i].data_offset >
|
||||
SIR_MAX_FILTER_TEST_DATA_OFFSET) {
|
||||
hdd_err("Invalid data offset %u for param %d (max = %d)",
|
||||
request->params_data[i].data_offset,
|
||||
i,
|
||||
SIR_MAX_FILTER_TEST_DATA_OFFSET);
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (request->params_data[i].data_length >
|
||||
SIR_MAX_FILTER_TEST_DATA_LEN) {
|
||||
hdd_err("Error invalid data length %d",
|
||||
request->params_data[i].data_length);
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
hdd_debug("Proto %d Comp Flag %d Filter Type %d",
|
||||
request->params_data[i].protocol_layer,
|
||||
request->params_data[i].compare_flag,
|
||||
pmo_set_pkt_fltr_req->filter_type);
|
||||
|
||||
hdd_debug("Data Offset %d Data Len %d",
|
||||
request->params_data[i].data_offset,
|
||||
request->params_data[i].data_length);
|
||||
|
||||
if (sizeof(
|
||||
pmo_set_pkt_fltr_req->params_data[i].compare_data)
|
||||
< (request->params_data[i].data_length)) {
|
||||
hdd_err("Error invalid data length %d",
|
||||
request->params_data[i].data_length);
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
memcpy(
|
||||
&pmo_set_pkt_fltr_req->params_data[i].compare_data,
|
||||
request->params_data[i].compare_data,
|
||||
request->params_data[i].data_length);
|
||||
memcpy(&pmo_set_pkt_fltr_req->params_data[i].data_mask,
|
||||
request->params_data[i].data_mask,
|
||||
request->params_data[i].data_length);
|
||||
|
||||
hdd_debug("CData %d CData %d CData %d CData %d CData %d CData %d",
|
||||
request->params_data[i].compare_data[0],
|
||||
request->params_data[i].compare_data[1],
|
||||
request->params_data[i].compare_data[2],
|
||||
request->params_data[i].compare_data[3],
|
||||
request->params_data[i].compare_data[4],
|
||||
request->params_data[i].compare_data[5]);
|
||||
|
||||
hdd_debug("MData %d MData %d MData %d MData %d MData %d MData %d",
|
||||
request->params_data[i].data_mask[0],
|
||||
request->params_data[i].data_mask[1],
|
||||
request->params_data[i].data_mask[2],
|
||||
request->params_data[i].data_mask[3],
|
||||
request->params_data[i].data_mask[4],
|
||||
request->params_data[i].data_mask[5]);
|
||||
}
|
||||
|
||||
if (QDF_STATUS_SUCCESS !=
|
||||
pmo_ucfg_set_pkt_filter(hdd_ctx->hdd_psoc,
|
||||
pmo_set_pkt_fltr_req,
|
||||
sessionId)) {
|
||||
hdd_err("Failure to execute Set Filter");
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case HDD_RCV_FILTER_CLEAR:
|
||||
hdd_debug("Clear Packet Filter Request for Id: %d",
|
||||
request->filter_id);
|
||||
|
||||
pmo_clr_pkt_fltr_param = qdf_mem_malloc(
|
||||
sizeof(*pmo_clr_pkt_fltr_param));
|
||||
if (!pmo_clr_pkt_fltr_param) {
|
||||
hdd_err("unable to allocate pmo_clr_pkt_fltr_param");
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
pmo_clr_pkt_fltr_param->filter_id = request->filter_id;
|
||||
if (QDF_STATUS_SUCCESS !=
|
||||
pmo_ucfg_clear_pkt_filter(hdd_ctx->hdd_psoc,
|
||||
pmo_clr_pkt_fltr_param,
|
||||
sessionId)) {
|
||||
hdd_err("Failure to execute Clear Filter");
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto out;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
hdd_err("Packet Filter Request: Invalid %d",
|
||||
request->filter_action);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
out:
|
||||
if (pmo_set_pkt_fltr_req)
|
||||
qdf_mem_free(pmo_set_pkt_fltr_req);
|
||||
if (pmo_clr_pkt_fltr_param)
|
||||
qdf_mem_free(pmo_clr_pkt_fltr_param);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@@ -8245,174 +8245,6 @@ static int iw_set_keepalive_params(struct net_device *dev,
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_PACKET_FILTERING
|
||||
/**
|
||||
* wlan_hdd_set_filter() - Set packet filter
|
||||
* @hdd_ctx: Global HDD context
|
||||
* @request: Packet filter request struct
|
||||
* @sessionId: Target session for the request
|
||||
*
|
||||
* Return: 0 on success, non-zero on error
|
||||
*/
|
||||
int wlan_hdd_set_filter(struct hdd_context *hdd_ctx,
|
||||
struct pkt_filter_cfg *request,
|
||||
uint8_t sessionId)
|
||||
{
|
||||
struct pmo_rcv_pkt_fltr_cfg *pmo_set_pkt_fltr_req = NULL;
|
||||
struct pmo_rcv_pkt_fltr_clear_param *pmo_clr_pkt_fltr_param = NULL;
|
||||
int i = 0;
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
|
||||
if (hdd_ctx->config->disablePacketFilter) {
|
||||
hdd_warn("Packet filtering disabled in ini");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Debug display of request components. */
|
||||
hdd_debug("Packet Filter Request : FA %d params %d",
|
||||
request->filter_action, request->num_params);
|
||||
|
||||
switch (request->filter_action) {
|
||||
case HDD_RCV_FILTER_SET:
|
||||
hdd_debug("Set Packet Filter Request for Id: %d",
|
||||
request->filter_id);
|
||||
|
||||
pmo_set_pkt_fltr_req =
|
||||
qdf_mem_malloc(sizeof(*pmo_set_pkt_fltr_req));
|
||||
if (!pmo_set_pkt_fltr_req) {
|
||||
hdd_err("unable to allocate pmo_set_pkt_fltr_req");
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
pmo_set_pkt_fltr_req->filter_id = request->filter_id;
|
||||
if (request->num_params >= HDD_MAX_CMP_PER_PACKET_FILTER) {
|
||||
hdd_err("Number of Params exceed Max limit %d",
|
||||
request->num_params);
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto out;
|
||||
}
|
||||
pmo_set_pkt_fltr_req->num_params = request->num_params;
|
||||
pmo_set_pkt_fltr_req->coalesce_time = 0;
|
||||
pmo_set_pkt_fltr_req->filter_type = PMO_RCV_FILTER_TYPE_FILTER_PKT;
|
||||
for (i = 0; i < request->num_params; i++) {
|
||||
pmo_set_pkt_fltr_req->params_data[i].protocol_layer =
|
||||
request->params_data[i].protocol_layer;
|
||||
pmo_set_pkt_fltr_req->params_data[i].compare_flag =
|
||||
request->params_data[i].compare_flag;
|
||||
pmo_set_pkt_fltr_req->params_data[i].data_offset =
|
||||
request->params_data[i].data_offset;
|
||||
pmo_set_pkt_fltr_req->params_data[i].data_length =
|
||||
request->params_data[i].data_length;
|
||||
pmo_set_pkt_fltr_req->params_data[i].reserved = 0;
|
||||
|
||||
if (request->params_data[i].data_offset >
|
||||
SIR_MAX_FILTER_TEST_DATA_OFFSET) {
|
||||
hdd_err("Invalid data offset %u for param %d (max = %d)",
|
||||
request->params_data[i].data_offset,
|
||||
i,
|
||||
SIR_MAX_FILTER_TEST_DATA_OFFSET);
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (request->params_data[i].data_length >
|
||||
SIR_MAX_FILTER_TEST_DATA_LEN) {
|
||||
hdd_err("Error invalid data length %d",
|
||||
request->params_data[i].data_length);
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
hdd_debug("Proto %d Comp Flag %d Filter Type %d",
|
||||
request->params_data[i].protocol_layer,
|
||||
request->params_data[i].compare_flag,
|
||||
pmo_set_pkt_fltr_req->filter_type);
|
||||
|
||||
hdd_debug("Data Offset %d Data Len %d",
|
||||
request->params_data[i].data_offset,
|
||||
request->params_data[i].data_length);
|
||||
|
||||
if (sizeof(
|
||||
pmo_set_pkt_fltr_req->params_data[i].compare_data)
|
||||
< (request->params_data[i].data_length)) {
|
||||
hdd_err("Error invalid data length %d",
|
||||
request->params_data[i].data_length);
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
memcpy(
|
||||
&pmo_set_pkt_fltr_req->params_data[i].compare_data,
|
||||
request->params_data[i].compare_data,
|
||||
request->params_data[i].data_length);
|
||||
memcpy(&pmo_set_pkt_fltr_req->params_data[i].data_mask,
|
||||
request->params_data[i].data_mask,
|
||||
request->params_data[i].data_length);
|
||||
|
||||
hdd_debug("CData %d CData %d CData %d CData %d CData %d CData %d",
|
||||
request->params_data[i].compare_data[0],
|
||||
request->params_data[i].compare_data[1],
|
||||
request->params_data[i].compare_data[2],
|
||||
request->params_data[i].compare_data[3],
|
||||
request->params_data[i].compare_data[4],
|
||||
request->params_data[i].compare_data[5]);
|
||||
|
||||
hdd_debug("MData %d MData %d MData %d MData %d MData %d MData %d",
|
||||
request->params_data[i].data_mask[0],
|
||||
request->params_data[i].data_mask[1],
|
||||
request->params_data[i].data_mask[2],
|
||||
request->params_data[i].data_mask[3],
|
||||
request->params_data[i].data_mask[4],
|
||||
request->params_data[i].data_mask[5]);
|
||||
}
|
||||
|
||||
if (QDF_STATUS_SUCCESS !=
|
||||
pmo_ucfg_set_pkt_filter(hdd_ctx->hdd_psoc,
|
||||
pmo_set_pkt_fltr_req,
|
||||
sessionId)) {
|
||||
hdd_err("Failure to execute Set Filter");
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case HDD_RCV_FILTER_CLEAR:
|
||||
hdd_debug("Clear Packet Filter Request for Id: %d",
|
||||
request->filter_id);
|
||||
|
||||
pmo_clr_pkt_fltr_param = qdf_mem_malloc(
|
||||
sizeof(*pmo_clr_pkt_fltr_param));
|
||||
if (!pmo_clr_pkt_fltr_param) {
|
||||
hdd_err("unable to allocate pmo_clr_pkt_fltr_param");
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
pmo_clr_pkt_fltr_param->filter_id = request->filter_id;
|
||||
if (QDF_STATUS_SUCCESS !=
|
||||
pmo_ucfg_clear_pkt_filter(hdd_ctx->hdd_psoc,
|
||||
pmo_clr_pkt_fltr_param,
|
||||
sessionId)) {
|
||||
hdd_err("Failure to execute Clear Filter");
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto out;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
hdd_err("Packet Filter Request: Invalid %d",
|
||||
request->filter_action);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
out:
|
||||
if (pmo_set_pkt_fltr_req)
|
||||
qdf_mem_free(pmo_set_pkt_fltr_req);
|
||||
if (pmo_clr_pkt_fltr_param)
|
||||
qdf_mem_free(pmo_clr_pkt_fltr_param);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* __iw_set_packet_filter_params() - set packet filter parameters in target
|
||||
* @dev: Pointer to netdev
|
||||
|
Référencer dans un nouveau ticket
Bloquer un utilisateur