gmac做3路网卡转fpga实现方案对比

1个GAMC转3路网卡的关键在于:

发送时,对于GMAC发出的包,FPGA应该转到那个PHY口

接收时,从PHY口接收到的包应该给到那个netdev处理

A方案

在FPGA中保存三个netdev的mac,

发送时根据源mac决定要发给那个phy

接收时,根据目标mac决定input给那个netdev。

注意:三个netdev共用一份gmac驱动程序,每次初始化Init都调用一次pnetdev,

实际发生中断无论是TX还是RX,最终中断处理函数的入参pNetDev永远指向最后一个创建的netdev。

方案实现注意点:

1、每次上电时需要通知FPGA三个网卡的mac地址,实时改mac之后还要通知一次。

2、每个netdevx相对独立,当1个netdev执行到gmac的TX、RX处理时,不允许别的netdev同时使用gmac的TX、RX处理。

3、gmac的发送接收流程不允许被打断,所以gmac本身要加自旋锁。

4、gmac以千兆速率发包数量过多时,FPGA可能会存在来不及转发的现象,每发一帧数据要自旋170us。(不睡眠是因为不值得,任务调度切换在ms级别,170us自旋即可,170us是发1500B的帧数据所需时间,也可以根据每次发送帧数据的大小调整时间)

B方案

发送时:

根据源mac,为数据帧加头.(让FPGA知道应该向那个phy口转发)

接收时:

FPGA根据接收到的数据帧来自那个phy口加头,发给gmac控制器。Gmac收到后根据头部信息决定使用input提交给那个netdev处理。

对比

在收到广播时,目的mac为0xFFFF FFFF FF。

A方案会转发给3个netdev。

B方案在FPGA中会根据源phy,加头,这样就可以input到指定的netdev中。

对于广播包:正常的处理应该是发给同网段内的所有网卡设备,GMAC生成的3个netdev是在3个不同的网段。依次逻辑,明显易立的方案更合理一些。(A方案也不会发生错误,只是逻辑上不太合理,存在一定的安全风险)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值