浏览代码

qcacld-3.0: Enable/Disable MC filter when connected

Multicast address filtering only makes sense if the interface is
connected and capable of receiving traffic. Avoid enabling/disabling
the multicast address filter list on an interface that is disconnected.

Change-Id: Id8aff136e920bb726b8c7dd539d477ff44f080d4
CRs-Fixed: 2282003
Dustin Brown 7 年之前
父节点
当前提交
88175dc0e0
共有 2 个文件被更改,包括 16 次插入10 次删除
  1. 5 7
      pmo/core/src/wlan_pmo_arp.c
  2. 11 3
      pmo/core/src/wlan_pmo_mc_addr_filtering.c

+ 5 - 7
pmo/core/src/wlan_pmo_arp.c

@@ -64,14 +64,12 @@ static QDF_STATUS pmo_core_cache_arp_in_vdev_priv(
 	/* cache arp request */
 	qdf_spin_lock_bh(&vdev_ctx->pmo_vdev_lock);
 	qdf_mem_copy(&vdev_ctx->vdev_arp_req, request,
-		sizeof(vdev_ctx->vdev_arp_req));
+		     sizeof(vdev_ctx->vdev_arp_req));
 	qdf_spin_unlock_bh(&vdev_ctx->pmo_vdev_lock);
-	pmo_debug("arp offload ipv4 addr: %d.%d.%d.%d enable: %d",
-		request->host_ipv4_addr[0],
-		request->host_ipv4_addr[1],
-		request->host_ipv4_addr[2],
-		request->host_ipv4_addr[3],
-		request->enable);
+
+	pmo_debug("cached arp offload; addr:" QDF_IPV4_ADDR_STR ", enable:%d",
+		  QDF_IPV4_ADDR_ARRAY(request->host_ipv4_addr),
+		  request->enable);
 
 free_req:
 	qdf_mem_free(request);

+ 11 - 3
pmo/core/src/wlan_pmo_mc_addr_filtering.c

@@ -339,9 +339,6 @@ static QDF_STATUS pmo_core_mc_addr_flitering_sanity(
 		return QDF_STATUS_E_INVAL;
 	}
 
-	if (!pmo_core_is_vdev_connected(vdev))
-		return QDF_STATUS_E_INVAL;
-
 	return QDF_STATUS_SUCCESS;
 }
 QDF_STATUS pmo_core_cache_mc_addr_list(
@@ -380,6 +377,7 @@ QDF_STATUS pmo_core_cache_mc_addr_list(
 		  mc_list_config->vdev_id, mc_list_config->psoc);
 
 	status = pmo_core_cache_mc_addr_list_in_vdev_priv(mc_list_config, vdev);
+
 dec_ref:
 	pmo_vdev_put_ref(vdev);
 out:
@@ -516,6 +514,11 @@ QDF_STATUS pmo_core_enable_mc_addr_filtering_in_fwr(
 	if (status != QDF_STATUS_SUCCESS)
 		goto put_vdev;
 
+	if (!pmo_core_is_vdev_connected(vdev)) {
+		status = QDF_STATUS_E_INVAL;
+		goto put_vdev;
+	}
+
 	pmo_debug("enable mclist trigger: %d", trigger);
 	status = pmo_core_handle_enable_mc_list_trigger(vdev, trigger);
 
@@ -613,6 +616,11 @@ QDF_STATUS pmo_core_disable_mc_addr_filtering_in_fwr(
 	if (status != QDF_STATUS_SUCCESS)
 		goto put_ref;
 
+	if (!pmo_core_is_vdev_connected(vdev)) {
+		status = QDF_STATUS_E_INVAL;
+		goto put_ref;
+	}
+
 	pmo_debug("disable mclist trigger: %d", trigger);
 
 	status = pmo_core_handle_disable_mc_list_trigger(vdev, trigger);