一 方案框图

二 实现步骤

1.模组的MAC通过RGMII接口与PHY连接

2.MAC层数据经过RGMII到达PHY的PCS层

3.设置PHY的PCS层回环,使PCS层数据回到MAC层

4.判断MAC层TX与RX接收的数据。如果MAC能接收到数据,测试PASS,否则失败

三 测试代码

int main(int argc, char **argv)
{int i, datalen, frame_length, sd, bytes;char *interface = "eth0";uint8_t data[IP_MAXPACKET];uint8_t src_mac[6];uint8_t dst_mac[6];uint8_t ether_frame[IP_MAXPACKET];struct sockaddr_ll device;struct ifreq ifr;int recvlen=0;uint8_t buffer[IP_MAXPACKET];int loopback_state=0;// Submit request for a socket descriptor to look up interface.if ((sd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0){ perror("socket() failed to get socket descriptor for using ioctl()");exit(EXIT_FAILURE);}// Use ioctl() to look up interface name and get its MAC address.memset(&ifr, 0, sizeof(ifr));snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s", interface);if (ioctl(sd, SIOCGIFHWADDR, &ifr) < 0){perror("ioctl() failed to get source MAC address ");return (EXIT_FAILURE);}close(sd);// Copy source MAC address.memcpy(src_mac, ifr.ifr_hwaddr.sa_data, 6);// Report source MAC address to stdout.printf("MAC address for interface %s is ", interface);for (i = 0; i < 5; i++){printf("%02x:", src_mac[i]);}printf("%02x\n", src_mac[5]);// Find interface index from interface name and store index in// struct sockaddr_ll device, which will be used as an argument of sendto().memset(&device, 0, sizeof(device));if ((device.sll_ifindex = if_nametoindex(interface)) == 0){perror("if_nametoindex() failed to obtain interface index ");exit(EXIT_FAILURE);}printf("Index for interface %s is %i\n", interface, device.sll_ifindex);// Set destination MAC address: you need to fill these outdst_mac[0] = 0x10; //设置目的网卡地址dst_mac[1] = 0x78;dst_mac[2] = 0xd2;dst_mac[3] = 0xc6;dst_mac[4] = 0x2f;dst_mac[5] = 0x89;// Fill out sockaddr_ll.device.sll_family = AF_PACKET;memcpy(device.sll_addr, src_mac, 6);device.sll_halen = htons(6);// 发送的data,长度可以任意,但是抓包时看到最小数据长度为46,这是以太网协议规定以太网帧数据域部分最小为46字节,不足的自动补零处理datalen = 12;data[0] = 0x11;data[1] = 0x12;data[2] = 0x13;data[3] = 0x14;data[4] = 0x15;data[5] = 0x16;data[6] = 0x17;data[7] = 0x18;data[8] = 0x19;data[9] = 0x20;data[10] = 0x21;data[11] = 0x22;// Fill out ethernet frame header.frame_length = 6 + 6 + 2 + datalen;// Destination and Source MAC addressesmemcpy(ether_frame, dst_mac, 6);memcpy(ether_frame + 6, src_mac, 6);ether_frame[12] = ETH_P_DEAN / 256;ether_frame[13] = ETH_P_DEAN % 256;// datamemcpy(ether_frame + 14, data, datalen);// Submit request for a raw socket descriptor.if ((sd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0){ //创建正真发送的socketperror("socket() failed ");exit(EXIT_FAILURE);}// Send ethernet frame to socket.if ((bytes = sendto(sd, ether_frame, frame_length, 0, (struct sockaddr *)&device, sizeof(device))) <= 0){perror("sendto() failed");exit(EXIT_FAILURE);}for(i=0;i<bytes;i++){printf(" %02x",ether_frame[i]);if((i+1)%16==0){printf("\n");}}printf("\n");recvlen=recvfrom(sd,buffer,sizeof(buffer),0,NULL,NULL);for(i=0;i<recvlen;i++){printf(" %02x",buffer[i]);if((i+1)%16==0){printf("\n");}}printf("\n");for(i=0;i<recvlen;i++){if(bytes>recvlen){loopback_state=0;break;}else if(ether_frame[i]!=buffer[i]){loopback_state=0;break;}}if (loopback_state == 1){printf("phy loopback OK\n");}else{printf("phy loopback error\n");}// Close socket descriptor.close(sd);return (EXIT_SUCCESS);
}

RGMII以太网测试方案相关推荐

  1. 《大师说栏目第一期》汽车以太网测试项那么多,到底该测啥呢?

    #<大师说>栏目上线啦# <大师说>栏目是怿星科技2023年推出的深度思考栏目,通过邀请内部专家,针对智能汽车行业发展.技术趋势等输出个性化的观点.每期一位大师,每位一个话题, ...

  2. 三菱FX5U以太网数据采集方案

    三菱FX5U以太网数据采集方案 1.需求分析 通过三菱FX5U的网口,直接读写PLC的数据,不修改PLC的程序和接口参数,不影响原系统的运行. 工业通讯桥接器(NET50-MEL)支持IP地址跨网段和 ...

  3. 车载以太网测试:关于测试

    一.前言 本着相互帮助,共同进步的原则,邀请到北汇汽车电子测试部有着多年测试实战经验的老炮儿黄东风和大家聊聊车载以太网那些事! 黄总才思泉涌,洋洋洒洒写下从"关于测试"." ...

  4. 还在为无线困扰?思博伦STC WiFi测试方案助力体验提升

    Wi-Fi无论是在我们的工作还是生活当中变得越来越重要,甚至被网友戏称为马斯洛需求模型最底层的"生活最基本需求".正因为越来越重要,所以体验备受重视. 无线接入提供方无论是企业还是 ...

  5. 思博伦STC WiFi:一个全能的WiFi测试方案

    近两年,在移动互联网热潮的推动下,我国WiFi市场的发展一片繁荣--运营商在加快无线热点的建设.企业在积极部署WLAN解决方案,而SOHO或家庭用户也已通过无线路由器等设备构建了自己的WiFi网络,目 ...

  6. 紫光信息港 软件测试,紫光同创PGL22G开发平台试用连载(3)---以太网测试工程二...

    原标题:紫光同创PGL22G开发平台试用连载(3)---以太网测试工程二 续前一篇博文,经过多次对PANGO工具的参数进行修改的尝试,在资源占用率为(LUT-70.02%,Register-36.34 ...

  7. 紫光信息港 软件测试,紫光同创PGL22G开发平台试用连载-(2)以太网测试工程一

    原标题:紫光同创PGL22G开发平台试用连载-(2)以太网测试工程一 PGL22G开发板中包含一个以太网接口,紫光同创FPGA通过RGMII接口与外部PHY芯片互连.而在千兆模式下,RGMII的运行速 ...

  8. 你想知道的光纤、铜缆测试方案,都在这里!

    自2018年初以来,德国Softing IT Networks与Harting合作,一直为WireXpert系列提供特殊的工业适配器配件.无论是WireXpert 500,WireXpert 500 ...

  9. 测试环境搭建流程_案例解析:一个完整的项目测试方案流程,应该是怎么的?...

    作为一名软件测试工程师,为项目制作完成的测试方案并执行,是我们日常工作的重要部分,同时,也是一名合格的软件测试工程师应有的专业素养.那么,很多小白和测试新手肯定要问了:一个完整的项目测试方案流程,应该 ...

  10. 软件系统非功能测试方法,非功能测试方案模板

    <非功能测试方案模板>由会员分享,可在线阅读,更多相关<非功能测试方案模板(12页珍藏版)>请在人人文库网上搜索. 1.测试规范文档 非功能测试方案模板非功能测试方案模板 VE ...

最新文章

  1. 企业级监控ZABBIX深度实践安装部分
  2. 机器学习虽好,也要看什么场合!
  3. ngx_lua module 模块安装
  4. 初探Tomcat的架构设计
  5. kusto使用_Python查找具有数据重复问题的Kusto表
  6. 1.c++中初始化列表和构造函数初始化的区别是什么?2.类的成员变量的初始化顺序是按照声明顺序吗?
  7. keepalived实现高可用nginx反向代理的简单案例
  8. SpringBoot 自动装配原理
  9. 三星Galaxy Note20新旗舰发布会官宣:8月5日线上见
  10. RTMP 协议学习总结
  11. Arduino入门教程--连载
  12. 大学计算机协会大一面试,大一学生社团面试自我介绍
  13. Python解炸金花问题
  14. android微信下拉出现小程序,仿新版微信的小程序下拉栏
  15. Unity 实现游戏中多相机屏幕CutIn效果
  16. 如何将试卷导入到mysql中,一种基于C#中将Word试题导入数据库实现方法.doc
  17. 某音xg加密算法研究
  18. python wechatsougou_python 使用qq登陆搜狗微信搜索
  19. [Arduino] Arduino猪头笔记
  20. SQL注入黑客防线网站实例分析

热门文章

  1. 移动通信网络规划:信道编码
  2. Netlog中数据库演变过程(转载)
  3. Apache安装成功,测试时无法跳出It works!页面
  4. Coverity介绍以及典型缺陷说明
  5. 怎么修改PDF文件大小,PDF怎么裁剪页面
  6. java家庭账本_java家庭记账系统
  7. xml格式转json
  8. Java EJB到底是什么?
  9. 【游戏开发题库】使用Unity制作Unity题库,支持题目录入和刷题(面试 | 笔试 | 自制题库 | 从基础到高级)
  10. 机器学习与数据挖掘之ROC与AUC