aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/runqemu-ifdown
blob: 8f66cfa2a9bdb047ed3839ced32cb6b8c89a282d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/bin/bash
#
# QEMU network configuration script to bring down tap devices. This
# utility needs to be run as root, and will use the tunctl binary
# from the native sysroot. 
#
# If you find yourself calling this script a lot, you can add the
# the following to your /etc/sudoers file to be able to run this
# command without entering your password each time:
#
# <my-username> ALL=NOPASSWD: /path/to/runqemu-ifup
# <my-username> ALL=NOPASSWD: /path/to/runqemu-ifdown
#
# Copyright (c) 2006-2011 Linux Foundation
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

usage() {
	echo "sudo $(basename $0) <tap-dev> <native-sysroot-basedir>"
}

if [ $EUID -ne 0 ]; then
	echo "Error: This script (runqemu-ifdown) must be run with root privileges"
	exit 1
fi

if [ $# -ne 2 ]; then
	usage
	exit 1
fi

TAP=$1
NATIVE_SYSROOT_DIR=$2

TUNCTL=$NATIVE_SYSROOT_DIR/usr/bin/tunctl
if [ ! -e "$TUNCTL" ]; then
	echo "Error: Unable to find tunctl binary in '$NATIVE_SYSROOT_DIR/usr/bin', please bitbake qemu-helper-native"
	exit 1
fi

$TUNCTL -d $TAP

# cleanup the remaining iptables rules
IPTABLES=`which iptables 2> /dev/null`
if [ "x$IPTABLES" = "x" ]; then
	IPTABLES=/sbin/iptables
fi
if [ ! -x "$IPTABLES" ]; then
	echo "$IPTABLES cannot be executed"
	exit 1
fi
n=$[ (`echo $TAP | sed 's/tap//'` * 2) + 1 ]
dest=$[ (`echo $TAP | sed 's/tap//'` * 2) + 2 ]
$IPTABLES -D POSTROUTING -t nat -j MASQUERADE -s 192.168.7.$n/32
$IPTABLES -D POSTROUTING -t nat -j MASQUERADE -s 192.168.7.$dest/32
pan class="n">logging.DEBUG - 1 DEBUG = logging.DEBUG VERBOSE = logging.INFO - 1 NOTE = logging.INFO PLAIN = logging.INFO + 1 ERROR = logging.ERROR WARNING = logging.WARNING CRITICAL = logging.CRITICAL levelnames = { DEBUG3 : 'DEBUG', DEBUG2 : 'DEBUG', DEBUG : 'DEBUG', VERBOSE: 'NOTE', NOTE : 'NOTE', PLAIN : '', WARNING : 'WARNING', ERROR : 'ERROR', CRITICAL: 'ERROR', } color_enabled = False BASECOLOR, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(29,38) COLORS = { DEBUG3 : CYAN, DEBUG2 : CYAN, DEBUG : CYAN, VERBOSE : BASECOLOR, NOTE : BASECOLOR, PLAIN : BASECOLOR, WARNING : YELLOW, ERROR : RED, CRITICAL: RED, } BLD = '\033[1;%dm' STD = '\033[%dm' RST = '\033[0m' def getLevelName(self, levelno): try: return self.levelnames[levelno] except KeyError: self.levelnames[levelno] = value = 'Level %d' % levelno return value def format(self, record): record.levelname = self.getLevelName(record.levelno) if record.levelno == self.PLAIN: msg = record.getMessage() else: if self.color_enabled: record = self.colorize(record) msg = logging.Formatter.format(self, record) if hasattr(record, 'bb_exc_info'): etype, value, tb = record.bb_exc_info formatted = bb.exceptions.format_exception(etype, value, tb, limit=5) msg += '\n' + ''.join(formatted) return msg def colorize(self, record): color = self.COLORS[record.levelno] if self.color_enabled and color is not None: record = copy.copy(record) record.levelname = "".join([self.BLD % color, record.levelname, self.RST]) record.msg = "".join([self.STD % color, record.msg, self.RST]) return record def enable_color(self): self.color_enabled = True class BBLogFilter(object): def __init__(self, handler, level, debug_domains): self.stdlevel = level self.debug_domains = debug_domains loglevel = level for domain in debug_domains: if debug_domains[domain] < loglevel: loglevel = debug_domains[domain] handler.setLevel(loglevel) handler.addFilter(self) def filter(self, record): if record.levelno >= self.stdlevel: return True if record.name in self.debug_domains and record.levelno >= self.debug_domains[record.name]: return True return False # Message control functions # loggerDefaultDebugLevel = 0 loggerDefaultVerbose = False loggerVerboseLogs = False loggerDefaultDomains = [] def init_msgconfig(verbose, debug, debug_domains = []): """ Set default verbosity and debug levels config the logger """ bb.msg.loggerDefaultDebugLevel = debug bb.msg.loggerDefaultVerbose = verbose if verbose: bb.msg.loggerVerboseLogs = True bb.msg.loggerDefaultDomains = debug_domains def constructLogOptions(): debug = loggerDefaultDebugLevel verbose = loggerDefaultVerbose domains = loggerDefaultDomains if debug: level = BBLogFormatter.DEBUG - debug + 1 elif verbose: level = BBLogFormatter.VERBOSE else: level = BBLogFormatter.NOTE debug_domains = {} for (domainarg, iterator) in groupby(domains): dlevel = len(tuple(iterator)) debug_domains["BitBake.%s" % domainarg] = logging.DEBUG - dlevel + 1 return level, debug_domains def addDefaultlogFilter(handler): level, debug_domains = constructLogOptions() BBLogFilter(handler, level, debug_domains) # # Message handling functions # def fatal(msgdomain, msg): if msgdomain: logger = logging.getLogger("BitBake.%s" % msgdomain) else: logger = logging.getLogger("BitBake") logger.critical(msg) sys.exit(1)