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>Gavare's eXperimental Emulator:</b></font><br> |
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.4 2006/12/30 13:30:51 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 of course have a NIC which is emulated |
98 |
sufficiently. At the moment, the following NICs should work: |
99 |
<ul> |
100 |
<li><tt><b>ether</b></tt>, the "fake" experimental ethernet device |
101 |
(documented <a href="experiments.html#expdevices_ether">here</a>) |
102 |
<li><tt><b>le</b></tt>, Turbochannel Lance Ethernet, as used in |
103 |
DECstation 5000/200 ("3max") |
104 |
<li><tt><b>mec</b></tt>, the SGI O2's ethernet controller |
105 |
<li><tt><b>dec21143</b></tt>, Digital's 21143 NIC (known as <tt>dc</tt> |
106 |
in OpenBSD, or <tt>tlp</tt> in NetBSD) |
107 |
</ul> |
108 |
|
109 |
|
110 |
|
111 |
|
112 |
|
113 |
|
114 |
|
115 |
<p><br> |
116 |
<a name="multihost"></a> |
117 |
<h3>Network across multiple hosts:</h3> |
118 |
|
119 |
<p>The way to emulate a network of multiple emulated machines, whether |
120 |
they are actually running on the same physical host, or on multiple hosts, |
121 |
is to use <a href="configfiles.html">configuration files</a>, and the |
122 |
"direct-access" method of networking. |
123 |
|
124 |
<p>Although it <i>is</i> possible to have more than one machine per |
125 |
configuration file, I strongly recommend against it. Please use one |
126 |
configuration file for one emulated machine. |
127 |
|
128 |
<p>Here is a simple example: |
129 |
|
130 |
<p><table border="0" width="100%"><tr><td width="40"> </td> |
131 |
<td><pre> |
132 |
<font color="#2020cf">! Configuration file for a |
133 |
! "client" machine, netbooting |
134 |
! of another machine.</font> |
135 |
|
136 |
<b>net(</b> |
137 |
<b>local_port(15000)</b> |
138 |
<b>add_remote(<font color="#ff003f">"localhost:15001"</font>)</b> |
139 |
<b>)</b> |
140 |
<b>machine(</b> |
141 |
<b>name(<font color="#ff003f">"client machine"</font>)</b> |
142 |
<b>serial_nr(1)</b> <font color="#2020cf">! 10.0.0.1</font> |
143 |
|
144 |
<b>type(<font color="#ff003f">"sgi"</font>)</b> |
145 |
<b>subtype(<font color="#ff003f">"o2"</font>)</b> |
146 |
<b>load(<font color="#ff003f">"netbsd-GENERIC32_IP3x.gz"</font>)</b> |
147 |
<b>)</b> |
148 |
</pre></td><td width="20"> </td><td><pre> |
149 |
<font color="#2020cf">! Configuration file for the |
150 |
! "server" machine.</font> |
151 |
|
152 |
<b>net(</b> |
153 |
<b>local_port(15001)</b> |
154 |
<b>add_remote(<font color="#ff003f">"localhost:15000"</font>)</b> |
155 |
<b>)</b> |
156 |
<b>machine(</b> |
157 |
<b>name(<font color="#ff003f">"nfs server"</font>)</b> |
158 |
<b>serial_nr(2)</b> <font color="#2020cf">! 10.0.0.2</font> |
159 |
|
160 |
<b>type(<font color="#ff003f">"dec"</font>)</b> |
161 |
<b>subtype(<font color="#ff003f">"3max"</font>)</b> |
162 |
<b>disk(<font color="#ff003f">"nbsd_pmax.img"</font>)</b> |
163 |
<b>)</b> |
164 |
</pre></td><td width="20"> </td></tr></table> |
165 |
|
166 |
<p>This example creates a network using the default settings (10.0.0.0/8), |
167 |
but it also uses the direct-access networking mode to allow the network |
168 |
to be connected to other emulator instances. <tt>local_port(15000)</tt> |
169 |
means that anything coming in to UDP port 15000 on the host is added to |
170 |
the network. All ethernet packets on the network are also sent out to all |
171 |
other connected machines (those added with <tt>add_remote()</tt>). |
172 |
|
173 |
<p>As you can see in the example, this is a configuration file for |
174 |
netbooting a NetBSD/sgimips diskless machine, with a NetBSD/pmax machine |
175 |
acting as the nfs server. Note that the nfs server has ports 15000 and |
176 |
15001 reversed, compared to the client! |
177 |
|
178 |
<p>"<tt>localhost</tt>" can be changed to the Internet hostname of a |
179 |
remote machine, to run the simulation across a physical network. |
180 |
|
181 |
<p><font color="#ff0000"><b>NOTE:</b> There is no error checking or |
182 |
security checking of any kind. All UDP packets arriving at the input port |
183 |
are added to the emulated ethernet. This is not very good of course; use |
184 |
this feature at your own risk.</font> |
185 |
|
186 |
|
187 |
|
188 |
|
189 |
|
190 |
<p><br> |
191 |
<a name="direct_example_1"></a> |
192 |
<h3>Direct-access example 1: udp_snoop:</h3> |
193 |
|
194 |
The most basic example of how the simple direct-access system works is a small |
195 |
program in the <tt>experiments/</tt> directory, <tt>udp_snoop</tt>, which simply |
196 |
dumps incoming UDP packets to the terminal, in hex and ASCII. |
197 |
|
198 |
<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"> |
199 |
NetBSD/pmax INSTALL kernel</a>, and start the emulator with a configuration file |
200 |
looking something like this: |
201 |
|
202 |
<pre> |
203 |
net( |
204 |
add_remote("localhost:12300") |
205 |
) |
206 |
|
207 |
machine( |
208 |
subtype(3max) |
209 |
load("netbsd-INSTALL.gz") |
210 |
) |
211 |
</pre> |
212 |
|
213 |
<p>In addition to the machine section, you can see that there is also a |
214 |
<tt>net()</tt> section. It defaults to emulating a 10.0.0.0/8 IPv4 NATed |
215 |
network, but there is also an additional "raw output", to UDP port 12300. |
216 |
|
217 |
<p>Now, do the following: |
218 |
<ul> |
219 |
<li>Start the emulator with the configuration file, i.e. |
220 |
<tt><b>gxemul @testconfig</b></tt>. |
221 |
<li>Start <tt><b>udp_snoop 12300</b></tt> in another terminal. |
222 |
<li>Inside emulated NetBSD/pmax, type <tt><b>ifconfig le0 10.0.0.1</b></tt>. |
223 |
</ul> |
224 |
|
225 |
<p>This should be enough to see broadcast messages from the guest OS which |
226 |
are not directed to the gateway. It might look like this: |
227 |
|
228 |
<pre> |
229 |
$ ./udp_snoop 12300 |
230 |
ff ff ff ff ff ff 10 20 30 00 00 10 08 06 00 01 ....... 0....... |
231 |
08 00 06 04 00 01 10 20 30 00 00 10 0a 00 00 02 ....... 0....... |
232 |
00 00 00 00 00 00 0a 00 00 02 00 00 00 00 00 00 ................ |
233 |
00 00 00 00 00 00 00 00 00 00 00 00 ............ |
234 |
|
235 |
33 33 ff 00 00 10 10 20 30 00 00 10 86 dd 60 00 33..... 0.....`. |
236 |
00 00 00 20 00 01 00 00 00 00 00 00 00 00 00 00 ... ............ |
237 |
00 00 00 00 00 00 ff 02 00 00 00 00 00 00 00 00 ................ |
238 |
00 01 ff 00 00 10 3a 00 01 00 05 02 00 00 83 00 ......:......... |
239 |
80 83 00 00 00 00 ff 02 00 00 00 00 00 00 00 00 ................ |
240 |
00 01 ff 00 00 10 ...... |
241 |
... |
242 |
</pre> |
243 |
|
244 |
|
245 |
|
246 |
|
247 |
</p> |
248 |
|
249 |
</body> |
250 |
</html> |
251 |
|
252 |
|