1#! /bin/sh
2
3# $NetBSD: usermode,v 1.5 2011/05/19 00:24:22 agc Exp $
4
5# Copyright (c) 2012 Alistair Crooks <agc@NetBSD.org>
6# All rights reserved.
7#
8# Redistribution and use in source and binary forms, with or without
9# modification, are permitted provided that the following conditions
10# are met:
11# 1. Redistributions of source code must retain the above copyright
12#    notice, this list of conditions and the following disclaimer.
13# 2. Redistributions in binary form must reproduce the above copyright
14#    notice, this list of conditions and the following disclaimer in the
15#    documentation and/or other materials provided with the distribution.
16#
17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27#
28
29image=usermode.img
30pkgs=pkgs.img
31
32while [ $# -gt 0 ]; do
33	case "$1" in
34	-v)	set -x ;;
35	*)	break ;;
36	esac
37	shift
38done
39
40if [ $# -gt 0 ]; then
41	image=$1
42fi
43
44# check bridging is set up
45bridging=$(ifconfig tap0 | awk '$1 == "inet" { print $2 }')
46case "${bridging}" in
47*.*.*.*)	echo "bridging is already up on ${bridging}" ;;
48*)		interface=$(ifconfig -l | awk '{print $1}')
49		sudo ifconfig tap0 create up
50		sudo ifconfig bridge0 create
51		sudo brconfig bridge0 add tap0 add ${interface} up
52		sudo chmod 664 /dev/tap*
53		;;
54esac
55
56# check syscall emulation module is loaded
57mod=$(modstat syscallemu | awk '$1 == "syscallemu" { print; exit }')
58case "${mod}" in
59syscallemu*)	echo "Host syscall emulation module loaded" ;;
60*)		sudo modload syscallemu ;;
61esac
62
63./netbsd disk=${image} disk=${pkgs} net=tap0,00:00:de:ad:be:ef 
64
65exit 0
66