poky/scripts/runqemu-ifdown
Chen Qi 559f4951e2 runqemu-ifdown: ensure to clean up TAP
In runqemu-ifup, ip command is used to add TAP; in runqemu-ifdown,
we should do the reversed logic, using ip command to delete TAP, to
make sure TAP is cleaned up by ourselves.

I can see that in runqemu-ifdown script, 'tunctl -d' and 'iptables'
commands are used to deal with TAP, but these two commands cannot
make sure that the TAP is cleaned up.

runqemu-ifup uses 'ip' to set up TAP, we really need to do the opposite
in runqemu-ifdown.

(From OE-Core rev: 322e41de7f4fb21315bf75f1038314c31ac4754b)

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2018-06-18 11:07:58 +01:00

2.2 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

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) " }

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