= Deliverables and expected timeline = The initial target platform will be VMware, which provides e1000 and vlance emulated NICs, which support PXE. The architecture for the UNDI driver will be divided into two portions: a userspace program for executing the UNDI code, which passes packets to and from an in-kernel component. Based on my understanding of the Etherboot code and (non-functional) Grub UNDI driver, UNDI is typically implemented as real-mode code. The natural way to execute the real-mode code is within some kind of virtualization, with PIO or MMIO operations directed at the actual hardware. The UNDI execution environment will be based on Virtual 8086 (vm86() functionality in Linux) or QEMU. The decision on which to use will depend on performance, size, and cross-platform (e.g. suitability for *BSD, non-x86) considerations. For maximum compatibility with unmodified kernels, the in-kernel component should be the standard TUN/TAP, with appropriate routing rules applied. If this is unworkable, a stub network driver module which communicates with the UNDI userspace code via control nodes in /proc should be easy to develop, and would not require any modifications to the kernel. Week 1: Build familiarity with UNDI - Look at etherboot UNDI code - Look at (nonfunctional) grub UNDI driver -- Spend some time debugging it to get a feel for how to debug this stage of the boot process, potential pitfalls in providing an environment for UNDI drivers Week 2: Evaluate vm86 vs QEMU tradeoffs Extract UNDI code, etherboot UNDI interface, and import to virtualization system Week 3+4+5: Get VM environment working well enough to execute UNDI initialization code Week 5+6+7: Send/receive UNDI packets - From within compat environment - Integrate with kernel send Week 8: Test with full boot process: - local disk boot - nfs root - ltsp - etc Week 9: Evaluate on different hardware, with different UNDI stacks