selftest測試框架開發

2021-06-22 21:19:45 字數 1333 閱讀 8223

一、需求分析

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,呼叫此介面後做相應的處理確保重置後網絡卡仍能正常工作。

關於框架開發

紀念 jar library installation jar檔案複製的目錄 2種方式區別 1.add checked libraries to project build path 把build path中引入的包指向myeclipse中lib的位置,就是把myeclipse中你需要的lib作為外...

框架開發1

config.inc.php配置檔案 cfg array cfg host localhost cfg user root cfg password 111111 conf.class.php讀取配置檔案的資訊,封裝類 單例類 class conf final protected function ...

Karrigell Web框架開發簡介

karrigell 是乙個語法簡潔直觀的 python web 框架。它支援任何一種資料庫,orm或者模板引擎,也可以讓開發人員選擇不同的編碼方式。karrigell 包自帶乙個功能強大的 web伺服器和乙個用 python 寫成的資料庫引擎 pydblite 在自帶的 demo 程式中使用到了這個...