qcacmn: Track PN failures with relevant stats

When validating MMIE, if PN error is found, track it using relevant
statistics. Defined WMI_HOST_RXERR_PN to flag such PN errors.

Change-Id: Icb1fe9a653f67611539b5cb463adfceadedae38e
This commit is contained in:
Pooventhiran G
2021-12-28 20:36:08 +05:30
committad av Madan Koyyalamudi
förälder 6cd22afb21
incheckning 886ce189d0
7 ändrade filer med 61 tillägg och 0 borttagningar

Visa fil

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2022 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
@@ -111,6 +112,7 @@ struct cdp_mon_status {
#define IEEE80211_RX_DECRYPT_ERROR 0x04
/* holes in flags here between, ATH_RX_XXXX to IEEE80211_RX_XXX */
#define IEEE80211_RX_KEYMISS 0x200
#define IEEE80211_RX_PN_ERROR 0x400
int rs_rssi; /* RSSI (noise floor ajusted) */
int rs_abs_rssi; /* absolute RSSI */
int rs_datarate; /* data rate received */

Visa fil

@@ -30,6 +30,7 @@
#include <wlan_objmgr_vdev_obj.h>
#include <wlan_objmgr_peer_obj.h>
#include <wlan_utility.h>
#include <wlan_cp_stats_utils_api.h>
#include "wlan_crypto_global_def.h"
#include "wlan_crypto_global_api.h"
@@ -2395,12 +2396,15 @@ bool wlan_crypto_is_mmie_valid(struct wlan_objmgr_vdev *vdev,
if (qdf_mem_cmp(ipn, key->keyrsc, 6) <= 0) {
uint8_t *su = (uint8_t *)key->keyrsc;
uint8_t *end = ipn + 6;
struct wlan_objmgr_peer *peer = wlan_vdev_get_selfpeer(vdev);
crypto_err("replay error :");
while (ipn < end) {
crypto_err("expected pn = %x received pn = %x",
*ipn++, *su++);
}
wlan_cp_stats_vdev_ucast_rx_pnerr(vdev);
wlan_cp_stats_peer_rx_pnerr(peer);
return false;
}

Visa fil

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2022 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
@@ -767,6 +768,7 @@ enum mgmt_frame_type {
* WMI_HOST_RXERR_DECRYPT = 0x08
* WMI_HOST_RXERR_MIC = 0x10
* WMI_HOST_RXERR_KEY_CACHE_MISS = 0x20
* WMI_HOST_RXERR_PN = 0x80
* @flags: information about the management frame e.g. can give a
* scan source for a scan result mgmt frame
* @rssi: combined RSSI, i.e. the sum of the snr + noise floor (dBm units)

Visa fil

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018-2019, 2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2022 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
@@ -90,12 +91,16 @@ struct pdev_cp_stats {
* @vdev_stats: pointer to ic/mc specific stats
* @vdev_comp_priv_obj[]: component's private object pointers
* @vdev_cp_stats_lock: lock to protect object
* @ucast_rx_pnerr_stats_inc: callback function to update rx PN error stats
*/
struct vdev_cp_stats {
struct wlan_objmgr_vdev *vdev_obj;
vdev_ext_cp_stats_t *vdev_stats;
void *vdev_comp_priv_obj[WLAN_CP_STATS_MAX_COMPONENTS];
qdf_spinlock_t vdev_cp_stats_lock;
void (*ucast_rx_pnerr_stats_inc)(
struct wlan_objmgr_vdev *vdev,
uint64_t val);
};
/**
@@ -104,12 +109,14 @@ struct vdev_cp_stats {
* @peer_stats: pointer to ic/mc specific stats
* @peer_comp_priv_obj[]: component's private object pointers
* @peer_cp_stats_lock: lock to protect object
* @rx_pnerr_stats_inc: callback function to update rx PN error stats
*/
struct peer_cp_stats {
struct wlan_objmgr_peer *peer_obj;
peer_ext_cp_stats_t *peer_stats;
void *peer_comp_priv_obj[WLAN_CP_STATS_MAX_COMPONENTS];
qdf_spinlock_t peer_cp_stats_lock;
void (*rx_pnerr_stats_inc)(struct wlan_objmgr_peer *peer, uint32_t val);
};
/**

Visa fil

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018,2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2022 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
@@ -146,5 +147,32 @@ QDF_STATUS wlan_cp_stats_comp_obj_cfg(
void *cmn_obj,
void *data);
/**
* wlan_cp_stats_vdev_ucast_rx_pnerr() - public API to umac for updating
* vdev rx_pnerr stats
* @vdev: pointer to vdev
*
* Return: None
*/
void wlan_cp_stats_vdev_ucast_rx_pnerr(struct wlan_objmgr_vdev *vdev);
/**
* wlan_cp_stats_peer_rx_pnerr() - public API to umac for updating
* peer rx_pnerr stats
* @peer: pointer to peer
*
* Return: None
*/
void wlan_cp_stats_peer_rx_pnerr(struct wlan_objmgr_peer *peer);
#else /* QCA_SUPPORT_CP_STATS */
static inline
void wlan_cp_stats_vdev_ucast_rx_pnerr(struct wlan_objmgr_vdev *vdev)
{}
static inline
void wlan_cp_stats_peer_rx_pnerr(struct wlan_objmgr_peer *peer)
{}
#endif /* QCA_SUPPORT_CP_STATS */
#endif /* __WLAN_CP_STATS_UTILS_API_H__ */

Visa fil

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
* Copyright (c) 2022 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
@@ -349,3 +350,19 @@ wlan_cp_stats_comp_obj_cfg(enum wlan_objmgr_obj_type obj_type,
return status;
}
void wlan_cp_stats_vdev_ucast_rx_pnerr(struct wlan_objmgr_vdev *vdev)
{
struct vdev_cp_stats *vdev_cs = wlan_cp_stats_get_vdev_stats_obj(vdev);
if (vdev_cs && vdev_cs->ucast_rx_pnerr_stats_inc)
vdev_cs->ucast_rx_pnerr_stats_inc(vdev, 1);
}
void wlan_cp_stats_peer_rx_pnerr(struct wlan_objmgr_peer *peer)
{
struct peer_cp_stats *peer_cs = wlan_cp_stats_get_peer_stats_obj(peer);
if (peer_cs && peer_cs->rx_pnerr_stats_inc)
peer_cs->rx_pnerr_stats_inc(peer, 1);
}

Visa fil

@@ -6367,6 +6367,7 @@ enum wmi_host_ap_ps_peer_param {
#define WMI_HOST_RXERR_DECRYPT 0x08 /* non-Michael decrypt error */
#define WMI_HOST_RXERR_MIC 0x10 /* Michael MIC decrypt error */
#define WMI_HOST_RXERR_KEY_CACHE_MISS 0x20 /* No/incorrect key matter in h/w */
#define WMI_HOST_RXERR_PN 0x80 /* invalid PN in frame */
enum wmi_host_sta_ps_param_rx_wake_policy {
/* Wake up when ever there is an RX activity on the VDEV. In this mode