NUD fail 高通driver处理

关闭上层的nud 检测机制后,发现driver并没有检查到nud fail并断线,导致无法达到预期

原理

driver检测nud的原理就是检测这个mac的TX RX数据来判断nud是否成功。

1. cnss_daemon更新网关

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-psTtpYYK-1657449621447)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6b1b0d5f-359e-41ad-83b3-73f8894c997a/Untitled.png)]

上层必须要更新网关,底层才能知道mac地址,否则不会进去判断,只会不断enter和exit

hdd_nud_filter_netevent,这里面如果没有更新网关就会return
在这里插入图片描述

正常的logcat(需要提高cnss_daemon的log等级,

09-22 16:57:50.000 20797 20797 I wpa_supplicant: wlan0: Trying to associate with SSID ‘AX6000_5G\xe5\xb7\xa5\xe7\xa8\x8b\xe6\x9c\xba’

09-22 16:58:00.495 1688 1688 I cnss-daemon: Ready to update GW parameters

09-22 16:58:00.496 1688 1688 D cnss-daemon: gateway ipv4 address: 192.168.31.1

09-22 16:58:00.496 1688 1688 D cnss-daemon: gateway mac address: 8c🇩🇪f9:20:02:b4

异常的logcat:

09-22 15:42:42.019 23329 23329 I wpa_supplicant: wlan0: Trying to associate with SSID ‘AX6000_5G\xe5\xb7\xa5\xe7\xa8\x8b\xe6\x9c\xba’

09-22 15:42:43.777 1654 1654 D cnss-daemon: gateway ipv4 address: 192.168.31.1

09-22 15:42:43.777 1654 1654 D cnss-daemon: gateway mac address: 00:00:00:00:00:00

09-22 15:42:43.813 1654 1654 E cnss-daemon: failed to update gateway

异常的driver log(自己debug):

11:20:52.200048  [soft_i][0x5bfd41add][11:20:52.189408]wlan: [0:D:HDD] hdd_nud_filter_netevent: 442: enter
11:20:52.200049  [soft_i][0x5bfd41af2][11:20:52.189410]wlan: [0:D:HDD] hdd_nud_filter_netevent: 470: hdd_nud_filter_netevent fail: is_gw_updated
11:20:52.200051  [soft_i][0x5bfd41b04][11:20:52.189411]wlan: [0:D:HDD] __hdd_nud_netevent_cb: 529: exit

根据log看,之所以没有进行判断,是因为网关没有更新,根据这个指令,找到更新网关的代码。

14984 .info.subcmd = QCA_NL80211_VENDOR_SUBCMD_GW_PARAM_CONFIG,

14988 .doit = wlan_hdd_cfg80211_set_gateway_params

cnss_update_wlan_drv ← cnss_gw_update_loop

在这里插入图片描述

2. TXRX检测

检测到NUD TX RX异常后会进行处理和状态改变,需要满足两个条件才会去处理NUD FAIL事件,第一个条件只会在第一次触发NUD FAIL的时候才满足,第二个条件也不好达成,说不定还会收到其它RX包。

在这里插入图片描述

16:59:18.095671  [soft_i][0x6ce8348320][16:59:18.094244]wlan: [0:D:HDD] hdd_nud_filter_netevent: 508: NUD_FAILED [0x20]
16:59:18.096439  [soft_i][0x6ce8348466][16:59:18.094261]wlan: [0:D:HDD] hdd_nud_honour_failure: 203: NUD_FAILURE_HONORED [mac:8c:de:f9:20:02:b4]
16:59:18.096456  [soft_i][0x6ce834876d][16:59:18.094301]wlan: [0:D:HDD] hdd_nud_stats_info: 121: **** NUD STATS: ****
16:59:18.096466  [soft_i][0x6ce83487fa][16:59:18.094308]wlan: [0:D:HDD] hdd_nud_stats_info: 123: NUD Probe Tx  : 4946
16:59:18.096476  [soft_i][0x6ce8348883][16:59:18.094315]wlan: [0:D:HDD] hdd_nud_stats_info: 125: NUD Probe Ack : 4903
16:59:18.096485  [soft_i][0x6ce834890f][16:59:18.094323]wlan: [0:D:HDD] hdd_nud_stats_info: 127: NUD Probe Rx  : 2225
16:59:18.096494  [soft_i][0x6ce83489a3][16:59:18.094330]wlan: [0:D:HDD] hdd_nud_stats_info: 129: NUD Failure Tx  : 5011
16:59:18.096503  [soft_i][0x6ce8348a2a][16:59:18.094337]wlan: [0:D:HDD] hdd_nud_stats_info: 131: NUD Failure Ack : 4969
16:59:18.096513  [soft_i][0x6ce8348aaa][16:59:18.094344]wlan: [0:D:HDD] hdd_nud_stats_info: 133: NUD Failure Rx  : 2227
16:59:18.096522  [soft_i][0x6ce8348b2f][16:59:18.094351]wlan: [0:D:HDD] hdd_nud_stats_info: 136: NUD Gateway Rx  : 0
16:59:18.096531  [soft_i][0x6ce8348bb0][16:59:18.094358]wlan: [0:D:HDD] hdd_nud_stats_info: 138: carrier state: 1
16:59:18.096540  [soft_i][0x6ce8348c62][16:59:18.094367]wlan: [0:D:HDD] hdd_nud_stats_info: 143: Queue: 0 status: 0 txq->trans_start: 4295259528
16:59:18.096549  [soft_i][0x6ce8348cf7][16:59:18.094375]wlan: [0:D:HDD] hdd_nud_stats_info: 143: Queue: 1 status: 0 txq->trans_start: 0
16:59:18.096564  [soft_i][0x6ce8348d90][16:59:18.094383]wlan: [0:D:HDD] hdd_nud_stats_info: 143: Queue: 2 status: 0 txq->trans_start: 4295259528
16:59:18.096574  [soft_i][0x6ce8348e3a][16:59:18.094392]wlan: [0:D:HDD] hdd_nud_stats_info: 143: Queue: 3 status: 0 txq->trans_start: 0
16:59:18.096583  [soft_i][0x6ce8348ed8][16:59:18.094400]wlan: [0:D:HDD] hdd_nud_stats_info: 143: Queue: 4 status: 0 txq->trans_start: 0
16:59:18.096593  [soft_i][0x6ce8348f60][16:59:18.094407]wlan: [0:D:HDD] hdd_nud_stats_info: 146: Current pause_map value 0
16:59:18.101585  [kworke][0x6ce834b906][16:59:18.094963]wlan: [14754:D:HDD] hdd_handle_nud_fail_sta: 251: nud fail detected, try roaming to better BSSID, vdev id: 0
16:59:18.101683  [kworke][0x6ce834c2e9][16:59:18.095094]wlan: [14754:D:SME] sme_roam_invoke_nud_fail: 14114: FW does not support data stall recovery, aborting roam invoke

16:59:22.906481  [soft_i][0x6cedb2e0d1][16:59:22.894639]wlan: [0:D:HDD] hdd_nud_filter_netevent: 508: NUD_FAILED [0x20]
16:59:22.906500  [soft_i][0x6cedb2e160][16:59:22.894647]wlan: [0:D:HDD] hdd_nud_process_failure_event: 424: NUD FAILED -> Current State [0x20]
16:59:27.950072  [soft_i][0x6cf3779ac3][16:59:27.935199]wlan: [0:D:HDD] hdd_nud_filter_netevent: 508: NUD_FAILED [0x20]
16:59:27.950089  [soft_i][0x6cf3779bd3][16:59:27.935213]wlan: [0:D:HDD] hdd_nud_process_failure_event: 424: NUD FAILED -> Current State [0x20]
16:59:32.916705  [soft_i][0x6cf927a363][16:59:32.905127]wlan: [0:D:HDD] hdd_nud_filter_netevent: 508: NUD_FAILED [0x20]
16:59:32.916721  [soft_i][0x6cf927a46c][16:59:32.905141]wlan: [0:D:HDD] hdd_nud_process_failure_event: 424: NUD FAILED -> Current State [0x20]

首先,RX为0,并且是第一次,所以在接收到NUD_FAIL后触发了处理函数,并且把状态更改为NUD_FAILED(0X20)
在这里插入图片描述
在这里插入图片描述

然后,底层处理时发现FW不支持,就不了了之。

最后,虽然一直触发NUD_FAIL, 但是当前状态是0x20,所以没有进if,每次都打个log跳出判断

hdd_nud_process_failure_event: 424: NUD FAILED -> Current State [0x20]

总结:NUD触发–>处理–>底层不支持–>状态为0x20–>频繁触发NUD→由于状态为0x20,直接return

策略

上层:

在这里插入图片描述

底层:

WCNSS_qcom_cfg.ini文件中修改gEnableNUDTracking=3,

3表示底层在连接后,如果检测到NUD fail,会先去漫游,漫游失败触发断线

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值