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*b580b1b1SSascha Wildner.\" $DragonFly: src/share/man/man7/vkernel.7,v 1.12 2007/03/16 13:34:13 swildner Exp $ 334af18995SSascha Wildner.\" 34dd54cb3aSSascha Wildner.Dd March 16, 2007 354af18995SSascha Wildner.Dt VKERNEL 7 364af18995SSascha Wildner.Os 374af18995SSascha Wildner.Sh NAME 384af18995SSascha Wildner.Nm vkernel 394af18995SSascha Wildner.Nd virtual kernel architecture 404af18995SSascha Wildner.Sh SYNOPSIS 4165d7306bSSascha Wildner.Cd "platform vkernel" 42c8e7d028SSascha Wildner.Cd "device vkd" 43c8e7d028SSascha Wildner.Cd "device vke" 44c8e7d028SSascha Wildner.Pp 454af18995SSascha Wildner.Pa /usr/obj/usr/src/sys/VKERNEL/kernel.debug 4603071031SSascha Wildner.Op Fl sUv 4709b03fffSSascha Wildner.Op Fl e Ar name Ns = Ns Li value : Ns Ar name Ns = Ns Li value : Ns ... 48dd54cb3aSSascha Wildner.Op Fl i Ar file 4909b03fffSSascha Wildner.Op Fl I Ar interface Ns Op Ar :address1 Ns Oo Ar :address2 Oc Ns Oo Ar /netmask Oc 504af18995SSascha Wildner.Op Fl m Ar size 514af18995SSascha Wildner.Op Fl r Ar file 524af18995SSascha Wildner.Sh DESCRIPTION 534af18995SSascha WildnerThe 544af18995SSascha Wildner.Nm 554af18995SSascha Wildnerarchitecture allows for running 564af18995SSascha Wildner.Dx 574af18995SSascha Wildnerkernels in userland. 584af18995SSascha Wildner.Pp 594af18995SSascha WildnerThe following options are available: 604af18995SSascha Wildner.Bl -tag -width ".Fl m Ar size" 6109b03fffSSascha Wildner.It Fl e Ar name Ns = Ns Li value : Ns Ar name Ns = Ns Li value : Ns ... 6209b03fffSSascha WildnerSpecify an environment to be used by the kernel. 63dd54cb3aSSascha Wildner.It Fl i Ar file 64dd54cb3aSSascha WildnerSpecify a memory image 65dd54cb3aSSascha Wildner.Ar file 66dd54cb3aSSascha Wildnerto be used by the virtual kernel. 67dd54cb3aSSascha WildnerIf no 68dd54cb3aSSascha Wildner.Fl i 69dd54cb3aSSascha Wildneroption is given, the kernel will generate a name of the form 70dd54cb3aSSascha Wildner.Pa /var/vkernel/memimg.XXXXXX , 71dd54cb3aSSascha Wildnerwith the trailing 72dd54cb3aSSascha Wildner.Ql X Ns s 73dd54cb3aSSascha Wildnerbeing replaced by a sequential number, e.g.\& 74dd54cb3aSSascha Wildner.Pa memimg.000001 . 7509b03fffSSascha Wildner.It Fl I Ar interface Ns Op Ar :address1 Ns Oo Ar :address2 Oc Ns Oo Ar /netmask Oc 7609b03fffSSascha WildnerCreate a virtual network device, with the first 7709b03fffSSascha Wildner.Fl I 7809b03fffSSascha Wildneroption defining 7909b03fffSSascha Wildner.Dq Li vke0 , 8009b03fffSSascha Wildnerthe second one 8109b03fffSSascha Wildner.Dq Li vke1 , 8209b03fffSSascha Wildnerand so on. 8309b03fffSSascha Wildner.Pp 8409b03fffSSascha WildnerThe 8509b03fffSSascha Wildner.Ar interface 8609b03fffSSascha Wildnerargument is the name of a 8709b03fffSSascha Wildner.Xr tap 4 8809b03fffSSascha Wildnerdevice node. 8909b03fffSSascha WildnerThe 9009b03fffSSascha Wildner.Pa /dev/ 9109b03fffSSascha Wildnerpath prefix does not have to be specified and will be automatically prepended. 9209b03fffSSascha WildnerSpecifying 9309b03fffSSascha Wildner.Cm auto 9409b03fffSSascha Wildnerwill pick the first unused 9509b03fffSSascha Wildner.Xr tap 4 9609b03fffSSascha Wildnerdevice. 9709b03fffSSascha Wildner.Pp 9809b03fffSSascha WildnerThe 9909b03fffSSascha Wildner.Ar address1 10009b03fffSSascha Wildnerand 10109b03fffSSascha Wildner.Ar address2 10209b03fffSSascha Wildnerarguments are the IP addresses of the 10309b03fffSSascha Wildner.Xr tap 4 10409b03fffSSascha Wildnerand 10509b03fffSSascha Wildner.Xr vke 4 10609b03fffSSascha Wildnerinterfaces. 10709b03fffSSascha WildnerOptionally, 10809b03fffSSascha Wildner.Ar address1 10909b03fffSSascha Wildnermay be of the form 11009b03fffSSascha Wildner.Li bridge Ns Em X 11109b03fffSSascha Wildnerin which case the 11209b03fffSSascha Wildner.Xr tap 4 11309b03fffSSascha Wildnerinterface is added to the specified 11409b03fffSSascha Wildner.Xr bridge 4 11509b03fffSSascha Wildnerinterface. 11609b03fffSSascha Wildner.Pp 11709b03fffSSascha WildnerThe 11809b03fffSSascha Wildner.Ar netmask 11909b03fffSSascha Wildnerargument applies to all interfaces for which an address is specified. 120*b580b1b1SSascha Wildner.Pp 121*b580b1b1SSascha WildnerThe 122*b580b1b1SSascha Wildner.Nm 123*b580b1b1SSascha Wildnerarchitecture allows for a maximum of 16 virtual network devices. 1244af18995SSascha Wildner.It Fl m Ar size 1254af18995SSascha WildnerSpecify the amount of memory to be used by the kernel in bytes, 1264af18995SSascha Wildner.Cm K 1273cea05a4SSascha Wildner.Pq kilobytes , 1284af18995SSascha Wildner.Cm M 1293cea05a4SSascha Wildner.Pq megabytes 1303cea05a4SSascha Wildneror 1314af18995SSascha Wildner.Cm G 1323cea05a4SSascha Wildner.Pq gigabytes . 13309b03fffSSascha WildnerLowercase versions of 1344af18995SSascha Wildner.Cm K , M , 1354af18995SSascha Wildnerand 1364af18995SSascha Wildner.Cm G 1374af18995SSascha Wildnerare allowed. 1384af18995SSascha Wildner.It Fl r Ar file 1394af18995SSascha WildnerSpecify the root image 1404af18995SSascha Wildner.Ar file 1414af18995SSascha Wildnerto be used by the kernel. 1424af18995SSascha WildnerSee 143c8e7d028SSascha Wildner.Sx EXAMPLES 1444af18995SSascha Wildnerfor further information on how to prepare a root image. 145c8e7d028SSascha Wildner.It Fl s 146c8e7d028SSascha WildnerBoot into single-user mode. 14703071031SSascha Wildner.It Fl U 14803071031SSascha WildnerEnable writing to kernel memory and module loading. 14903071031SSascha WildnerBy default, those are disabled for security reasons. 1504af18995SSascha Wildner.It Fl v 1514af18995SSascha WildnerTurn on verbose booting. 1524af18995SSascha Wildner.El 1531e4d9fd9SSascha Wildner.Sh SIGNALS 1541e4d9fd9SSascha WildnerThe virtual kernel enables all terminal signals while in 1551e4d9fd9SSascha Wildner.Xr ddb 4 1561e4d9fd9SSascha Wildnermode but only enables 1571e4d9fd9SSascha Wildner.Ql \&^\e 1581e4d9fd9SSascha Wildner.Pq Dv SIGQUIT 1591e4d9fd9SSascha Wildnerwhile operating as a console which causes the virtual kernel to enter its 1601e4d9fd9SSascha Wildnerinternal 1611e4d9fd9SSascha Wildner.Xr ddb 4 1621e4d9fd9SSascha Wildnerdebugger. 163c8e7d028SSascha Wildner.Sh EXAMPLES 1644af18995SSascha WildnerA couple of steps are necessary in order to prepare the system to build and 1654af18995SSascha Wildnerrun a virtual kernel. 1664af18995SSascha Wildner.Ss Setting up the filesystem 1674af18995SSascha WildnerThe 1684af18995SSascha Wildner.Nm 1694af18995SSascha Wildnerarchitecture needs a number of files which reside in 1704af18995SSascha Wildner.Pa /var/vkernel . 1714af18995SSascha WildnerSince these files tend to get rather big and the 1724af18995SSascha Wildner.Pa /var 1734af18995SSascha Wildnerpartition is usually of limited size, we recommend the directory to be 1744af18995SSascha Wildnercreated in the 1754af18995SSascha Wildner.Pa /home 1764af18995SSascha Wildnerpartition with a link to it in 1774af18995SSascha Wildner.Pa /var : 178c8e7d028SSascha Wildner.Bd -literal 1794af18995SSascha Wildnermkdir /home/var.vkernel 1804af18995SSascha Wildnerln -s /home/var.vkernel /var/vkernel 1814af18995SSascha Wildner.Ed 1824af18995SSascha Wildner.Pp 1834af18995SSascha WildnerNext, a filesystem image to be used by the virtual kernel has to be 184c8e7d028SSascha Wildnercreated and populated (assuming world has been built previously): 185c8e7d028SSascha Wildner.Bd -literal 1864af18995SSascha Wildnerdd if=/dev/zero of=/var/vkernel/rootimg.01 bs=1m count=2048 1874af18995SSascha Wildnervnconfig -c -s labels vn0 /var/vkernel/rootimg.01 1884af18995SSascha Wildnerdisklabel -r -w vn0 auto 189c8e7d028SSascha Wildnerdisklabel -e vn0 # edit the label to create a vn0a partition 1904af18995SSascha Wildnernewfs /dev/vn0a 1914af18995SSascha Wildnermount /dev/vn0a /mnt 192c8e7d028SSascha Wildnercd /usr/src 193c8e7d028SSascha Wildnermake installworld DESTDIR=/mnt 194c8e7d028SSascha Wildnercd etc 195c8e7d028SSascha Wildnermake distribution DESTDIR=/mnt 1966a060312SSascha Wildnerecho '/dev/vkd0a / ufs rw 1 1' >/mnt/etc/fstab 197c8e7d028SSascha Wildnerecho 'console "/usr/libexec/getty Pc" cons25 on secure' >/mnt/etc/ttys 1984af18995SSascha Wildnerumount /mnt 1994af18995SSascha Wildnervnconfig -u vn0 2004af18995SSascha Wildner.Ed 2014af18995SSascha Wildner.Ss Compiling the virtual kernel 2024af18995SSascha WildnerIn order to compile a virtual kernel use the 2034af18995SSascha Wildner.Li VKERNEL 2044af18995SSascha Wildnerkernel configuration file residing in 2054af18995SSascha Wildner.Pa /usr/src/sys/config 2064af18995SSascha Wildner(or a configuration file derived thereof): 207c8e7d028SSascha Wildner.Bd -literal 2084af18995SSascha Wildnercd /usr/src 20909b03fffSSascha Wildnermake -DNO_MODULES buildkernel KERNCONF=VKERNEL 2104af18995SSascha Wildner.Ed 2114af18995SSascha Wildner.Ss Enabling virtual kernel operation 2124af18995SSascha WildnerA special 2134af18995SSascha Wildner.Xr sysctl 8 , 2144af18995SSascha Wildner.Va vm.vkernel_enable , 2154af18995SSascha Wildnermust be set to enable 2164af18995SSascha Wildner.Nm 2174af18995SSascha Wildneroperation: 218c8e7d028SSascha Wildner.Bd -literal 2194af18995SSascha Wildnersysctl vm.vkernel_enable=1 2204af18995SSascha Wildner.Ed 22109b03fffSSascha Wildner.Ss Configuring the network on the host system 22209b03fffSSascha WildnerIn order to access a network interface of the host system from the 22309b03fffSSascha Wildner.Nm , 22409b03fffSSascha Wildneryou must add the interface to a 22509b03fffSSascha Wildner.Xr bridge 4 22609b03fffSSascha Wildnerdevice which will then be passed to the 22709b03fffSSascha Wildner.Fl I 22809b03fffSSascha Wildneroption: 22909b03fffSSascha Wildner.Bd -literal 23009b03fffSSascha Wildnerkldload if_bridge.ko 23109b03fffSSascha Wildnerkldload if_tap.ko 23209b03fffSSascha Wildnerifconfig bridge0 create 23309b03fffSSascha Wildnerifconfig bridge0 addm re0 # assuming re0 is the host's interface 23409b03fffSSascha Wildnerifconfig bridge0 up 23509b03fffSSascha Wildner.Ed 2364af18995SSascha Wildner.Ss Running the kernel 2374af18995SSascha WildnerFinally, the virtual kernel can be run: 238c8e7d028SSascha Wildner.Bd -literal 2394af18995SSascha Wildnercd /usr/obj/usr/src/sys/VKERNEL 24009b03fffSSascha Wildner\&./kernel.debug -m 64m -r /var/vkernel/rootimg.01 -I auto:bridge0 2414af18995SSascha Wildner.Ed 242c8e7d028SSascha Wildner.Pp 243c8e7d028SSascha WildnerThe 244c8e7d028SSascha Wildner.Xr reboot 8 245c8e7d028SSascha Wildnercommand can be used to stop a virtual kernel. 2463e22cf8cSMatthew Dillon.Ss Debugging the kernel 2473e22cf8cSMatthew DillonIt is possible to directly gdb the virtual kernel's process. It is 2483e22cf8cSMatthew Dillonrecommended that you do a 'handle SIGSEGV noprint' to ignore page faults 2493e22cf8cSMatthew Dillontaken by the virtual kernel itself (which it processes itself). 2504af18995SSascha Wildner.Sh SEE ALSO 25109b03fffSSascha Wildner.Xr bridge 4 , 25209b03fffSSascha Wildner.Xr tap 4 , 253c8e7d028SSascha Wildner.Xr vn 4 , 254c8e7d028SSascha Wildner.Xr build 7 , 255c8e7d028SSascha Wildner.Xr disklabel 8 , 25609b03fffSSascha Wildner.Xr ifconfig 8 , 257c8e7d028SSascha Wildner.Xr vnconfig 8 2584af18995SSascha Wildner.Sh HISTORY 2594af18995SSascha WildnerVirtual kernels were introduced in 2604af18995SSascha Wildner.Dx 1.7 . 2614af18995SSascha Wildner.Sh AUTHORS 2624af18995SSascha Wildner.An -nosplit 2634af18995SSascha Wildner.An Matt Dillon 2644af18995SSascha Wildnerthought up and implemented the 2654af18995SSascha Wildner.Nm 2664af18995SSascha Wildnerarchitecture. 2674af18995SSascha WildnerThis manual page was written by 2684af18995SSascha Wildner.An Sascha Wildner . 269