qcacmn: Drop 3 addr multicast in rx

Drop 3 address multicast packet on rx when vdev is
has drop_3addr_mcast enabled.

Change-Id: I726bdc9383ea6e5a052a5d754e8f48c98f9ce874
CRs-Fixed: 3163011
This commit is contained in:
Varsha Mishra
2022-04-18 11:08:58 +05:30
committed by Madan Koyyalamudi
父節點 207111647e
當前提交 f9424745bb
共有 7 個文件被更改,包括 49 次插入4 次删除

查看文件

@@ -1383,6 +1383,7 @@ typedef union cdp_config_param_t {
bool cdp_psoc_param_vdev_stats_hw_offload;
bool cdp_pdev_param_undecoded_metadata_enable;
bool cdp_sawf_enabled;
bool cdp_drop_3addr_mcast;
} cdp_config_param_type;
/**
@@ -1500,6 +1501,7 @@ enum cdp_vdev_param_type {
#endif
CDP_UPDATE_DSCP_TO_TID_MAP,
CDP_SET_MCAST_VDEV,
CDP_DROP_3ADDR_MCAST,
};
/*

查看文件

@@ -1658,6 +1658,7 @@ struct cdp_rx_stats {
struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
uint32_t punc_bw[MAX_PUNCTURED_MODE];
#endif
uint32_t mcast_3addr_drop;
};
/* struct cdp_tx_ingress_stats - Tx ingress Stats

查看文件

@@ -1598,6 +1598,7 @@ void dp_update_vdev_stats_on_peer_unmap(struct dp_vdev *vdev,
_tgtobj->rx.raw.num += _srcobj->rx.raw.num; \
_tgtobj->rx.raw.bytes += _srcobj->rx.raw.bytes; \
_tgtobj->rx.nawds_mcast_drop += _srcobj->rx.nawds_mcast_drop; \
_tgtobj->rx.mcast_3addr_drop += _srcobj->rx.mcast_3addr_drop; \
_tgtobj->rx.mec_drop.num += _srcobj->rx.mec_drop.num; \
_tgtobj->rx.mec_drop.bytes += _srcobj->rx.mec_drop.bytes; \
_tgtobj->rx.intra_bss.pkts.num += \

查看文件

@@ -8897,7 +8897,8 @@ static QDF_STATUS dp_vdev_getstats(struct cdp_vdev *vdev_handle,
vdev_stats->rx.multipass_rx_pkt_drop +
vdev_stats->rx.peer_unauth_rx_pkt_drop +
vdev_stats->rx.policy_check_drop +
vdev_stats->rx.nawds_mcast_drop;
vdev_stats->rx.nawds_mcast_drop +
vdev_stats->rx.mcast_3addr_drop;
qdf_mem_free(vdev_stats);
@@ -8961,7 +8962,8 @@ static void dp_pdev_getstats(struct cdp_pdev *pdev_handle,
pdev->stats.rx.multipass_rx_pkt_drop +
pdev->stats.rx.peer_unauth_rx_pkt_drop +
pdev->stats.rx.policy_check_drop +
pdev->stats.rx.nawds_mcast_drop;
pdev->stats.rx.nawds_mcast_drop +
pdev->stats.rx.mcast_3addr_drop;
}
/**
@@ -10220,6 +10222,11 @@ dp_set_vdev_param(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
vdev->skip_bar_update_last_ts = 0;
break;
#endif
case CDP_DROP_3ADDR_MCAST:
dp_info("vdev_id %d drop 3 addr mcast :%d", vdev_id,
val.cdp_drop_3addr_mcast);
vdev->drop_3addr_mcast = val.cdp_drop_3addr_mcast;
break;
default:
break;
}

查看文件

@@ -1116,6 +1116,32 @@ int dp_rx_err_match_dhost(qdf_ether_header_t *eh, struct dp_vdev *vdev)
#ifndef QCA_HOST_MODE_WIFI_DISABLED
/**
* dp_rx_err_drop_3addr_mcast() - Check if feature drop_3ddr_mcast is enabled
* If so, drop the multicast frame.
* @vdev: datapath vdev
* @rx_tlv_hdr: TLV header
*
* Return: true if packet is to be dropped,
* false, if packet is not dropped.
*/
static bool
dp_rx_err_drop_3addr_mcast(struct dp_vdev *vdev, uint8_t *rx_tlv_hdr)
{
struct dp_soc *soc = vdev->pdev->soc;
if (!vdev->drop_3addr_mcast)
return false;
if (vdev->opmode != wlan_op_mode_sta)
return false;
if (hal_rx_msdu_end_da_is_mcbc_get(soc->hal_soc, rx_tlv_hdr))
return true;
return false;
}
/**
* dp_rx_err_is_pn_check_needed() - Check if the packet number check is needed
* for this frame received in REO error ring.
@@ -1277,6 +1303,11 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, qdf_nbuf_t nbuf,
dp_vdev_peer_stats_update_protocol_cnt(vdev, nbuf, NULL, 0, 1);
if (dp_rx_err_drop_3addr_mcast(vdev, rx_tlv_hdr)) {
DP_PEER_PER_PKT_STATS_INC(txrx_peer, rx.mcast_3addr_drop, 1);
goto drop_nbuf;
}
if (hal_rx_msdu_end_sa_is_valid_get(soc->hal_soc, rx_tlv_hdr)) {
sa_idx = hal_rx_msdu_end_sa_idx_get(soc->hal_soc, rx_tlv_hdr);
@@ -1306,7 +1337,6 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, qdf_nbuf_t nbuf,
goto drop_nbuf;
}
if (qdf_unlikely(txrx_peer->nawds_enabled &&
hal_rx_msdu_end_da_is_mcbc_get(soc->hal_soc,
rx_tlv_hdr))) {

查看文件

@@ -6445,6 +6445,8 @@ void dp_print_peer_stats(struct dp_peer *peer,
DP_PRINT_STATS("NAWDS : ");
DP_PRINT_STATS(" Nawds multicast Drop Rx Packet = %d",
peer_stats->rx.nawds_mcast_drop);
DP_PRINT_STATS(" 3address multicast Drop Rx Packet = %d",
peer_stats->rx.mcast_3addr_drop);
DP_PRINT_STATS("SGI = 0.8us %d 0.4us %d 1.6us %d 3.2us %d",
peer_stats->rx.sgi_count[0],
peer_stats->rx.sgi_count[1],
@@ -7969,6 +7971,7 @@ void dp_update_pdev_stats(struct dp_pdev *tgtobj,
tgtobj->stats.rx.non_amsdu_cnt += srcobj->rx.non_amsdu_cnt;
tgtobj->stats.rx.amsdu_cnt += srcobj->rx.amsdu_cnt;
tgtobj->stats.rx.nawds_mcast_drop += srcobj->rx.nawds_mcast_drop;
tgtobj->stats.rx.mcast_3addr_drop += srcobj->rx.mcast_3addr_drop;
tgtobj->stats.rx.to_stack.num += srcobj->rx.to_stack.num;
tgtobj->stats.rx.to_stack.bytes += srcobj->rx.to_stack.bytes;

查看文件

@@ -2939,7 +2939,7 @@ struct dp_vdev {
#ifdef QCA_SUPPORT_WDS_EXTENDED
bool wds_ext_enabled;
#endif /* QCA_SUPPORT_WDS_EXTENDED */
bool drop_3addr_mcast;
#ifdef WLAN_VENDOR_SPECIFIC_BAR_UPDATE
bool skip_bar_update;
unsigned long skip_bar_update_last_ts;
@@ -3657,6 +3657,7 @@ struct dp_peer_per_pkt_rx_stats {
#ifdef VDEV_PEER_PROTOCOL_COUNT
struct protocol_trace_count protocol_trace_cnt[CDP_TRACE_MAX];
#endif
uint32_t mcast_3addr_drop;
};
/**