]>
Commit | Line | Data |
---|---|---|
5b20e43a MT |
1 | #!/bin/sh |
2 | ######################################################################## | |
3 | # Begin $NETWORK_DEVICES/services/vlan | |
4 | # | |
5 | # Description : VLAN Script | |
6 | # | |
7 | # Authors : Michael Tremer - michael.tremer@ipfire.org | |
8 | # | |
9 | # Version : 00.00 | |
10 | # | |
11 | # Notes : This script adds vlan support. | |
12 | # | |
13 | ######################################################################## | |
14 | ||
15 | . /lib/network/hook-header | |
16 | ||
17 | HOOK_NAME=vlan | |
18 | HOOK_TYPE=port | |
19 | ||
20 | function port_name() { | |
21 | echo "${zone}v${ID}" | |
22 | } | |
23 | ||
24 | case "${action}" in | |
25 | help) | |
26 | ;; | |
27 | ||
28 | info) | |
29 | echo "HOOK_NAME=${HOOK_NAME}" | |
30 | echo "HOOK_TYPE=${HOOK_TYPE}" | |
31 | ;; | |
32 | ||
33 | pre-up) | |
34 | # Load the kernel module | |
35 | grep -q ^8021q /proc/modules || modprobe 8021q | |
36 | ||
37 | if ! port_is_up $(port_name); then | |
38 | MESSAGE="Adding VLAN ${ID} to port ${MAC}..." | |
39 | ||
40 | if ! device_is_up $(devicify ${MAC}); then | |
41 | ip link set $(devicify ${MAC}) up | |
42 | fi | |
43 | vconfig add $(devicify ${MAC}) ${ID} >/dev/null | |
44 | evaluate_retval | |
45 | ||
46 | device_rename $(get_device_by_mac_and_vid ${MAC} ${ID}) $(port_name) | |
47 | ip link set $(port_name) up | |
48 | ||
49 | ebtables -t broute -A BROUTING -p 802_1Q --vlan-id=${ID} -j DROP | |
50 | fi | |
51 | ;; | |
52 | ||
53 | post-up) | |
54 | if ! zone_has_device_attached ${zone} $(port_name); then | |
55 | zone_add_port ${zone} $(get_device ${MAC} ${ID}) | |
56 | fi | |
57 | ;; | |
58 | ||
59 | pre-down) | |
60 | if zone_has_device_attached ${zone} $(port_name); then | |
61 | zone_del_port ${zone} $(get_device_by_mac_and_vid ${MAC} ${ID}) | |
62 | fi | |
63 | ;; | |
64 | ||
65 | post-down) | |
66 | if port_is_up $(port_name); then | |
67 | MESSAGE="Removing VLAN ${ID} from port ${MAC}..." | |
68 | ||
69 | vconfig rem $(get_device_by_mac_and_vid ${MAC} ${ID}) >/dev/null | |
70 | evaluate_retval | |
71 | ||
72 | ebtables -t broute -D BROUTING -p 802_1Q --vlan-id=${ID} -j DROP | |
73 | fi | |
74 | ;; | |
75 | ||
76 | add) | |
77 | MAC=$(macify ${1}) | |
78 | ID=${2} # Must be integer between 1 and 4096 | |
79 | ||
80 | UUID=$(uuid) | |
81 | cat <<EOF > ${CONFIG_UUIDS}/${UUID} | |
82 | HOOK="${HOOK_NAME}" | |
83 | ID="${ID}" | |
84 | MAC="${MAC}" | |
85 | EOF | |
86 | ln -sf ${CONFIG_UUIDS}/${UUID} \ | |
87 | ${CONFIG_ZONES}/${zone}/${HOOK_NAME}-${UUID} | |
88 | ||
89 | log_success_msg "Configuration successfully saved!" | |
90 | echo " Device : $(devicify ${MAC})" | |
91 | echo " MAC address : ${MAC}" | |
92 | echo " VLAN tag : ${ID}" | |
93 | ;; | |
94 | ||
95 | rem) | |
96 | # XXX to be done | |
97 | ;; | |
98 | ||
99 | status) | |
100 | echo -e "# ${CLR_BOLD_CYN}VLAN port $(port_name)${NORMAL}" | |
101 | echo -n "# State: " | |
102 | if device_is_up $(port_name); then | |
103 | echo -e "${CLR_BOLD_GRN}up${NORMAL}" | |
104 | RET=${EXIT_OK} | |
105 | else | |
106 | echo -e "${CLR_BOLD_RED}down${NORMAL}" | |
107 | RET=${EXIT_ERROR} | |
108 | fi | |
109 | echo "# ID : ${ID}" | |
110 | echo "#" | |
111 | exit ${RET} | |
112 | ;; | |
113 | ||
114 | *) | |
115 | echo "Usage: ${0} [interface] {up|down|add|remove|attach|detach|status}" | |
116 | exit 1 | |
117 | ;; | |
118 | esac | |
119 | ||
120 | # End $NETWORK_DEVICES/services/vlan |