]> git.ipfire.org Git - people/stevee/network.git/blob - hooks/vlan
network: New package.
[people/stevee/network.git] / hooks / vlan
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