summaryrefslogtreecommitdiff
path: root/community/gsoc/project_ideas/tcp_ip_stack.mdwn
blob: 29b1d22db1450710777aeba9b70ac574909ffe3f (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
[[meta copyright="Copyright © 2008, 2009 Free Software Foundation, Inc."]]

[[meta license="""[[toggle id="license" text="GFDL 1.2+"]][[toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled
[[GNU_Free_Documentation_License|/fdl]]."]]"""]]

[[meta title="Hurdish TCP/IP Stack"]]

The Hurd presently uses a [[TCP/IP_stack|hurd/translator/pfinet]] based on code from an old Linux version.
This works, but lacks some rather important features (like PPP/PPPoE), and the
design is not hurdish at all.

A true hurdish network stack will use a set of [[hurd/translator]] processes,
each implementing a different protocol layer. This way not only the
implementation gets more modular, but also the network stack can be used way
more flexibly. Rather than just having the standard socket interface, plus some
lower-level hooks for special needs, there are explicit (perhaps
filesystem-based) interfaces at all the individual levels; special application
can just directly access the desired layer. All kinds of packet filtering,
routing, tunneling etc. can be easily achieved by stacking compononts in the
desired constellation.

Implementing a complete modular network stack is not feasible as a GSoC
project, though. Instead, the task is to take some existing user space TCP/IP
implementation, and make it run as a single Hurd server for now, so it can be
used in place of the existing pfinet. The idea is to split it up into
individual layers later. The initial implementation, and the choice of a TCP/IP
stack, should be done with this in mind -- it needs to be modular enough to
make such a split later on feasible.

This is [[GNU_Savannah_task 5469]].

Possible mentors: ?

Exercise: You could try making some improvement to the existing pfinet
implementation; or you could work towards running some existing userspace
TCP/IP stack on Hurd. (As a normal program for now, not a proper Hurd server
yet.)