78 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|                                 net_test v0.1
 | |
|                                 =============
 | |
| 
 | |
| A simple framework for blackbox testing of kernel networking code.
 | |
| 
 | |
| 
 | |
| Why use it?
 | |
| ===========
 | |
| 
 | |
| - Fast test / boot cycle.
 | |
| - Access to host filesystem and networking via L2 bridging.
 | |
| - Full Linux userland including Python, etc.
 | |
| - Kernel bugs don't crash the system.
 | |
| 
 | |
| 
 | |
| How to use it
 | |
| =============
 | |
| 
 | |
| cd <kerneldir>
 | |
| path/to/net_test/run_net_test.sh <test>
 | |
| 
 | |
| where <test> is the name of a test binary in the net_test directory. This can
 | |
| be an x86 binary, a shell script, a Python script. etc.
 | |
| 
 | |
| 
 | |
| How it works
 | |
| ============
 | |
| 
 | |
| net_test compiles the kernel to a user-mode linux binary, which runs as a
 | |
| process on the host machine. It runs the binary to start a Linux "virtual
 | |
| machine" whose root filesystem is the supplied Debian disk image. The machine
 | |
| boots, mounts the root filesystem read-only, runs the specified test from init, and then drops to a shell.
 | |
| 
 | |
| 
 | |
| Access to host filesystem
 | |
| =========================
 | |
| 
 | |
| The VM mounts the host filesystem at /host, so the test can be modified and
 | |
| re-run without rebooting the VM.
 | |
| 
 | |
| 
 | |
| Access to host networking
 | |
| =========================
 | |
| 
 | |
| Access to host networking is provided by tap interfaces. On the host, the
 | |
| interfaces are named <user>TAP0, <user>TAP1, etc., where <user> is the first
 | |
| 10 characters of the username running net_test. (10 characters because
 | |
| IFNAMSIZ = 16). On the guest, they are named eth0, eth1, etc.
 | |
| 
 | |
| net_test does not do any networking setup beyond creating the tap interfaces.
 | |
| IP connectivity can be provided on the host side by setting up a DHCP server
 | |
| and NAT, sending IPv6 router advertisements, etc. By default, the VM has IPv6
 | |
| privacy addresses disabled, so its IPv6 addresses can be predicted using a tool
 | |
| such as ipv6calc.
 | |
| 
 | |
| The provided filesystem contains a DHCPv4 client and simple networking
 | |
| utilities such as ping[6], traceroute[6], and wget.
 | |
| 
 | |
| The number of tap interfaces is currently hardcoded to two. To change this
 | |
| number, modify run_net_test.sh.
 | |
| 
 | |
| 
 | |
| Logging into the VM, installing packages, etc.
 | |
| ==============================================
 | |
| 
 | |
| net_test mounts the root filesystem read-only, and runs the test from init, but
 | |
| since the filesystem contains a full Linux userland, it's possible to boot into
 | |
| userland and modify the filesystem, for example to install packages using
 | |
| apt-get install. Log in as root with no password. By default, the filesystem is
 | |
| configured to perform DHCPv4 on eth0 and listen to RAs.
 | |
| 
 | |
| 
 | |
| Bugs
 | |
| ====
 | |
| 
 | |
| Since the test mounts the filesystem read-only, tests cannot modify
 | |
| /etc/resolv.conf and the system resolver is hardcoded to 8.8.8.8.
 |