Statistics
| Branch: | Tag: | Revision:

root / vlans / vlan @ cf51ea5b

History | View | Annotate | Download (1.2 kB)

1 cf51ea5b Dimitris Aragiorgis
#!/bin/sh
2 cf51ea5b Dimitris Aragiorgis
#
3 cf51ea5b Dimitris Aragiorgis
4 cf51ea5b Dimitris Aragiorgis
add_vlan() {
5 cf51ea5b Dimitris Aragiorgis
	if [ -n "`echo -n "$1" | tr -d '[0-9]'`" ]; then
6 cf51ea5b Dimitris Aragiorgis
		echo "Invalid vlan tag $1"
7 cf51ea5b Dimitris Aragiorgis
		exit 1
8 cf51ea5b Dimitris Aragiorgis
	fi
9 cf51ea5b Dimitris Aragiorgis
		
10 cf51ea5b Dimitris Aragiorgis
	vlan=$1
11 cf51ea5b Dimitris Aragiorgis
	ifce=$2
12 cf51ea5b Dimitris Aragiorgis
13 cf51ea5b Dimitris Aragiorgis
	if [ -d "/sys/class/net/vlan${vlan}/bridge" ]; then
14 cf51ea5b Dimitris Aragiorgis
		echo "Vlan $vlan already configured"
15 cf51ea5b Dimitris Aragiorgis
		exit 0
16 cf51ea5b Dimitris Aragiorgis
	fi
17 cf51ea5b Dimitris Aragiorgis
18 cf51ea5b Dimitris Aragiorgis
	if ( grep -q "iface vlan${vlan}$" /etc/network/interfaces ); then
19 cf51ea5b Dimitris Aragiorgis
		echo "Vlan $vlan configured but down, bringing up"
20 cf51ea5b Dimitris Aragiorgis
	else
21 cf51ea5b Dimitris Aragiorgis
		echo "Adding vlan $vlan to /etc/network/interfaces"
22 cf51ea5b Dimitris Aragiorgis
		cat >>/etc/network/interfaces <<EOF
23 cf51ea5b Dimitris Aragiorgis
auto vlan${vlan}
24 cf51ea5b Dimitris Aragiorgis
iface vlan${vlan} inet manual
25 cf51ea5b Dimitris Aragiorgis
	bridge_ports	${ifce}.${vlan}
26 cf51ea5b Dimitris Aragiorgis
	bridge_stp	off
27 cf51ea5b Dimitris Aragiorgis
	bridge_maxwait	0
28 cf51ea5b Dimitris Aragiorgis
	bridge_fd	0
29 cf51ea5b Dimitris Aragiorgis
30 cf51ea5b Dimitris Aragiorgis
EOF
31 cf51ea5b Dimitris Aragiorgis
	fi
32 cf51ea5b Dimitris Aragiorgis
33 cf51ea5b Dimitris Aragiorgis
	/sbin/ifup "vlan${vlan}" >/dev/null 2>&1
34 cf51ea5b Dimitris Aragiorgis
	exit 0
35 cf51ea5b Dimitris Aragiorgis
}
36 cf51ea5b Dimitris Aragiorgis
37 cf51ea5b Dimitris Aragiorgis
list_vlans() {
38 cf51ea5b Dimitris Aragiorgis
	for iface in /sys/class/net/vlan*; do
39 cf51ea5b Dimitris Aragiorgis
		if [ -d "$iface/bridge" ]; then
40 cf51ea5b Dimitris Aragiorgis
			vlan=`basename "$iface"`
41 cf51ea5b Dimitris Aragiorgis
			( grep -q "iface $vlan$" /etc/network/interfaces )
42 cf51ea5b Dimitris Aragiorgis
			if [ $? == 0 ]; then
43 cf51ea5b Dimitris Aragiorgis
				echo "${vlan##vlan}"
44 cf51ea5b Dimitris Aragiorgis
			else
45 cf51ea5b Dimitris Aragiorgis
				echo "${vlan##vlan} (unconfigured)"
46 cf51ea5b Dimitris Aragiorgis
			fi
47 cf51ea5b Dimitris Aragiorgis
		fi
48 cf51ea5b Dimitris Aragiorgis
	done
49 cf51ea5b Dimitris Aragiorgis
50 cf51ea5b Dimitris Aragiorgis
}
51 cf51ea5b Dimitris Aragiorgis
52 cf51ea5b Dimitris Aragiorgis
case "$1" in
53 cf51ea5b Dimitris Aragiorgis
	add)
54 cf51ea5b Dimitris Aragiorgis
	if [ x"$3" != x"" ]; then
55 cf51ea5b Dimitris Aragiorgis
		ifce=$3
56 cf51ea5b Dimitris Aragiorgis
	else
57 cf51ea5b Dimitris Aragiorgis
		ifce="bond0"
58 cf51ea5b Dimitris Aragiorgis
	fi
59 cf51ea5b Dimitris Aragiorgis
	add_vlan "$2" "$ifce"
60 cf51ea5b Dimitris Aragiorgis
	;;
61 cf51ea5b Dimitris Aragiorgis
	remove)
62 cf51ea5b Dimitris Aragiorgis
	remove_vlan "$2"
63 cf51ea5b Dimitris Aragiorgis
	;;
64 cf51ea5b Dimitris Aragiorgis
	list)
65 cf51ea5b Dimitris Aragiorgis
	list_vlans
66 cf51ea5b Dimitris Aragiorgis
	;;
67 cf51ea5b Dimitris Aragiorgis
	*)
68 cf51ea5b Dimitris Aragiorgis
	echo "Usage: vlan (add number [ifce="bond0"]|remove number|list)"
69 cf51ea5b Dimitris Aragiorgis
	;;
70 cf51ea5b Dimitris Aragiorgis
esac;