14af18995SSascha Wildner.\" 24af18995SSascha Wildner.\" Copyright (c) 2003, 2004, 2005, 2006, 2007 34af18995SSascha Wildner.\" The DragonFly Project. All rights reserved. 44af18995SSascha Wildner.\" 54af18995SSascha Wildner.\" Redistribution and use in source and binary forms, with or without 64af18995SSascha Wildner.\" modification, are permitted provided that the following conditions 74af18995SSascha Wildner.\" are met: 84af18995SSascha Wildner.\" 94af18995SSascha Wildner.\" 1. Redistributions of source code must retain the above copyright 104af18995SSascha Wildner.\" notice, this list of conditions and the following disclaimer. 114af18995SSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright 124af18995SSascha Wildner.\" notice, this list of conditions and the following disclaimer in 134af18995SSascha Wildner.\" the documentation and/or other materials provided with the 144af18995SSascha Wildner.\" distribution. 154af18995SSascha Wildner.\" 3. Neither the name of The DragonFly Project nor the names of its 164af18995SSascha Wildner.\" contributors may be used to endorse or promote products derived 174af18995SSascha Wildner.\" from this software without specific, prior written permission. 184af18995SSascha Wildner.\" 194af18995SSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 204af18995SSascha Wildner.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 214af18995SSascha Wildner.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 224af18995SSascha Wildner.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 234af18995SSascha Wildner.\" COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 244af18995SSascha Wildner.\" INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 254af18995SSascha Wildner.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 264af18995SSascha Wildner.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 274af18995SSascha Wildner.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 284af18995SSascha Wildner.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 294af18995SSascha Wildner.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 304af18995SSascha Wildner.\" SUCH DAMAGE. 314af18995SSascha Wildner.\" 32*bb195a01SMatthew Dillon.\" $DragonFly: src/share/man/man7/vkernel.7,v 1.19 2007/06/17 16:46:14 dillon Exp $ 334af18995SSascha Wildner.\" 347834fbccSSascha Wildner.Dd June 14, 2007 354af18995SSascha Wildner.Dt VKERNEL 7 364af18995SSascha Wildner.Os 374af18995SSascha Wildner.Sh NAME 380592e24dSSascha Wildner.Nm vkernel , 390592e24dSSascha Wildner.Nm vkd , 400592e24dSSascha Wildner.Nm vke 414af18995SSascha Wildner.Nd virtual kernel architecture 424af18995SSascha Wildner.Sh SYNOPSIS 4365d7306bSSascha Wildner.Cd "platform vkernel" 44c8e7d028SSascha Wildner.Cd "device vkd" 45c8e7d028SSascha Wildner.Cd "device vke" 46c8e7d028SSascha Wildner.Pp 474af18995SSascha Wildner.Pa /usr/obj/usr/src/sys/VKERNEL/kernel.debug 4803071031SSascha Wildner.Op Fl sUv 49a72d8a9fSMatthew Dillon.Op Fl c Ar file 5009b03fffSSascha Wildner.Op Fl e Ar name Ns = Ns Li value : Ns Ar name Ns = Ns Li value : Ns ... 51dd54cb3aSSascha Wildner.Op Fl i Ar file 5209b03fffSSascha Wildner.Op Fl I Ar interface Ns Op Ar :address1 Ns Oo Ar :address2 Oc Ns Oo Ar /netmask Oc 534af18995SSascha Wildner.Op Fl m Ar size 544af18995SSascha Wildner.Op Fl r Ar file 554af18995SSascha Wildner.Sh DESCRIPTION 564af18995SSascha WildnerThe 574af18995SSascha Wildner.Nm 584af18995SSascha Wildnerarchitecture allows for running 594af18995SSascha Wildner.Dx 604af18995SSascha Wildnerkernels in userland. 614af18995SSascha Wildner.Pp 624af18995SSascha WildnerThe following options are available: 634af18995SSascha Wildner.Bl -tag -width ".Fl m Ar size" 64a72d8a9fSMatthew Dillon.It Fl c Ar file 657834fbccSSascha WildnerSpecify a readonly CD-ROM image 66a72d8a9fSMatthew Dillon.Ar file 67a72d8a9fSMatthew Dillonto be used by the kernel, with the first 68a72d8a9fSMatthew Dillon.Fl c 69a72d8a9fSMatthew Dillonoption defining 70a72d8a9fSMatthew Dillon.Li vcd0 , 71a72d8a9fSMatthew Dillonthe second one 72a72d8a9fSMatthew Dillon.Li vcd1 , 73a72d8a9fSMatthew Dillonand so on. The first 74a72d8a9fSMatthew Dillon.Fl r 75a72d8a9fSMatthew Dillonor 76a72d8a9fSMatthew Dillon.Fl c 77a72d8a9fSMatthew Dillonoption specified on the command line will be the boot disk. 787834fbccSSascha WildnerThe CD9660 filesystem is assumed when booting from this media. 7909b03fffSSascha Wildner.It Fl e Ar name Ns = Ns Li value : Ns Ar name Ns = Ns Li value : Ns ... 8009b03fffSSascha WildnerSpecify an environment to be used by the kernel. 81dd54cb3aSSascha Wildner.It Fl i Ar file 82dd54cb3aSSascha WildnerSpecify a memory image 83dd54cb3aSSascha Wildner.Ar file 84dd54cb3aSSascha Wildnerto be used by the virtual kernel. 85dd54cb3aSSascha WildnerIf no 86dd54cb3aSSascha Wildner.Fl i 87dd54cb3aSSascha Wildneroption is given, the kernel will generate a name of the form 88dd54cb3aSSascha Wildner.Pa /var/vkernel/memimg.XXXXXX , 89dd54cb3aSSascha Wildnerwith the trailing 90dd54cb3aSSascha Wildner.Ql X Ns s 91dd54cb3aSSascha Wildnerbeing replaced by a sequential number, e.g.\& 92dd54cb3aSSascha Wildner.Pa memimg.000001 . 9309b03fffSSascha Wildner.It Fl I Ar interface Ns Op Ar :address1 Ns Oo Ar :address2 Oc Ns Oo Ar /netmask Oc 9409b03fffSSascha WildnerCreate a virtual network device, with the first 9509b03fffSSascha Wildner.Fl I 9609b03fffSSascha Wildneroption defining 970592e24dSSascha Wildner.Li vke0 , 9809b03fffSSascha Wildnerthe second one 990592e24dSSascha Wildner.Li vke1 , 10009b03fffSSascha Wildnerand so on. 10109b03fffSSascha Wildner.Pp 10209b03fffSSascha WildnerThe 10309b03fffSSascha Wildner.Ar interface 10409b03fffSSascha Wildnerargument is the name of a 10509b03fffSSascha Wildner.Xr tap 4 10609b03fffSSascha Wildnerdevice node. 10709b03fffSSascha WildnerThe 10809b03fffSSascha Wildner.Pa /dev/ 10909b03fffSSascha Wildnerpath prefix does not have to be specified and will be automatically prepended. 11009b03fffSSascha WildnerSpecifying 11109b03fffSSascha Wildner.Cm auto 11209b03fffSSascha Wildnerwill pick the first unused 11309b03fffSSascha Wildner.Xr tap 4 11409b03fffSSascha Wildnerdevice. 11509b03fffSSascha Wildner.Pp 11609b03fffSSascha WildnerThe 11709b03fffSSascha Wildner.Ar address1 11809b03fffSSascha Wildnerand 11909b03fffSSascha Wildner.Ar address2 12009b03fffSSascha Wildnerarguments are the IP addresses of the 12109b03fffSSascha Wildner.Xr tap 4 12209b03fffSSascha Wildnerand 1230592e24dSSascha Wildner.Nm vke 12409b03fffSSascha Wildnerinterfaces. 12509b03fffSSascha WildnerOptionally, 12609b03fffSSascha Wildner.Ar address1 12709b03fffSSascha Wildnermay be of the form 12809b03fffSSascha Wildner.Li bridge Ns Em X 12909b03fffSSascha Wildnerin which case the 13009b03fffSSascha Wildner.Xr tap 4 13109b03fffSSascha Wildnerinterface is added to the specified 13209b03fffSSascha Wildner.Xr bridge 4 13309b03fffSSascha Wildnerinterface. 13409b03fffSSascha Wildner.Pp 13509b03fffSSascha WildnerThe 13609b03fffSSascha Wildner.Ar netmask 13709b03fffSSascha Wildnerargument applies to all interfaces for which an address is specified. 1384af18995SSascha Wildner.It Fl m Ar size 1394af18995SSascha WildnerSpecify the amount of memory to be used by the kernel in bytes, 1404af18995SSascha Wildner.Cm K 1413cea05a4SSascha Wildner.Pq kilobytes , 1424af18995SSascha Wildner.Cm M 1433cea05a4SSascha Wildner.Pq megabytes 1443cea05a4SSascha Wildneror 1454af18995SSascha Wildner.Cm G 1463cea05a4SSascha Wildner.Pq gigabytes . 14709b03fffSSascha WildnerLowercase versions of 1484af18995SSascha Wildner.Cm K , M , 1494af18995SSascha Wildnerand 1504af18995SSascha Wildner.Cm G 1514af18995SSascha Wildnerare allowed. 1524af18995SSascha Wildner.It Fl r Ar file 153a72d8a9fSMatthew DillonSpecify a R/W disk image 1544af18995SSascha Wildner.Ar file 155ec1a8a4dSSascha Wildnerto be used by the kernel, with the first 156ec1a8a4dSSascha Wildner.Fl r 157ec1a8a4dSSascha Wildneroption defining 1580592e24dSSascha Wildner.Li vkd0 , 159ec1a8a4dSSascha Wildnerthe second one 1600592e24dSSascha Wildner.Li vkd1 , 161a72d8a9fSMatthew Dillonand so on. The first 162a72d8a9fSMatthew Dillon.Fl r 163a72d8a9fSMatthew Dillonor 164a72d8a9fSMatthew Dillon.Fl c 165a72d8a9fSMatthew Dillonoption specified on the command line will be the boot disk. 166c8e7d028SSascha Wildner.It Fl s 167c8e7d028SSascha WildnerBoot into single-user mode. 16803071031SSascha Wildner.It Fl U 16903071031SSascha WildnerEnable writing to kernel memory and module loading. 17003071031SSascha WildnerBy default, those are disabled for security reasons. 1714af18995SSascha Wildner.It Fl v 1724af18995SSascha WildnerTurn on verbose booting. 1734af18995SSascha Wildner.El 1740592e24dSSascha Wildner.Sh DEVICES 1750592e24dSSascha WildnerA number of virtual device drivers exist to supplement the virtual kernel. 1760592e24dSSascha WildnerTheir names start with 1770592e24dSSascha Wildner.Li vk . 1780592e24dSSascha Wildner.Ss Disk device 1790592e24dSSascha WildnerThe 1800592e24dSSascha Wildner.Nm vkd 1810592e24dSSascha Wildnerdriver allows for up to 16 1820592e24dSSascha Wildner.Xr vn 4 1830592e24dSSascha Wildnerbased disk devices. 1840592e24dSSascha WildnerThe root device will be 1850592e24dSSascha Wildner.Li vkd0 1860592e24dSSascha Wildner(see 1870592e24dSSascha Wildner.Sx EXAMPLES 1880592e24dSSascha Wildnerfor further information on how to prepare a root image). 1890592e24dSSascha Wildner.Ss Network interface 1900592e24dSSascha WildnerThe 1910592e24dSSascha Wildner.Nm vke 1920592e24dSSascha Wildnerdriver supports up to 16 virtual network interfaces which are associated with 1930592e24dSSascha Wildner.Xr tap 4 1940592e24dSSascha Wildnerdevices on the host. 1950592e24dSSascha WildnerFor each 1960592e24dSSascha Wildner.Nm vke 1970592e24dSSascha Wildnerdevice, the per-interface read only 1980592e24dSSascha Wildner.Xr sysctl 3 1990592e24dSSascha Wildnervariable 2000592e24dSSascha Wildner.Va hw.vke Ns Em X Ns Va .tap_unit 2010592e24dSSascha Wildnerholds the unit number of the associated 2020592e24dSSascha Wildner.Xr tap 4 2030592e24dSSascha Wildnerdevice. 2041e4d9fd9SSascha Wildner.Sh SIGNALS 205*bb195a01SMatthew DillonThe virtual kernel only enables 206*bb195a01SMatthew Dillon.Dv SIGQUIT 207*bb195a01SMatthew Dillonand 208*bb195a01SMatthew Dillon.Dv SIGTERM 209*bb195a01SMatthew Dillonwhile operating in regular console mode. 210*bb195a01SMatthew DillonSending 2111e4d9fd9SSascha Wildner.Ql \&^\e 2121e4d9fd9SSascha Wildner.Pq Dv SIGQUIT 213*bb195a01SMatthew Dillonto the virtual kernel causes the virtual kernel to enter its internal 2141e4d9fd9SSascha Wildner.Xr ddb 4 215*bb195a01SMatthew Dillondebugger and re-enable all other terminal signals. 216*bb195a01SMatthew DillonSending 217*bb195a01SMatthew Dillon.Dv SIGTERM 218*bb195a01SMatthew Dillonto the virtual kernel triggers a clean shutdown by passing a 219*bb195a01SMatthew Dillon.Dv SIGUSR2 220*bb195a01SMatthew Dillonto the virtual kernel's 221*bb195a01SMatthew Dillon.Xr init 8 222*bb195a01SMatthew Dillonprocess. 223974b26bfSSascha Wildner.Sh DEBUGGING 224974b26bfSSascha WildnerIt is possible to directly gdb the virtual kernel's process. 225974b26bfSSascha WildnerIt is recommended that you do a 226974b26bfSSascha Wildner.Ql handle SIGSEGV noprint 227974b26bfSSascha Wildnerto ignore page faults processed by the virtual kernel itself. 228c8e7d028SSascha Wildner.Sh EXAMPLES 2294af18995SSascha WildnerA couple of steps are necessary in order to prepare the system to build and 2304af18995SSascha Wildnerrun a virtual kernel. 2314af18995SSascha Wildner.Ss Setting up the filesystem 2324af18995SSascha WildnerThe 2334af18995SSascha Wildner.Nm 2344af18995SSascha Wildnerarchitecture needs a number of files which reside in 2354af18995SSascha Wildner.Pa /var/vkernel . 2364af18995SSascha WildnerSince these files tend to get rather big and the 2374af18995SSascha Wildner.Pa /var 2384af18995SSascha Wildnerpartition is usually of limited size, we recommend the directory to be 2394af18995SSascha Wildnercreated in the 2404af18995SSascha Wildner.Pa /home 2414af18995SSascha Wildnerpartition with a link to it in 2424af18995SSascha Wildner.Pa /var : 243c8e7d028SSascha Wildner.Bd -literal 2444af18995SSascha Wildnermkdir /home/var.vkernel 2454af18995SSascha Wildnerln -s /home/var.vkernel /var/vkernel 2464af18995SSascha Wildner.Ed 2474af18995SSascha Wildner.Pp 2484af18995SSascha WildnerNext, a filesystem image to be used by the virtual kernel has to be 249c8e7d028SSascha Wildnercreated and populated (assuming world has been built previously): 250c8e7d028SSascha Wildner.Bd -literal 2514af18995SSascha Wildnerdd if=/dev/zero of=/var/vkernel/rootimg.01 bs=1m count=2048 2524af18995SSascha Wildnervnconfig -c -s labels vn0 /var/vkernel/rootimg.01 25358c55700SSascha Wildnerdisklabel -r -w vn0s0 auto 25458c55700SSascha Wildnerdisklabel -e vn0s0 # edit the label to create a vn0s0a partition 25558c55700SSascha Wildnernewfs /dev/vn0s0a 25658c55700SSascha Wildnermount /dev/vn0s0a /mnt 257c8e7d028SSascha Wildnercd /usr/src 258c8e7d028SSascha Wildnermake installworld DESTDIR=/mnt 259c8e7d028SSascha Wildnercd etc 260c8e7d028SSascha Wildnermake distribution DESTDIR=/mnt 2616a060312SSascha Wildnerecho '/dev/vkd0a / ufs rw 1 1' >/mnt/etc/fstab 2627834fbccSSascha Wildner.Ed 2637834fbccSSascha Wildner.Pp 2647834fbccSSascha WildnerEdit 2657834fbccSSascha Wildner.Pa /mnt/etc/ttys 2667834fbccSSascha Wildnerand replace the 2677834fbccSSascha Wildner.Li console 2687834fbccSSascha Wildnerentry with the following line and turn off all other gettys. 2697834fbccSSascha Wildner.Bd -literal 2707834fbccSSascha Wildnerconsole "/usr/libexec/getty Pc" cons25 on secure 2717834fbccSSascha Wildner.Ed 2727834fbccSSascha Wildner.Pp 2737834fbccSSascha WildnerThen, unmount the disk. 2747834fbccSSascha Wildner.Bd -literal 2754af18995SSascha Wildnerumount /mnt 2764af18995SSascha Wildnervnconfig -u vn0 2774af18995SSascha Wildner.Ed 2784af18995SSascha Wildner.Ss Compiling the virtual kernel 2794af18995SSascha WildnerIn order to compile a virtual kernel use the 2804af18995SSascha Wildner.Li VKERNEL 2814af18995SSascha Wildnerkernel configuration file residing in 2824af18995SSascha Wildner.Pa /usr/src/sys/config 2834af18995SSascha Wildner(or a configuration file derived thereof): 284c8e7d028SSascha Wildner.Bd -literal 2854af18995SSascha Wildnercd /usr/src 28609b03fffSSascha Wildnermake -DNO_MODULES buildkernel KERNCONF=VKERNEL 2874af18995SSascha Wildner.Ed 2884af18995SSascha Wildner.Ss Enabling virtual kernel operation 2894af18995SSascha WildnerA special 2904af18995SSascha Wildner.Xr sysctl 8 , 2914af18995SSascha Wildner.Va vm.vkernel_enable , 2924af18995SSascha Wildnermust be set to enable 2934af18995SSascha Wildner.Nm 2944af18995SSascha Wildneroperation: 295c8e7d028SSascha Wildner.Bd -literal 2964af18995SSascha Wildnersysctl vm.vkernel_enable=1 2974af18995SSascha Wildner.Ed 29809b03fffSSascha Wildner.Ss Configuring the network on the host system 29909b03fffSSascha WildnerIn order to access a network interface of the host system from the 30009b03fffSSascha Wildner.Nm , 30109b03fffSSascha Wildneryou must add the interface to a 30209b03fffSSascha Wildner.Xr bridge 4 30309b03fffSSascha Wildnerdevice which will then be passed to the 30409b03fffSSascha Wildner.Fl I 30509b03fffSSascha Wildneroption: 30609b03fffSSascha Wildner.Bd -literal 30709b03fffSSascha Wildnerkldload if_bridge.ko 30809b03fffSSascha Wildnerkldload if_tap.ko 30909b03fffSSascha Wildnerifconfig bridge0 create 31009b03fffSSascha Wildnerifconfig bridge0 addm re0 # assuming re0 is the host's interface 31109b03fffSSascha Wildnerifconfig bridge0 up 31209b03fffSSascha Wildner.Ed 3134af18995SSascha Wildner.Ss Running the kernel 3144af18995SSascha WildnerFinally, the virtual kernel can be run: 315c8e7d028SSascha Wildner.Bd -literal 3164af18995SSascha Wildnercd /usr/obj/usr/src/sys/VKERNEL 31709b03fffSSascha Wildner\&./kernel.debug -m 64m -r /var/vkernel/rootimg.01 -I auto:bridge0 3184af18995SSascha Wildner.Ed 319c8e7d028SSascha Wildner.Pp 320c8e7d028SSascha WildnerThe 321c8e7d028SSascha Wildner.Xr reboot 8 322c8e7d028SSascha Wildnercommand can be used to stop a virtual kernel. 3234af18995SSascha Wildner.Sh SEE ALSO 32409b03fffSSascha Wildner.Xr bridge 4 , 32509b03fffSSascha Wildner.Xr tap 4 , 326c8e7d028SSascha Wildner.Xr vn 4 , 327c8e7d028SSascha Wildner.Xr build 7 , 328c8e7d028SSascha Wildner.Xr disklabel 8 , 32909b03fffSSascha Wildner.Xr ifconfig 8 , 330c8e7d028SSascha Wildner.Xr vnconfig 8 3314af18995SSascha Wildner.Sh HISTORY 3324af18995SSascha WildnerVirtual kernels were introduced in 3334af18995SSascha Wildner.Dx 1.7 . 3344af18995SSascha Wildner.Sh AUTHORS 3354af18995SSascha Wildner.An -nosplit 3364af18995SSascha Wildner.An Matt Dillon 3374af18995SSascha Wildnerthought up and implemented the 3384af18995SSascha Wildner.Nm 3390592e24dSSascha Wildnerarchitecture and wrote the 3400592e24dSSascha Wildner.Nm vkd 3410592e24dSSascha Wildnerdevice driver. 3420592e24dSSascha Wildner.An Sepherosa Ziehau 3430592e24dSSascha Wildnerwrote the 3440592e24dSSascha Wildner.Nm vke 3450592e24dSSascha Wildnerdevice driver. 3464af18995SSascha WildnerThis manual page was written by 3474af18995SSascha Wildner.An Sascha Wildner . 348