source: mainline/uspace/srv/net/documentation.txt@ 21580dd

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 21580dd was 21580dd, checked in by Lukas Mejdrech <lukas@…>, 15 years ago

Merged with network branch svn://svn.helenos.org/HelenOS/branches/network revision 4759; ipc_share_* and ipc_data_* changed to async_*; client connection in module.c returns on IPC_M_PHONE_HUNGUP; * Qemu scripts renamed to net-qe.*; (the dp8390 does not respond)

  • Property mode set to 100644
File size: 7.8 KB
Line 
1/**
2
3\mainpage Networking and TCP/IP Stack for HelenOS system
4
5\section introduction Introduction
6
7<p>
8For the microkernel HelenOS a completely new networking stack was designed.
9The networking stack was intended to implement current basic standards of the TCP/IP Stack.
10Only the minimalistic functionality allowing the stack to function was to be implemented.
11The networking stack is written in C.
12</p>
13<p>
14Please see
15</p>
16<ul>
17 <li>\ref build</li>
18 <li>\ref software</li>
19 <li>\ref running</li>
20 <li>\ref testing</li>
21</ul>
22
23\page build Build from sources
24
25<p>
26To compile the HelenOS from sources (the cross compilers from the <code>build/</code> directory are recommended):
27</p>
28<ol>
29 <li>change the working directory to the HelenOS source directory</li>
30 <li>run <code># make config</code></li>
31 <li>check/change the configuration</li>
32 <li>save and exit the configuration tool</li>
33 <li>run <code># make</code></li>
34</ol>
35<p>
36The <code>image.iso</code> should be created on success.
37</p>
38
39\page running Running the HelenOS with networking
40
41\section netstart Starting the networking
42
43<p>
44After starting the HelenOS boot image in <em>Qemu</em>, the command line appears.
45To run <em>Qemu</em> a script <code>contrib/conf/qemu.sh</code> for Linux or <code>contrib/conf/qemu.bat</code> for Windows in the HelenOS source directory can be used.
46The provided scripts set the needed arguments:
47<br><code>-vga std -M isapc -net nic,model=ne2k_isa -net user -redir udp:8080::8080 -redir udp:8081::8081 -boot d -cdrom image.iso</code><br>
48Additional arguments may be specified on the command line, they override these set.
49</p>
50
51<p>
52The networking stack is started and initialized by running a command
53<br><code># netstart</code><br>
54The networking stack is then started and configured network interfaces are enabled.
55The current configuration is printed out.
56Since that networking applications can be run using the command line as well.
57</p>
58
59\section network Qemu network
60
61<p>
62In the common mode <em>Qemu</em> creates a simple network with a gateway and settles the guest system in.
63The network is 10.0.2.*, the gateway's address 10.0.2.2 and the guest system has 10.0.2.15.
64%Even this simple setting was a bit hard to find in the documentation.
65Therefore a static configuration is possible and no additional DHCP nor BOOTP implementations are necessary.
66On the other hand the guest system is behind a firewall.
67<em>Qemu</em> may be configured to forward some ports to the guest system and allows all outgoing traffic except ICMP and ARP protocols, so you can ping only the gateway.
68</p>
69
70\section applications Applications
71
72<p>
73A few networking applications are located in the app/ directory.
74Common functions for parsing command line arguments and printing textual networking error messages are located in that directory as well.
75The networking applications should be built with the libsocket library located in the socket/libsocket.a file.
76They can use functions and definitions from the include/socket.h header file which contains socket API and further includes:
77</p>
78<ul>
79 <li>include/byteorder.h containing byte order manipulation,</li>
80 <li>include/in.h containing IPv4 socket address structure,</li>
81 <li>include/in6.h containing IPv6 socket address structure,</li>
82 <li>include/inet.h containing socket address structure and parsing functions,</li>
83 <li>include/socket codes.h containing address and protocol families and socket types and option levels, and</li>
84 <li>include/socket errno.h containing socket and general error codes.</li>
85</ul>
86
87\page software Software prerequisites
88
89<p>
90The networking and TCP/IP stack is implemented for the ia32 architecture on top of HelenOS 0.4.1 (Escalopino), the most current stable release of HelenOS.
91So far the only one operational network interface supported is in Qemu 0.10.2 and newer.
92To run <em>Qemu</em> a script contrib/conf/qemu.sh for Linux or contrib/conf/qemu.bat for Windows in the HelenOS source directory can be used.
93The qemu and its libraries have to be installed and in the path.
94These scripts set all the necessary parameters
95with some ports redirected from the local host to the guest system.
96For testing purposes at least a low level communication application is recommended, N.E.T., netcat etc.
97</p>
98<p>
99In order to build HelenOS and the networking stack from sources a few tools are
100required:
101<ul>
102 <li>binutils in version 2.19.1,</li>
103 <li>gcc–core in version 4.3.3 11,</li>
104 <li>gcc–objc in version 4.3.3, and</li>
105 <li>gcc–g++ in version 4.3.3.</li>
106</ul>
107<p>
108All these can be downloaded and installed as cross–compilers on Linux using a script contrib/toolchain.sh in the HelenOS source directory.
109In addition rats, a static source code analyzer, and Doxygen, a documentation generator, were used.
110All development was tracked in the HelenOS subversion repository.
111</p>
112<ul>
113 <li>HelenOS website: <a href="http://www.helenos.org/" title="HelenOS website">http://www.helenos.org/</a></li>
114 <li><em>Qemu</em> website: <a href="http://www.qemu.org/" title="Qemu website">http://www.qemu.org/</a></li>
115 <li><em>binutils</em> website: <a href="http://www.gnu.org/software/binutils/" title="binutils website">http://www.gnu.org/software/binutils/</a></li>
116 <li><em>GCC</em> website: <a href="http://gcc.gnu.org/" title="GCC website">http://gcc.gnu.org/</a></li>
117 <li><em>RATS</em> website: <a href="http://www.fortify.com/security-resources/rats.jsp" title="RATS website">http://www.fortify.com/security-resources/rats.jsp</a></li>
118 <li><em>Doxygen</em> website: <a href="http://www.stack.nl/ dimitri/doxygen/index.html" title="Doxygen website">http://www.stack.nl/ dimitri/doxygen/index.html</a></li>
119 <li><em>Subversion</em> website: <a href="http://subversion.tigris.org/" title="Subversion website">http://subversion.tigris.org/</a></li>
120</ul>
121
122\page testing Testing scenarios
123
124<p>
125The scenarios contain the following shortcuts:
126</p>
127<ul>
128 <li>g for the quest system, HelenOS in <em>Qemu</em></li>
129 <li>h for the host system</li>
130 <li>n for the <em>NET</em> application</li>
131 <li>e for echo echo application run in HelenOS</li>
132</ul>
133
134\section scenarios Testing scenarios
135<ul>
136 <li>UDP
137 <ol>
138 <li>g #netstart</li>
139 <li>h wine net.exe (->n) (or net.exe)</li>
140 <li>n set 127.0.0.1:8080 address and port, BuiltinUDP protocol</li>
141 <li>n send some data (an ARP will be generated and the original packet gets lost)</li>
142 <li>n send some data (the port is unreachable and the packet is discarded)</li>
143 <li>g #echo -p 8080 -c 3 -v (->e)</li>
144 <li>g prints Listening</li>
145 <li>n send some data</li>
146 <li>e prints received data</li>
147 <li>h prints reply</li>
148 <li>n click disconnect</li>
149 <li>n set :8081 port</li>
150 <li>n send some data</li>
151 <li>n click disconnect</li>
152 <li>n set :8080 port</li>
153 <li>count-1 times:
154 <ol>
155 <li>n send some data</li>
156 <li>e prints received data</li>
157 <li>h prints reply</li>
158 </ol>
159 </li>
160 <li>e prints Exiting</li>
161 <li>e quits</li>
162 <li>n send some data (the port is unreachable and the packet is discarded)</li>
163 </ol>
164 </li>
165 <li>ICMP echo to 10.0.2.2
166 <ol>
167 <li>g #netstart</li>
168 <li>g #ping 10.0.2.2 (->p)</li>
169 <li>g prints ARP request for 10.0.2.2</li>
170 <li>g prints ARP reply from 10.0.2.2</li>
171 <li>p prints timeouted</li>
172 <li>p prints round trip time</li>
173 <li>p prints round trip time</li>
174 <li>p quits</li>
175 </ol>
176 </li>
177 <li>ICMP echo to 127.0.0.1
178 <ol>
179 <li>g #netstart</li>
180 <li>g #ping 127.0.0.1 (->p)</li>
181 <li>p prints round trip time</li>
182 <li>p prints round trip time</li>
183 <li>p prints round trip time</li>
184 <li>p quits</li>
185 </ol>
186 </li>
187 <li>ICMP with no internet on the host system (!)
188 <ol>
189 <li>g #netstart</li>
190 <li>g #ping 123.123.123.3 (->p)</li>
191 <li>g prints ARP request for 10.0.2.2</li>
192 <li>g prints ARP reply from 10.0.2.2</li>
193 <li>p prints timeouted</li>
194 <li>p prints destination unreachable</li>
195 <li>p prints destination unreachable</li>
196 <li>p quits</li>
197 </ol>
198 </li>
199</ul>
200
201*/
Note: See TracBrowser for help on using the repository browser.