网口对接switch芯片配置VLAN后网络不通的解决方法

我们芯片的网口,无论是百兆网卡ETH,还是千兆网卡GMAC,在对接某些switch芯片时(比如88E6071),如果配置了VLAN,可能会网络不通。网络不通的原因,是IEEE没有明确规定VLAN报文的最小帧长是64字节还是68字节。有的switch芯片是按照最小帧长68字节实现的,而我们芯片的网卡,是按照最小64字节实现的,导致出现了兼容性问题,我们芯片网卡发送的数据包不满足switch芯片的最小帧长要求,数据包被switch丢弃。遇到这种问题时,解决方案如下:
针对千兆GMAC网卡,修改网卡驱动代码,在驱动发包函数的入口(ndo_start_xmit对应的驱动实现函数),添加如下代码段。

if (skb->len < 68) {
              int pad_bytes = 68 - skb->len;

                WARN_ON(pad_bytes <= 0);
                if (!skb_pad(skb, pad_bytes))
                        skb_put(skb, pad_bytes);
        }

针对百兆ETH网卡,修改网卡驱动代码,在驱动发包函数的入口(ndo_start_xmit对应的驱动实现函数),添加如下代码段。

if (skb->len < 68) {
                int pad_bytes = 68 - skb->len;

                WARN_ON(pad_bytes <= 0);
               if (!skb_pad(skb, pad_bytes)) {
                       skb_put(skb, pad_bytes);
                        if (skb->ip_summed == CHECKSUM_PARTIAL)
                                skb_checksum_help(skb);
                }
        }

海量海思相关资料和技术问答:https://www.ebaina.com/tags/180000000037/24

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值