2194331_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2194331_zh-CN

2194331_zh-CN

关联命令中的随机数据 -(使用 Murata NXP 88W8801 Typ2 2DS)

大家好

在分析了 HostCmd_CMD_802_11_ASSOCIATE 命令后,我得出结论,在作为一个站连接到接入点时,有一些字段没有设置,而是发送了随机数据。

这涉及到全局例程wlan_cmd_802_11 _associate():

第一个位置位于

/* 设置监听间隔 */

passo->监听间隔= wlan_cpu_to_le16(pmpriv-)>listen_interval);

/* 设置信标周期 */

通过>信标周期= wlan_cpu_too_le16(pbss_desc-)>信标周期);


在这里,监听和信标周期被插入报文头,但还有一个名为
t_u8dtim_period;
的字段没有填写,因此有一个随机值(取决于缓冲区中原来使用的值)

第二个位置位于

pss_tlv = (MrvlIEtypes_SsParamSet_t *)(void *)pos;
pss_tlv->header.type = wlan_cpu_too_le16(TLV_TYPE_CF);
pss_tlv->header.len = sizeof(pss_tlv->cf_ibss.cf_param_set);
pos += sizeof(pss_tlv->header) + pss_tlv->header.len;

可以看出,插入了一个类型为 TLV_TYPE_CF 的条目,其固定长度为 6 字节,但是 6 字节未写入,因此具有随机值(取决于原始缓冲区内容)。
看起来,如果收到 CF_PARAM_SET ID,cf_param_set 的内容可以选择由扫描数据填充。如果没有收到,最好不要插入存档数据,但如果已经收到,将数据复制到这里可能是正确的。

欢迎提出意见。

Regards

Mark






Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

嗨,Christine

,我同意这份报告--这正是我所理解(和看到的)的问题。

Regards

Mark

Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好,@mjbcswitzerland

谢谢您的答复,好的,我明白了。

您能帮忙确认一下我们的理解是否与您一致吗?

============

  1. 关联命令中的未初始化字段
  2. 在 wlan_cmd_802_11_associate() 中构建 HostCmd_CMD_802_11_ASSOCIATE 命令时,命令结构中的某些字段从未被明确初始化。 从未明确初始化.这些字段包括
    • dtim_period(1 字节)位于 listen_interval 和 beacon_period 之后。
    • 类型为 TLV_TYPE_CF 的 TLV 内的 6 字节 cf_param_set。
  1. 未初始化数据的影响
  2. 由于命令缓冲区可以重复使用,因此这些字段会保留 先前内存内容 中的 随机剩余值 。这可能导致:
    • 向 AP 发送的 DTIM 周期不正确,可能会影响省电和组播传输。
    • TLV 中包含随机 CF 参数值,可能导致无法预测的接入点行为或协商失败。
  1. 您的验证
    • 您可以通过在函数运行之前使用已知模式(0x55 和 0xAA)初始化缓冲区并在执行后观察未更改的字节来确认这一点。
    • 屏幕截图显示这些字节仍然是初始模式,这证明它们从来不是由代码编写的。
  1. 您的期望
  2. 这些字段 不应保持未初始化状态.它们应该
    • 使用扫描结果中的有效数据填充(例如,用于 DTIM 的 pbss_desc->dtim_period)。
    • 如果没有有效数据,则明确清零。
    • 对于 TLV_TYPE_CF,如果扫描期间未收到 CF 参数,则应跳过该 TLV 或将其填为 0。

 

根本原因

  • 关联命令生成器没有完全初始化命令结构。
  • 添加可选的字段时未对缺失的扫描数据进行适当处理。

===========


顺祝商祺!

Christine。


Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好 Christine

我用的是嵌入式艺术家板:https://www.embeddedartists.com/products/imx-rt1062-oem/
为了使用它,我使用了 EVK-MIMXRT1060 的 SDK_2.14.0 以及 Embedded Artists 提供的补丁,以便在他们的硬件上运行。
WiFi 部分没有补丁,只是从 SDK 中获取。

因此,我相信我已经有了最新的 WiFi 库代码。

Regards

Mark

Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好,@mjbcswitzerland

1.首先,请确认我们的理解是否与您一致。

2. 我想你提到过你在使用:SDK_2.14.0_EVK-MIMXRT1060,但你不太确定。因此,请先检查一下你手中的板是什么,或者给我拍张照片。这样我就可以帮你检查一下。还要让我知道你是否在板上做过任何硬件重做。这样我就能更好地了解你在使用哪个板。

3. 你可以从这里获得我们的最新版本:

https://mcuxpresso.nxp.com/select

选择你正在使用的板。

友情提醒

我们有 MIMXRT1060-EVKB/MIMXRT1060-EVKCEVK-MIMXRT1060

请手里拿着板选择正确的棋子。

 Christine_Li_0-1763174519987.png

如果你使用的是:EVK-MIMXRT1060,那么 SDK_2.14.0 是最新的 SDK 版本。

如果你使用的是 MIMXRT1060-EVKB 或 MIMXRT1060-EVKC ,最新的 SDK 版本是:SDK 25.09 作为我的屏幕截图 。

顺祝商祺!

Christine。


Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好 Christine

不幸的是,我不知道在哪里可以找到我正在使用的版本号,也不知道在哪里可以访问新版本,比如参考的 v25.09.00

你知道它在哪里吗?

此致

Mark


Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好,@mjbcswitzerland

请参阅下文,了解我们内部团队的反馈意见,并确认我们的理解。

  1. 关联命令中的未初始化字段
  2. 在 wlan_cmd_802_11_associate() 中构建 HostCmd_CMD_802_11_ASSOCIATE 命令时,命令结构中的某些字段从未被明确初始化。 从未明确初始化.这些字段包括
    • dtim_period(1 字节)位于 listen_interval 和 beacon_period 之后。
    • 类型为 TLV_TYPE_CF 的 TLV 内的 6 字节 cf_param_set。
  1. 未初始化数据的影响
  2. 由于命令缓冲区可以重复使用,因此这些字段会保留 先前内存内容 中的 随机剩余值 。这可能导致:
    • 向 AP 发送的 DTIM 周期不正确,可能会影响省电和组播传输。
    • TLV 中包含随机 CF 参数值,可能导致无法预测的接入点行为或协商失败。
  1. 您的验证
    • 您可以通过在函数运行之前使用已知模式(0x55 和 0xAA)初始化缓冲区并在执行后观察未更改的字节来确认这一点。
    • 屏幕截图显示这些字节仍然是初始模式,这证明它们从来不是由代码编写的。
  1. 您的期望
  2. 这些字段 不应保持未初始化状态.它们应该
    • 使用扫描结果中的有效数据填充(例如,用于 DTIM 的 pbss_desc->dtim_period)。
    • 如果没有有效数据,则明确清零。
    • 对于 TLV_TYPE_CF,如果扫描期间未收到 CF 参数,则应跳过该 TLV 或将其填为 0。

 

根本原因

  • 关联命令生成器没有完全初始化命令结构。
  • 添加可选的字段时未对缺失的扫描数据进行适当处理。

 

为了帮助缩小问题范围,请帮助使用最新版本 (v25.09.00) 进行测试,并确认该版本中是否存在相同的行为。


致以最诚挚的问候

Christine。

Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好,@mjbcswitzerland

从我个人的理解来看,我认为你是对的。

但我需要向我们内部的 SDK 专家团队报告,以进行仔细检查,而且我也没有直接修改 SDK 的权限。

一旦得到内部团队的反馈,我们将及时更新。

感谢您与我们分享这些信息,这确实有助于我们改进产品。


顺祝商祺!

Christine。

Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

嗨,Christine

以下是显示该问题的调试屏幕截图。

1.我在
wlan_cmd_802_11_associate()[此函数准备关联命令]
中的
cmd->command = wlan_cpu_to_le16(HostCmd_CMD_802_11_ASSOCIATE);
,当工作站连接到接入点时就会出现中断。

2. 我将缓冲区(cmd)设置为初始模式,这样就可以看到例程填写了哪些元素:

mjbcswitzerland_0-1762801362068.png

3.我让函数完成(现在可以发送内容了),然后再次检查缓冲区的内容。

mjbcswitzerland_3-1762802420464.png


从缓冲区中可以看出,有 7 个字节没有更改(初始值仍为 0x55)。
(请注意,缓冲区开头的其他一些值也没有改变,但它们是最低一级驱动程序传输内容时填充的长度值)

4. 我现在重复一次,但将 0xAA 设置为初始缓冲区模式。
然后,我让缓冲区再次填满:

mjbcswitzerland_2-1762801787074.png


这验证了 0x55/0xAA 不是真实值,并确认缓冲区没有完全写入。

第一个单字节是 dtim_period 的位置,通过在代码中添加 p

asso-> dtim_period = pbss_desc-> dtim_period; 可以很容易地纠正这个位置。




接下来的 6 个缺失字节是 mrvlieTypes_ssparamset_T 的联合 cf_ibss 的内容应该所在的位置。我不知道它们是从哪里来的,所以没有尝试修改代码。


下面是一个真实连接尝试的示例,缓冲区从之前使用过的内容开始。
填写之前:

mjbcswitzerland_4-1762802551148.png


填写后

mjbcswitzerland_5-1762802638051.png


因此,它 "随机 "拥有这些位置上缓冲区中的任何值,这些值可能有效,也可能无效,这取决于它们实际控制的内容和它们碰巧拥有的值。当然,代码的更改或缓冲区使用顺序的改变会导致原始缓冲区内容的不同,从而可能导致整体行为的改变。

我希望我能充分说明这个错误,以便在项目中加以纠正。

Regards

Mark









Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好,@mjbcswitzerland

当然,请帮助发送截图,以便我们更好地理解您的意思。


顺祝商祺!

Christine。

Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

嗨,克里斯蒂娜

cmd

是一个输出缓冲区,原本是空的,在例程中被填满,因此 cmd 不会传递任何值。

下次使用调试器时,我会给你发送调试器屏幕截图来说明问题。

Regards

Mark

Regards

Mark


Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好,@mjbcswitzerland

我下载了相同版本的 SDK,并检查了你提到的内容。

参数通过 IN HostCmd_DS_COMMAND *cmd 传递。

请参见下文:

 HostCmd_DS_802_11_ASSOCIATE *passo = &cmd->params.associate;

如果我的理解有误,请告诉我。

或者您可以提供调试器截图,以便我更好地理解您的疑虑。


顺祝商祺!

Christine。

Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好,克里斯蒂娜

我正在使用 MCUXpresso SDK 中包含的恩智浦 WiFi 库开发 i.MX RT 1062。

MCUXpresso IDE v11.9.1 [内部版本 2170] [2024-04-19]


我不确定 SDK 的版本号,但该项目最初是在 26.8.2024 上安装的。但是我的 SDK 生成器仪表板显示了

SDK_2.14.0_EVK-MIMXRT1060



下面是显示其 mlan 文件和第一个代码问题的屏幕截图,其中 dtim_period 条目没有添加到它生成的命令中;我在命令缓冲区中的相关字节位置看到随机数据,这些数据是在使用调试器查看时创建的。

此致

马克

mjbcswitzerland_0-1761730101326.png


Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好,@mjbcswitzerland

您是在 RTOS 还是 Linux 上使用 88W8801?

如果使用 RTOS,能否告诉我您的主机平台名称?是我们的 I.MX RT 系列吗?您的 SDK 版本和 IDE 版本是什么?

如果使用 Linux,能否告诉我您的主机平台名称?是我们的 I.MX 6、7、8、9 系列吗?你的 Linux 内核版本是什么?你的 Wi-Fi 驱动程序版本是什么?

您有相关日志吗? 或者您如何检测到这个问题?

请帮忙介绍一下这个问题的更多背景,然后我们可以进一步讨论。


谢谢!

Christine。

Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好,@mjbcswitzerland

我们检查了最新的 MCUXpresso SDK(v2.16.0)代码,并将其与您报告的问题进行了对比。我们的分析确认了以下字段 dtim_period cf_param_set 字段未被初始化。

 

作为可能的修复方法,我们已准备了一个补丁。能否就此向我们提供反馈意见?

该补丁解决了以下问题:

  • 通过对命令结构进行零初始化,确保不会出现之前使用缓冲区时遗留的垃圾值。
  • 保证 DTIM 周期取自扫描描述符或设置为零。
  • 通过明确对 6 字节 CF 参数集进行零初始化来防止 6 字节 CF 参数集中的随机值。

 

同时,我们将继续评估未来版本中是否可以提供更稳定、更永久的修复程序。

顺祝商祺!

Christine。

Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

Hi Christine

我没有修改代码,只是在内存窗口中显示缓冲区,并手动设置其内容,这样我就能看到哪些内容被写入,哪些没有被写入。
如果您想通过修改代码来进行测试,可以按照您展示的方法进行。

此致

Mark


Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好,@mjbcswitzerland

现在我需要你们在 Wi-Fi 端所做的修改,以确认所报告的问题。

请确认以下几点?

您是否在函数 wlan_cmd_802_11_associate () 中初始化了 passo 变量? 中初始化 passo 变量了吗?

 

memset(passo, 0x55, sizeof(HostCmd_DS_802_11_ASSOCIATE));


顺祝商祺!

Christine。

Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好,Christine

事实上,在开始填充之前,我已经将"complete" cmd 缓冲区全部设置为零(这对所有可能的信息都有效)。这是一种很好的做法,因为它可以确保任何未设置的字段都有一个定义为 0 的值(甚至可以省去将其清零的代码,因为它知道它们已经是这样了)。
如果只将缓冲区的一部分设置为零,就只能处理一部分缓冲区,我不会这样做,因为这样并不能解决数据丢失的问题。

passo->dtim_period = pbss_desc->dtim_period ?pbss_desc->dtim_period : 0;

是正确的,但可以简化为(因为对 0 的检查是多余的)

passo->dtim_period = pbss_desc->dtim_period;

pbss_desc->dtim_period 必须在每次使用前初始化为 0,因为它是由扫描结果选择性填写的 - 参见:

情况 DTIM_PARAM_SET:<----------------

pdtim_param_set = (IEEEtypes_DtimParamSet_t*)(void*)pcurrent_ptr;


pbss_entry->dtim_period= pdtim_param_set->dtim_period;<-------------

打破;


如果是 pss_tlv->cf_ibss.cf_param_set我认为不应该设置零,因为这是一个可以选择从接入点接收的字段 - 参见

情况 CF_PARAM_SET:<---------------------

pcf_param_set = (IEEEtypes_CfParamSet_t*)(void*)pcurrent_ptr;

(void)__memcpy(pmadapter、&pbss_entry->ss_param_set.cf_param_set, pcf_param_set,<-----------

MIN(total_ie_len、 sizeof(IEEEtypes_CfParamSet_t)));

pbss_entry->ss_param_set.cf_param_set.len=

MIN(element_len, (sizeof(IEEEtypes_CfParamSet_t) - sizeof(IEEEtypes_Header_t)));

打破;


按照这种写法,它不一定是一个有固定长度的字段。如果可以假定长度固定,则可以使用

memcpy(&pss_tlv->cf_ibss.cf_param_set、& pbss_entry-> ss_param_set. cf_param_set 、sizeof(pss_tlv->cf_ibss.cf_param_set));

否则,只需复制有效长度TLV 的长度也需要修改。

不过,我认为解决方案取决于您的开发团队,因为他们才是专家。我只是想指出明显不正确的地方,以便专家们能正确修正。

此致

Mark



Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好,@mjbcswitzerland

我们的内部团队仍在根据您的反馈意见对补丁进行审核,一旦得出结论,我们会及时更新。

顺祝商祺!

Christine。

Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

嗨克里斯汀
,这很有道理。
谢谢
Mark

Re: Random data in the association command - (with Murata NXP 88W8801 Typ2 2DS)

你好,@mjbcswitzerland

请参阅以下内部团队的反馈意见:

附上修改后的更新补丁。

根源分析

  • DTIM 周期:在 802.11 关联请求中,此字段是可选的。目前的代码为其分配了空间,但从未对其进行初始化,导致传输的数据是随机的。
  • CF 参数集:这是一个条件参数,只有当 AP 在其信标或探测响应中宣传 CF 功能时才应包含。目前的实施情况:
    • 始终插入 TLV_TYPE_CF 条目
    • 为 cf_param_set 分配 6 字节
    • 从不填充实际数据

 

建议

根据问题分析和客户反馈:

 

DTIM 期间:

  • 初始化为 0或合理的默认值
  • 由于它是可选的,因此根据 802.11 标准,将其设置为 0 是可以接受的

用于 CF 参数集:

  • 有条件包容:仅在从 AP 收到 CF_PARAM_SET 时添加 TLV_TYPE_CF
  • 正确的数据拷贝:如果 AP 宣传了 CF 功能,则复制实际的 CF 参数数据
  • 如果不需要,请删除:如果 AP 不宣传 CF 功能,则完全不包含此 TLV

 

 

影响

  • 遵守协议:目前的实施违反了 802.11 协议的正确实施
  • 互操作性:关联帧中的随机数据可能会影响与某些 AP 的兼容性
  • 网络安全:发送未初始化的内存内容可能是轻微的信息泄

 

根据上述数据,根据从 AP 收到的数据,这两个值似乎都是强制性的,也可以是可选的,这就是未设置这两个参数的原因。

 

请注意,由于这两个参数是可选的,不会造成任何其他问题(在其他位置),因此其他芯片组和代码库不需要进行这些更改,您可能需要对其进行测试并将更改保留在您的端。


如果您对此案有任何其他关切,请告诉我。

如果没有其他问题,请将我的回答标记为解决方案,以便我们结案。

如果您在使用我们的产品过程中遇到任何其他问题,请随时向我们提交新的案例。


顺祝商祺!

Christine。

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎12-12-2025 04:50 AM
更新者: