1. network 协议栈
    1. xv6 e1000 接受包的过程
    2. qemu 如何提供网络功能
  2. CVE-2023-21987&CVE-2023-21991
    1. build virtual box

network 协议栈

协议层次 协议包
udp
ip
eth

xv6 e1000 接受包的过程

接受到网络包的时候网卡会发出中断,调用 e1000_intr

    else if(irq == E1000_IRQ){
      e1000_intr();
    }

从 recv descriptor 中读取数据通过 net_rx 提交到协议栈之后,会依次 parse 协议。首先是 eth 协议,提出头 ethhdr 之后,根据 ethhdr->type 来进一步解析。

  ethhdr = mbufpullhdr(m, *ethhdr);
  if (!ethhdr) {
    mbuffree(m);
    return;
  }

  type = ntohs(ethhdr->type);
  if (type == ETHTYPE_IP)
    net_rx_ip(m);

如果接下来是 IP 协议,parse udp 协议(没有 TCP 是因为 qemu 不太支持)

  len = ntohs(iphdr->ip_len) - sizeof(*iphdr);
  net_rx_udp(m, len, iphdr);

qemu 如何提供网络功能

https://medium.com/@tunacici7/qemu-eli5-part-7-networking-ec49f8418826

Documentation/Networking - QEMU

ifeq ($(LAB),net)
QEMUOPTS += -netdev user,id=net0,hostfwd=udp::$(FWDPORT)-:2000 -object filter-dump,id=net0,netdev=net0,file=packets.pcap
QEMUOPTS += -device e1000,netdev=net0,bus=pcie.0
endif

network backend 有点类似于网络交换设备,路由器、交换机

CVE-2023-21987&CVE-2023-21991

啥是 virtualbox

类似于 vmware 是一个开源、轻便的、但是速度可能差一点的

build virtual box

找不到 virtual cpp error: Cannot find cl.exe (Visual C++) anywhere on your system. Check the build requirements. · Issue #7 · VirtualBoBs/build-virtualbox-in-windows 然后发现需要安装英文的语言包就行….