2 ########################################################################
3 # Begin $NETWORK_DEVICES/services/vlan
5 # Description : VLAN Script
7 # Authors : Michael Tremer - michael.tremer@ipfire.org
11 # Notes : This script adds vlan support.
13 ########################################################################
15 .
/lib
/network
/hook-header
20 function port_name
() {
29 echo "HOOK_NAME=${HOOK_NAME}"
30 echo "HOOK_TYPE=${HOOK_TYPE}"
34 # Load the kernel module
35 grep -q ^
8021q
/proc
/modules || modprobe
8021q
37 if ! port_is_up $
(port_name
); then
38 MESSAGE
="Adding VLAN ${ID} to port ${MAC}..."
40 if ! device_is_up $
(devicify
${MAC}); then
41 ip link
set $
(devicify
${MAC}) up
43 vconfig add $
(devicify
${MAC}) ${ID} >/dev
/null
46 device_rename $
(get_device_by_mac_and_vid
${MAC} ${ID}) $
(port_name
)
47 ip link
set $
(port_name
) up
49 ebtables
-t broute
-A BROUTING
-p 802_1Q
--vlan-id=${ID} -j DROP
54 if ! zone_has_device_attached
${zone} $
(port_name
); then
55 zone_add_port
${zone} $(get_device ${MAC} ${ID})
60 if zone_has_device_attached
${zone} $
(port_name
); then
61 zone_del_port
${zone} $(get_device_by_mac_and_vid ${MAC} ${ID})
66 if port_is_up $
(port_name
); then
67 MESSAGE
="Removing VLAN ${ID} from port ${MAC}..."
69 vconfig rem $
(get_device_by_mac_and_vid
${MAC} ${ID}) >/dev
/null
72 ebtables
-t broute
-D BROUTING
-p 802_1Q
--vlan-id=${ID} -j DROP
78 ID
=${2} # Must be integer between 1 and 4096
81 cat <<EOF > ${CONFIG_UUIDS}/${UUID}
86 ln -sf ${CONFIG_UUIDS}/${UUID} \
87 ${CONFIG_ZONES}/${zone}/${HOOK_NAME}-${UUID}
89 log_success_msg
"Configuration successfully saved!"
90 echo " Device : $(devicify ${MAC})"
91 echo " MAC address : ${MAC}"
92 echo " VLAN tag : ${ID}"
100 echo -e "# ${CLR_BOLD_CYN}VLAN port $(port_name)${NORMAL}"
102 if device_is_up $
(port_name
); then
103 echo -e "${CLR_BOLD_GRN}up${NORMAL}"
106 echo -e "${CLR_BOLD_RED}down${NORMAL}"
115 echo "Usage: ${0} [interface] {up|down|add|remove|attach|detach|status}"
120 # End $NETWORK_DEVICES/services/vlan