virtual network in Linux kernel Code
Status: Pre-Alpha
Brought to you by:
icoming
| 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... |
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.