#!/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
