qcacmn: VoW IGMP improvements
As part of the VoW IGMP improvements, which deals with conversion of igmp packets to unicast packets, the following changes are done when the new feature is enabled: 1. IGMP/MLD packets with special addresses (addresses not part of any multicast group) will be converted to all existing clients of the AP. These packets will be directly fed to igmp multicast to unicast conversion module. 2. The IGMP/MLD packets with group specific addresses will first go to multicast enhancement module, where they will be allowed to pass and will be converted to unicast. 3. The new feature will be enabled only when multicast enhancement feature is enabled, which will be ensured at the configuration level. FR : 61063 Change-Id: I2fd5a67766c806432fbe1a12cb9654a3600100f5
This commit is contained in:

committed by
snandini

parent
4c12885407
commit
0eeac59b4e
@@ -5190,6 +5190,7 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc,
|
||||
vdev->rx_decap_type = wlan_cfg_pkt_type(soc->wlan_cfg_ctx);
|
||||
vdev->dscp_tid_map_id = 0;
|
||||
vdev->mcast_enhancement_en = 0;
|
||||
vdev->igmp_mcast_enhanc_en = 0;
|
||||
vdev->raw_mode_war = wlan_cfg_get_raw_mode_war(soc->wlan_cfg_ctx);
|
||||
vdev->prev_tx_enq_tstamp = 0;
|
||||
vdev->prev_rx_deliver_tstamp = 0;
|
||||
@@ -8451,6 +8452,12 @@ static QDF_STATUS dp_get_vdev_param(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
|
||||
case CDP_ENABLE_DA_WAR:
|
||||
val->cdp_vdev_param_da_war = vdev->pdev->soc->da_war_enabled;
|
||||
break;
|
||||
case CDP_ENABLE_IGMP_MCAST_EN:
|
||||
val->cdp_vdev_param_igmp_mcast_en = vdev->igmp_mcast_enhanc_en;
|
||||
break;
|
||||
case CDP_ENABLE_MCAST_EN:
|
||||
val->cdp_vdev_param_mcast_en = vdev->mcast_enhancement_en;
|
||||
break;
|
||||
default:
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
"param value %d is wrong\n",
|
||||
@@ -8511,6 +8518,9 @@ dp_set_vdev_param(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
|
||||
case CDP_ENABLE_MCAST_EN:
|
||||
vdev->mcast_enhancement_en = val.cdp_vdev_param_mcast_en;
|
||||
break;
|
||||
case CDP_ENABLE_IGMP_MCAST_EN:
|
||||
vdev->igmp_mcast_enhanc_en = val.cdp_vdev_param_igmp_mcast_en;
|
||||
break;
|
||||
case CDP_ENABLE_PROXYSTA:
|
||||
vdev->proxysta_vdev = val.cdp_vdev_param_proxysta;
|
||||
break;
|
||||
@@ -12149,12 +12159,13 @@ void dp_update_delay_stats(struct dp_pdev *pdev, uint32_t delay,
|
||||
* @vdev_id: vdev id
|
||||
* @newmac: Table of the clients mac
|
||||
* @mac_cnt: No. of MACs required
|
||||
* @limit: Limit the number of clients
|
||||
*
|
||||
* return: no of clients
|
||||
*/
|
||||
uint16_t dp_get_peer_mac_list(ol_txrx_soc_handle soc, uint8_t vdev_id,
|
||||
u_int8_t newmac[][QDF_MAC_ADDR_SIZE],
|
||||
u_int16_t mac_cnt)
|
||||
u_int16_t mac_cnt, bool limit)
|
||||
{
|
||||
struct dp_soc *dp_soc = (struct dp_soc *)soc;
|
||||
struct dp_vdev *vdev =
|
||||
@@ -12165,6 +12176,9 @@ uint16_t dp_get_peer_mac_list(ol_txrx_soc_handle soc, uint8_t vdev_id,
|
||||
if (!vdev)
|
||||
return new_mac_cnt;
|
||||
|
||||
if (limit && (vdev->num_peers > mac_cnt))
|
||||
return 0;
|
||||
|
||||
qdf_spin_lock_bh(&vdev->peer_list_lock);
|
||||
TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) {
|
||||
if (peer->bss_peer)
|
||||
|
Reference in New Issue
Block a user