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:

committed by
Madan Koyyalamudi

parent
207111647e
commit
f9424745bb
@@ -1383,6 +1383,7 @@ typedef union cdp_config_param_t {
|
|||||||
bool cdp_psoc_param_vdev_stats_hw_offload;
|
bool cdp_psoc_param_vdev_stats_hw_offload;
|
||||||
bool cdp_pdev_param_undecoded_metadata_enable;
|
bool cdp_pdev_param_undecoded_metadata_enable;
|
||||||
bool cdp_sawf_enabled;
|
bool cdp_sawf_enabled;
|
||||||
|
bool cdp_drop_3addr_mcast;
|
||||||
} cdp_config_param_type;
|
} cdp_config_param_type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1500,6 +1501,7 @@ enum cdp_vdev_param_type {
|
|||||||
#endif
|
#endif
|
||||||
CDP_UPDATE_DSCP_TO_TID_MAP,
|
CDP_UPDATE_DSCP_TO_TID_MAP,
|
||||||
CDP_SET_MCAST_VDEV,
|
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];
|
struct cdp_pkt_type mu_be_ppdu_cnt[TXRX_TYPE_MU_MAX];
|
||||||
uint32_t punc_bw[MAX_PUNCTURED_MODE];
|
uint32_t punc_bw[MAX_PUNCTURED_MODE];
|
||||||
#endif
|
#endif
|
||||||
|
uint32_t mcast_3addr_drop;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* struct cdp_tx_ingress_stats - Tx ingress Stats
|
/* 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.num += _srcobj->rx.raw.num; \
|
||||||
_tgtobj->rx.raw.bytes += _srcobj->rx.raw.bytes; \
|
_tgtobj->rx.raw.bytes += _srcobj->rx.raw.bytes; \
|
||||||
_tgtobj->rx.nawds_mcast_drop += _srcobj->rx.nawds_mcast_drop; \
|
_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.num += _srcobj->rx.mec_drop.num; \
|
||||||
_tgtobj->rx.mec_drop.bytes += _srcobj->rx.mec_drop.bytes; \
|
_tgtobj->rx.mec_drop.bytes += _srcobj->rx.mec_drop.bytes; \
|
||||||
_tgtobj->rx.intra_bss.pkts.num += \
|
_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.multipass_rx_pkt_drop +
|
||||||
vdev_stats->rx.peer_unauth_rx_pkt_drop +
|
vdev_stats->rx.peer_unauth_rx_pkt_drop +
|
||||||
vdev_stats->rx.policy_check_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);
|
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.multipass_rx_pkt_drop +
|
||||||
pdev->stats.rx.peer_unauth_rx_pkt_drop +
|
pdev->stats.rx.peer_unauth_rx_pkt_drop +
|
||||||
pdev->stats.rx.policy_check_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;
|
vdev->skip_bar_update_last_ts = 0;
|
||||||
break;
|
break;
|
||||||
#endif
|
#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:
|
default:
|
||||||
break;
|
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
|
#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
|
* dp_rx_err_is_pn_check_needed() - Check if the packet number check is needed
|
||||||
* for this frame received in REO error ring.
|
* 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);
|
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)) {
|
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);
|
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;
|
goto drop_nbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (qdf_unlikely(txrx_peer->nawds_enabled &&
|
if (qdf_unlikely(txrx_peer->nawds_enabled &&
|
||||||
hal_rx_msdu_end_da_is_mcbc_get(soc->hal_soc,
|
hal_rx_msdu_end_da_is_mcbc_get(soc->hal_soc,
|
||||||
rx_tlv_hdr))) {
|
rx_tlv_hdr))) {
|
||||||
|
@@ -6445,6 +6445,8 @@ void dp_print_peer_stats(struct dp_peer *peer,
|
|||||||
DP_PRINT_STATS("NAWDS : ");
|
DP_PRINT_STATS("NAWDS : ");
|
||||||
DP_PRINT_STATS(" Nawds multicast Drop Rx Packet = %d",
|
DP_PRINT_STATS(" Nawds multicast Drop Rx Packet = %d",
|
||||||
peer_stats->rx.nawds_mcast_drop);
|
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",
|
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[0],
|
||||||
peer_stats->rx.sgi_count[1],
|
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.non_amsdu_cnt += srcobj->rx.non_amsdu_cnt;
|
||||||
tgtobj->stats.rx.amsdu_cnt += srcobj->rx.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.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.num += srcobj->rx.to_stack.num;
|
||||||
tgtobj->stats.rx.to_stack.bytes += srcobj->rx.to_stack.bytes;
|
tgtobj->stats.rx.to_stack.bytes += srcobj->rx.to_stack.bytes;
|
||||||
|
|
||||||
|
@@ -2939,7 +2939,7 @@ struct dp_vdev {
|
|||||||
#ifdef QCA_SUPPORT_WDS_EXTENDED
|
#ifdef QCA_SUPPORT_WDS_EXTENDED
|
||||||
bool wds_ext_enabled;
|
bool wds_ext_enabled;
|
||||||
#endif /* QCA_SUPPORT_WDS_EXTENDED */
|
#endif /* QCA_SUPPORT_WDS_EXTENDED */
|
||||||
|
bool drop_3addr_mcast;
|
||||||
#ifdef WLAN_VENDOR_SPECIFIC_BAR_UPDATE
|
#ifdef WLAN_VENDOR_SPECIFIC_BAR_UPDATE
|
||||||
bool skip_bar_update;
|
bool skip_bar_update;
|
||||||
unsigned long skip_bar_update_last_ts;
|
unsigned long skip_bar_update_last_ts;
|
||||||
@@ -3657,6 +3657,7 @@ struct dp_peer_per_pkt_rx_stats {
|
|||||||
#ifdef VDEV_PEER_PROTOCOL_COUNT
|
#ifdef VDEV_PEER_PROTOCOL_COUNT
|
||||||
struct protocol_trace_count protocol_trace_cnt[CDP_TRACE_MAX];
|
struct protocol_trace_count protocol_trace_cnt[CDP_TRACE_MAX];
|
||||||
#endif
|
#endif
|
||||||
|
uint32_t mcast_3addr_drop;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user