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*0592e24dSSascha Wildner.\" $DragonFly: src/share/man/man7/vkernel.7,v 1.15 2007/04/20 07:04:09 swildner Exp $ 334af18995SSascha Wildner.\" 34*0592e24dSSascha Wildner.Dd April 19, 2007 354af18995SSascha Wildner.Dt VKERNEL 7 364af18995SSascha Wildner.Os 374af18995SSascha Wildner.Sh NAME 38*0592e24dSSascha Wildner.Nm vkernel , 39*0592e24dSSascha Wildner.Nm vkd , 40*0592e24dSSascha 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 4909b03fffSSascha Wildner.Op Fl e Ar name Ns = Ns Li value : Ns Ar name Ns = Ns Li value : Ns ... 50dd54cb3aSSascha Wildner.Op Fl i Ar file 5109b03fffSSascha Wildner.Op Fl I Ar interface Ns Op Ar :address1 Ns Oo Ar :address2 Oc Ns Oo Ar /netmask Oc 524af18995SSascha Wildner.Op Fl m Ar size 534af18995SSascha Wildner.Op Fl r Ar file 544af18995SSascha Wildner.Sh DESCRIPTION 554af18995SSascha WildnerThe 564af18995SSascha Wildner.Nm 574af18995SSascha Wildnerarchitecture allows for running 584af18995SSascha Wildner.Dx 594af18995SSascha Wildnerkernels in userland. 604af18995SSascha Wildner.Pp 614af18995SSascha WildnerThe following options are available: 624af18995SSascha Wildner.Bl -tag -width ".Fl m Ar size" 6309b03fffSSascha Wildner.It Fl e Ar name Ns = Ns Li value : Ns Ar name Ns = Ns Li value : Ns ... 6409b03fffSSascha WildnerSpecify an environment to be used by the kernel. 65dd54cb3aSSascha Wildner.It Fl i Ar file 66dd54cb3aSSascha WildnerSpecify a memory image 67dd54cb3aSSascha Wildner.Ar file 68dd54cb3aSSascha Wildnerto be used by the virtual kernel. 69dd54cb3aSSascha WildnerIf no 70dd54cb3aSSascha Wildner.Fl i 71dd54cb3aSSascha Wildneroption is given, the kernel will generate a name of the form 72dd54cb3aSSascha Wildner.Pa /var/vkernel/memimg.XXXXXX , 73dd54cb3aSSascha Wildnerwith the trailing 74dd54cb3aSSascha Wildner.Ql X Ns s 75dd54cb3aSSascha Wildnerbeing replaced by a sequential number, e.g.\& 76dd54cb3aSSascha Wildner.Pa memimg.000001 . 7709b03fffSSascha Wildner.It Fl I Ar interface Ns Op Ar :address1 Ns Oo Ar :address2 Oc Ns Oo Ar /netmask Oc 7809b03fffSSascha WildnerCreate a virtual network device, with the first 7909b03fffSSascha Wildner.Fl I 8009b03fffSSascha Wildneroption defining 81*0592e24dSSascha Wildner.Li vke0 , 8209b03fffSSascha Wildnerthe second one 83*0592e24dSSascha Wildner.Li vke1 , 8409b03fffSSascha Wildnerand so on. 8509b03fffSSascha Wildner.Pp 8609b03fffSSascha WildnerThe 8709b03fffSSascha Wildner.Ar interface 8809b03fffSSascha Wildnerargument is the name of a 8909b03fffSSascha Wildner.Xr tap 4 9009b03fffSSascha Wildnerdevice node. 9109b03fffSSascha WildnerThe 9209b03fffSSascha Wildner.Pa /dev/ 9309b03fffSSascha Wildnerpath prefix does not have to be specified and will be automatically prepended. 9409b03fffSSascha WildnerSpecifying 9509b03fffSSascha Wildner.Cm auto 9609b03fffSSascha Wildnerwill pick the first unused 9709b03fffSSascha Wildner.Xr tap 4 9809b03fffSSascha Wildnerdevice. 9909b03fffSSascha Wildner.Pp 10009b03fffSSascha WildnerThe 10109b03fffSSascha Wildner.Ar address1 10209b03fffSSascha Wildnerand 10309b03fffSSascha Wildner.Ar address2 10409b03fffSSascha Wildnerarguments are the IP addresses of the 10509b03fffSSascha Wildner.Xr tap 4 10609b03fffSSascha Wildnerand 107*0592e24dSSascha Wildner.Nm vke 10809b03fffSSascha Wildnerinterfaces. 10909b03fffSSascha WildnerOptionally, 11009b03fffSSascha Wildner.Ar address1 11109b03fffSSascha Wildnermay be of the form 11209b03fffSSascha Wildner.Li bridge Ns Em X 11309b03fffSSascha Wildnerin which case the 11409b03fffSSascha Wildner.Xr tap 4 11509b03fffSSascha Wildnerinterface is added to the specified 11609b03fffSSascha Wildner.Xr bridge 4 11709b03fffSSascha Wildnerinterface. 11809b03fffSSascha Wildner.Pp 11909b03fffSSascha WildnerThe 12009b03fffSSascha Wildner.Ar netmask 12109b03fffSSascha Wildnerargument applies to all interfaces for which an address is specified. 1224af18995SSascha Wildner.It Fl m Ar size 1234af18995SSascha WildnerSpecify the amount of memory to be used by the kernel in bytes, 1244af18995SSascha Wildner.Cm K 1253cea05a4SSascha Wildner.Pq kilobytes , 1264af18995SSascha Wildner.Cm M 1273cea05a4SSascha Wildner.Pq megabytes 1283cea05a4SSascha Wildneror 1294af18995SSascha Wildner.Cm G 1303cea05a4SSascha Wildner.Pq gigabytes . 13109b03fffSSascha WildnerLowercase versions of 1324af18995SSascha Wildner.Cm K , M , 1334af18995SSascha Wildnerand 1344af18995SSascha Wildner.Cm G 1354af18995SSascha Wildnerare allowed. 1364af18995SSascha Wildner.It Fl r Ar file 137ec1a8a4dSSascha WildnerSpecify a disk image 1384af18995SSascha Wildner.Ar file 139ec1a8a4dSSascha Wildnerto be used by the kernel, with the first 140ec1a8a4dSSascha Wildner.Fl r 141ec1a8a4dSSascha Wildneroption defining 142*0592e24dSSascha Wildner.Li vkd0 , 143ec1a8a4dSSascha Wildnerthe second one 144*0592e24dSSascha Wildner.Li vkd1 , 145ec1a8a4dSSascha Wildnerand so on. 146c8e7d028SSascha Wildner.It Fl s 147c8e7d028SSascha WildnerBoot into single-user mode. 14803071031SSascha Wildner.It Fl U 14903071031SSascha WildnerEnable writing to kernel memory and module loading. 15003071031SSascha WildnerBy default, those are disabled for security reasons. 1514af18995SSascha Wildner.It Fl v 1524af18995SSascha WildnerTurn on verbose booting. 1534af18995SSascha Wildner.El 154*0592e24dSSascha Wildner.Sh DEVICES 155*0592e24dSSascha WildnerA number of virtual device drivers exist to supplement the virtual kernel. 156*0592e24dSSascha WildnerTheir names start with 157*0592e24dSSascha Wildner.Li vk . 158*0592e24dSSascha Wildner.Ss Disk device 159*0592e24dSSascha WildnerThe 160*0592e24dSSascha Wildner.Nm vkd 161*0592e24dSSascha Wildnerdriver allows for up to 16 162*0592e24dSSascha Wildner.Xr vn 4 163*0592e24dSSascha Wildnerbased disk devices. 164*0592e24dSSascha WildnerThe root device will be 165*0592e24dSSascha Wildner.Li vkd0 166*0592e24dSSascha Wildner(see 167*0592e24dSSascha Wildner.Sx EXAMPLES 168*0592e24dSSascha Wildnerfor further information on how to prepare a root image). 169*0592e24dSSascha Wildner.Ss Network interface 170*0592e24dSSascha WildnerThe 171*0592e24dSSascha Wildner.Nm vke 172*0592e24dSSascha Wildnerdriver supports up to 16 virtual network interfaces which are associated with 173*0592e24dSSascha Wildner.Xr tap 4 174*0592e24dSSascha Wildnerdevices on the host. 175*0592e24dSSascha WildnerFor each 176*0592e24dSSascha Wildner.Nm vke 177*0592e24dSSascha Wildnerdevice, the per-interface read only 178*0592e24dSSascha Wildner.Xr sysctl 3 179*0592e24dSSascha Wildnervariable 180*0592e24dSSascha Wildner.Va hw.vke Ns Em X Ns Va .tap_unit 181*0592e24dSSascha Wildnerholds the unit number of the associated 182*0592e24dSSascha Wildner.Xr tap 4 183*0592e24dSSascha Wildnerdevice. 1841e4d9fd9SSascha Wildner.Sh SIGNALS 1851e4d9fd9SSascha WildnerThe virtual kernel enables all terminal signals while in 1861e4d9fd9SSascha Wildner.Xr ddb 4 1871e4d9fd9SSascha Wildnermode but only enables 1881e4d9fd9SSascha Wildner.Ql \&^\e 1891e4d9fd9SSascha Wildner.Pq Dv SIGQUIT 1901e4d9fd9SSascha Wildnerwhile operating as a console which causes the virtual kernel to enter its 1911e4d9fd9SSascha Wildnerinternal 1921e4d9fd9SSascha Wildner.Xr ddb 4 1931e4d9fd9SSascha Wildnerdebugger. 194974b26bfSSascha Wildner.Sh DEBUGGING 195974b26bfSSascha WildnerIt is possible to directly gdb the virtual kernel's process. 196974b26bfSSascha WildnerIt is recommended that you do a 197974b26bfSSascha Wildner.Ql handle SIGSEGV noprint 198974b26bfSSascha Wildnerto ignore page faults processed by the virtual kernel itself. 199c8e7d028SSascha Wildner.Sh EXAMPLES 2004af18995SSascha WildnerA couple of steps are necessary in order to prepare the system to build and 2014af18995SSascha Wildnerrun a virtual kernel. 2024af18995SSascha Wildner.Ss Setting up the filesystem 2034af18995SSascha WildnerThe 2044af18995SSascha Wildner.Nm 2054af18995SSascha Wildnerarchitecture needs a number of files which reside in 2064af18995SSascha Wildner.Pa /var/vkernel . 2074af18995SSascha WildnerSince these files tend to get rather big and the 2084af18995SSascha Wildner.Pa /var 2094af18995SSascha Wildnerpartition is usually of limited size, we recommend the directory to be 2104af18995SSascha Wildnercreated in the 2114af18995SSascha Wildner.Pa /home 2124af18995SSascha Wildnerpartition with a link to it in 2134af18995SSascha Wildner.Pa /var : 214c8e7d028SSascha Wildner.Bd -literal 2154af18995SSascha Wildnermkdir /home/var.vkernel 2164af18995SSascha Wildnerln -s /home/var.vkernel /var/vkernel 2174af18995SSascha Wildner.Ed 2184af18995SSascha Wildner.Pp 2194af18995SSascha WildnerNext, a filesystem image to be used by the virtual kernel has to be 220c8e7d028SSascha Wildnercreated and populated (assuming world has been built previously): 221c8e7d028SSascha Wildner.Bd -literal 2224af18995SSascha Wildnerdd if=/dev/zero of=/var/vkernel/rootimg.01 bs=1m count=2048 2234af18995SSascha Wildnervnconfig -c -s labels vn0 /var/vkernel/rootimg.01 2244af18995SSascha Wildnerdisklabel -r -w vn0 auto 225c8e7d028SSascha Wildnerdisklabel -e vn0 # edit the label to create a vn0a partition 2264af18995SSascha Wildnernewfs /dev/vn0a 2274af18995SSascha Wildnermount /dev/vn0a /mnt 228c8e7d028SSascha Wildnercd /usr/src 229c8e7d028SSascha Wildnermake installworld DESTDIR=/mnt 230c8e7d028SSascha Wildnercd etc 231c8e7d028SSascha Wildnermake distribution DESTDIR=/mnt 2326a060312SSascha Wildnerecho '/dev/vkd0a / ufs rw 1 1' >/mnt/etc/fstab 233c8e7d028SSascha Wildnerecho 'console "/usr/libexec/getty Pc" cons25 on secure' >/mnt/etc/ttys 2344af18995SSascha Wildnerumount /mnt 2354af18995SSascha Wildnervnconfig -u vn0 2364af18995SSascha Wildner.Ed 2374af18995SSascha Wildner.Ss Compiling the virtual kernel 2384af18995SSascha WildnerIn order to compile a virtual kernel use the 2394af18995SSascha Wildner.Li VKERNEL 2404af18995SSascha Wildnerkernel configuration file residing in 2414af18995SSascha Wildner.Pa /usr/src/sys/config 2424af18995SSascha Wildner(or a configuration file derived thereof): 243c8e7d028SSascha Wildner.Bd -literal 2444af18995SSascha Wildnercd /usr/src 24509b03fffSSascha Wildnermake -DNO_MODULES buildkernel KERNCONF=VKERNEL 2464af18995SSascha Wildner.Ed 2474af18995SSascha Wildner.Ss Enabling virtual kernel operation 2484af18995SSascha WildnerA special 2494af18995SSascha Wildner.Xr sysctl 8 , 2504af18995SSascha Wildner.Va vm.vkernel_enable , 2514af18995SSascha Wildnermust be set to enable 2524af18995SSascha Wildner.Nm 2534af18995SSascha Wildneroperation: 254c8e7d028SSascha Wildner.Bd -literal 2554af18995SSascha Wildnersysctl vm.vkernel_enable=1 2564af18995SSascha Wildner.Ed 25709b03fffSSascha Wildner.Ss Configuring the network on the host system 25809b03fffSSascha WildnerIn order to access a network interface of the host system from the 25909b03fffSSascha Wildner.Nm , 26009b03fffSSascha Wildneryou must add the interface to a 26109b03fffSSascha Wildner.Xr bridge 4 26209b03fffSSascha Wildnerdevice which will then be passed to the 26309b03fffSSascha Wildner.Fl I 26409b03fffSSascha Wildneroption: 26509b03fffSSascha Wildner.Bd -literal 26609b03fffSSascha Wildnerkldload if_bridge.ko 26709b03fffSSascha Wildnerkldload if_tap.ko 26809b03fffSSascha Wildnerifconfig bridge0 create 26909b03fffSSascha Wildnerifconfig bridge0 addm re0 # assuming re0 is the host's interface 27009b03fffSSascha Wildnerifconfig bridge0 up 27109b03fffSSascha Wildner.Ed 2724af18995SSascha Wildner.Ss Running the kernel 2734af18995SSascha WildnerFinally, the virtual kernel can be run: 274c8e7d028SSascha Wildner.Bd -literal 2754af18995SSascha Wildnercd /usr/obj/usr/src/sys/VKERNEL 27609b03fffSSascha Wildner\&./kernel.debug -m 64m -r /var/vkernel/rootimg.01 -I auto:bridge0 2774af18995SSascha Wildner.Ed 278c8e7d028SSascha Wildner.Pp 279c8e7d028SSascha WildnerThe 280c8e7d028SSascha Wildner.Xr reboot 8 281c8e7d028SSascha Wildnercommand can be used to stop a virtual kernel. 2824af18995SSascha Wildner.Sh SEE ALSO 28309b03fffSSascha Wildner.Xr bridge 4 , 28409b03fffSSascha Wildner.Xr tap 4 , 285c8e7d028SSascha Wildner.Xr vn 4 , 286c8e7d028SSascha Wildner.Xr build 7 , 287c8e7d028SSascha Wildner.Xr disklabel 8 , 28809b03fffSSascha Wildner.Xr ifconfig 8 , 289c8e7d028SSascha Wildner.Xr vnconfig 8 2904af18995SSascha Wildner.Sh HISTORY 2914af18995SSascha WildnerVirtual kernels were introduced in 2924af18995SSascha Wildner.Dx 1.7 . 2934af18995SSascha Wildner.Sh AUTHORS 2944af18995SSascha Wildner.An -nosplit 2954af18995SSascha Wildner.An Matt Dillon 2964af18995SSascha Wildnerthought up and implemented the 2974af18995SSascha Wildner.Nm 298*0592e24dSSascha Wildnerarchitecture and wrote the 299*0592e24dSSascha Wildner.Nm vkd 300*0592e24dSSascha Wildnerdevice driver. 301*0592e24dSSascha Wildner.An Sepherosa Ziehau 302*0592e24dSSascha Wildnerwrote the 303*0592e24dSSascha Wildner.Nm vke 304*0592e24dSSascha Wildnerdevice driver. 3054af18995SSascha WildnerThis manual page was written by 3064af18995SSascha Wildner.An Sascha Wildner . 307