summaryrefslogtreecommitdiffstats
path: root/meta-sota/scripts/runqemu-gen-tapdevs
blob: 624deacb7011160032f6008e42c442d325e3c7a3 (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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/bin/bash
#
# Create a "bank" of tap network devices that can be used by the
# runqemu script. This script needs to be run as root, and will
# use the tunctl binary from the build system sysroot. Note: many Linux 
# distros these days still use an older version of tunctl which does not
# support the group permissions option, hence the need to use the build
# system provided version.
#
# Copyright (C) 2010 Intel Corp.
#
# 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 "Usage: sudo $0 <uid> <gid> <num> <native-sysroot-basedir>"
        echo "Where <uid> is the numeric user id the tap devices will be owned by"
	echo "Where <gid> is the numeric group id the tap devices will be owned by"
	echo "<num> is the number of tap devices to create (0 to remove all)"
	echo "<native-sysroot-basedir> is the path to the build system's native sysroot"
	exit 1
}

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

if [ $# -ne 4 ]; then
	echo "Error: Incorrect number of arguments"
	usage
fi

TUID=$1
GID=$2
COUNT=$3
SYSROOT=$4

TUNCTL=$SYSROOT/usr/bin/tunctl
if [[ ! -x "$TUNCTL" || -d "$TUNCTL" ]]; then
	echo "Error: $TUNCTL is not an executable"
	usage
fi

SCRIPT_DIR=`dirname $0`
RUNQEMU_IFUP="$SCRIPT_DIR/runqemu-ifup"
if [ ! -x "$RUNQEMU_IFUP" ]; then
	echo "Error: Unable to find the runqemu-ifup script in $SCRIPT_DIR"
	exit 1
fi

IFCONFIG=`which ip 2> /dev/null`
if [ -z "$IFCONFIG" ]; then
	# Is it ever anywhere else?
	IFCONFIG=/sbin/ip
fi
if [ ! -x "$IFCONFIG" ]; then
       echo "$IFCONFIG cannot be executed"
       exit 1
fi

# Ensure we start with a clean slate
for tap in `$IFCONFIG link | grep tap | awk '{ print \$2 }' | sed s/://`; do
	echo "Note: Destroying pre-existing tap interface $tap..."
	$TUNCTL -d $tap
done

echo "Creating $COUNT tap devices for UID: $TUID GID: $GID..."
for ((index=0; index < $COUNT; index++)); do
	echo "Creating tap$index"
	ifup=`$RUNQEMU_IFUP $TUID $GID $SYSROOT 2>&1`
	if [ $? -ne 0 ]; then
		echo "Error running tunctl: $ifup"
		exit 1
	fi
done

if [ $COUNT -gt 0 ]; then
	echo "Note: For systems running NetworkManager, it's recommended"
	echo "Note: that the tap devices be set as unmanaged in the"
	echo "Note: NetworkManager.conf file. Add the following lines to"
	echo "Note: /etc/NetworkManager/NetworkManager.conf"
	echo "[keyfile]"
	echo "unmanaged-devices=interface-name:tap*"
fi

# The runqemu script will check for this file, and if it exists,
# will use the existing bank of tap devices without creating
# additional ones via sudo.
touch /etc/runqemu-nosudo
a id='n504' href='#n504'>504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631