主题中讨论的其他器件: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;
}
强烈赞赏任何提示。
最好。