工具/软件:
在我们的测试中、我们尝试通过 IOCTL 将2047个 MAC 地址添加到 FDB 中。 这对大量条目有效。 但是、某些 MAC 地址会被拒绝。
即 Icssg_Ioctl CmdResp.status = 0x10 (错误)。 有没有这方面的解释?
随附测试算法。
"AddHwAddr()"通过 IOCTL 执行加法并评估响应结构。
//循环通过次数
Uword LOOP_cnt = 2047;
//已成功添加多播 MAC 地址的数量
uword mac_addr_cnt = 0;
//结果
结果 res[4000];
for (uword idx = 1;idx <(loop_cnt+ 1);++idx){
ubyte high_byte = static_cast (IDX>> 8);
ubyte low_byte = static_cast (IDX);
IN::ETHAddr mac_addr (0x01、0x22、0x22、HIGH_BYTE、LOW_BYTE、 0x11);
DWORD res_idx= gEth1Dev.AddHwAddr (mac_addr);
RES[idx- 1].nr = idx;
RES[idx- 1].mac[0]= mac_addr.mUs .mA ddr[0];
RES[idx- 1].mac[1]= mac_addr.mUs .mA ddr[1];
RES[idx- 1].mac[2]= mac_addr.mUs .mA ddr[2];
RES[idx- 1].mac[3]= mac_addr.mUs .mA ddr[3];
RES[idx- 1].mac[4]= mac_addr.mUs .mA ddr[4];
RES[idx- 1].mac[5]= mac_addr.mUs .mA ddr[5];
if (res_idx == ENET_Sok){
RES[idx- 1].res = true;
++mac_addr_cnt;
}其他{
RES[idx - 1].res = false;
++LOOP_cnt;
}
}
在以上示例中、前2030个 MAC 地址([0x01、0x22、0x22、0x00、0x01、 0x11]-[0x01、0x22、0x22、0x07、0xEE 0x11])已成功添加。
MAC 地址编号 2031 [0x01、0x22、0x22、0x07、0xEF、 0x11]被拒绝。
之后、有16个 MAC 地址([0x01、0x22、0x22、0x07、0xF0、 0x11]-[0x01、0x22、0x22、0x07、0xFF、 0x11])已成功添加。
IDx = 2048...2216的 MAC 地址([0x01、0x22、0x22、0x08、0x00、 0x11]-[0x01、0x22、0x22、0x08、0xA8、 0x11])被拒绝。
IDx = 2217的 MAC 地址[0x01、0x22、0x22、0x08、0xA9、 0x11]已成功添加。
这也是最后一个。
如果 MAC 地址被拒绝(例如[0x01、0x22、0x22、0x07、0xEF、 0x11])首先添加、这也起作用。
程序行为不依赖于特定的 MAC 地址本身、而是取决于之前添加的 MAC 地址。