This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3135MOD:可编程 Rx 滤波器

Guru**** 633805 points
Other Parts Discussed in Thread: CC3135
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1135877/cc3135mod-programmable-rx-filters

器件型号:CC3135MOD
主题中讨论的其他器件:CC3135

您好!

我需要与您一起检查 CC3135 Rx 筛选代码。

我正在研究 Rx 过滤器、我想应用目的 MAC 过滤规则(别名、丢弃所有传入流量、其中我的 MAC 不是目的 MAC)。
CC3135仅处于 STA 模式、在 WiFi 模块通电并初始化之后、但在执行任何连接到 WiFi AP 和服务器步骤之前、会立即执行粘贴在下面的代码。
我不将规则保存在闪存中、每次上电时我都会调用以下函数。

观察结果:我能够获得 IP (预计、由于连接状态触发 SL_WLAN_RX_FILTER_STate_STA_STATE_STA_has _IP、滤波在之后变为有效)。
遗憾的是、下一步是 DNS 查找服务器名称、这总是失败的。 (即使我用 IP 地址替换域名、打开套接字的下一步也会失败。)
如果我不应用滤波器、连接将按预期工作。



静态 bool cc3135_apply_mac_filter_rule (void)

       SlWlanRxFilterID_t FilterId = 0;
       SlWlanRxFilterRuleType_t RuleType = sl_WLAN_RX_FILTER_HEADER;
       SlWlanRxFilterFlags_u FilterFlags = SL_WLAN_RX_FILTER_BINILEY;
       SlWlanRxFilterRuleHeader_t 规则;
       SlWlanRxFilterTrigger_t 触发器;
       SlWlanRxFilterAction_t Action;
       SlWlanRxFilterIdMask_t RxFilterIdBitField;

       TRIGGER.ParentFilterID = 0;
       trigger.role = sl_WLAN_RX_FILTER_Role_STA;
       触发计数器= SL_WLAN_RX_FILTER_NO_TRIGGER_COUNTER;
       TRIGGER.ConnectionState = sl_WLAN_RX_FILTER_State_STA_has _IP;

       rules.Field = SL_WLAN_RX_FILTER_HFIELD_MAC_DST_ADDR;
       Rule.CompareFunc = SL_WLAN_RX_FILTER_CMP_FUNC_NOT_EQU_TO;

       action.Type = sl_WLAN_RX_FILTER_ACT_DROP;

       //此处的 MAC 已硬编码,以便快速测试
       uint8_t mac_address[6]={bb0、b1、0x13、0x42、0x7c、 0x3a};
       memcpy (Rule.args.value.mac[0]、mac_address、sizeof (mac_address));

       INT8_t MAC_MASK[6]={0xff、0xff、0xff、0xff、0xff、0xff、 0xFF};
       memcpy (Rule.args.Mask、mac_mask、sizeof (mac_mask));

       if (0!= sl_WlanRxFilterAdd (RuleType、FilterFlags、
                               (const SlWlanRxFilterRule_u* const)规则(&R),
                               (const SlWlanRxFilterTrigger_t* const)触发、
                               (const SlWlanRxFilterAction_t* const)&Action、
                               FilterId))
       {
               MSG_ERR("添加 Mac 筛选\n");
               返回 false;
       }

       //启用上面定义的过滤器
       _U16大小= sizeof (slWlanRxFilterRetrieveStateBuff_t);
       _U16 OPT = SL_WLAN_RX_FILTER_STATE;
       SL_WlanGet (SL_WLAN_RX_FILTERS_ID、&OPT、&SIZE、(无符号字符*)&RxFilterIdBitField);
       SL_WLAN_SETBIT8 (RxFilterIdBitField、FilterId);
       SL_WlanSet (sl_WLAN_RX_FILTERS_ID、SL_WLAN_RX_FILTER_STATE、sizeof (SlWlanRxFilterOperationCommandBuff_t)、(无符号字符*)&RxFilterIdBitField);

       MSG ("Mac 筛选已添加、规则#%d\n"、FilterId);
       返回 true;



强烈赞赏任何提示。


最好。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    为什么要专门丢弃不是直接单播帧的帧?

    它可能会导致问题、因为某些数据包可能是多播/广播帧、这些帧是 ARP 请求、重新密钥帧等必需的

    这可能是它失败的原因、但如果没有监听器捕获、则很难分辨。

    Shlomi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shlomi、

    此 Rx 筛选调查的原因是由之前的一个讨论(e2e.ti.com/.../cc3135mod-c3135-actual-dtim)触发的。

    主要目标是通过 Rx 滤波辅助来降低功耗。 基于目标 IP 的协议按预期工作、功耗降低。
    为了获得更好的结果、在应用基于 CC3305 MAC 和/或 BSSID 的规则时、我希望在更低的级别进行滤波。 我从 MAC 开始、很难找到/理解正确的设置。

    这是我最初问题的背景。

    正如上面列出的线程中 Kobi 所建议的那样、我将 Rx 过滤器初始化推迟到与服务器建立套接字通信的时间点。
    现在的结果是、设备和服务器之间成功交换了初始数据包、但通信不稳定-在服务器端、我经常遇到"对等连接重置"错误、套接字关闭、然后执行重新连接等

    按照建议、进行了300秒的 Wireshark 捕获会话。 它从器件上电事件开始。
    我将所有记录保留在捕获文件中、器件的 MAC 是 b0:b1:13:42:7c:3a
    PCAP 文件位于 :drive.google.com/.../1rDu01_zHF9oC7xYPu7xyXAz9nvl-9Ehn


    谢谢大家、祝你一切顺利。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    对空气嗅探器进行解码、因此我不知道实际的帧是什么。 您需要确保对其进行解码或提供密码短语、并确保4个 EAPOL 帧位于日志中(此帧仅包含4个 EAPOL 帧中的3个、因此即使我有密码短语、也无法对其进行解码)。 此外、如果可以并行捕获 NWP 日志、它可以使更多光线变暗(您可以查看我们的用户指南第20章中的过程或在本论坛中查看如何获取这些日志)。

    同样、在连接时、会为您连接的 AP 的 BSSID 和器件 MAC 设置一些默认系统滤波器、因此我不会看到添加新滤波器的原因。 这些滤波器很可能会丢弃一些会导致连接中断的重要帧。

    此致、

    Shlomi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shlomi、

    感谢您的快速响应。

    好的、我看到、由于默认系统滤波器集已包含 AP 的 BSSID 和器件 MAC 标准、因此没有理由重复应用它们。

    让我感到困扰的事实是、我通过目标 IP 地址过滤获得了更低的功耗测量结果。 不应产生(显著)影响... 或者我在动态 WiFi 环境中进行测量的原因是什么?
    您对此有什么意见吗?

    就我的法庭之友而言、剩余的默认系统筛选标准是什么(添加筛选器时、返回的 ID 为4、因此、我假设 AP 的 BSSID 和器件 MAC 旁边还有其他一些内容)。


    最好。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我不记得默认设置了哪些附加滤波器、但两个重要滤波器是 BSSID 和目标 MAC 地址。

    在不深入日志和监听器分析的情况下降低功耗的原因可能是、为 IP 添加筛选器意味着网络上的所有 IP 层多播帧(如 mDNS 帧和其他帧)都将被过滤掉、从而阻止网络 对其进行解析和解码(因此能够更快地进入睡眠状态)。

    此致、

    Shlomi