我们做了一块基于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