mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 21:09:03 +02:00

The runqemu-ifup script performs a bunch of setup steps that runqemu-ifdown attempts to undo later on. While a bunch of said setup operations are considered fatal should they fail, the iptables based NAT setup notably is not. The tear down procedure in runqemu-ifdown, however, has the iptables based tear down as the last operation, with the status of it determining the overall status of the script. Hence, if this step fails, the script is considered a failure overall. That is arguably inconsistent: If the NAT setup did not succeed, the tear down cannot succeed either. To ensure similarity of the two paths, let's not treat the last iptables tear down operation any special and allow it to fail the runqemu-ifdown script, but just ignore failures. Background: we have seen a NAT related setup problem on the ifup path (which didn't cause script failure), but then saw an issue bubbled up when this operation was meant to be undone on the ifdown path. (From OE-Core rev: 0ebcfb034bcad81efef5f746f0aa0b69772901a0) Signed-off-by: Daniel Müller <muellerd@fb.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
68 lines
1.7 KiB
Bash
Executable File
68 lines
1.7 KiB
Bash
Executable File
#!/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
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
|
|
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
|
|
STAGING_BINDIR_NATIVE=$2
|
|
|
|
TUNCTL=$STAGING_BINDIR_NATIVE/tunctl
|
|
if [ ! -e "$TUNCTL" ]; then
|
|
echo "Error: Unable to find tunctl binary in '$STAGING_BINDIR_NATIVE', please bitbake qemu-helper-native"
|
|
exit 1
|
|
fi
|
|
|
|
$TUNCTL -d $TAP
|
|
|
|
IFCONFIG=`which ip 2> /dev/null`
|
|
if [ "x$IFCONFIG" = "x" ]; then
|
|
# better than nothing...
|
|
IFCONFIG=/sbin/ip
|
|
fi
|
|
if [ -x "$IFCONFIG" ]; then
|
|
if `$IFCONFIG link show $TAP > /dev/null 2>&1`; then
|
|
$IFCONFIG link del $TAP
|
|
fi
|
|
fi
|
|
# 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
|
|
true
|