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; |