TI中文支持网
TI专业的中文技术问题搜集分享网站

6678接收广播包问题

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

kucan1:

沉下去了,顶一下。

Marvin Liang:

回复 kucan1:

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)可以提取端口号

kucan1:

回复 Marvin Liang:

谢谢Marvin

提供的指导意见非常管用

我找时间尽快试试

kucan1:

回复 Marvin Liang:

请问Marvin,

打算用Pa_addMac的方法,

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

kucan1:

回复 Marvin Liang:

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

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

谢谢Marvin

赞(0)
未经允许不得转载:TI中文支持网 » 6678接收广播包问题
分享到: 更多 (0)