qcacmn: Check mld peer address for IPA intra-bss fwd

In the case of MLO connection, MLD address is used for data
transmissions in the ethernet header. Take MLO-SAP intra-bss
forwarding as an instance, ref1 sends unicast arp-resp to
ref2 who initiates broadcast arp-req. DA and SA in the ethernet
header are both MLD mac addresses of ref1 and ref2.

Currently when WLAN IPA component does the intra-bss forwarding
check, MLO connection is not taken into consideration, where
only legacy hash table is searched. For a MLD peer, it is not
added into the legacy hash table but the MLD specific hash
table.

Hence in this change, use dp_peer_hash_find_wrapper() API with
CDP_WILD_PEER_TYPE to check if peer exists in both legacy
and MLD hash table.

Change-Id: Ifea7cd37373e1575d811bedefb602d0df5c1765b
CRs-Fixed: 3400280
This commit is contained in:
Jia Ding
2023-02-20 08:56:42 +08:00
committed by Madan Koyyalamudi
parent 33189ca042
commit 09186dbaf9

View File

@@ -3409,15 +3409,18 @@ static inline bool dp_ipa_peer_check(struct dp_soc *soc,
static inline bool dp_ipa_peer_check(struct dp_soc *soc,
uint8_t *peer_mac_addr, uint8_t vdev_id)
{
struct cdp_peer_info peer_info = {0};
struct dp_peer *peer = NULL;
peer = dp_peer_find_hash_find(soc, peer_mac_addr, 0, vdev_id,
DP_MOD_ID_IPA);
if (!peer) {
return false;
} else {
DP_PEER_INFO_PARAMS_INIT(&peer_info, vdev_id, peer_mac_addr, false,
CDP_WILD_PEER_TYPE);
peer = dp_peer_hash_find_wrapper(soc, &peer_info, DP_MOD_ID_IPA);
if (peer) {
dp_peer_unref_delete(peer, DP_MOD_ID_IPA);
return true;
} else {
return false;
}
}
#endif