selftest测试框架开发

一、需求分析

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,调用此接口后做相应的处理确保重置后网卡仍能正常工作。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值