forked from microsoft/WSL2-Linux-Kernel
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUserModeLinux-HOWTO.txt
4686 lines (2316 loc) · 124 KB
/
UserModeLinux-HOWTO.txt
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
User Mode Linux HOWTO
User Mode Linux Core Team
Mon Nov 18 14:16:16 EST 2002
This document describes the use and abuse of Jeff Dike's User Mode
Linux: a port of the Linux kernel as a normal Intel Linux process.
______________________________________________________________________
Table of Contents
1. Introduction
1.1 How is User Mode Linux Different?
1.2 Why Would I Want User Mode Linux?
2. Compiling the kernel and modules
2.1 Compiling the kernel
2.2 Compiling and installing kernel modules
2.3 Compiling and installing uml_utilities
3. Running UML and logging in
3.1 Running UML
3.2 Logging in
3.3 Examples
4. UML on 2G/2G hosts
4.1 Introduction
4.2 The problem
4.3 The solution
5. Setting up serial lines and consoles
5.1 Specifying the device
5.2 Specifying the channel
5.3 Examples
6. Setting up the network
6.1 General setup
6.2 Userspace daemons
6.3 Specifying ethernet addresses
6.4 UML interface setup
6.5 Multicast
6.6 TUN/TAP with the uml_net helper
6.7 TUN/TAP with a preconfigured tap device
6.8 Ethertap
6.9 The switch daemon
6.10 Slip
6.11 Slirp
6.12 pcap
6.13 Setting up the host yourself
7. Sharing Filesystems between Virtual Machines
7.1 A warning
7.2 Using layered block devices
7.3 Note!
7.4 Another warning
7.5 uml_moo : Merging a COW file with its backing file
8. Creating filesystems
8.1 Create the filesystem file
8.2 Assign the file to a UML device
8.3 Creating and mounting the filesystem
9. Host file access
9.1 Using hostfs
9.2 hostfs as the root filesystem
9.3 Building hostfs
10. The Management Console
10.1 version
10.2 halt and reboot
10.3 config
10.4 remove
10.5 sysrq
10.6 help
10.7 cad
10.8 stop
10.9 go
11. Kernel debugging
11.1 Starting the kernel under gdb
11.2 Examining sleeping processes
11.3 Running ddd on UML
11.4 Debugging modules
11.5 Attaching gdb to the kernel
11.6 Using alternate debuggers
12. Kernel debugging examples
12.1 The case of the hung fsck
12.2 Episode 2: The case of the hung fsck
13. What to do when UML doesn't work
13.1 Strange compilation errors when you build from source
13.2 UML hangs on boot after mounting devfs
13.3 A variety of panics and hangs with /tmp on a reiserfs filesystem
13.4 The compile fails with errors about conflicting types for 'open', 'dup', and 'waitpid'
13.5 UML doesn't work when /tmp is an NFS filesystem
13.6 UML hangs on boot when compiled with gprof support
13.7 syslogd dies with a SIGTERM on startup
13.8 TUN/TAP networking doesn't work on a 2.4 host
13.9 You can network to the host but not to other machines on the net
13.10 I have no root and I want to scream
13.11 UML build conflict between ptrace.h and ucontext.h
13.12 The UML BogoMips is exactly half the host's BogoMips
13.13 When you run UML, it immediately segfaults
13.14 xterms appear, then immediately disappear
13.15 Any other panic, hang, or strange behavior
14. Diagnosing Problems
14.1 Case 1 : Normal kernel panics
14.2 Case 2 : Tracing thread panics
14.3 Case 3 : Tracing thread panics caused by other threads
14.4 Case 4 : Hangs
15. Thanks
15.1 Code and Documentation
15.2 Flushing out bugs
15.3 Buglets and clean-ups
15.4 Case Studies
15.5 Other contributions
______________________________________________________________________
11.. IInnttrroodduuccttiioonn
Welcome to User Mode Linux. It's going to be fun.
11..11.. HHooww iiss UUsseerr MMooddee LLiinnuuxx DDiiffffeerreenntt??
Normally, the Linux Kernel talks straight to your hardware (video
card, keyboard, hard drives, etc), and any programs which run ask the
kernel to operate the hardware, like so:
+-----------+-----------+----+
| Process 1 | Process 2 | ...|
+-----------+-----------+----+
| Linux Kernel |
+----------------------------+
| Hardware |
+----------------------------+
The User Mode Linux Kernel is different; instead of talking to the
hardware, it talks to a `real' Linux kernel (called the `host kernel'
from now on), like any other program. Programs can then run inside
User-Mode Linux as if they were running under a normal kernel, like
so:
+----------------+
| Process 2 | ...|
+-----------+----------------+
| Process 1 | User-Mode Linux|
+----------------------------+
| Linux Kernel |
+----------------------------+
| Hardware |
+----------------------------+
11..22.. WWhhyy WWoouulldd II WWaanntt UUsseerr MMooddee LLiinnuuxx??
1. If User Mode Linux crashes, your host kernel is still fine.
2. You can run a usermode kernel as a non-root user.
3. You can debug the User Mode Linux like any normal process.
4. You can run gprof (profiling) and gcov (coverage testing).
5. You can play with your kernel without breaking things.
6. You can use it as a sandbox for testing new apps.
7. You can try new development kernels safely.
8. You can run different distributions simultaneously.
9. It's extremely fun.
22.. CCoommppiilliinngg tthhee kkeerrnneell aanndd mmoodduulleess
22..11.. CCoommppiilliinngg tthhee kkeerrnneell
Compiling the user mode kernel is just like compiling any other
kernel. Let's go through the steps, using 2.4.0-prerelease (current
as of this writing) as an example:
1. Download the latest UML patch from
the download page <http://user-mode-linux.sourceforge.net/dl-
sf.html>
In this example, the file is uml-patch-2.4.0-prerelease.bz2.
2. Download the matching kernel from your favourite kernel mirror,
such as:
ftp://ftp.ca.kernel.org/pub/kernel/v2.4/linux-2.4.0-prerelease.tar.bz2
<ftp://ftp.ca.kernel.org/pub/kernel/v2.4/linux-2.4.0-prerelease.tar.bz2>
.
3. Make a directory and unpack the kernel into it.
host%
mkdir ~/uml
host%
cd ~/uml
host%
tar -xzvf linux-2.4.0-prerelease.tar.bz2
4. Apply the patch using
host%
cd ~/uml/linux
host%
bzcat uml-patch-2.4.0-prerelease.bz2 | patch -p1
5. Run your favorite config; `make xconfig ARCH=um' is the most
convenient. `make config ARCH=um' and 'make menuconfig ARCH=um'
will work as well. The defaults will give you a useful kernel. If
you want to change something, go ahead, it probably won't hurt
anything.
Note: If the host is configured with a 2G/2G address space split
rather than the usual 3G/1G split, then the packaged UML binaries
will not run. They will immediately segfault. See ``UML on 2G/2G
hosts'' for the scoop on running UML on your system.
6. Finish with `make linux ARCH=um': the result is a file called
`linux' in the top directory of your source tree.
Make sure that you don't build this kernel in /usr/src/linux. On some
distributions, /usr/include/asm is a link into this pool. The user-
mode build changes the other end of that link, and things that include
<asm/anything.h> stop compiling.
The sources are also available from cvs at the project's cvs page,
which has directions on getting the sources. You can also browse the
CVS pool from there.
If you get the CVS sources, you will have to check them out into an
empty directory. You will then have to copy each file into the
corresponding directory in the appropriate kernel pool.
If you don't have the latest kernel pool, you can get the
corresponding user-mode sources with
host% cvs co -r v_2_3_x linux
where 'x' is the version in your pool. Note that you will not get the
bug fixes and enhancements that have gone into subsequent releases.
If you build your own kernel, and want to boot it from one of the
filesystems distributed from this site, then, in nearly all cases,
devfs must be compiled into the kernel and mounted at boot time. The
exception is the SuSE filesystem. For this, devfs must either not be
in the kernel at all, or "devfs=nomount" must be on the kernel command
line. Any disagreement between the kernel and the filesystem being
booted about whether devfs is being used will result in the boot
getting no further than single-user mode.
If you don't want to use devfs, you can remove the need for it from a
filesystem by copying /dev from someplace, making a bunch of /dev/ubd
devices:
UML# for i in 0 1 2 3 4 5 6 7; do mknod ubd$i b 98 $i; done
and changing /etc/fstab and /etc/inittab to refer to the non-devfs
devices.
22..22.. CCoommppiilliinngg aanndd iinnssttaalllliinngg kkeerrnneell mmoodduulleess
UML modules are built in the same way as the native kernel (with the
exception of the 'ARCH=um' that you always need for UML):
host% make modules ARCH=um
Any modules that you want to load into this kernel need to be built in
the user-mode pool. Modules from the native kernel won't work.
You can install them by using ftp or something to copy them into the
virtual machine and dropping them into /lib/modules/`uname -r`.
You can also get the kernel build process to install them as follows:
1. with the kernel not booted, mount the root filesystem in the top
level of the kernel pool:
host% mount root_fs mnt -o loop
2. run
host%
make modules_install INSTALL_MOD_PATH=`pwd`/mnt ARCH=um
3. unmount the filesystem
host% umount mnt
4. boot the kernel on it
When the system is booted, you can use insmod as usual to get the
modules into the kernel. A number of things have been loaded into UML
as modules, especially filesystems and network protocols and filters,
so most symbols which need to be exported probably already are.
However, if you do find symbols that need exporting, let us
<http://user-mode-linux.sourceforge.net/contacts.html> know, and
they'll be "taken care of".
22..33.. CCoommppiilliinngg aanndd iinnssttaalllliinngg uummll__uuttiilliittiieess
Many features of the UML kernel require a user-space helper program,
so a uml_utilities package is distributed separately from the kernel
patch which provides these helpers. Included within this is:
+o port-helper - Used by consoles which connect to xterms or ports
+o tunctl - Configuration tool to create and delete tap devices
+o uml_net - Setuid binary for automatic tap device configuration
+o uml_switch - User-space virtual switch required for daemon
transport
The uml_utilities tree is compiled with:
host#
make && make install
Note that UML kernel patches may require a specific version of the
uml_utilities distribution. If you don't keep up with the mailing
lists, ensure that you have the latest release of uml_utilities if you
are experiencing problems with your UML kernel, particularly when
dealing with consoles or command-line switches to the helper programs
33.. RRuunnnniinngg UUMMLL aanndd llooggggiinngg iinn
33..11.. RRuunnnniinngg UUMMLL
It runs on 2.2.15 or later, and all 2.4 kernels.
Booting UML is straightforward. Simply run 'linux': it will try to
mount the file `root_fs' in the current directory. You do not need to
run it as root. If your root filesystem is not named `root_fs', then
you need to put a `ubd0=root_fs_whatever' switch on the linux command
line.
You will need a filesystem to boot UML from. There are a number
available for download from here <http://user-mode-
linux.sourceforge.net/dl-sf.html> . There are also several tools
<http://user-mode-linux.sourceforge.net/fs_making.html> which can be
used to generate UML-compatible filesystem images from media.
The kernel will boot up and present you with a login prompt.
Note: If the host is configured with a 2G/2G address space split
rather than the usual 3G/1G split, then the packaged UML binaries will
not run. They will immediately segfault. See ``UML on 2G/2G hosts''
for the scoop on running UML on your system.
33..22.. LLooggggiinngg iinn
The prepackaged filesystems have a root account with password 'root'
and a user account with password 'user'. The login banner will
generally tell you how to log in. So, you log in and you will find
yourself inside a little virtual machine. Our filesystems have a
variety of commands and utilities installed (and it is fairly easy to
add more), so you will have a lot of tools with which to poke around
the system.
There are a couple of other ways to log in:
+o On a virtual console
Each virtual console that is configured (i.e. the device exists in
/dev and /etc/inittab runs a getty on it) will come up in its own
xterm. If you get tired of the xterms, read ``Setting up serial
lines and consoles'' to see how to attach the consoles to
something else, like host ptys.
+o Over the serial line
In the boot output, find a line that looks like:
serial line 0 assigned pty /dev/ptyp1
Attach your favorite terminal program to the corresponding tty. I.e.
for minicom, the command would be
host% minicom -o -p /dev/ttyp1
+o Over the net
If the network is running, then you can telnet to the virtual
machine and log in to it. See ``Setting up the network'' to learn
about setting up a virtual network.
When you're done using it, run halt, and the kernel will bring itself
down and the process will exit.
33..33.. EExxaammpplleess
Here are some examples of UML in action:
+o A login session <http://user-mode-linux.sourceforge.net/login.html>
+o A virtual network <http://user-mode-linux.sourceforge.net/net.html>
44.. UUMMLL oonn 22GG//22GG hhoossttss
44..11.. IInnttrroodduuccttiioonn
Most Linux machines are configured so that the kernel occupies the
upper 1G (0xc0000000 - 0xffffffff) of the 4G address space and
processes use the lower 3G (0x00000000 - 0xbfffffff). However, some
machine are configured with a 2G/2G split, with the kernel occupying
the upper 2G (0x80000000 - 0xffffffff) and processes using the lower
2G (0x00000000 - 0x7fffffff).
44..22.. TThhee pprroobblleemm
The prebuilt UML binaries on this site will not run on 2G/2G hosts
because UML occupies the upper .5G of the 3G process address space
(0xa0000000 - 0xbfffffff). Obviously, on 2G/2G hosts, this is right
in the middle of the kernel address space, so UML won't even load - it
will immediately segfault.
44..33.. TThhee ssoolluuttiioonn
The fix for this is to rebuild UML from source after enabling
CONFIG_HOST_2G_2G (under 'General Setup'). This will cause UML to
load itself in the top .5G of that smaller process address space,
where it will run fine. See ``Compiling the kernel and modules'' if
you need help building UML from source.
55.. SSeettttiinngg uupp sseerriiaall lliinneess aanndd ccoonnssoolleess
It is possible to attach UML serial lines and consoles to many types
of host I/O channels by specifying them on the command line.
You can attach them to host ptys, ttys, file descriptors, and ports.
This allows you to do things like
+o have a UML console appear on an unused host console,
+o hook two virtual machines together by having one attach to a pty
and having the other attach to the corresponding tty
+o make a virtual machine accessible from the net by attaching a
console to a port on the host.
The general format of the command line option is device=channel.
55..11.. SSppeecciiffyyiinngg tthhee ddeevviiccee
Devices are specified with "con" or "ssl" (console or serial line,
respectively), optionally with a device number if you are talking
about a specific device.
Using just "con" or "ssl" describes all of the consoles or serial
lines. If you want to talk about console #3 or serial line #10, they
would be "con3" and "ssl10", respectively.
A specific device name will override a less general "con=" or "ssl=".
So, for example, you can assign a pty to each of the serial lines
except for the first two like this:
ssl=pty ssl0=tty:/dev/tty0 ssl1=tty:/dev/tty1
The specificity of the device name is all that matters; order on the
command line is irrelevant.
55..22.. SSppeecciiffyyiinngg tthhee cchhaannnneell
There are a number of different types of channels to attach a UML
device to, each with a different way of specifying exactly what to
attach to.
+o pseudo-terminals - device=pty pts terminals - device=pts
This will cause UML to allocate a free host pseudo-terminal for the
device. The terminal that it got will be announced in the boot
log. You access it by attaching a terminal program to the
corresponding tty:
+o screen /dev/pts/n
+o screen /dev/ttyxx
+o minicom -o -p /dev/ttyxx - minicom seems not able to handle pts
devices
+o kermit - start it up, 'open' the device, then 'connect'
+o terminals - device=tty:tty device file
This will make UML attach the device to the specified tty (i.e
con1=tty:/dev/tty3
will attach UML's console 1 to the host's /dev/tty3). If the tty that
you specify is the slave end of a tty/pty pair, something else must
have already opened the corresponding pty in order for this to work.
+o xterms - device=xterm
UML will run an xterm and the device will be attached to it.
+o Port - device=port:port number
This will attach the UML devices to the specified host port.
Attaching console 1 to the host's port 9000 would be done like
this:
con1=port:9000
Attaching all the serial lines to that port would be done similarly:
ssl=port:9000
You access these devices by telnetting to that port. Each active tel-
net session gets a different device. If there are more telnets to a
port than UML devices attached to it, then the extra telnet sessions
will block until an existing telnet detaches, or until another device
becomes active (i.e. by being activated in /etc/inittab).
This channel has the advantage that you can both attach multiple UML
devices to it and know how to access them without reading the UML boot
log. It is also unique in allowing access to a UML from remote
machines without requiring that the UML be networked. This could be
useful in allowing public access to UMLs because they would be
accessible from the net, but wouldn't need any kind of network
filtering or access control because they would have no network access.
If you attach the main console to a portal, then the UML boot will
appear to hang. In reality, it's waiting for a telnet to connect, at
which point the boot will proceed.
+o already-existing file descriptors - device=file descriptor
If you set up a file descriptor on the UML command line, you can
attach a UML device to it. This is most commonly used to put the
main console back on stdin and stdout after assigning all the other
consoles to something else:
con0=fd:0,fd:1 con=pts
+o Nothing - device=null
This allows the device to be opened, in contrast to 'none', but
reads will block, and writes will succeed and the data will be
thrown out.
+o None - device=none
This causes the device to disappear. If you are using devfs, the
device will not appear in /dev. If not, then attempts to open it
will return -ENODEV.
You can also specify different input and output channels for a device
by putting a comma between them:
ssl3=tty:/dev/tty2,xterm
will cause serial line 3 to accept input on the host's /dev/tty3 and
display output on an xterm. That's a silly example - the most common
use of this syntax is to reattach the main console to stdin and stdout
as shown above.
If you decide to move the main console away from stdin/stdout, the
initial boot output will appear in the terminal that you're running
UML in. However, once the console driver has been officially
initialized, then the boot output will start appearing wherever you
specified that console 0 should be. That device will receive all
subsequent output.
55..33.. EExxaammpplleess
There are a number of interesting things you can do with this
capability.
First, this is how you get rid of those bleeding console xterms by
attaching them to host ptys:
con=pty con0=fd:0,fd:1
This will make a UML console take over an unused host virtual console,
so that when you switch to it, you will see the UML login prompt
rather than the host login prompt:
con1=tty:/dev/tty6
You can attach two virtual machines together with what amounts to a
serial line as follows:
Run one UML with a serial line attached to a pty -
ssl1=pty
Look at the boot log to see what pty it got (this example will assume
that it got /dev/ptyp1).
Boot the other UML with a serial line attached to the corresponding
tty -
ssl1=tty:/dev/ttyp1
Log in, make sure that it has no getty on that serial line, attach a
terminal program like minicom to it, and you should see the login
prompt of the other virtual machine.
66.. SSeettttiinngg uupp tthhee nneettwwoorrkk
This page describes how to set up the various transports and to
provide a UML instance with network access to the host, other machines
on the local net, and the rest of the net.
As of 2.4.5, UML networking has been completely redone to make it much
easier to set up, fix bugs, and add new features.
There is a new helper, uml_net, which does the host setup that
requires root privileges.
There are currently five transport types available for a UML virtual
machine to exchange packets with other hosts:
+o ethertap
+o TUN/TAP
+o Multicast
+o a switch daemon
+o slip
+o slirp
+o pcap
The TUN/TAP, ethertap, slip, and slirp transports allow a UML
instance to exchange packets with the host. They may be directed
to the host or the host may just act as a router to provide access
to other physical or virtual machines.
The pcap transport is a synthetic read-only interface, using the
libpcap binary to collect packets from interfaces on the host and
filter them. This is useful for building preconfigured traffic
monitors or sniffers.
The daemon and multicast transports provide a completely virtual
network to other virtual machines. This network is completely
disconnected from the physical network unless one of the virtual
machines on it is acting as a gateway.
With so many host transports, which one should you use? Here's when
you should use each one:
+o ethertap - if you want access to the host networking and it is
running 2.2
+o TUN/TAP - if you want access to the host networking and it is
running 2.4. Also, the TUN/TAP transport is able to use a
preconfigured device, allowing it to avoid using the setuid uml_net
helper, which is a security advantage.
+o Multicast - if you want a purely virtual network and you don't want
to set up anything but the UML
+o a switch daemon - if you want a purely virtual network and you
don't mind running the daemon in order to get somewhat better
performance
+o slip - there is no particular reason to run the slip backend unless
ethertap and TUN/TAP are just not available for some reason
+o slirp - if you don't have root access on the host to setup
networking, or if you don't want to allocate an IP to your UML