工具/软件:
在过载情况下(或对于定向攻击)、我们希望能够通过命令关闭 PRU-ICSSG 的接收分支、而无需关闭我们自己的发送器。 (启用发件人/禁用接收器)。 使用 Icssg_ioctlSetPortState (ICSSG_PORT_STATE_DISABLED)时、似乎只能关闭发送器和接收器。
是否有另一种方法可以在没有发射器的情况下关闭接收器并再次打开它?
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.
工具/软件:
在过载情况下(或对于定向攻击)、我们希望能够通过命令关闭 PRU-ICSSG 的接收分支、而无需关闭我们自己的发送器。 (启用发件人/禁用接收器)。 使用 Icssg_ioctlSetPortState (ICSSG_PORT_STATE_DISABLED)时、似乎只能关闭发送器和接收器。
是否有另一种方法可以在没有发射器的情况下关闭接收器并再次打开它?
尊敬的 Gerd:
没错、如上所述、无法仅禁用接收、但使用可用的 IOCTL 保持启用传输。
但是、我们可以选择只使用分类器禁用接收。 通过这种方法、固件将丢弃所有数据包。
要修改的存储器映射寄存器:
6.4.14.12.47 MII_G_RT_RX_CLASS_GATESm_PRU0寄存器
6.4.14.12.129 MII_G_RT_RX_CLASS_GATESm_PRU1寄存器
在这里、我们取消屏蔽字段 RX_CLASS_RAW_MASKm (m=8、9)以禁用接收。
默认情况下、固件会屏蔽 Classifier 8和9的这些字段、因此分类器8、9输出 默认为1。 当 我们取消屏蔽此字段时、分类器8和9输出为0。 如果分类器8和9输出均为0、则固件将丢弃数据包。
应用程序代码示例:
uintptr_t icssg_mii_g_rt_base = 0x300B3000; uint32_t classifierNums[2] ={8,9}; /*Classifiers 8 and 9*/ char option = ' '; EnetAppUtils_print("\nEnable or Disable Reception of packets using classifiers: e or d\r\n"); DebugP_scanf("%c", &option); if (option == 'e') { for (uint32_t i = 0; i < 2; i++) { CSL_REG32_WR(icssg_mii_g_rt_base + classifierNums[i]*4 + CSL_ICSS_G_PR1_MII_RT_PR1_MII_RT_G_CFG_REGS_G_RX_CLASS_GATES0_PRU0, 0x70); CSL_REG32_WR(icssg_mii_g_rt_base + classifierNums[i]*4 + CSL_ICSS_G_PR1_MII_RT_PR1_MII_RT_G_CFG_REGS_G_RX_CLASS_GATES0_PRU1, 0x70); } } else if (option == 'd') { for (uint32_t i = 0; i < 2; i++) { CSL_REG32_WR(icssg_mii_g_rt_base + classifierNums[i]*4 + CSL_ICSS_G_PR1_MII_RT_PR1_MII_RT_G_CFG_REGS_G_RX_CLASS_GATES0_PRU0, 0x50); CSL_REG32_WR(icssg_mii_g_rt_base + classifierNums[i]*4 + CSL_ICSS_G_PR1_MII_RT_PR1_MII_RT_G_CFG_REGS_G_RX_CLASS_GATES0_PRU1, 0x50); } }