組長:B10415004 楊晉復
組員:B10415005 王頌仁
組員:B10415006 王文楷
github: https://github.com/tnsc4502/xv6_public
使用情境

網路卡啟動程序流程 :

ethtest system call 使用流程 :

trap 處理流程 :

使用Qemu指令指定虛擬網卡MAC、種類之後,可成功啟動虛擬機 :
使用ethtest system call可以向外部的DHCP Server取得IP : 
也可以查看送出或接收的封包(接收的量太大超過畫面所以不予以截圖) : 
x86.h 新增讀寫封包的底層函式 :
usys.S & syscall.h & defs.h 註冊控制網路卡的底層函式System call : 


user.h 宣告上述system call : 
trap.c 新增IRQ訊號以及相關的interrupt : 

picirq.c 網卡硬體層的Interrupt Controller :

init.c 開啟網路介面卡,並為其建立file description : 
file.c & sysfile.c 實作ioctl控制網路卡相關的函式 : 

main.c 啟動網路卡 : 
要讓OS可以支援網路功能除了要撰寫通用的網路卡驅動程式之外,還要讓系統底層可以辨識來自網路卡的訊號,在Qemu中是IRQ 11(我們定義在trap.c第12行)。
由於我們的系統無法支援多工,因此無法像真正的電腦上可以同時工作以及接受封包,因此只能用簡單的system call來進行網路傳輸的簡易測試,而後續面臨到網路的protocol實在太複雜,因此我們僅展示DHCP協定的成果。
受限於Qemu的虛擬網路的運作機制,我們只能抓到一組預設的IP,相關文獻請參考 https://wiki.qemu.org/Documentation/Networking 的 “User Networking (SLIRP)” 條款。