1#! /bin/sh
2
3# $NetBSD: usermode,v 1.1 2012/01/15 02:01:02 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