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.

6678接收广播包问题



我们做了一块基于6678的板子,将2个网口都接了出来。
通过往PA添加MAC地址的方式设置接收以太网包,
现在面临一个困惑:如果将广播地址FFFFFFFF,加到
第一个口,虽然无论从哪个口来的广播报文都会被接收
到,但cpu会认为所有的广播都是从第一口收到的。
(因为广播包都是从与第一口对应的队列里收到的)
这样针对该广播包的处理发出的报文都会从第一口发出,
哪怕这个包是针对第二口所来包的响应。
比如从第二口收到一个arp request,则6678的core发出的
arp response不会从第二口发出,而是从第一口发出了,
从而造成第二口不能被ping通。
请问如何处理这种情况呢?我猜想可以通过设置PA解决,
不过不知具体如何实现,请各位指教。

  • 沉下去了,顶一下。

  • 1.本身的默认系统(收包不设置ALE bypass,发包不指定目的以太网端口号)是支持你这样的场景的,标准的ALE以太网交换,我不清楚你为什么不这样用呢?

    2.如果你确实有需求不能用标准的ALE交换功能,则按照你的用例,可以有如下方法分辨之:

    A.可以在添加LUT1_0的时候用Pa_addMac指定入端口号:

    typedef struct  {
      paMacAddr_t        src;           /**< Source MAC addresss  */
      paMacAddr_t        dst;           /**< Destination MAC address */
      uint16_t           vlan;          /**< VLAN tag VID field, 12 lsbs  */
      uint16_t           ethertype;     /**< Ethertype field. */
      uint32_t           mplsTag;       /**< MPLS tag. Only the outer tag is examined */
      uint16_t           inport;        /**< Input EMAC port number as specified by @ref paEmacPort */
    } paEthInfo_t;

    比如两个端口来的广播包分别配置到两个entry就分开了.

    B. 广播包也可以都收到一个队列,从该队列弹出的描述符PS_DATA区域中其实带有该包来自哪个以太网端口的信息

    pasahost.h的宏定义PASAHO_LINFO_READ_INPORT_GEN1(X)可以提取端口号

  • 谢谢Marvin

    提供的指导意见非常管用

    我找时间尽快试试

  • 请问Marvin,

    打算用Pa_addMac的方法,

    请问ccs的例子里面,哪个使用了inport参数?

  • PA LLD例子中调用Pa_addMac的地方都会配置inport参数,但可能配置为0,也就是don't care.你可以将其改为比如1,2看到实际的按端口接收的效果.

  • 按照Marvin说的做了下实验,完全可行。

    已经可以区分开是哪个口发来的广播包了

    谢谢Marvin