poky/scripts/runqemu-ifdown
Daniel Müller 2b3ae4d1ab scripts/runqemu-ifdown: Don't treat the last iptables command as special
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>
2022-02-05 17:46:05 +00:00

1.7 KiB
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:

ALL=NOPASSWD: /path/to/runqemu-ifup

ALL=NOPASSWD: /path/to/runqemu-ifdown

Copyright (c) 2006-2011 Linux Foundation

SPDX-License-Identifier: GPL-2.0-only

usage() { echo "sudo $(basename $0) " }

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