主要是判定丢包 丢在个哪一个阶段
MAC与PHY 通信的 QSGMII 总线上
PHY 的 utp 端口 MDI 线路上
1、phy utp internel boopback 内部回环模式,验证QSGMII 和 MAC 之间的通信质量

可以通过下面的配置将phy 设置为 utp internel boopback 来验证phy的QSGMII总线上的通信质量
# hard reset
./tools --miiwrite=eth0,0x1e,0xa0c0;./tools --miiwrite=eth0,0x1f,0x8000
sleep 3
#1000M mode, do not rest
./tools --miiwrite=eth0,0x1e,0xa000;./tools --miiwrite=eth0,0x1f,0
./tools --miiwrite=eth2,0x0,0x4140;
./tools --miiwrite=eth3,0x0,0x4140;
#100M
#./tools --miiwrite=eth1,0x0,0x6100;
设置完之后,phy 会自动link up ,可以使用 tcpreplay 打流测试,5.pcap 是我用流量仪抓的纯UDP的包,打流之前,一定要将 包里的 源MAC 目的MAC地址改为调试的网口MAC地址,否则将收不到包。
tcprewrite --enet-dmac=5C:D2:0B:11:67:DA --enet-smac=5C:D2:0B:11:67:DA --infile=4.pcap --outfile=5.pcap
然后执行下面的命令开始打流
tcpreplay -i eth2 -l 1 -t 5.pcap 2> /dev/null
下面的这种情况说明无丢包

而且可以通过读取 phy qsgmii一侧的 收到的正确包的数量,如果有CRC错包,也可以读出来,通过这个数量的差异,是可以判定丢包在哪个阶段的,如果是MAC发给phy的数据,要读 phy qsgmii一侧的收到的数据,如果是MDI端进来的数据,要读 phy utp一侧的数据,再发包之前,一定要先打开phy的 包统计的功能。要特别注意的是YT8614 包统计的寄存器,port 0-3的地址是不一样的,不是靠phy地址来区分的,不过寄存器的定义是一毛一样的。


下面的脚本是 读取包统计的,可供参考
#!/bin/sh
if [ -z $1 ] || [ -z $2 ];then
echo "usage :./$0 eth0 qsgmii/utp" && exit 1
fi
tmp_p=`echo "$1" | cut -b 4`
if [ "`hostname`" == "301-0021" ] ;then
[ "$tmp_p" == "0" ] && p=0
[ "$tmp_p" == "1" ] && p=3
[ "$tmp_p" == "2" ] && p=2
[ "$tmp_p" == "3" ] && p=1
fi
if [ "`hostname`" == "301-0020" ] ;then
[ "$tmp_p" == "0" ] && p=4
[ "$tmp_p" == "1" ] && p=0
[ "$tmp_p" == "2" ] && p=1
[ "$tmp_p" == "3" ] && p=2
fi
./tools --miiwrite=$1,0x1e,0xa000;./tools --miiwrite=$1,0x1f,0
if [ "$2" == "qsgmii" ];then
#data source upstream,qsgmii
./tools --miiwrite=$1,0x1e,0xa${p}b7;./tools --miiwrite=$1,0x1f,0xdfff
else
#data source downstream,copper
./tools --miiwrite=$1,0x1e,0xa${p}b7;./tools --miiwrite=$1,0x1f,0x1fff
fi
./tools --miiwrite=$1,0x1e,0xa${p}a0;./tools --miiwrite=$1,0x1f,0xa8c0
./tools --miiwrite=$1,0x1e,0xa${p}a3;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}a4;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}a5;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}a6;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}a7;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}a8;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}a9;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}aa;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}ab;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}ac;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}ad;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}ae;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}af;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}b1;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}b2;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}b3;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}b4;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}b5;./tools --miiread=$1,0x1f
./tools --miiwrite=$1,0x1e,0xa${p}b6;./tools --miiread=$1,0x1f
2、phy remote boopback 内部回环模式,验证UTP端 MDI 通信质量

将要测试的设备 比如我右侧的eth3 设置成 phy remote boopback , 然后找一台没问题的设备,比如左侧设备,正常网口,开始打流,注意修改下 包里的MAC地址,如果有丢包,可以用上章的方法看下phy收到的包数量,看看丢包发生在哪里

如果有流量仪,就更好了,直接打流验证
本文主要探讨了在网络接口YT8614在QSGMII模式下出现丢包问题的分析。通过内部回环模式验证MAC与PHY之间的通信质量,利用tcpreplay工具进行流量测试,并通过读取PHY的包统计来判断丢包发生在MAC到PHY的QSGMII总线阶段还是PHY的UTP MDI线路阶段。同时提供了读取包统计的脚本以及远程回环模式下的测试方法来进一步确认MDI通信质量。


1万+

被折叠的 条评论
为什么被折叠?



