Menu

Tree [r17] /
 History

HTTPS access


File Date Author Commit
 client 2008-02-10 icoming [r15] I hope I have fixed the following bug:
 module 2008-02-14 icoming [r16] some new TODOs
 test 2008-02-10 icoming [r15] I hope I have fixed the following bug:
 COPYING 2007-12-23 icoming [r3] add the copyright
 ChangLog 2007-12-19 icoming [r1]
 Makefile 2007-12-26 icoming [r4] reorganise the files
 README 2008-04-01 icoming [r17] update README
 TODO 2008-02-14 icoming [r16] some new TODOs
 run 2008-02-10 icoming [r13] 1. The process information in the kernel is del...

Read Me

1. Introduction
When we use some virtual machine such as vmware to build the virtual network
to do some experiment, we can only build a very small network. This project
tries to build a virtual network from the kernel level. Its aim is to allow 
users to create a large virtual network. 
Or more exactly, it is a network simulator in the Linux kernel, so different
processes in the operating system think they are running on different IPs. 
For example, there are 3 processes: A, B, C. Process A thinks it runs on 
ADDR_A, B thinks it on ADDR_B, C thinks it on ADDR_C. Process A, B, C runs 
in the same machine actually, but they all think others run on the machine of
different IPs. So if Process A sends a message to ADDR_B and Process B is 
listening, the message should be delivered to Process B. The reason I want to
create such a kind of network simulator is that it should be easier for us to
test some distributed programs (sometimes we may not be able to find enough 
machines to run it, for example).

The project allows the user to provide his own modules to build more complex
network and to do complex network experiments and simulation.

The main idea of the project is to do some tricks in the kernel, which makes
it possible to deliver the packets which should be sent to other hosts. Thus,
I don't need to write my own protocol stack to process the packets, which 
makes the project very small. Because it's the virtualization in the kernel 
level, we can use the original user space library without any change.

The project provides a kernel module and a user space program to build the 
virtual network. The user space program initializes the network before it 
runs the real application. It makes the user very easy to build the network.