summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/hdd/inc/wlan_hdd_power.h13
-rw-r--r--core/hdd/src/wlan_hdd_wext.c249
2 files changed, 14 insertions, 248 deletions
diff --git a/core/hdd/inc/wlan_hdd_power.h b/core/hdd/inc/wlan_hdd_power.h
index 22233ea29444..35d3b970c0ec 100644
--- a/core/hdd/inc/wlan_hdd_power.h
+++ b/core/hdd/inc/wlan_hdd_power.h
@@ -39,7 +39,6 @@
#ifdef WLAN_FEATURE_PACKET_FILTERING
#define HDD_MAX_CMP_PER_PACKET_FILTER 5
-#define HDD_MC_FILTER_MAX_MC_ADDRS 16
/**
* enum pkt_filter_protocol_layer - packet filter protocol layer
@@ -128,18 +127,6 @@ struct pkt_filter_cfg {
#endif
/**
- * struct pkt_filter_mc_addr_list - dynamic mc/bc filter config from user space
- * @mcbc_filter_setting: The type of filter being configured
- * @mc_addr_cnt: The number of mc addresses to configure
- * @mc_addrs: The mc mac addresses to configure
- */
-struct pkt_filter_mc_addr_list {
- uint8_t mcbc_filter_setting;
- uint8_t mc_addr_cnt;
- uint8_t mc_addrs[HDD_MC_FILTER_MAX_MC_ADDRS][QDF_MAC_ADDR_SIZE];
-};
-
-/**
* enum suspend_resume_state - Suspend resume state
* @HDD_WLAN_EARLY_SUSPEND: Early suspend state.
* @HDD_WLAN_SUSPEND: Suspend state.
diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c
index efc68116d5bc..853e1569ba3c 100644
--- a/core/hdd/src/wlan_hdd_wext.c
+++ b/core/hdd/src/wlan_hdd_wext.c
@@ -1082,7 +1082,7 @@ static const hdd_freq_chan_map_t freq_chan_map[] = {
#define WLAN_SET_BAND_CONFIG (SIOCIWFIRSTPRIV + 25)
#define WLAN_PRIV_SET_MCBC_FILTER (SIOCIWFIRSTPRIV + 26)
-#define WLAN_PRIV_CLEAR_MCBC_FILTER (SIOCIWFIRSTPRIV + 27)
+/* (SIOCIWFIRSTPRIV + 27) is currently unused */
/* Private ioctls and their sub-ioctls */
#define WLAN_PRIV_SET_TWO_INT_GET_NONE (SIOCIWFIRSTPRIV + 28)
@@ -9493,165 +9493,6 @@ static int iw_set_fties(struct net_device *dev,
return ret;
}
-#ifdef WLAN_FEATURE_PACKET_FILTERING
-static int iw_set_mc_filter_list(hdd_adapter_t *adapter,
- struct pkt_filter_mc_addr_list *req)
-{
- int exit_code;
- QDF_STATUS status;
- tHalHandle hal;
- tSirRcvFltMcAddrList *mc_addr_list;
- int i;
-
- ENTER();
-
- mc_addr_list = qdf_mem_malloc(sizeof(*mc_addr_list));
- if (!mc_addr_list) {
- hdd_err("Out of memory");
- exit_code = -ENOMEM;
- goto exit_with_code;
- }
-
- mc_addr_list->action = HDD_SET_MCBC_FILTERS_TO_FW;
- mc_addr_list->ulMulticastAddrCnt =
- min(req->mc_addr_cnt, (uint8_t)HDD_MC_FILTER_MAX_MC_ADDRS);
-
- hdd_info("Configuring %u MC addrs (originally %u)",
- mc_addr_list->ulMulticastAddrCnt, req->mc_addr_cnt);
-
- for (i = 0; i < mc_addr_list->ulMulticastAddrCnt; i++) {
- memcpy(&mc_addr_list->multicastAddr[i], req->mc_addrs[i],
- QDF_MAC_ADDR_SIZE);
-
- hdd_info("MC addr %d: " MAC_ADDRESS_STR,
- i, MAC_ADDR_ARRAY(req->mc_addrs[i]));
- }
-
- hal = WLAN_HDD_GET_HAL_CTX(adapter);
- status = sme_8023_multicast_list(hal, adapter->sessionId, mc_addr_list);
- qdf_mem_free(mc_addr_list);
- if (QDF_IS_STATUS_ERROR(status)) {
- hdd_err("Failed to configure MC address list");
- exit_code = -EINVAL;
- goto exit_with_code;
- }
-
- exit_code = 0;
-
-exit_with_code:
- EXIT();
- return exit_code;
-}
-
-static int iw_clear_mc_filter_list(hdd_adapter_t *adapter)
-{
- int exit_code;
- QDF_STATUS status;
- tHalHandle hal;
- tSirRcvFltMcAddrList *mc_addr_list;
-
- ENTER();
-
- mc_addr_list = qdf_mem_malloc(sizeof(*mc_addr_list));
- if (!mc_addr_list) {
- hdd_err("Out of memory");
- exit_code = -ENOMEM;
- goto exit_with_code;
- }
-
- mc_addr_list->action = HDD_DELETE_MCBC_FILTERS_FROM_FW;
-
- hal = WLAN_HDD_GET_HAL_CTX(adapter);
- status = sme_8023_multicast_list(hal, adapter->sessionId, mc_addr_list);
- qdf_mem_free(mc_addr_list);
- if (QDF_IS_STATUS_ERROR(status)) {
- hdd_err("Failed to clear MC address list");
- exit_code = -EINVAL;
- goto exit_with_code;
- }
-
- exit_code = 0;
-
-exit_with_code:
- EXIT();
- return exit_code;
-}
-#else
-static inline int iw_set_mc_filter_list(hdd_adapter_t *adapter,
- struct pkt_filter_mc_addr_list *req)
-{
- return 0;
-}
-
-static inline int iw_clear_mc_filter_list(hdd_adapter_t *adapter)
-{
- return 0;
-}
-#endif /* WLAN_FEATURE_PACKET_FILTERING */
-
-static int iw_configure_mcbc_filter(hdd_adapter_t *adapter,
- struct pkt_filter_mc_addr_list *req)
-{
- hdd_context_t *hdd_ctx;
-
- ENTER();
-
- hdd_info("Configuring mc/bc filter; setting:%u",
- req->mcbc_filter_setting);
-
- hdd_ctx = WLAN_HDD_GET_CTX(adapter);
- hdd_conf_hostoffload(adapter, true);
-
- EXIT();
- return 0;
-}
-
-/**
- * __iw_set_dynamic_mcbc_filter() - Set Dynamic MCBC Filter ioctl handler
- * @dev: device upon which the ioctl was received
- * @info: ioctl request information
- * @wrqu: ioctl request data
- * @extra: ioctl extra data
- *
- * Return: 0 on success, non-zero on error
- */
-static int __iw_set_dynamic_mcbc_filter(struct net_device *dev,
- struct iw_request_info *info,
- union iwreq_data *wrqu,
- char *extra)
-{
- int exit_code;
- hdd_adapter_t *adapter;
- struct pkt_filter_mc_addr_list *req;
-
- ENTER();
-
- req = (struct pkt_filter_mc_addr_list *)extra;
- if (req->mcbc_filter_setting > HDD_MULTICAST_FILTER_LIST_CLEAR) {
- hdd_err("Invalid filter setting: %u", req->mcbc_filter_setting);
- exit_code = -EINVAL;
- goto exit_with_code;
- }
-
- adapter = WLAN_HDD_GET_PRIV_PTR(dev);
-
- if (req->mcbc_filter_setting == HDD_MULTICAST_FILTER_LIST) {
- exit_code = iw_set_mc_filter_list(adapter, req);
- goto exit_with_code;
- }
-
- if (req->mcbc_filter_setting == HDD_MULTICAST_FILTER_LIST_CLEAR) {
- exit_code = iw_clear_mc_filter_list(adapter);
- goto exit_with_code;
- }
-
- exit_code = iw_configure_mcbc_filter(adapter, req);
-
-exit_with_code:
- EXIT();
- return exit_code;
-}
-
/**
* iw_set_dynamic_mcbc_filter() - Set Dynamic MCBC Filter ioctl handler
* @dev: device upon which the ioctl was received
@@ -9659,6 +9500,9 @@ exit_with_code:
* @wrqu: ioctl request data
* @extra: ioctl extra data
*
+ * This IOCTL is OBSOLETE as of Jan 30, 2017. We are leaving it here for the
+ * time being to provide guidance in migrating to standard APIs.
+ *
* Return: 0 on success, non-zero on error
*/
static int iw_set_dynamic_mcbc_filter(struct net_device *dev,
@@ -9666,72 +9510,16 @@ static int iw_set_dynamic_mcbc_filter(struct net_device *dev,
union iwreq_data *wrqu,
char *extra)
{
- int ret;
-
- cds_ssr_protect(__func__);
- ret = __iw_set_dynamic_mcbc_filter(dev, info, wrqu, extra);
- cds_ssr_unprotect(__func__);
-
- return ret;
-}
-
-/**
- * __iw_clear_dynamic_mcbc_filter() - Clear Dynamic MCBC Filter ioctl handler
- * @dev: device upon which the ioctl was received
- * @info: ioctl request information
- * @wrqu: ioctl request data
- * @extra: ioctl extra data
- *
- * Return: 0 on success, non-zero on error
- */
-static int __iw_clear_dynamic_mcbc_filter(struct net_device *dev,
- struct iw_request_info *info,
- union iwreq_data *wrqu,
- char *extra)
-{
- int exit_code;
- hdd_adapter_t *adapter;
+ hdd_err("\n"
+ "setMCBCFilter is obsolete. Use the following instead:\n"
+ "Configure multicast filtering via the ‘ip’ command.\n"
+ "\tip maddr add 11:22:33:44:55:66 dev wlan0 # allow traffic to address\n"
+ "\tip maddr del 11:22:33:44:55:66 dev wlan0 # undo allow\n"
+ "Configure broadcast filtering via ini item, 'g_enable_non_arp_bc_hw_filter.'\n"
+ "\tg_enable_non_arp_bc_hw_filter=1 # drop all non-ARP broadcast traffic\n"
+ "\tg_enable_non_arp_bc_hw_filter=0 # allow all broadcast traffic");
- ENTER();
-
- if (!capable(CAP_NET_ADMIN)) {
- hdd_err("Net Admin permissions required");
- exit_code = -EPERM;
- goto exit_with_code;
- }
-
- /* clear basically means: reset to ini filter settings */
- adapter = WLAN_HDD_GET_PRIV_PTR(dev);
- hdd_conf_hostoffload(adapter, true);
-
- exit_code = 0;
-
-exit_with_code:
- EXIT();
- return exit_code;
-}
-
-/**
- * iw_clear_dynamic_mcbc_filter() - Clear Dynamic MCBC Filter ioctl handler
- * @dev: device upon which the ioctl was received
- * @info: ioctl request information
- * @wrqu: ioctl request data
- * @extra: ioctl extra data
- *
- * Return: 0 on success, non-zero on error
- */
-static int iw_clear_dynamic_mcbc_filter(struct net_device *dev,
- struct iw_request_info *info,
- union iwreq_data *wrqu,
- char *extra)
-{
- int ret;
-
- cds_ssr_protect(__func__);
- ret = __iw_clear_dynamic_mcbc_filter(dev, info, wrqu, extra);
- cds_ssr_unprotect(__func__);
-
- return ret;
+ return -EINVAL;
}
/**
@@ -11072,8 +10860,6 @@ static const iw_handler we_private[] = {
[WLAN_SET_BAND_CONFIG - SIOCIWFIRSTPRIV] = iw_set_band_config,
[WLAN_PRIV_SET_MCBC_FILTER - SIOCIWFIRSTPRIV] =
iw_set_dynamic_mcbc_filter,
- [WLAN_PRIV_CLEAR_MCBC_FILTER - SIOCIWFIRSTPRIV] =
- iw_clear_dynamic_mcbc_filter,
[WLAN_GET_LINK_SPEED - SIOCIWFIRSTPRIV] = iw_get_linkspeed,
[WLAN_PRIV_SET_TWO_INT_GET_NONE - SIOCIWFIRSTPRIV] =
iw_set_two_ints_getnone,
@@ -12130,16 +11916,9 @@ static const struct iw_priv_args we_private_args[] = {
,
{
WLAN_PRIV_SET_MCBC_FILTER,
- IW_PRIV_TYPE_BYTE | sizeof(struct pkt_filter_mc_addr_list),
- 0,
- "setMCBCFilter"
- }
- ,
- {
- WLAN_PRIV_CLEAR_MCBC_FILTER,
0,
0,
- "clearMCBCFilter"
+ "setMCBCFilter"
}
,