qcacld-3.0: Implement ACL API for EasyMesh
Add API to set/get ACL policy. Add API to add/delete ACL MAC. Add API to kickout sta according to MAC. Change-Id: I329501d4f0c929b6e7933a8e484b5d8493dbbabe CRs-Fixed: 3042927
This commit is contained in:
@@ -20230,17 +20230,11 @@ fn_end:
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(USE_CFG80211_DEL_STA_V2)
|
#if defined(USE_CFG80211_DEL_STA_V2)
|
||||||
/**
|
int wlan_hdd_del_station(struct hdd_adapter *adapter, const uint8_t *mac)
|
||||||
* wlan_hdd_del_station() - delete station wrapper
|
|
||||||
* @adapter: pointer to the hdd adapter
|
|
||||||
*
|
|
||||||
* Return: Errno
|
|
||||||
*/
|
|
||||||
int wlan_hdd_del_station(struct hdd_adapter *adapter)
|
|
||||||
{
|
{
|
||||||
struct station_del_parameters del_sta;
|
struct station_del_parameters del_sta;
|
||||||
|
|
||||||
del_sta.mac = NULL;
|
del_sta.mac = mac;
|
||||||
del_sta.subtype = IEEE80211_STYPE_DEAUTH >> 4;
|
del_sta.subtype = IEEE80211_STYPE_DEAUTH >> 4;
|
||||||
del_sta.reason_code = WLAN_REASON_DEAUTH_LEAVING;
|
del_sta.reason_code = WLAN_REASON_DEAUTH_LEAVING;
|
||||||
|
|
||||||
@@ -20248,10 +20242,10 @@ int wlan_hdd_del_station(struct hdd_adapter *adapter)
|
|||||||
adapter->dev, &del_sta);
|
adapter->dev, &del_sta);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
int wlan_hdd_del_station(struct hdd_adapter *adapter)
|
int wlan_hdd_del_station(struct hdd_adapter *adapter, const uint8_t *mac)
|
||||||
{
|
{
|
||||||
return wlan_hdd_cfg80211_del_station(adapter->wdev.wiphy,
|
return wlan_hdd_cfg80211_del_station(adapter->wdev.wiphy,
|
||||||
adapter->dev, NULL);
|
adapter->dev, mac);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -440,7 +440,15 @@ void hdd_select_cbmode(struct hdd_adapter *adapter, qdf_freq_t oper_freq,
|
|||||||
* Return: true or false based on findings
|
* Return: true or false based on findings
|
||||||
*/
|
*/
|
||||||
bool wlan_hdd_is_ap_supports_immediate_power_save(uint8_t *ies, int length);
|
bool wlan_hdd_is_ap_supports_immediate_power_save(uint8_t *ies, int length);
|
||||||
int wlan_hdd_del_station(struct hdd_adapter *adapter);
|
|
||||||
|
/**
|
||||||
|
* wlan_hdd_del_station() - delete station wrapper
|
||||||
|
* @adapter: pointer to the hdd adapter
|
||||||
|
* @mac: pointer to mac addr
|
||||||
|
*
|
||||||
|
* Return: Errno
|
||||||
|
*/
|
||||||
|
int wlan_hdd_del_station(struct hdd_adapter *adapter, const uint8_t *mac);
|
||||||
|
|
||||||
#if defined(USE_CFG80211_DEL_STA_V2)
|
#if defined(USE_CFG80211_DEL_STA_V2)
|
||||||
int wlan_hdd_cfg80211_del_station(struct wiphy *wiphy,
|
int wlan_hdd_cfg80211_del_station(struct wiphy *wiphy,
|
||||||
|
@@ -6211,7 +6211,7 @@ static int __wlan_hdd_cfg80211_stop_ap(struct wiphy *wiphy,
|
|||||||
hdd_abort_ongoing_sta_connection(hdd_ctx);
|
hdd_abort_ongoing_sta_connection(hdd_ctx);
|
||||||
|
|
||||||
if (adapter->device_mode == QDF_SAP_MODE) {
|
if (adapter->device_mode == QDF_SAP_MODE) {
|
||||||
wlan_hdd_del_station(adapter);
|
wlan_hdd_del_station(adapter, NULL);
|
||||||
mac_handle = hdd_ctx->mac_handle;
|
mac_handle = hdd_ctx->mac_handle;
|
||||||
status = wlan_hdd_flush_pmksa_cache(adapter);
|
status = wlan_hdd_flush_pmksa_cache(adapter);
|
||||||
if (QDF_IS_STATUS_ERROR(status))
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
|
@@ -7719,7 +7719,7 @@ QDF_STATUS hdd_stop_adapter_ext(struct hdd_context *hdd_ctx,
|
|||||||
hdd_abort_ongoing_sta_connection(hdd_ctx);
|
hdd_abort_ongoing_sta_connection(hdd_ctx);
|
||||||
/* Diassociate with all the peers before stop ap post */
|
/* Diassociate with all the peers before stop ap post */
|
||||||
if (test_bit(SOFTAP_BSS_STARTED, &adapter->event_flags)) {
|
if (test_bit(SOFTAP_BSS_STARTED, &adapter->event_flags)) {
|
||||||
if (wlan_hdd_del_station(adapter))
|
if (wlan_hdd_del_station(adapter, NULL))
|
||||||
hdd_sap_indicate_disconnect_for_sta(adapter);
|
hdd_sap_indicate_disconnect_for_sta(adapter);
|
||||||
}
|
}
|
||||||
status = wlan_hdd_flush_pmksa_cache(adapter);
|
status = wlan_hdd_flush_pmksa_cache(adapter);
|
||||||
@@ -16051,7 +16051,7 @@ void wlan_hdd_stop_sap(struct hdd_adapter *ap_adapter)
|
|||||||
|
|
||||||
mutex_lock(&hdd_ctx->sap_lock);
|
mutex_lock(&hdd_ctx->sap_lock);
|
||||||
if (test_bit(SOFTAP_BSS_STARTED, &ap_adapter->event_flags)) {
|
if (test_bit(SOFTAP_BSS_STARTED, &ap_adapter->event_flags)) {
|
||||||
wlan_hdd_del_station(ap_adapter);
|
wlan_hdd_del_station(ap_adapter, NULL);
|
||||||
hostapd_state = WLAN_HDD_GET_HOSTAP_STATE_PTR(ap_adapter);
|
hostapd_state = WLAN_HDD_GET_HOSTAP_STATE_PTR(ap_adapter);
|
||||||
hdd_debug("Now doing SAP STOPBSS");
|
hdd_debug("Now doing SAP STOPBSS");
|
||||||
qdf_event_reset(&hostapd_state->qdf_stop_bss_event);
|
qdf_event_reset(&hostapd_state->qdf_stop_bss_event);
|
||||||
@@ -18511,7 +18511,7 @@ void hdd_restart_sap(struct hdd_adapter *ap_adapter)
|
|||||||
|
|
||||||
mutex_lock(&hdd_ctx->sap_lock);
|
mutex_lock(&hdd_ctx->sap_lock);
|
||||||
if (test_bit(SOFTAP_BSS_STARTED, &ap_adapter->event_flags)) {
|
if (test_bit(SOFTAP_BSS_STARTED, &ap_adapter->event_flags)) {
|
||||||
wlan_hdd_del_station(ap_adapter);
|
wlan_hdd_del_station(ap_adapter, NULL);
|
||||||
hostapd_state = WLAN_HDD_GET_HOSTAP_STATE_PTR(ap_adapter);
|
hostapd_state = WLAN_HDD_GET_HOSTAP_STATE_PTR(ap_adapter);
|
||||||
qdf_event_reset(&hostapd_state->qdf_stop_bss_event);
|
qdf_event_reset(&hostapd_state->qdf_stop_bss_event);
|
||||||
if (QDF_STATUS_SUCCESS == wlansap_stop_bss(sap_ctx)) {
|
if (QDF_STATUS_SUCCESS == wlansap_stop_bss(sap_ctx)) {
|
||||||
|
@@ -862,11 +862,252 @@ static enum ieee80211_phymode hdd_son_get_phymode(struct wlan_objmgr_vdev *vdev)
|
|||||||
hdd_err("null hdd ctx");
|
hdd_err("null hdd ctx");
|
||||||
return IEEE80211_MODE_AUTO;
|
return IEEE80211_MODE_AUTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
phymode = sme_get_phy_mode(hdd_ctx->mac_handle);
|
phymode = sme_get_phy_mode(hdd_ctx->mac_handle);
|
||||||
|
|
||||||
return hdd_phymode_chwidth_freq_to_son_phymode(phymode, chwidth, freq);
|
return hdd_phymode_chwidth_freq_to_son_phymode(phymode, chwidth, freq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_son_set_acl_policy() - set son acl policy
|
||||||
|
* @vdev: vdev
|
||||||
|
* @son_acl_policy: enum ieee80211_acl_cmd
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
static QDF_STATUS hdd_son_set_acl_policy(struct wlan_objmgr_vdev *vdev,
|
||||||
|
ieee80211_acl_cmd son_acl_policy)
|
||||||
|
{
|
||||||
|
struct hdd_adapter *adapter;
|
||||||
|
QDF_STATUS status = QDF_STATUS_E_INVAL;
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
hdd_err("null vdev");
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
adapter = wlan_hdd_get_adapter_from_objmgr(vdev);
|
||||||
|
if (!adapter) {
|
||||||
|
hdd_err("null adapter");
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (son_acl_policy) {
|
||||||
|
case IEEE80211_MACCMD_POLICY_OPEN:
|
||||||
|
status = wlansap_set_acl_mode(WLAN_HDD_GET_SAP_CTX_PTR(adapter),
|
||||||
|
eSAP_ALLOW_ALL);
|
||||||
|
break;
|
||||||
|
case IEEE80211_MACCMD_POLICY_ALLOW:
|
||||||
|
status = wlansap_set_acl_mode(WLAN_HDD_GET_SAP_CTX_PTR(adapter),
|
||||||
|
eSAP_DENY_UNLESS_ACCEPTED);
|
||||||
|
break;
|
||||||
|
case IEEE80211_MACCMD_POLICY_DENY:
|
||||||
|
status = wlansap_set_acl_mode(WLAN_HDD_GET_SAP_CTX_PTR(adapter),
|
||||||
|
eSAP_ACCEPT_UNLESS_DENIED);
|
||||||
|
break;
|
||||||
|
case IEEE80211_MACCMD_FLUSH:
|
||||||
|
case IEEE80211_MACCMD_DETACH:
|
||||||
|
status = wlansap_clear_acl(WLAN_HDD_GET_SAP_CTX_PTR(adapter));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
hdd_err("invalid son acl policy %d", son_acl_policy);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_acl_policy_to_son_acl_policy() - convert acl policy to son acl policy
|
||||||
|
* @acl_policy: acl policy
|
||||||
|
*
|
||||||
|
* Return: son acl policy. enum ieee80211_acl_cmd
|
||||||
|
*/
|
||||||
|
static ieee80211_acl_cmd hdd_acl_policy_to_son_acl_policy(
|
||||||
|
eSapMacAddrACL acl_policy)
|
||||||
|
{
|
||||||
|
ieee80211_acl_cmd son_acl_policy = IEEE80211_MACCMD_DETACH;
|
||||||
|
|
||||||
|
switch (acl_policy) {
|
||||||
|
case eSAP_ACCEPT_UNLESS_DENIED:
|
||||||
|
son_acl_policy = IEEE80211_MACCMD_POLICY_DENY;
|
||||||
|
break;
|
||||||
|
case eSAP_DENY_UNLESS_ACCEPTED:
|
||||||
|
son_acl_policy = IEEE80211_MACCMD_POLICY_ALLOW;
|
||||||
|
break;
|
||||||
|
case eSAP_ALLOW_ALL:
|
||||||
|
son_acl_policy = IEEE80211_MACCMD_POLICY_OPEN;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
hdd_err("invalid acl policy %d", acl_policy);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return son_acl_policy;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_son_get_acl_policy() - get son acl policy
|
||||||
|
* @vdev: vdev
|
||||||
|
*
|
||||||
|
* Return: son acl policy. enum ieee80211_acl_cmd
|
||||||
|
*/
|
||||||
|
static ieee80211_acl_cmd hdd_son_get_acl_policy(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
eSapMacAddrACL acl_policy;
|
||||||
|
struct hdd_adapter *adapter;
|
||||||
|
ieee80211_acl_cmd son_acl_policy = IEEE80211_MACCMD_DETACH;
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
hdd_err("null vdev");
|
||||||
|
return son_acl_policy;
|
||||||
|
}
|
||||||
|
adapter = wlan_hdd_get_adapter_from_objmgr(vdev);
|
||||||
|
if (!adapter) {
|
||||||
|
hdd_err("null adapter");
|
||||||
|
return son_acl_policy;
|
||||||
|
}
|
||||||
|
|
||||||
|
wlansap_get_acl_mode(WLAN_HDD_GET_SAP_CTX_PTR(adapter), &acl_policy);
|
||||||
|
|
||||||
|
son_acl_policy = hdd_acl_policy_to_son_acl_policy(acl_policy);
|
||||||
|
|
||||||
|
return son_acl_policy;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_son_add_acl_mac() - add mac to access control list(ACL)
|
||||||
|
* @vdev: vdev
|
||||||
|
* @acl_mac: mac address to add
|
||||||
|
*
|
||||||
|
* Return: 0 on success, negative errno on failure
|
||||||
|
*/
|
||||||
|
static int hdd_son_add_acl_mac(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *acl_mac)
|
||||||
|
{
|
||||||
|
eSapACLType list_type;
|
||||||
|
QDF_STATUS qdf_status;
|
||||||
|
eSapMacAddrACL acl_policy;
|
||||||
|
struct hdd_adapter *adapter;
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
hdd_err("null vdev");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
if (!acl_mac) {
|
||||||
|
hdd_err("null acl_mac");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
adapter = wlan_hdd_get_adapter_from_objmgr(vdev);
|
||||||
|
if (!adapter) {
|
||||||
|
hdd_err("null adapter");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
wlansap_get_acl_mode(WLAN_HDD_GET_SAP_CTX_PTR(adapter), &acl_policy);
|
||||||
|
|
||||||
|
if (acl_policy == eSAP_ACCEPT_UNLESS_DENIED) {
|
||||||
|
list_type = eSAP_BLACK_LIST;
|
||||||
|
} else if (acl_policy == eSAP_DENY_UNLESS_ACCEPTED) {
|
||||||
|
list_type = eSAP_WHITE_LIST;
|
||||||
|
} else {
|
||||||
|
hdd_err("Invalid ACL policy %d.", acl_policy);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
qdf_status = wlansap_modify_acl(WLAN_HDD_GET_SAP_CTX_PTR(adapter),
|
||||||
|
acl_mac->bytes, list_type,
|
||||||
|
ADD_STA_TO_ACL);
|
||||||
|
if (QDF_IS_STATUS_ERROR(qdf_status)) {
|
||||||
|
hdd_err("Modify ACL failed");
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_son_del_acl_mac() - delete mac from acl
|
||||||
|
* @vdev: vdev
|
||||||
|
* @acl_mac: mac to remove
|
||||||
|
*
|
||||||
|
* Return: 0 on success, negative errno on failure
|
||||||
|
*/
|
||||||
|
static int hdd_son_del_acl_mac(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *acl_mac)
|
||||||
|
{
|
||||||
|
eSapACLType list_type;
|
||||||
|
QDF_STATUS qdf_status;
|
||||||
|
eSapMacAddrACL acl_policy;
|
||||||
|
struct hdd_adapter *adapter;
|
||||||
|
struct sap_context *sap_ctx;
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
hdd_err("null vdev");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
if (!acl_mac) {
|
||||||
|
hdd_err("null acl_mac");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
adapter = wlan_hdd_get_adapter_from_objmgr(vdev);
|
||||||
|
if (!adapter) {
|
||||||
|
hdd_err("null adapter");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
sap_ctx = WLAN_HDD_GET_SAP_CTX_PTR(adapter);
|
||||||
|
if (!sap_ctx) {
|
||||||
|
hdd_err("null sap ctx");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
wlansap_get_acl_mode(sap_ctx, &acl_policy);
|
||||||
|
|
||||||
|
if (acl_policy == eSAP_ACCEPT_UNLESS_DENIED) {
|
||||||
|
list_type = eSAP_BLACK_LIST;
|
||||||
|
} else if (acl_policy == eSAP_DENY_UNLESS_ACCEPTED) {
|
||||||
|
list_type = eSAP_WHITE_LIST;
|
||||||
|
} else {
|
||||||
|
hdd_err("Invalid ACL policy %d.", acl_policy);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
qdf_status = wlansap_modify_acl(sap_ctx, acl_mac->bytes, list_type,
|
||||||
|
DELETE_STA_FROM_ACL);
|
||||||
|
if (QDF_IS_STATUS_ERROR(qdf_status)) {
|
||||||
|
hdd_err("Modify ACL failed");
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hdd_son_kickout_mac() - kickout sta with given mac
|
||||||
|
* @vdev: vdev
|
||||||
|
* @acl_mac: sta mac to kickout
|
||||||
|
*
|
||||||
|
* Return: 0 on success, negative errno on failure
|
||||||
|
*/
|
||||||
|
static int hdd_son_kickout_mac(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *mac)
|
||||||
|
{
|
||||||
|
struct hdd_adapter *adapter;
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
hdd_err("null vdev");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
adapter = wlan_hdd_get_adapter_from_objmgr(vdev);
|
||||||
|
if (!adapter) {
|
||||||
|
hdd_err("null adapter");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mac)
|
||||||
|
return wlan_hdd_del_station(adapter, mac->bytes);
|
||||||
|
else
|
||||||
|
return wlan_hdd_del_station(adapter, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static uint8_t hdd_son_get_rx_nss(struct wlan_objmgr_vdev *vdev)
|
static uint8_t hdd_son_get_rx_nss(struct wlan_objmgr_vdev *vdev)
|
||||||
{
|
{
|
||||||
struct hdd_adapter *adapter = wlan_hdd_get_adapter_from_objmgr(vdev);
|
struct hdd_adapter *adapter = wlan_hdd_get_adapter_from_objmgr(vdev);
|
||||||
@@ -891,6 +1132,11 @@ void hdd_son_register_callbacks(struct hdd_context *hdd_ctx)
|
|||||||
cb_obj.os_if_set_bandwidth = hdd_son_set_bandwidth;
|
cb_obj.os_if_set_bandwidth = hdd_son_set_bandwidth;
|
||||||
cb_obj.os_if_get_bandwidth = hdd_son_get_bandwidth;
|
cb_obj.os_if_get_bandwidth = hdd_son_get_bandwidth;
|
||||||
cb_obj.os_if_set_chan = hdd_son_set_chan;
|
cb_obj.os_if_set_chan = hdd_son_set_chan;
|
||||||
|
cb_obj.os_if_set_acl_policy = hdd_son_set_acl_policy;
|
||||||
|
cb_obj.os_if_get_acl_policy = hdd_son_get_acl_policy;
|
||||||
|
cb_obj.os_if_add_acl_mac = hdd_son_add_acl_mac;
|
||||||
|
cb_obj.os_if_del_acl_mac = hdd_son_del_acl_mac;
|
||||||
|
cb_obj.os_if_kickout_mac = hdd_son_kickout_mac;
|
||||||
cb_obj.os_if_set_country_code = hdd_son_set_country;
|
cb_obj.os_if_set_country_code = hdd_son_set_country;
|
||||||
cb_obj.os_if_set_candidate_freq = hdd_son_set_candidate_freq;
|
cb_obj.os_if_set_candidate_freq = hdd_son_set_candidate_freq;
|
||||||
cb_obj.os_if_get_candidate_freq = hdd_son_get_candidate_freq;
|
cb_obj.os_if_get_candidate_freq = hdd_son_get_candidate_freq;
|
||||||
|
@@ -46,6 +46,11 @@
|
|||||||
* @os_if_set_phymode: set phy mode
|
* @os_if_set_phymode: set phy mode
|
||||||
* @os_if_get_phymode: get phy mode
|
* @os_if_get_phymode: get phy mode
|
||||||
* @os_if_get_rx_nss: Gets number of RX spatial streams
|
* @os_if_get_rx_nss: Gets number of RX spatial streams
|
||||||
|
* @os_if_set_acl_policy: set acl policy
|
||||||
|
* @os_if_get_acl_policy: get acl policy
|
||||||
|
* @os_if_add_acl_mac: add mac to acl
|
||||||
|
* @os_if_del_acl_mac: del mac from acl
|
||||||
|
* @os_if_kickout_mac: kickout sta with given mac
|
||||||
*/
|
*/
|
||||||
struct son_callbacks {
|
struct son_callbacks {
|
||||||
uint32_t (*os_if_is_acs_in_progress)(struct wlan_objmgr_vdev *vdev);
|
uint32_t (*os_if_is_acs_in_progress)(struct wlan_objmgr_vdev *vdev);
|
||||||
@@ -70,6 +75,16 @@ struct son_callbacks {
|
|||||||
enum ieee80211_phymode (*os_if_get_phymode)(
|
enum ieee80211_phymode (*os_if_get_phymode)(
|
||||||
struct wlan_objmgr_vdev *vdev);
|
struct wlan_objmgr_vdev *vdev);
|
||||||
uint8_t (*os_if_get_rx_nss)(struct wlan_objmgr_vdev *vdev);
|
uint8_t (*os_if_get_rx_nss)(struct wlan_objmgr_vdev *vdev);
|
||||||
|
QDF_STATUS (*os_if_set_acl_policy)(struct wlan_objmgr_vdev *vdev,
|
||||||
|
ieee80211_acl_cmd son_acl_policy);
|
||||||
|
ieee80211_acl_cmd (*os_if_get_acl_policy)(
|
||||||
|
struct wlan_objmgr_vdev *vdev);
|
||||||
|
int (*os_if_add_acl_mac)(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *acl_mac);
|
||||||
|
int (*os_if_del_acl_mac)(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *acl_mac);
|
||||||
|
int (*os_if_kickout_mac)(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *acl_mac);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -370,4 +385,52 @@ QDF_STATUS os_if_son_cfg80211_reply(qdf_nbuf_t sk_buf);
|
|||||||
*/
|
*/
|
||||||
bool os_if_son_vdev_is_wds(struct wlan_objmgr_vdev *vdev);
|
bool os_if_son_vdev_is_wds(struct wlan_objmgr_vdev *vdev);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* os_if_son_set_acl_policy() - set acl policy
|
||||||
|
* @vdev: vdev
|
||||||
|
* @son_acl_policy: son acl policy. enum ieee80211_acl_cmd
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS os_if_son_set_acl_policy(struct wlan_objmgr_vdev *vdev,
|
||||||
|
ieee80211_acl_cmd son_acl_policy);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* os_if_son_get_acl_policy() - get acl policy
|
||||||
|
* @vdev: vdev
|
||||||
|
*
|
||||||
|
* Return: acl policy. enum ieee80211_acl_cmd
|
||||||
|
*/
|
||||||
|
ieee80211_acl_cmd os_if_son_get_acl_policy(struct wlan_objmgr_vdev *vdev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* os_if_son_add_acl_mac() - add mac to acl
|
||||||
|
* @vdev: vdev
|
||||||
|
* @acl_mac: mac to add
|
||||||
|
*
|
||||||
|
* Return: 0 on success, negative errno on failure
|
||||||
|
*/
|
||||||
|
int os_if_son_add_acl_mac(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *acl_mac);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* os_if_son_del_acl_mac() - del mac from acl
|
||||||
|
* @vdev: vdev
|
||||||
|
* @acl_mac: mac to del
|
||||||
|
*
|
||||||
|
* Return: 0 on success, negative errno on failure
|
||||||
|
*/
|
||||||
|
int os_if_son_del_acl_mac(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *acl_mac);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* os_if_son_kickout_mac() - kickout sta with given mac
|
||||||
|
* @vdev: vdev
|
||||||
|
* @acl_mac: sta mac to kickout
|
||||||
|
*
|
||||||
|
* Return: 0 on success, negative errno on failure
|
||||||
|
*/
|
||||||
|
int os_if_son_kickout_mac(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *mac);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -625,6 +625,89 @@ qdf_freq_t os_if_son_get_candidate_freq(struct wlan_objmgr_vdev *vdev)
|
|||||||
}
|
}
|
||||||
qdf_export_symbol(os_if_son_get_candidate_freq);
|
qdf_export_symbol(os_if_son_get_candidate_freq);
|
||||||
|
|
||||||
|
QDF_STATUS os_if_son_set_acl_policy(struct wlan_objmgr_vdev *vdev,
|
||||||
|
ieee80211_acl_cmd son_acl_policy)
|
||||||
|
{
|
||||||
|
QDF_STATUS ret;
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
osif_err("null vdev");
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = g_son_os_if_cb.os_if_set_acl_policy(vdev, son_acl_policy);
|
||||||
|
osif_debug("set acl policy %d status %d", son_acl_policy, ret);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
qdf_export_symbol(os_if_son_set_acl_policy);
|
||||||
|
|
||||||
|
ieee80211_acl_cmd os_if_son_get_acl_policy(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
ieee80211_acl_cmd son_acl_policy;
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
osif_err("null vdev");
|
||||||
|
return IEEE80211_MACCMD_DETACH;
|
||||||
|
}
|
||||||
|
son_acl_policy = g_son_os_if_cb.os_if_get_acl_policy(vdev);
|
||||||
|
osif_debug("get acl policy %d", son_acl_policy);
|
||||||
|
|
||||||
|
return son_acl_policy;
|
||||||
|
}
|
||||||
|
qdf_export_symbol(os_if_son_get_acl_policy);
|
||||||
|
|
||||||
|
int os_if_son_add_acl_mac(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *acl_mac)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
osif_err("null vdev");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
ret = g_son_os_if_cb.os_if_add_acl_mac(vdev, acl_mac);
|
||||||
|
osif_debug("add_acl_mac " QDF_MAC_ADDR_FMT " ret %d",
|
||||||
|
QDF_MAC_ADDR_REF(acl_mac->bytes), ret);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
qdf_export_symbol(os_if_son_add_acl_mac);
|
||||||
|
|
||||||
|
int os_if_son_del_acl_mac(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *acl_mac)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
osif_err("null vdev");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
ret = g_son_os_if_cb.os_if_del_acl_mac(vdev, acl_mac);
|
||||||
|
osif_debug("del_acl_mac " QDF_MAC_ADDR_FMT " ret %d",
|
||||||
|
QDF_MAC_ADDR_REF(acl_mac->bytes), ret);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
qdf_export_symbol(os_if_son_del_acl_mac);
|
||||||
|
|
||||||
|
int os_if_son_kickout_mac(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct qdf_mac_addr *mac)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
osif_err("null vdev");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
ret = g_son_os_if_cb.os_if_kickout_mac(vdev, mac);
|
||||||
|
osif_debug("kickout mac " QDF_MAC_ADDR_FMT " ret %d",
|
||||||
|
QDF_MAC_ADDR_REF(mac->bytes), ret);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
qdf_export_symbol(os_if_son_kickout_mac);
|
||||||
|
|
||||||
int os_if_son_set_phymode(struct wlan_objmgr_vdev *vdev,
|
int os_if_son_set_phymode(struct wlan_objmgr_vdev *vdev,
|
||||||
enum ieee80211_phymode mode)
|
enum ieee80211_phymode mode)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user