selftest测试框架开发
来源:互联网 发布:数据与R pdf 编辑:程序博客网 时间:2024/04/29 20:57
一、需求分析
virtio-net是一个基于VirtIO的半虚拟化网卡设备类型,在Linux中的相应驱动为 drivers/net/virtio_net.c。
ethtool是Linux中的一个管理以太网设备的工具,根据网卡驱动支持的动作,它可以报告和设置网卡状态,或者执行某些操作。其中selftest是网卡驱动的自测试功能,已被e1000等真实设备的驱动支持(见drivers/net/ethernet/intel/e1000/e1000_ethtool.c:e1000_diag_test)。
在本项目中,需要为virtio-net编写ethtool支持,实现selftest,以测试virtio-net网卡的各项功能。
测试内容如:
基本功能:收发包, 功能协商, 重置
针对以往发现的CVE(包括qemu, vhost_net, tun, host kernel network core等其它)的回归测试例
二、基本原理
网卡的selftest主要借助ethtool的-t选项完成,ethtool通过socket与内核通信,selftest主要模式分为online、offline和external_lb。当在用户态键入ethtool -t eth0时,命令会下发至网卡对应的ethtool_ops中的self_test函数,执行self_test,将测试结果返回。
三、源码分析
现有linux源码drivers/net/virtio_net.c中已有struct ethtool_ops的一个实例virtnet_ethtool_ops,但其self_test函数并未实现。因此,需添加相应函数,通过跟踪整个ethtool -t eth0命令下发流程可知在执行self_test之前内核还会调用get_strings和get_sset_count以确定测试网卡的哪些功能,同样需要实现这两个函数。
在本项目中,网卡设备由QEMU模拟,QEMU通过control queue与guest进行命令交互,通过send queue和receive queue与guest进行数据交换。其中命令可自行定制。
四、实现方案
1.收发包。在virtio-net中可结合已有函数startxmit和receivebuf,但要实现loopback,需在QEMU端进行相应处理。
2.功能协商。功能协商即guest OS中的driver与QEMU模拟出来的device进行feature negotiation,首先driver将device所提供的功能读取出来,然后与driver本身应该具备的feature寻找交集,后将两者的共同feature记录,并写回device进行确认。
3.重置功能。在virtio_net中提供了执行device reset的接口vp_reset,调用此接口后做相应的处理确保重置后网卡仍能正常工作。
- selftest测试框架开发
- 自动化开发测试框架
- ft5x06 touchscreen的selftest
- FTxxxx系列------selftest
- FT系列------selftest fail
- QTP测试框架开发计划
- iOS开发中的测试框架
- iOS开发中的测试框架
- 自动化测试框架:自动化测试呼唤开发
- Android自动化测试框架开发(三)Instrumentation测试框架
- Windows界面开发测试框架-White
- Windows界面开发测试框架-White
- 自动化测试框架开发5步法
- 自动化测试框架开发5步法
- webservice项目开发测试 使用xfire框架
- iOS开发那些事--OCUnit测试框架
- iOS开发那些事--OCUnit测试框架
- junit--基于测试开发和cobertura框架
- $.(document).ready(function{})&&window.onload
- 今天天气很不错可以去旅游
- UVA 437 The Tower of Babylon | dp
- cocos2dx学习笔记(着色器水纹效果)
- Struts2架构图
- selftest测试框架开发
- cocos2dx学习笔记(cocos2dx特效)
- Flex拖拽事例
- uC/OS-II 学习笔记:任务控制块ECB
- 【暮色天】黄金宽泛震荡依旧(7.23)
- Hibernate核心知识点
- 酷热天里的时尚女
- 关于c#串口传输
- C# partial 作用