qcacld-3.0: Derive NDP peer multicast address from peer MAC address

Currently, driver is depending on NS frame to be received to configure
peer multicast address for an NDP session. If there is a delay in NS
frame reception, peer multicast address list will be configured to the
FW without actual peer multicast address. Because of this, FW will drop
the NS frame from NDP peer.

To address this, derive peer multicast address from peer MAC address
and include it in multicast address list that is configured to the FW.

Change-Id: I92a575352d592b4001dc4f061e31eb7f592f8445
CRs-Fixed: 3066990
This commit is contained in:
Bapiraju Alla
2021-11-09 18:54:12 +05:30
committed by Madan Koyyalamudi
parent dbf9361d32
commit 5cf970b5c7
6 changed files with 206 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -92,6 +93,39 @@ QDF_STATUS ucfg_nan_set_active_peers(struct wlan_objmgr_vdev *vdev,
*/
uint32_t ucfg_nan_get_active_peers(struct wlan_objmgr_vdev *vdev);
/**
* ucfg_nan_set_peer_mc_list: API to derive peer multicast address and add it
* to the list
* @vdev: pointer to vdev object
* @peer_mac_addr: Peer MAC address
*
* Return: None
*/
void ucfg_nan_set_peer_mc_list(struct wlan_objmgr_vdev *vdev,
struct qdf_mac_addr peer_mac_addr);
/**
* ucfg_nan_get_peer_mc_list: API to get peer multicast address list
* @vdev: pointer to vdev object
* @peer_mc_addr_list: Out pointer to the peer multicast address list
*
* Return: None
*/
void ucfg_nan_get_peer_mc_list(struct wlan_objmgr_vdev *vdev,
struct qdf_mac_addr **peer_mc_addr_list);
/**
* ucfg_nan_clear_peer_mc_list: Clear peer multicast address list
* @psoc: pointer to psoc object
* @vdev: pointer to vdev object
* @peer_mac_addr: Pointer to peer MAC address
*
* Return: None
*/
void ucfg_nan_clear_peer_mc_list(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_vdev *vdev,
struct qdf_mac_addr *peer_mac_addr);
/**
* ucfg_nan_set_ndp_create_transaction_id: set ndp create transaction id
* @vdev: pointer to vdev object
@@ -624,5 +658,11 @@ static inline bool ucfg_get_disable_6g_nan(struct wlan_objmgr_psoc *psoc)
{
return true;
}
static inline void
ucfg_nan_get_peer_mc_list(struct wlan_objmgr_vdev *vdev,
struct qdf_mac_addr **peer_mc_addr_list)
{
}
#endif /* WLAN_FEATURE_NAN */
#endif /* _NAN_UCFG_API_H_ */