qcacld-3.0: Enhance NUD failure handling
Enhance NUD failure handling by also adding check for packet received from AP in the case where AP is gateway Change-Id: I45f4c11f34eddf536756edc4f81009227ae64c35 CRs-Fixed: 3239391
This commit is contained in:

committed by
Madan Koyyalamudi

parent
765b3a80ee
commit
ca0b0ecf0e
@@ -28,6 +28,7 @@
|
||||
#include "wlan_cm_roam_ucfg_api.h"
|
||||
#include <wlan_cm_ucfg_api.h>
|
||||
#include "wlan_dp_nud_tracking.h"
|
||||
#include "wlan_vdev_mgr_ucfg_api.h"
|
||||
|
||||
#ifdef WLAN_NUD_TRACKING
|
||||
/**
|
||||
@@ -206,23 +207,36 @@ static void dp_nud_capture_stats(struct wlan_dp_intf *dp_intf,
|
||||
*/
|
||||
static bool dp_nud_honour_failure(struct wlan_dp_intf *dp_intf)
|
||||
{
|
||||
uint32_t tx_transmitted;
|
||||
uint32_t tx_acked;
|
||||
uint32_t gw_rx_pkt;
|
||||
uint32_t tx_transmitted, tx_acked, gw_rx_pkt, rx_received;
|
||||
struct dp_nud_tracking_info *nud_tracking = &dp_intf->nud_tracking;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
uint8_t bssid[QDF_MAC_ADDR_SIZE];
|
||||
bool ap_is_gateway;
|
||||
|
||||
vdev = dp_objmgr_get_vdev_by_user(dp_intf, WLAN_DP_ID);
|
||||
if (!vdev)
|
||||
goto fail;
|
||||
ucfg_wlan_vdev_mgr_get_param_bssid(vdev, bssid);
|
||||
dp_objmgr_put_vdev_by_user(vdev, WLAN_DP_ID);
|
||||
|
||||
tx_transmitted = nud_tracking->tx_rx_stats.post_tx_packets -
|
||||
nud_tracking->tx_rx_stats.pre_tx_packets;
|
||||
tx_acked = nud_tracking->tx_rx_stats.post_tx_acked -
|
||||
nud_tracking->tx_rx_stats.pre_tx_acked;
|
||||
gw_rx_pkt = qdf_atomic_read(&nud_tracking->tx_rx_stats.gw_rx_packets);
|
||||
rx_received = nud_tracking->tx_rx_stats.post_rx_packets -
|
||||
nud_tracking->tx_rx_stats.pre_rx_packets;
|
||||
ap_is_gateway = qdf_is_macaddr_equal(&dp_intf->nud_tracking.gw_mac_addr,
|
||||
(struct qdf_mac_addr *)bssid);
|
||||
|
||||
if (!tx_transmitted || !tx_acked || !gw_rx_pkt) {
|
||||
if (!tx_transmitted || !tx_acked ||
|
||||
!(gw_rx_pkt || (ap_is_gateway && rx_received))) {
|
||||
dp_info("NUD_FAILURE_HONORED [mac:" QDF_MAC_ADDR_FMT "]",
|
||||
QDF_MAC_ADDR_REF(nud_tracking->gw_mac_addr.bytes));
|
||||
dp_nud_stats_info(dp_intf);
|
||||
return true;
|
||||
}
|
||||
fail:
|
||||
dp_info("NUD_FAILURE_NOT_HONORED [mac:" QDF_MAC_ADDR_FMT "]",
|
||||
QDF_MAC_ADDR_REF(nud_tracking->gw_mac_addr.bytes));
|
||||
|
||||
|
Reference in New Issue
Block a user