1 |
<html><head><title>Gavare's eXperimental Emulator: Networking</title> |
2 |
<meta name="robots" content="noarchive,nofollow,noindex"></head> |
3 |
<body bgcolor="#f8f8f8" text="#000000" link="#4040f0" vlink="#404040" alink="#ff0000"> |
4 |
<table border=0 width=100% bgcolor="#d0d0d0"><tr> |
5 |
<td width=100% align=center valign=center><table border=0 width=100%><tr> |
6 |
<td align="left" valign=center bgcolor="#d0efff"><font color="#6060e0" size="6"> |
7 |
<b>GXemul:</b></font> |
8 |
<font color="#000000" size="6"><b>Networking</b> |
9 |
</font></td></tr></table></td></tr></table><p> |
10 |
|
11 |
<!-- |
12 |
|
13 |
$Id: networking.html,v 1.7 2007/06/23 16:59:35 debug Exp $ |
14 |
|
15 |
Copyright (C) 2003-2007 Anders Gavare. All rights reserved. |
16 |
|
17 |
Redistribution and use in source and binary forms, with or without |
18 |
modification, are permitted provided that the following conditions are met: |
19 |
|
20 |
1. Redistributions of source code must retain the above copyright |
21 |
notice, this list of conditions and the following disclaimer. |
22 |
2. Redistributions in binary form must reproduce the above copyright |
23 |
notice, this list of conditions and the following disclaimer in the |
24 |
documentation and/or other materials provided with the distribution. |
25 |
3. The name of the author may not be used to endorse or promote products |
26 |
derived from this software without specific prior written permission. |
27 |
|
28 |
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
29 |
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
30 |
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
31 |
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
32 |
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
33 |
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
34 |
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
35 |
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
36 |
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
37 |
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
38 |
SUCH DAMAGE. |
39 |
|
40 |
--> |
41 |
|
42 |
|
43 |
<a href="./">Back to the index</a> |
44 |
|
45 |
<p><br> |
46 |
<h2>Networking</h2> |
47 |
|
48 |
<p> |
49 |
<ul> |
50 |
<li><a href="#intro">Introduction</a> |
51 |
<li><a href="#multihost">Network across multiple hosts</a> |
52 |
<li><a href="#direct_example_1">Direct-access example 1: udp_snoop</a> |
53 |
</ul> |
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
<p><br> |
62 |
<a name="intro"></a> |
63 |
<h3>Introduction:</h3> |
64 |
|
65 |
GXemul's current networking layer supports two modes: |
66 |
|
67 |
<p><ol> |
68 |
<li>A NAT-like layer, which allows guest OSes to access the outside |
69 |
internet world (IPv4 only, so far). When only one machine is being |
70 |
emulated, the following default values apply to the guest OS:<pre> |
71 |
IPv4 address: 10.0.0.1 |
72 |
Netmask: 255.0.0.0 |
73 |
Gateway / default route: 10.0.0.254 |
74 |
Nameserver: 10.0.0.254 |
75 |
</pre>To the outside world, it will seem as if the host is doing all the |
76 |
networking, since the emulator is just a normal user process |
77 |
on the host. |
78 |
<p> |
79 |
<li>A direct-access layer, allowing external tools to read/write raw |
80 |
ethernet packages from/to the emulator. |
81 |
</ol> |
82 |
|
83 |
<p><i>NOTE:</i> Both these modes have problems. The NAT-like layer is very |
84 |
"hackish" and was only meant as a proof-of-concept, to see if networking |
85 |
like this would work with e.g. NetBSD as a guest OS. (If you are |
86 |
interested in the technical details, and the reasons why NAT networking is |
87 |
implemented this way, you might want to read the <a |
88 |
href="technical.html#net"> networking section in the technical |
89 |
documentation</a>.) Because of the obvious limitations with the NAT |
90 |
approach, I have also included support for direct packet access, but this |
91 |
is not designed for security or anything like that. |
92 |
|
93 |
<p><font color="#ff0000">Use the networking features at your own risk. |
94 |
</font> |
95 |
|
96 |
|
97 |
<p>The emulated machine must have a NIC (network interface card). Not all |
98 |
machines have this. At the moment, the following NICs are more or less |
99 |
working: |
100 |
|
101 |
<ul> |
102 |
<li><tt><b>dec21143</b></tt>, Digital's 21143 PCI NIC (known as <tt>dc</tt> |
103 |
in OpenBSD, or <tt>tlp</tt> in NetBSD) |
104 |
<li><tt><b>ether</b></tt>, the "fake" experimental ethernet device |
105 |
(documented <a href="experiments.html#expdevices_ether">here</a>) |
106 |
<li><tt><b>le</b></tt>, <a href="http://en.wikipedia.org/wiki/TURBOchannel">Turbochannel</a> |
107 |
Lance Ethernet, as used in DECstation 5000/200 ("3max") |
108 |
<li><tt><b>mec</b></tt>, the SGI O2's ethernet controller |
109 |
</ul> |
110 |
|
111 |
<p>It is not possible to simply attach any of the supported NICs into any |
112 |
of the supported emulated machines. Some machines, for example, have a |
113 |
specific NIC in them, others may have a PCI bus where a PCI NIC can be |
114 |
used. This is very much machine-dependent. |
115 |
|
116 |
<p>If you are impatient, and simply want to try out networking in GXemul, |
117 |
I would recommend trying out an ftp install of <a |
118 |
href="guestoses.html#netbsdpmaxinstall">NetBSD/pmax</a>. |
119 |
|
120 |
|
121 |
|
122 |
|
123 |
|
124 |
|
125 |
|
126 |
<p><br> |
127 |
<a name="multihost"></a> |
128 |
<h3>Network across multiple hosts:</h3> |
129 |
|
130 |
<p>The way to emulate a network of multiple emulated machines, whether |
131 |
they are actually running on the same physical host, or on multiple hosts, |
132 |
is to use <a href="configfiles.html">configuration files</a>, and the |
133 |
"direct-access" method of networking. |
134 |
|
135 |
<p>Although it <i>is</i> possible to have more than one machine per |
136 |
configuration file, I strongly recommend against it. Please use one |
137 |
configuration file for one emulated machine. |
138 |
|
139 |
<p>Here is a simple example: |
140 |
|
141 |
<p><table border="0" width="100%"><tr><td width="40"> </td> |
142 |
<td><pre> |
143 |
<font color="#2020cf">! Configuration file for a |
144 |
! "client" machine, netbooting |
145 |
! of another machine.</font> |
146 |
|
147 |
<b>net(</b> |
148 |
<b>local_port(15000)</b> |
149 |
<b>add_remote(<font color="#ff003f">"localhost:15001"</font>)</b> |
150 |
<b>)</b> |
151 |
<b>machine(</b> |
152 |
<b>name(<font color="#ff003f">"client machine"</font>)</b> |
153 |
<b>serial_nr(1)</b> <font color="#2020cf">! 10.0.0.1</font> |
154 |
|
155 |
<b>type(<font color="#ff003f">"sgi"</font>)</b> |
156 |
<b>subtype(<font color="#ff003f">"o2"</font>)</b> |
157 |
<b>load(<font color="#ff003f">"netbsd-GENERIC32_IP3x.gz"</font>)</b> |
158 |
<b>)</b> |
159 |
</pre></td><td width="20"> </td><td><pre> |
160 |
<font color="#2020cf">! Configuration file for the |
161 |
! "server" machine.</font> |
162 |
|
163 |
<b>net(</b> |
164 |
<b>local_port(15001)</b> |
165 |
<b>add_remote(<font color="#ff003f">"localhost:15000"</font>)</b> |
166 |
<b>)</b> |
167 |
<b>machine(</b> |
168 |
<b>name(<font color="#ff003f">"nfs server"</font>)</b> |
169 |
<b>serial_nr(2)</b> <font color="#2020cf">! 10.0.0.2</font> |
170 |
|
171 |
<b>type(<font color="#ff003f">"dec"</font>)</b> |
172 |
<b>subtype(<font color="#ff003f">"3max"</font>)</b> |
173 |
<b>disk(<font color="#ff003f">"nbsd_pmax.img"</font>)</b> |
174 |
<b>)</b> |
175 |
</pre></td><td width="20"> </td></tr></table> |
176 |
|
177 |
<p>This example creates a network using the default settings (10.0.0.0/8), |
178 |
but it also uses the direct-access networking mode to allow the network |
179 |
to be connected to other emulator instances. <tt>local_port(15000)</tt> |
180 |
means that anything coming in to UDP port 15000 on the host is added to |
181 |
the network. All ethernet packets on the network are also sent out to all |
182 |
other connected machines (those added with <tt>add_remote()</tt>). |
183 |
|
184 |
<p>As you can see in the example, this is a configuration file for |
185 |
netbooting a NetBSD/sgimips diskless machine, with a NetBSD/pmax machine |
186 |
acting as the nfs server. Note that the nfs server has ports 15000 and |
187 |
15001 reversed, compared to the client! |
188 |
|
189 |
<p>"<tt>localhost</tt>" can be changed to the Internet hostname of a |
190 |
remote machine, to run the simulation across a physical network. |
191 |
|
192 |
<p><font color="#ff0000"><b>NOTE:</b> There is no error checking or |
193 |
security checking of any kind. All UDP packets arriving at the input port |
194 |
are added to the emulated ethernet. This is not very good of course; use |
195 |
this feature at your own risk.</font> |
196 |
|
197 |
|
198 |
|
199 |
|
200 |
|
201 |
<p><br> |
202 |
<a name="direct_example_1"></a> |
203 |
<h3>Direct-access example 1: udp_snoop:</h3> |
204 |
|
205 |
The most basic example of how the simple direct-access system works is a small |
206 |
program in the <tt>experiments/</tt> directory, <tt>udp_snoop</tt>, which simply |
207 |
dumps incoming UDP packets to the terminal, in hex and ASCII. |
208 |
|
209 |
<p>The easiest way to test the example is to download a <a href="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-3.1/pmax/binary/kernel/netbsd-INSTALL.gz"> |
210 |
NetBSD/pmax INSTALL kernel</a>, and start the emulator with a configuration file |
211 |
looking something like this: |
212 |
|
213 |
<pre> |
214 |
net( |
215 |
add_remote("localhost:12300") |
216 |
) |
217 |
|
218 |
machine( |
219 |
subtype(3max) |
220 |
load("netbsd-INSTALL.gz") |
221 |
) |
222 |
</pre> |
223 |
|
224 |
<p>In addition to the machine section, you can see that there is also a |
225 |
<tt>net()</tt> section. It defaults to emulating a 10.0.0.0/8 IPv4 NATed |
226 |
network, but there is also an additional "raw output", to UDP port 12300. |
227 |
|
228 |
<p>Now, do the following: |
229 |
<ul> |
230 |
<li>Start the emulator with the configuration file, i.e. |
231 |
<tt><b>gxemul @testconfig</b></tt>. |
232 |
<li>Start <tt><b>udp_snoop 12300</b></tt> in another terminal. |
233 |
<li>Inside emulated NetBSD/pmax, type <tt><b>ifconfig le0 10.0.0.1</b></tt>. |
234 |
</ul> |
235 |
|
236 |
<p>This should be enough to see broadcast messages from the guest OS which |
237 |
are not directed to the gateway. It might look like this: |
238 |
|
239 |
<pre> |
240 |
$ ./udp_snoop 12300 |
241 |
ff ff ff ff ff ff 10 20 30 00 00 10 08 06 00 01 ....... 0....... |
242 |
08 00 06 04 00 01 10 20 30 00 00 10 0a 00 00 02 ....... 0....... |
243 |
00 00 00 00 00 00 0a 00 00 02 00 00 00 00 00 00 ................ |
244 |
00 00 00 00 00 00 00 00 00 00 00 00 ............ |
245 |
|
246 |
33 33 ff 00 00 10 10 20 30 00 00 10 86 dd 60 00 33..... 0.....`. |
247 |
00 00 00 20 00 01 00 00 00 00 00 00 00 00 00 00 ... ............ |
248 |
00 00 00 00 00 00 ff 02 00 00 00 00 00 00 00 00 ................ |
249 |
00 01 ff 00 00 10 3a 00 01 00 05 02 00 00 83 00 ......:......... |
250 |
80 83 00 00 00 00 ff 02 00 00 00 00 00 00 00 00 ................ |
251 |
00 01 ff 00 00 10 ...... |
252 |
... |
253 |
</pre> |
254 |
|
255 |
|
256 |
|
257 |
|
258 |
</p> |
259 |
|
260 |
</body> |
261 |
</html> |
262 |
|
263 |
|