summaryrefslogtreecommitdiff
path: root/community/da.mdwn
blob: f36aad518840f3a512c4dba2e5ff2ed8ea4b5f63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# Zheng Da

Email: zhengda1936 at gmail dot com

Project: Network virtualization for subhurds etc.

The [code](http://www.assembla.com/spaces/VNetHurd/trac_subversion_tool).

---

## The design and implementation of hypervisor

### The requirements:
* to implement a mechanism which help pfinet servers communicate with each other. For example, if pfinet 1 has IP A and pfinet 2 has IP B, the packet sent by pfinet 1 with destination address IP B should be received by pfinet 2.
* Sub-hurd should be able to use this mechanism to communicate with each other.
* Meanwhile this mechanism should allow non-privileged the user to start his own pfinet.
 

### The possible approach is to create a hypervisor whose roles are:
1. to create some virtual network interface, so pfinet can send packets to it.
2. to receive the packet from pfinet, and forward the packet to other pfinets in hurd
3. or forward the packet to the real network device in the kernel and send it to the network.
4. to guard the network traffic and filter illegal packets (forged by some malicious users) from pfinet or some other programs. 

 
### To create a virtual network interface:
* Implement the RPC interface defined in device.defs just as "boot" does.
* Publish the port, so other programs can get the port and open the virtual device by calling device_open(). 
* The hypervisor now works as a translator and other programs can get the port by calling file_name_port(). 

(to be continued)

---

## The schedule
From 14.06 - 18.06 Coding: 
build the connection between pfinets in sub-hurd and network interface (by broadcasting)

From 21.06 - 25.06 Coding: 
build the connection between the hypervisor and the pfinet server in the main hurd.

From 26.06 - 13.07 Coding: 
Implement the real routing among the pfinets and the network interface

From 15.07 - 10.08 Coding: 
Implement some traffic control in the hypervisor and some policy control if necessary

From 11.08 - 18.08 Testing


---

## TODO
### Coding

build the connection between the hypervisor and the pfinet server in the main hurd by creating a proxy of the process server

---

## Completed tasks

### Coding

- pfinet server overriding by modifying glibc. The patch is [here](http://svn.assembla.com/svn/VNetHurd/glibc_2.7_multi-netserv.patch).


- Start to write the hypervisor:

-- Create a virtual network interface.
-- Publish the port created by the hypervisor by using the file system. Other program can get the port by using file_name_lookup() now.
-- Broadcast packets to the real network interface and the virtual network interface (currently, there is only one virtual network interface). The pfinet server connecting to the hypervisor can communicate with other pfinet servers which connect to the hypervisor and with the external network.

### The Code Read

- boot

### Documentation Read


- [A Programmer's Guide to the Mach System Calls](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/machsys.doc)
- [Meet Mach](http://www.stepwise.com/Articles/Technical/MeetMach.html) by James Scott
- [A Programmer's Guide to the Mach User Environment](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/unpublished/machuse.doc), the MIG part
- Part of The GNU Mach Reference Manual and The GNU Hurd Reference Manual
- The Hurd, a presentation by Marcus Brinkmann
- Towards a New Strategy of OS Design, an architectural overview by Thomas Bushnell, BSG.
- GNU/Hurd User's Guide
- The Hurd Hacking Guide